Add files

Signed-off-by: Bensuperpc <bensuperpc@gmail.com>
This commit is contained in:
2024-01-29 21:08:29 +01:00
commit 7d81e22900
68 changed files with 4264 additions and 0 deletions

33
cmake/coverage.cmake Normal file
View File

@ -0,0 +1,33 @@
# ---- Variables ----
# We use variables separate from what CTest uses, because those have
# customization issues
set(
COVERAGE_TRACE_COMMAND
lcov -c -q
-o "${PROJECT_BINARY_DIR}/coverage.info"
-d "${PROJECT_BINARY_DIR}"
--include "${PROJECT_SOURCE_DIR}/*"
CACHE STRING
"; separated command to generate a trace for the 'coverage' target"
)
set(
COVERAGE_HTML_COMMAND
genhtml --legend -f -q
"${PROJECT_BINARY_DIR}/coverage.info"
-p "${PROJECT_SOURCE_DIR}"
-o "${PROJECT_BINARY_DIR}/coverage_html"
CACHE STRING
"; separated command to generate an HTML report for the 'coverage' target"
)
# ---- Coverage target ----
add_custom_target(
coverage
COMMAND ${COVERAGE_TRACE_COMMAND}
COMMAND ${COVERAGE_HTML_COMMAND}
COMMENT "Generating coverage report"
VERBATIM
)

21
cmake/dev-mode.cmake Normal file
View File

@ -0,0 +1,21 @@
include(cmake/folders.cmake)
include(CTest)
if(BUILD_TESTING)
add_subdirectory(test)
endif()
option(BUILD_MCSS_DOCS "Build documentation using Doxygen and m.css" OFF)
if(BUILD_MCSS_DOCS)
include(cmake/docs.cmake)
endif()
option(ENABLE_COVERAGE "Enable coverage support separate from CTest's" OFF)
if(ENABLE_COVERAGE)
include(cmake/coverage.cmake)
endif()
include(cmake/lint-targets.cmake)
include(cmake/spell-targets.cmake)
add_folders(Project)

112
cmake/docs-ci.cmake Normal file
View File

