Initial commit
This commit is contained in:
66
CMake/FindDependencies.cmake
Normal file
66
CMake/FindDependencies.cmake
Normal file
@@ -0,0 +1,66 @@
|
||||
find_package(Python3 COMPONENTS Interpreter Development)
|
||||
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||
find_package(Threads REQUIRED)
|
||||
endif()
|
||||
|
||||
find_package(EASTL REQUIRED)
|
||||
find_package(unordered_dense REQUIRED)
|
||||
find_package(mimalloc REQUIRED)
|
||||
find_package(magic_enum REQUIRED)
|
||||
find_package(stduuid REQUIRED)
|
||||
find_package(SQLite3 REQUIRED)
|
||||
find_package(CLI11 REQUIRED)
|
||||
find_package(xxHash REQUIRED)
|
||||
find_package(effolkronium_random REQUIRED)
|
||||
find_package(zeus_expected REQUIRED)
|
||||
find_package(flatbuffers CONFIG REQUIRED)
|
||||
|
||||
if(TRACY)
|
||||
find_package(Tracy REQUIRED)
|
||||
endif()
|
||||
|
||||
if(${is_multi_config})
|
||||
find_package(quill REQUIRED)
|
||||
find_package(cpptrace REQUIRED)
|
||||
elseif(${CMAKE_BUILD_TYPE} STREQUAL "Debug" OR ${CMAKE_BUILD_TYPE} STREQUAL "RelWithDebInfo")
|
||||
find_package(quill REQUIRED)
|
||||
find_package(cpptrace REQUIRED)
|
||||
endif()
|
||||
|
||||
|
||||
find_package(glm REQUIRED)
|
||||
find_package(lodepng REQUIRED)
|
||||
find_package(imgui REQUIRED)
|
||||
|
||||
if(VULKAN)
|
||||
find_package(VulkanHeaders REQUIRED)
|
||||
if(${is_multi_config})
|
||||
find_package(vulkan-validationlayers REQUIRED)
|
||||
elseif(${CMAKE_BUILD_TYPE} STREQUAL "Debug" OR ${CMAKE_BUILD_TYPE} STREQUAL "RelWithDebInfo")
|
||||
find_package(vulkan-validationlayers REQUIRED)
|
||||
endif()
|
||||
find_package(vulkan-memory-allocator REQUIRED)
|
||||
endif()
|
||||
|
||||
if(BUILD_BENCHMARKS OR BUILD_TESTS OR SAMPLE_APP)
|
||||
find_package(glfw3 REQUIRED)
|
||||
endif()
|
||||
|
||||
if(BUILD_TESTS)
|
||||
find_package(GTest REQUIRED)
|
||||
find_package(pixelmatch-cpp17 REQUIRED)
|
||||
endif()
|
||||
|
||||
if(BUILD_TOOLS)
|
||||
find_package(spirv-cross REQUIRED)
|
||||
find_package(shaderc REQUIRED)
|
||||
find_package(assimp REQUIRED)
|
||||
find_package(meshoptimizer REQUIRED)
|
||||
find_package(libsquish REQUIRED)
|
||||
endif()
|
||||
|
||||
if(BUILD_BENCHMARKS)
|
||||
find_package(benchmark REQUIRED)
|
||||
endif()
|
||||
85
CMake/Package.cmake
Normal file
85
CMake/Package.cmake
Normal file
@@ -0,0 +1,85 @@
|
||||
function(bigfoot_create_package_lib PackageName PackagePublicDependencies PackagePrivateDependencies PackageBigfootPublicDependencies PackageBigfootPrivateDependencies ParentFolder)
|
||||
project(${PackageName})
|
||||
|
||||
add_library(${PROJECT_NAME} STATIC)
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES LINKER_LANGUAGE CXX)
|
||||
|
||||
# collect sources (reconfigure when files are added/removed)
|
||||
file(GLOB_RECURSE _BF_SOURCES
|
||||
CONFIGURE_DEPENDS
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/*.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/*.hpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/*.hpp.in
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/*.fbs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/*.sql
|
||||
)
|
||||
|
||||
target_sources(${PROJECT_NAME}
|
||||
PRIVATE
|
||||
${_BF_SOURCES}
|
||||
)
|
||||
|
||||
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/Include)
|
||||
|
||||
target_link_libraries(${PROJECT_NAME} PUBLIC ${PackagePublicDependencies})
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE ${PackagePrivateDependencies})
|
||||
target_link_libraries(${PROJECT_NAME} PUBLIC "$<LINK_LIBRARY:WHOLE_ARCHIVE,${PackageBigfootPublicDependencies}>")
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE "$<LINK_LIBRARY:WHOLE_ARCHIVE,${PackageBigfootPrivateDependencies}>")
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE ${CMAKE_DL_LIBS})
|
||||
|
||||
target_link_options(${PROJECT_NAME} PRIVATE
|
||||
$<$<CXX_COMPILER_ID:MSVC>:/INCREMENTAL:NO>)
|
||||
|
||||
target_compile_options(${PROJECT_NAME} PRIVATE
|
||||
$<$<CXX_COMPILER_ID:MSVC>:/W4 /WX /D_HAS_EXCEPTIONS=0 /GR- /Zc:__cplusplus /fp:fast>
|
||||
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-Wall -Wextra -Wpedantic -Werror -fno-exceptions -fno-rtti -ffast-math -fno-strict-aliasing>)
|
||||
|
||||
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} PREFIX Src FILES ${_BF_SOURCES})
|
||||
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES FOLDER Bigfoot/${ParentFolder})
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES UNITY_BUILD ${UNITY_BUILD})
|
||||
endfunction()
|
||||
|
||||
function(bigfoot_create_package_tests PackageName ParentFolder)
|
||||
project(${PackageName}Tests)
|
||||
|
||||
add_executable(${PROJECT_NAME})
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES LINKER_LANGUAGE CXX)
|
||||
|
||||
file(GLOB_RECURSE _BF_TEST_SOURCES
|
||||
CONFIGURE_DEPENDS
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/*.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/*.hpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/*.hpp.in
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/*.fbs
|
||||
)
|
||||
|
||||
target_sources(${PROJECT_NAME}
|
||||
PRIVATE
|
||||
${_BF_TEST_SOURCES}
|
||||
)
|
||||
|
||||
target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/Include)
|
||||
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE "$<LINK_LIBRARY:WHOLE_ARCHIVE,${PackageName}>")
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE gtest::gtest)
|
||||
|
||||
target_link_options(${PROJECT_NAME} PRIVATE
|
||||
$<$<CXX_COMPILER_ID:MSVC>:/INCREMENTAL:NO>)
|
||||
|
||||
target_compile_options(${PROJECT_NAME} PRIVATE
|
||||
$<$<CXX_COMPILER_ID:MSVC>:/W4 /WX /D_HAS_EXCEPTIONS=0 /GR- /Zc:__cplusplus /fp:fast>
|
||||
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-Wall -Wextra -Wpedantic -Werror -fno-exceptions -fno-rtti -ffast-math -fno-strict-aliasing>)
|
||||
|
||||
include(GoogleTest)
|
||||
gtest_discover_tests(${PROJECT_NAME} XML_OUTPUT_DIR ${CMAKE_BINARY_DIR}/TestResults/)
|
||||
|
||||
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} PREFIX Src/ FILES ${_BF_TEST_SOURCES})
|
||||
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES FOLDER Tests/Bigfoot/${ParentFolder})
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES UNITY_BUILD ${UNITY_BUILD})
|
||||
|
||||
bigfoot_setup_dependencies(${PROJECT_NAME} "Tests/Bigfoot")
|
||||
endfunction()
|
||||
140
CMake/Utils.cmake
Normal file
140
CMake/Utils.cmake
Normal file
@@ -0,0 +1,140 @@
|
||||
function(bigfoot_create_logger PackageName)
|
||||
set(LOGGER_FILENAME ${PackageName}Logger)
|
||||
string(TOUPPER ${PackageName}_Logger LOGGER_NAME)
|
||||
string(TOUPPER ${LOGGER_FILENAME} LOGGER_FILENAME_UPPER)
|
||||
configure_file( ${CMAKE_SOURCE_DIR}/Bigfoot/Sources/Utils/Include/Utils/TargetLogger.generated.hpp.in
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/Include/${PackageName}/${LOGGER_FILENAME}.generated.hpp
|
||||
@ONLY)
|
||||
endfunction()
|
||||
|
||||
function(bigfoot_create_bigfile PackageName ParentFolder)
|
||||
set(OUTPUT_PATH_BIGFILE "${CMAKE_CURRENT_BINARY_DIR}/${PackageName}-bigfile.db")
|
||||
get_filename_component(OUTPUT_PATH_BIGFILE_ABSOLUTE ${OUTPUT_PATH_BIGFILE} ABSOLUTE)
|
||||
get_filename_component(OUTPUT_PATH_BIGFILE_DIRECTORY ${OUTPUT_PATH_BIGFILE_ABSOLUTE} DIRECTORY)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${OUTPUT_PATH_BIGFILE_ABSOLUTE}.bftimestamp ${OUTPUT_PATH_BIGFILE_ABSOLUTE}
|
||||
DEPENDS ${CMAKE_SOURCE_DIR}/Bigfoot/Sources/Engine/BigFile/BigFileSchema.sql
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${OUTPUT_PATH_BIGFILE_DIRECTORY}
|
||||
COMMAND sqlite3 ${OUTPUT_PATH_BIGFILE_ABSOLUTE} < ${CMAKE_SOURCE_DIR}/Bigfoot/Sources/Engine/BigFile/BigFileSchema.sql
|
||||
COMMAND ${CMAKE_COMMAND} -E touch ${OUTPUT_PATH_BIGFILE_ABSOLUTE}.bftimestamp
|
||||
COMMENT "Creating Bigfile ${OUTPUT_PATH_BIGFILE_ABSOLUTE}"
|
||||
)
|
||||
list(APPEND BIGFILE_SOURCES ${OUTPUT_PATH_BIGFILE_ABSOLUTE}.bftimestamp)
|
||||
|
||||
add_custom_target(${PackageName}BigFile ALL DEPENDS ${BIGFILE_SOURCES})
|
||||
set_target_properties(${PackageName}BigFile PROPERTIES FOLDER UtilityTargets/${ParentFolder})
|
||||
|
||||
target_sources(${PackageName}BigFile PRIVATE ${BIGFILE_SOURCES})
|
||||
|
||||
string(TOUPPER ${PackageName} BIGFILE_NAME)
|
||||
set(BIGFILE_LOCATION ${OUTPUT_PATH_BIGFILE_ABSOLUTE})
|
||||
configure_file( ${CMAKE_SOURCE_DIR}/Bigfoot/Sources/Engine/Include/Engine/BigFile/BigFileInfo.generated.hpp.in
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/Include/${PackageName}/BigFileInfo.generated.hpp
|
||||
@ONLY)
|
||||
endfunction()
|
||||
|
||||
function(bigfoot_compile_flatbuffers Source IncludeFolders)
|
||||
file(GLOB_RECURSE SOURCES ${Source}/*.fbs)
|
||||
|
||||
foreach(SOURCE_FILE ${SOURCES})
|
||||
get_filename_component(SOURCE_DIRECTORY ${SOURCE_FILE} DIRECTORY)
|
||||
|
||||
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${SOURCE_FILE})
|
||||
|
||||
execute_process(
|
||||
COMMAND ${FLATBUFFERS_FLATC_EXECUTABLE}
|
||||
--cpp
|
||||
-I ${IncludeFolders}
|
||||
--keep-prefix
|
||||
--scoped-enums
|
||||
--gen-name-strings
|
||||
--gen-object-api
|
||||
--gen-compare
|
||||
--force-empty
|
||||
--no-cpp-direct-copy
|
||||
--cpp-str-flex-ctor
|
||||
--cpp-std c++17
|
||||
--reflect-names
|
||||
-o "${SOURCE_DIRECTORY}"
|
||||
"${SOURCE_FILE}"
|
||||
)
|
||||
endforeach()
|
||||
endfunction()
|
||||
|
||||
function(bigfoot_setup_dependencies Target ParentFolder)
|
||||
set(CONAN_DEPLOYER_DIR "${CMAKE_SOURCE_DIR}/build/full_deploy/host")
|
||||
|
||||
if(EXISTS ${CONAN_DEPLOYER_DIR})
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
||||
file(GLOB_RECURSE all_binaries ${CONAN_DEPLOYER_DIR}/*mimalloc*.dll)
|
||||
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||
file(GLOB_RECURSE all_binaries ${CONAN_DEPLOYER_DIR}/*mimalloc*.so*)
|
||||
endif()
|
||||
|
||||
if(NOT all_binaries STREQUAL "")
|
||||
if(${is_multi_config})
|
||||
foreach(CONFIG ${CMAKE_CONFIGURATION_TYPES})
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
||||
foreach(file ${all_binaries})
|
||||
if(file MATCHES "/${CONFIG}/")
|
||||
list(APPEND shared_binaries_${CONFIG} ${file})
|
||||
endif()
|
||||
endforeach()
|
||||
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||
foreach(file ${all_binaries})
|
||||
if(file MATCHES "/${CONFIG}/")
|
||||
list(APPEND shared_binaries_${CONFIG} ${file})
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
add_custom_target(${Target}CopySharedBinaries
|
||||
ALL DEPENDS all_binaries
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory $<TARGET_FILE_DIR:${Target}>
|
||||
COMMAND ${CMAKE_COMMAND} -E $<IF:$<CONFIG:Debug>,copy_if_different,true> ${shared_binaries_Debug} $<TARGET_FILE_DIR:${Target}>
|
||||
COMMAND ${CMAKE_COMMAND} -E $<IF:$<CONFIG:Release>,copy_if_different,true> ${shared_binaries_Release} $<TARGET_FILE_DIR:${Target}>
|
||||
COMMAND ${CMAKE_COMMAND} -E $<IF:$<CONFIG:RelWithDebInfo>,copy_if_different,true> ${shared_binaries_RelWithDebInfo} $<TARGET_FILE_DIR:${Target}>
|
||||
COMMENT "Copy shared binaries"
|
||||
)
|
||||
add_dependencies(${Target} ${Target}CopySharedBinaries)
|
||||
set_target_properties(${Target}CopySharedBinaries PROPERTIES FOLDER UtilityTargets/${ParentFolder})
|
||||
|
||||
else()
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
||||
foreach(file ${all_binaries})
|
||||
if(file MATCHES "/${CMAKE_BUILD_TYPE}/")
|
||||
list(APPEND shared_binaries_${CMAKE_BUILD_TYPE} ${file})
|
||||
endif()
|
||||
endforeach()
|
||||
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||
foreach(file ${all_binaries})
|
||||
if(file MATCHES "/${CMAKE_BUILD_TYPE}/")
|
||||
list(APPEND shared_binaries_${CMAKE_BUILD_TYPE} ${file})
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
add_custom_target(${Target}CopySharedBinaries ALL
|
||||
DEPENDS ${shared_binaries_${CMAKE_BUILD_TYPE}}
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory $<TARGET_FILE_DIR:${Target}>
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${shared_binaries_${CMAKE_BUILD_TYPE}} $<TARGET_FILE_DIR:${Target}>
|
||||
COMMENT "Copy shared binaries"
|
||||
)
|
||||
add_dependencies(${Target} ${Target}CopySharedBinaries)
|
||||
set_target_properties(${Target}CopySharedBinaries PROPERTIES FOLDER UtilityTargets/${ParentFolder})
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
||||
add_custom_command(
|
||||
TARGET ${Target}
|
||||
POST_BUILD
|
||||
COMMAND ${CMAKE_SOURCE_DIR}/Vendor/Tools/Mimalloc2.2.4/minject.exe -i -f $<TARGET_FILE:${Target}>
|
||||
COMMENT "Patching ${Target} to ensure mimalloc dynamic override"
|
||||
)
|
||||
endif()
|
||||
|
||||
endfunction()
|
||||
Reference in New Issue
Block a user