@ -0,0 +1,112 @@
cmake_minimum_required(VERSION 3.14)
foreach(var IN ITEMS PROJECT_BINARY_DIR PROJECT_SOURCE_DIR)
if(NOT DEFINED "${var}")
message(FATAL_ERROR "${var} must be defined")
endif()
endforeach()
set(bin "${PROJECT_BINARY_DIR}")
set(src "${PROJECT_SOURCE_DIR}")
# ---- Dependencies ----
set(mcss_SOURCE_DIR "${bin}/docs/.ci")
if(NOT IS_DIRECTORY "${mcss_SOURCE_DIR}")
file(MAKE_DIRECTORY "${mcss_SOURCE_DIR}")
file(
DOWNLOAD
https://github.com/friendlyanon/m.css/releases/download/release-1/mcss.zip
"${mcss_SOURCE_DIR}/mcss.zip"
STATUS status
EXPECTED_MD5 00cd2757ebafb9bcba7f5d399b3bec7f
)
if(NOT status MATCHES "^0;")
message(FATAL_ERROR "Download failed with ${status}")
endif()
execute_process(
COMMAND "${CMAKE_COMMAND}" -E tar xf mcss.zip
WORKING_DIRECTORY "${mcss_SOURCE_DIR}"
RESULT_VARIABLE result
)
if(NOT result EQUAL "0")
message(FATAL_ERROR "Extraction failed with ${result}")
endif()
file(REMOVE "${mcss_SOURCE_DIR}/mcss.zip")
endif()
find_program(Python3_EXECUTABLE NAMES python3 python)
if(NOT Python3_EXECUTABLE)
message(FATAL_ERROR "Python executable was not found")
endif()
# ---- Process project() call in CMakeLists.txt ----
file(READ "${src}/CMakeLists.txt" content)
string(FIND "${content}" "project(" index)
if(index EQUAL "-1")
message(FATAL_ERROR "Could not find \"project(\"")
endif()
string(SUBSTRING "${content}" "${index}" -1 content)
string(FIND "${content}" "\n)\n" index)
if(index EQUAL "-1")
message(FATAL_ERROR "Could not find \"\\n)\\n\"")
endif()
string(SUBSTRING "${content}" 0 "${index}" content)
file(WRITE "${bin}/docs-ci.project.cmake" "docs_${content}\n)\n")
macro(list_pop_front list out)
list(GET "${list}" 0 "${out}")
list(REMOVE_AT "${list}" 0)
endmacro()
function(docs_project name)
cmake_parse_arguments(PARSE_ARGV 1 "" "" "VERSION;DESCRIPTION;HOMEPAGE_URL" LANGUAGES)
set(PROJECT_NAME "${name}" PARENT_SCOPE)
if(DEFINED _VERSION)
set(PROJECT_VERSION "${_VERSION}" PARENT_SCOPE)
string(REGEX MATCH "^[0-9]+(\\.[0-9]+)*" versions "${_VERSION}")
string(REPLACE . ";" versions "${versions}")
set(suffixes MAJOR MINOR PATCH TWEAK)
while(NOT versions STREQUAL "" AND NOT suffixes STREQUAL "")
list_pop_front(versions version)
list_pop_front(suffixes suffix)
set("PROJECT_VERSION_${suffix}" "${version}" PARENT_SCOPE)
endwhile()
endif()
if(DEFINED _DESCRIPTION)
set(PROJECT_DESCRIPTION "${_DESCRIPTION}" PARENT_SCOPE)
endif()
if(DEFINED _HOMEPAGE_URL)
set(PROJECT_HOMEPAGE_URL "${_HOMEPAGE_URL}" PARENT_SCOPE)
endif()
endfunction()
include("${bin}/docs-ci.project.cmake")
# ---- Generate docs ----
if(NOT DEFINED DOXYGEN_OUTPUT_DIRECTORY)
set(DOXYGEN_OUTPUT_DIRECTORY "${bin}/docs")
endif()
set(out "${DOXYGEN_OUTPUT_DIRECTORY}")
foreach(file IN ITEMS Doxyfile conf.py)
configure_file("${src}/docs/${file}.in" "${bin}/docs/${file}" @ONLY)
endforeach()
set(mcss_script "${mcss_SOURCE_DIR}/documentation/doxygen.py")
set(config "${bin}/docs/conf.py")
file(REMOVE_RECURSE "${out}/html" "${out}/xml")
execute_process(
COMMAND "${Python3_EXECUTABLE}" "${mcss_script}" "${config}"
WORKING_DIRECTORY "${bin}/docs"
RESULT_VARIABLE result
)
if(NOT result EQUAL "0")
message(FATAL_ERROR "m.css returned with ${result}")
endif()

46
cmake/docs.cmake Normal file
View File

@ -0,0 +1,46 @@
# ---- Dependencies ----
set(extract_timestamps "")
if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.24")
set(extract_timestamps DOWNLOAD_EXTRACT_TIMESTAMP YES)
endif()
include(FetchContent)
FetchContent_Declare(
mcss URL
https://github.com/friendlyanon/m.css/releases/download/release-1/mcss.zip
URL_MD5 00cd2757ebafb9bcba7f5d399b3bec7f
SOURCE_DIR "${PROJECT_BINARY_DIR}/mcss"
UPDATE_DISCONNECTED YES
${extract_timestamps}
)
FetchContent_MakeAvailable(mcss)
find_package(Python3 3.6 REQUIRED)
# ---- Declare documentation target ----
set(
DOXYGEN_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/docs"
CACHE PATH "Path for the generated Doxygen documentation"
)
set(working_dir "${PROJECT_BINARY_DIR}/docs")
foreach(file IN ITEMS Doxyfile conf.py)
configure_file("docs/${file}.in" "${working_dir}/${file}" @ONLY)
endforeach()
set(mcss_script "${mcss_SOURCE_DIR}/documentation/doxygen.py")
set(config "${working_dir}/conf.py")
add_custom_target(
docs
COMMAND "${CMAKE_COMMAND}" -E remove_directory
"${DOXYGEN_OUTPUT_DIRECTORY}/html"
"${DOXYGEN_OUTPUT_DIRECTORY}/xml"
COMMAND "${Python3_EXECUTABLE}" "${mcss_script}" "${config}"
COMMENT "Building documentation using Doxygen and m.css"
WORKING_DIRECTORY "${working_dir}"
VERBATIM
)

21
cmake/folders.cmake Normal file
View File

@ -0,0 +1,21 @@
set_property(GLOBAL PROPERTY USE_FOLDERS YES)
# Call this function at the end of a directory scope to assign a folder to
# targets created in that directory. Utility targets will be assigned to the
# UtilityTargets folder, otherwise to the ${name}Targets folder. If a target
# already has a folder assigned, then that target will be skipped.
function(add_folders name)
get_property(targets DIRECTORY PROPERTY BUILDSYSTEM_TARGETS)
foreach(target IN LISTS targets)
get_property(folder TARGET "${target}" PROPERTY FOLDER)
if(DEFINED folder)
continue()
endif()
set(folder Utility)
get_property(type TARGET "${target}" PROPERTY TYPE)
if(NOT type STREQUAL "UTILITY")
set(folder "${name}")
endif()
set_property(TARGET "${target}" PROPERTY FOLDER "${folder}Targets")
endforeach()
endfunction()

View File

@ -0,0 +1 @@
include("${CMAKE_CURRENT_LIST_DIR}/astarTargets.cmake")

66
cmake/install-rules.cmake Normal file
View File

@ -0,0 +1,66 @@
if(PROJECT_IS_TOP_LEVEL)
set(
CMAKE_INSTALL_INCLUDEDIR "include/astar-${PROJECT_VERSION}"
CACHE STRING ""
)
set_property(CACHE CMAKE_INSTALL_INCLUDEDIR PROPERTY TYPE PATH)
endif()
# Project is configured with no languages, so tell GNUInstallDirs the lib dir
set(CMAKE_INSTALL_LIBDIR lib CACHE PATH "")
include(CMakePackageConfigHelpers)
include(GNUInstallDirs)
# find_package(<package>) call for consumers to find this project
set(package astar)
install(
DIRECTORY include/
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
COMPONENT astar_Development
)
install(
TARGETS astar_astar
EXPORT astarTargets
INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
)
write_basic_package_version_file(
"${package}ConfigVersion.cmake"
COMPATIBILITY SameMajorVersion
ARCH_INDEPENDENT
)
# Allow package maintainers to freely override the path for the configs
set(
astar_INSTALL_CMAKEDIR "${CMAKE_INSTALL_DATADIR}/${package}"
CACHE STRING "CMake package config location relative to the install prefix"
)
set_property(CACHE astar_INSTALL_CMAKEDIR PROPERTY TYPE PATH)
mark_as_advanced(astar_INSTALL_CMAKEDIR)
install(
FILES cmake/install-config.cmake
DESTINATION "${astar_INSTALL_CMAKEDIR}"
RENAME "${package}Config.cmake"
COMPONENT astar_Development
)
install(
FILES "${PROJECT_BINARY_DIR}/${package}ConfigVersion.cmake"
DESTINATION "${astar_INSTALL_CMAKEDIR}"
COMPONENT astar_Development
)
install(
EXPORT astarTargets
NAMESPACE astar::
DESTINATION "${astar_INSTALL_CMAKEDIR}"
COMPONENT astar_Development
)
if(PROJECT_IS_TOP_LEVEL)
include(CPack)
endif()

View File

@ -0,0 +1,13 @@
cmake_minimum_required(VERSION 3.14.0)
include(FetchContent)
FetchContent_Declare(
backward-cpp
GIT_REPOSITORY https://github.com/bombela/backward-cpp.git
GIT_TAG 0ddfadc4b0f5c53e63259fe804ee595e6f01f4df) # 23-10-2022
FetchContent_MakeAvailable(backward-cpp)
# TODO: target_include_directories instead of include_directories
include_directories(${backward-cpp_SOURCE_DIR})

70
cmake/lib/benchmark.cmake Executable file
View File

@ -0,0 +1,70 @@
cmake_minimum_required(VERSION 3.14.0)
find_package(benchmark QUIET)
if (NOT benchmark_FOUND)
message(STATUS "benchmark not found on system, downloading...")
include(FetchContent)
set(CMAKE_CXX_CLANG_TIDY_TMP "${CMAKE_CXX_CLANG_TIDY}")
set(CMAKE_CXX_CLANG_TIDY "")
FetchContent_Declare(
googlebenchmark
GIT_REPOSITORY https://github.com/google/benchmark.git
GIT_TAG ca8d0f7b613ac915cd6b161ab01b7be449d1e1cd
#GIT_SHALLOW TRUE
) # 12-10-2023
# Disable tests on google benchmark
set(BENCHMARK_ENABLE_TESTING
OFF
CACHE BOOL "" FORCE)
set(BENCHMARK_ENABLE_WERROR
OFF
CACHE BOOL "" FORCE)
set(BENCHMARK_FORCE_WERROR
OFF
CACHE BOOL "" FORCE)
set(BENCHMARK_ENABLE_INSTALL
OFF
CACHE BOOL "" FORCE)
set(BENCHMARK_DOWNLOAD_DEPENDENCIES
ON
CACHE BOOL "" FORCE)
set(BENCHMARK_CXX_LINKER_FLAGS
""
CACHE STRING "" FORCE)
set(BENCHMARK_CXX_LIBRARIES
""
CACHE STRING "" FORCE)
set(BENCHMARK_CXX_FLAGS
""
CACHE STRING "" FORCE)
set(CMAKE_CXX_FLAGS_COVERAGE
""
CACHE STRING "" FORCE)
set(CMAKE_REQUIRED_FLAGS
""
CACHE STRING "" FORCE)
FetchContent_MakeAvailable(googlebenchmark)
# Lib: benchmark::benchmark benchmark::benchmark_main
set(CMAKE_CXX_CLANG_TIDY "${CMAKE_CXX_CLANG_TIDY_TMP}")
set_target_properties(benchmark
PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
)
endif()

22
cmake/lib/boost.cmake Executable file
View File

@ -0,0 +1,22 @@
cmake_minimum_required(VERSION 3.14.0)
include(FetchContent)
if(NOT DEFINED BOOST_INCLUDE_LIBRARIES)
set(BOOST_INCLUDE_LIBRARIES system)
endif()
if(NOT DEFINED BOOST_ENABLE_CMAKE)
set(BOOST_ENABLE_CMAKE ON)
endif()
FetchContent_Declare(
Boost
GIT_REPOSITORY https://github.com/boostorg/boost.git
GIT_TAG boost-1.81.0
#GIT_SHALLOW TRUE
)
FetchContent_MakeAvailable(Boost)

15
cmake/lib/drogon.cmake Normal file
View File

@ -0,0 +1,15 @@
# https://github.com/drogonframework/drogon/issues/1288#issuecomment-1163902139
FetchContent_Declare(drogon
GIT_REPOSITORY https://github.com/drogonframework/drogon.git
GIT_TAG v1.8.4 # 08-04-2023
)
# Reset CXX_FLAGS to avoid warnings from drogon
set(CMAKE_CXX_FLAGS_OLD "${CMAKE_CXX_FLAGS}")
set(CMAKE_CXX_FLAGS "-std=c++17 -O3")
FetchContent_MakeAvailable(drogon)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_OLD}")

View File

@ -0,0 +1,11 @@
cmake_minimum_required(VERSION 3.14.0)
include(FetchContent)
set(FASTNOISE2_NOISETOOL OFF CACHE BOOL "Build Noise Tool" FORCE)
FetchContent_Declare(FastNoise2
GIT_REPOSITORY https://github.com/Auburn/FastNoise2.git
GIT_TAG 0928ca22cd4cfd50e9b17cec4fe9d867b59c3943 # 2023-06-07
)
FetchContent_MakeAvailable(FastNoise2)

32
cmake/lib/gtest.cmake Executable file
View File

@ -0,0 +1,32 @@
cmake_minimum_required(VERSION 3.14.0)
find_package(GTest QUIET)
if (NOT GTEST_FOUND)
message(STATUS "GTest not found on system, downloading...")
include(FetchContent)
FetchContent_Declare(
googletest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG 2dd1c131950043a8ad5ab0d2dda0e0970596586a) # 12-10-2023
# Disable tests on gtest
set(gtest_build_tests
OFF
CACHE BOOL "" FORCE)
set(gtest_build_samples
OFF
CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(googletest)
# Lib: gtest gtest_main
set_target_properties(gtest
PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
)
endif()

31
cmake/lib/json.cmake Executable file
View File

@ -0,0 +1,31 @@
cmake_minimum_required(VERSION 3.14.0)
find_package(nlohmann_json QUIET)
if (NOT nlohmann_json_FOUND)
message(STATUS "nlohmann_json not found on system, downloading...")
include(FetchContent)
#set(CMAKE_MODULE_PATH
# ""
# CACHE STRING "" FORCE)
#set(NLOHMANN_JSON_SYSTEM_INCLUDE
# ""
# CACHE STRING "" FORCE)
FetchContent_Declare(nlohmann_json
GIT_REPOSITORY https://github.com/nlohmann/json.git
GIT_TAG f56c6e2e30241b9245161a86ae9fecf6543bf411 # 2023-11-26
)
FetchContent_MakeAvailable(nlohmann_json)
# nlohmann_json::nlohmann_json
set_target_properties(nlohmann_json
PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
)
include_directories(${nlohmann_json_SOURCE_DIR}/include)
endif()

42
cmake/lib/opencv.cmake Normal file
View File

@ -0,0 +1,42 @@
cmake_minimum_required(VERSION 3.14.0)
include(FetchContent)
set(OpenCV_DIR ${CMAKE_CURRENT_BINARY_DIR})
find_package(OpenCV QUIET)
if (NOT OpenCV_FOUND)
#set(OpenCV_STATIC ON)
set(BUILD_EXAMPLES CACHE BOOL OFF)
set(BUILD_DOCS CACHE BOOL OFF)
set(BUILD_TESTS CACHE BOOL OFF)
set(BUILD_PERF_TESTS CACHE BOOL OFF)
#set(BUILD_PACKAGE CACHE BOOL OFF)
set(BUILD_opencv_apps CACHE BOOL OFF)
FetchContent_Declare(
OpenCV
GIT_REPOSITORY https://github.com/opencv/opencv.git
GIT_TAG 4.7.0
#GIT_SHALLOW TRUE
GIT_PROGRESS TRUE
)
FetchContent_MakeAvailable(OpenCV)
#set(OpenCV_DIR ${CMAKE_CURRENT_BINARY_DIR})
#include_directories(${OpenCV_INCLUDE_DIRS})
#message(FATAL_ERROR "OpenCV_INCLUDE_DIRS: ${OpenCV_INCLUDE_DIRS}")
#find_package(OpenCV REQUIRED)
#include_directories(${OpenCV_INCLUDE_DIRS})
#target_include_directories("${NAME}" PRIVATE
#${OPENCV_CONFIG_FILE_INCLUDE_DIR}
#${OPENCV_MODULE_opencv_core_LOCATION}/include
#${OPENCV_MODULE_opencv_highgui_LOCATION}/include
#)
#target_link_libraries("${NAME}" PRIVATE opencv_core opencv_highgui)
#target_link_libraries("${NAME}" PRIVATE ${OpenCV_LIBS})
#opencv_add_module()
endif()

6
cmake/lib/openmp.cmake Executable file
View File

@ -0,0 +1,6 @@
cmake_minimum_required(VERSION 3.14.0)
find_package(OpenMP)
if(OpenMP_CXX_FOUND)
# message("OpenMP found")
endif()

14
cmake/lib/perlin_noise.cmake Executable file
View File

@ -0,0 +1,14 @@
cmake_minimum_required(VERSION 3.14.0)
include(FetchContent)
FetchContent_Declare(perlin_noise
GIT_REPOSITORY https://github.com/Reputeless/PerlinNoise.git
GIT_TAG bdf39fe92b2a585cdef485bcec2bca8ab5614095 # 2022-12-30
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
TEST_COMMAND ""
)
FetchContent_MakeAvailable(perlin_noise)
include_directories("${perlin_noise_SOURCE_DIR}")

18
cmake/lib/pybind11.cmake Executable file
View File

@ -0,0 +1,18 @@
cmake_minimum_required(VERSION 3.15)
find_package(Python 3.8 COMPONENTS Interpreter Development REQUIRED)
find_package(pybind11)
# add_subdirectory(pybind11)
if (NOT pybind11_FOUND)
include(FetchContent)
FetchContent_Declare(
pybind11
GIT_REPOSITORY https://github.com/pybind/pybind11.git
GIT_TAG v2.10.3
GIT_SHALLOW TRUE
)
FetchContent_MakeAvailable(pybind11)
endif()
#pybind11_add_module(${PROJECT_NAME} main.cpp)

17
cmake/lib/raygui.cmake Executable file
View File

@ -0,0 +1,17 @@
cmake_minimum_required(VERSION 3.14.0)
include(FetchContent)
set(BUILD_RAYLIB_CPP_EXAMPLES OFF CACHE BOOL "" FORCE)
find_package(raygui QUIET)
if (NOT raygui_FOUND)
FetchContent_Declare(raygui
GIT_REPOSITORY https://github.com/raysan5/raygui.git
GIT_TAG 4.0
)
FetchContent_MakeAvailable(raygui)
include_directories(${raygui_SOURCE_DIR})
include_directories(${raygui_SOURCE_DIR}/src)
endif()

13
cmake/lib/raylib-cpp.cmake Executable file
View File

@ -0,0 +1,13 @@
cmake_minimum_required(VERSION 3.14.0)
include(FetchContent)
#find_package(raylib_cpp QUIET)
if (NOT raylib_cpp_FOUND)
FetchContent_Declare(raylib_cpp
GIT_REPOSITORY https://github.com/RobLoach/raylib-cpp.git
GIT_TAG v5.0.0 # 08-12-2023
)
FetchContent_MakeAvailable(raylib_cpp)
endif()

47
cmake/lib/raylib.cmake Executable file
View File

@ -0,0 +1,47 @@
cmake_minimum_required(VERSION 3.14.0)
find_package(raylib QUIET)
if (NOT raylib_FOUND AND NOT FETCHCONTENT_FULLY_DISCONNECTED)
message(STATUS "raylib not found on system, downloading...")
include(FetchContent)
if(NOT DEFINED BUILD_EXAMPLES)
set(BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
endif()
if(NOT DEFINED BUILD_GAMES)
set(BUILD_GAMES OFF CACHE BOOL "" FORCE)
endif()
if(NOT DEFINED INCLUDE_EVERYTHING)
set(INCLUDE_EVERYTHING ON CACHE BOOL "" FORCE)
endif()
if(NOT DEFINED OPENGL_VERSION)
#set(OPENGL_VERSION OFF CACHE STRING "4.3" FORCE)
endif()
#set (CMAKE_INSTALL_PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/install CACHE PATH "default install path" FORCE)
#set (CMAKE_INSTALL_LIBDIR ${CMAKE_BINARY_DIR}/lib CACHE PATH "default install path" FORCE)
#message(STATUS "CMAKE_INSTALL_LIBDIR: ${CMAKE_INSTALL_LIBDIR}")
FetchContent_Declare(raylib
GIT_REPOSITORY https://github.com/raysan5/raylib.git
GIT_TAG 5.0 # 08-12-2023
)
FetchContent_MakeAvailable(raylib)
set_target_properties(raylib
PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
)
set(raylib_FOUND TRUE)
else()
find_package(raylib 5.0.0 REQUIRED)
endif()

11
cmake/lib/spdlog.cmake Normal file
View File

@ -0,0 +1,11 @@
cmake_minimum_required(VERSION 3.14.0)
include(FetchContent)
FetchContent_Declare(
spdlog
GIT_REPOSITORY https://github.com/gabime/spdlog.git
GIT_TAG 7e635fca68d014934b4af8a1cf874f63989352b7) # 2023-07-09
FetchContent_MakeAvailable(spdlog)
include_directories("${spdlog_SOURCE_DIR}")

View File

@ -0,0 +1,14 @@
cmake_minimum_required(VERSION 3.14.0)
include(FetchContent)
FetchContent_Declare(bs-thread-pool
GIT_REPOSITORY https://github.com/bshoshany/thread-pool.git
GIT_TAG 6790920f61ab3e928ddaea835ab6a803d467f41d # 2023-12-28
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
TEST_COMMAND ""
)
FetchContent_MakeAvailable(bs-thread-pool)
include_directories("${bs-thread-pool_SOURCE_DIR}/include")

10
cmake/lib/vector.cmake Executable file
View File

@ -0,0 +1,10 @@
cmake_minimum_required(VERSION 3.14.0)
include(FetchContent)
FetchContent_Declare(
vector
GIT_REPOSITORY https://github.com/bensuperpc/vector.git
GIT_TAG 9febb9c84e7b73e6c621afd920dd3c8bb47a130c) # 2022-10-23
FetchContent_MakeAvailable(vector)

16
cmake/lib/zlib.cmake Executable file
View File

@ -0,0 +1,16 @@
cmake_minimum_required(VERSION 3.14.0)
include(FetchContent)
find_package(zlib QUIET)
set(ZLIB_LIBRARY zlib)
if (NOT zlib_FOUND)
FetchContent_Declare(
zlib
GIT_REPOSITORY https://github.com/madler/zlib.git
GIT_TAG v1.2.13
)
FetchContent_MakeAvailable(zlib)
endif()

34
cmake/lint-targets.cmake Normal file
View File

@ -0,0 +1,34 @@
set(
FORMAT_PATTERNS
source/*.cpp source/*.hpp
include/*.hpp
test/*.cpp test/*.hpp
example/*.cpp example/*.hpp
CACHE STRING
"; separated patterns relative to the project source dir to format"
)
set(FORMAT_COMMAND clang-format CACHE STRING "Formatter to use")
add_custom_target(
format-check
COMMAND "${CMAKE_COMMAND}"
-D "FORMAT_COMMAND=${FORMAT_COMMAND}"
-D "PATTERNS=${FORMAT_PATTERNS}"
-P "${PROJECT_SOURCE_DIR}/cmake/lint.cmake"
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
COMMENT "Linting the code"
VERBATIM
)
add_custom_target(
format-fix
COMMAND "${CMAKE_COMMAND}"
-D "FORMAT_COMMAND=${FORMAT_COMMAND}"
-D "PATTERNS=${FORMAT_PATTERNS}"
-D FIX=YES
-P "${PROJECT_SOURCE_DIR}/cmake/lint.cmake"
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
COMMENT "Fixing the code"
VERBATIM
)

52
cmake/lint.cmake Normal file
View File

@ -0,0 +1,52 @@
cmake_minimum_required(VERSION 3.14)
macro(default name)
if(NOT DEFINED "${name}")
set("${name}" "${ARGN}")
endif()
endmacro()
default(FORMAT_COMMAND clang-format)
default(
PATTERNS
source/*.cpp source/*.hpp
include/*.hpp
test/*.cpp test/*.hpp
example/*.cpp example/*.hpp
)
default(FIX NO)
set(flag --output-replacements-xml)
set(args OUTPUT_VARIABLE output)
if(FIX)
set(flag -i)
set(args "")
endif()
file(GLOB_RECURSE files ${PATTERNS})
set(badly_formatted "")
set(output "")
string(LENGTH "${CMAKE_SOURCE_DIR}/" path_prefix_length)
foreach(file IN LISTS files)
execute_process(
COMMAND "${FORMAT_COMMAND}" --style=file "${flag}" "${file}"
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
RESULT_VARIABLE result
${args}
)
if(NOT result EQUAL "0")
message(FATAL_ERROR "'${file}': formatter returned with ${result}")
endif()
if(NOT FIX AND output MATCHES "\n<replacement offset")
string(SUBSTRING "${file}" "${path_prefix_length}" -1 relative_file)
list(APPEND badly_formatted "${relative_file}")
endif()
set(output "")
endforeach()
if(NOT badly_formatted STREQUAL "")
list(JOIN badly_formatted "\n" bad_list)
message("The following files are badly formatted:\n\n${bad_list}\n")
message(FATAL_ERROR "Run again with FIX=YES to fix these files.")
endif()

10
cmake/prelude.cmake Normal file
View File

@ -0,0 +1,10 @@
# ---- In-source guard ----
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR)
message(
FATAL_ERROR
"In-source builds are not supported. "
"Please read the BUILDING document before trying to build this project. "
"You may need to delete 'CMakeCache.txt' and 'CMakeFiles/' first."
)
endif()

View File

@ -0,0 +1,6 @@
# This variable is set by project() in CMake 3.21+
string(
COMPARE EQUAL
"${CMAKE_SOURCE_DIR}" "${PROJECT_SOURCE_DIR}"
PROJECT_IS_TOP_LEVEL
)

22
cmake/spell-targets.cmake Normal file
View File

@ -0,0 +1,22 @@
set(SPELL_COMMAND codespell CACHE STRING "Spell checker to use")
add_custom_target(
spell-check
COMMAND "${CMAKE_COMMAND}"
-D "SPELL_COMMAND=${SPELL_COMMAND}"
-P "${PROJECT_SOURCE_DIR}/cmake/spell.cmake"
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
COMMENT "Checking spelling"
VERBATIM
)
add_custom_target(
spell-fix
COMMAND "${CMAKE_COMMAND}"
-D "SPELL_COMMAND=${SPELL_COMMAND}"
-D FIX=YES
-P "${PROJECT_SOURCE_DIR}/cmake/spell.cmake"
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
COMMENT "Fixing spelling errors"
VERBATIM
)

31
cmake/spell.cmake Executable file
View File

@ -0,0 +1,31 @@
cmake_minimum_required(VERSION 3.14)
macro(default name)
if(NOT DEFINED "${name}")
set("${name}" "${ARGN}")
endif()
endmacro()
default(SPELL_COMMAND codespell)
default(FIX NO)
set(flag "")
if(FIX)
set(flag -w)
endif()
set(flag "${flag}" --ignore-words codespell.ignore-words.txt)
execute_process(
COMMAND "${SPELL_COMMAND}" ${flag}
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
RESULT_VARIABLE result
)
if(result EQUAL "65")
message(FATAL_ERROR "Run again with FIX=YES to fix these errors.")
elseif(result EQUAL "64")
message(FATAL_ERROR "Spell checker printed the usage info. Bad arguments?")
elseif(NOT result EQUAL "0")
message(FATAL_ERROR "Spell checker returned with ${result}")
endif()

9
cmake/utile/ccache.cmake Executable file
View File

@ -0,0 +1,9 @@
find_program(CCACHE_PROGRAM ccache)
if(CCACHE_PROGRAM)
message(NOTICE "-- ccache is enabled (found here: ${CCACHE_PROGRAM})")
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "\"${CCACHE_PROGRAM}\"")
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK "\"${CCACHE_PROGRAM}\"")
else()
message(WARNING "-- ccache has not been found")
endif()

11
cmake/utile/distcc.cmake Executable file
View File

@ -0,0 +1,11 @@
find_program(DISTCC_PROGRAM distcc)
message(WARNING "distcc module is in beta.")
if(DISTCC_PROGRAM)
message(NOTICE "distcc is enabled (found here: ${DISTCC_PROGRAM})")
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "\"${DISTCC_PROGRAM}\"")
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK "\"${DISTCC_PROGRAM}\"")
else()
message(NOTICE "distcc has not been found")
endif()

11
cmake/utile/lto.cmake Executable file
View File

@ -0,0 +1,11 @@
cmake_minimum_required(VERSION 3.9.0)
include(CheckIPOSupported)
check_ipo_supported(RESULT supported OUTPUT error)
if(supported)
message(STATUS "IPO / LTO enabled")
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION ON)
else()
message(STATUS "IPO / LTO not supported: <${error}>")
endif()

9
cmake/utile/ninja_color.cmake Executable file
View File

@ -0,0 +1,9 @@
option (FORCE_COLORED_OUTPUT "Always produce ANSI-colored output (GNU/Clang only)." TRUE)
if (${FORCE_COLORED_OUTPUT})
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
add_compile_options (-fdiagnostics-color=always)
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
add_compile_options (-fcolor-diagnostics)
endif ()
endif ()

28
cmake/variables.cmake Normal file
View File

@ -0,0 +1,28 @@
# ---- Developer mode ----
# Developer mode enables targets and code paths in the CMake scripts that are
# only relevant for the developer(s) of astar
# Targets necessary to build the project must be provided unconditionally, so
# consumers can trivially build and package the project
if(PROJECT_IS_TOP_LEVEL)
option(astar_DEVELOPER_MODE "Enable developer mode" OFF)
endif()
# ---- Warning guard ----
# target_include_directories with the SYSTEM modifier will request the compiler
# to omit warnings from the provided paths, if the compiler supports that
# This is to provide a user experience similar to find_package when
# add_subdirectory or FetchContent is used to consume this project
set(warning_guard "")
if(NOT PROJECT_IS_TOP_LEVEL)
option(
astar_INCLUDES_WITH_SYSTEM
"Use SYSTEM modifier for astar's includes, disabling warnings"
ON
)
mark_as_advanced(astar_INCLUDES_WITH_SYSTEM)
if(astar_INCLUDES_WITH_SYSTEM)
set(warning_guard SYSTEM)
endif()
endif()