function(bigfoot_create_logger) set(LOGGER_FILENAME ${PROJECT_NAME}Logger) string(TOUPPER ${PROJECT_NAME}_Logger LOGGER_NAME) string(TOUPPER ${LOGGER_FILENAME} LOGGER_FILENAME_UPPER) configure_file( ${CMAKE_SOURCE_DIR}/Bigfoot/Sources/System/Include/System/Log/TargetLogger_generated.hpp.in ${CMAKE_CURRENT_SOURCE_DIR}/Include/${PROJECT_NAME}/${LOGGER_FILENAME}_generated.hpp @ONLY) endfunction() function(bigfoot_create_bigfile ParentFolder) set(OUTPUT_PATH_BIGFILE "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${PROJECT_NAME}-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_EXECUTABLE} ${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(${PROJECT_NAME}BigFile ALL DEPENDS ${BIGFILE_SOURCES}) set_target_properties(${PROJECT_NAME}BigFile PROPERTIES FOLDER UtilityTargets/${ParentFolder}) add_dependencies(${PROJECT_NAME}BigFile ${PROJECT_NAME}) target_sources(${PROJECT_NAME}BigFile PRIVATE ${BIGFILE_SOURCES}) string(TOUPPER ${PROJECT_NAME} BIGFILE_NAME) set(BIGFILE_LOCATION "./${PROJECT_NAME}-bigfile.db") configure_file( ${CMAKE_SOURCE_DIR}/Bigfoot/Sources/Engine/Include/Engine/BigFile/BigFileInfo_generated.hpp.in ${CMAKE_CURRENT_SOURCE_DIR}/Include/${PROJECT_NAME}/BigFileInfo_generated.hpp @ONLY) endfunction() function(bigfoot_compile_flatbuffers BigfootDependencies) set(IncludeFolders "") get_target_property(CurrentTargetDependencyInclude ${PROJECT_NAME} INCLUDE_DIRECTORIES) if(CurrentTargetDependencyInclude) list(APPEND IncludeFolders ${CurrentTargetDependencyInclude}) endif() foreach(Dependency IN LISTS BigfootDependencies) get_target_property(DependencyInclude ${Dependency} INCLUDE_DIRECTORIES) if(DependencyInclude) list(APPEND IncludeFolders ${DependencyInclude}) endif() endforeach() set(IncludeFlags "") foreach(folder IN LISTS IncludeFolders) list(APPEND IncludeFlags -I "${folder}") endforeach() file(GLOB_RECURSE SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/Include/*.fbs") foreach(SOURCE_FILE IN LISTS 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 ${IncludeFlags} --keep-prefix --filename-ext "hpp" --reflect-types --cpp-std c++17 --reflect-names --gen-name-strings --gen-object-api --cpp-str-flex-ctor --no-cpp-direct-copy --force-empty --cpp-ptr-type "eastl::unique_ptr" --cpp-str-type "eastl::string" --cpp-include "EASTL/unique_ptr.h" --cpp-include "EASTL/string.h" -o "${SOURCE_DIRECTORY}" "${SOURCE_FILE}" ) endforeach() endfunction() function(bigfoot_setup_dependencies 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 SHARED_BINARIES ${CONAN_DEPLOYER_DIR}/*mimalloc*.dll) elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") file(GLOB_RECURSE SHARED_BINARIES ${CONAN_DEPLOYER_DIR}/*mimalloc*.so*) endif() if(${IS_MULTI_CONFIG}) foreach(CONFIG ${CMAKE_CONFIGURATION_TYPES}) foreach(file ${SHARED_BINARIES}) if(file MATCHES "/${CONFIG}/") list(APPEND SHARED_BINARIES_${CONFIG} ${file}) endif() endforeach() endforeach() add_custom_target(${PROJECT_NAME}CopySharedBinaries ALL DEPENDS SHARED_BINARIES COMMAND ${CMAKE_COMMAND} -E make_directory $ COMMAND ${CMAKE_COMMAND} -E $,copy_if_different,true> ${SHARED_BINARIES_Debug} $ COMMAND ${CMAKE_COMMAND} -E $,copy_if_different,true> ${SHARED_BINARIES_Release} $ COMMAND ${CMAKE_COMMAND} -E $,copy_if_different,true> ${SHARED_BINARIES_RelWithDebInfo} $ COMMENT "Copy shared binaries for ${PROJECT_NAME}" ) add_dependencies(${PROJECT_NAME} ${PROJECT_NAME}CopySharedBinaries) set_target_properties(${PROJECT_NAME}CopySharedBinaries PROPERTIES FOLDER UtilityTargets/${ParentFolder}) else() foreach(file ${SHARED_BINARIES}) if(file MATCHES "/${CMAKE_BUILD_TYPE}/") list(APPEND SHARED_BINARIES_${CMAKE_BUILD_TYPE} ${file}) endif() endforeach() add_custom_target(${PROJECT_NAME}CopySharedBinaries ALL DEPENDS ${SHARED_BINARIES_${CMAKE_BUILD_TYPE}} COMMAND ${CMAKE_COMMAND} -E make_directory $ COMMAND ${CMAKE_COMMAND} -E copy_if_different ${SHARED_BINARIES_${CMAKE_BUILD_TYPE}} $ COMMENT "Copy shared binaries for ${PROJECT_NAME}" ) add_dependencies(${PROJECT_NAME} ${PROJECT_NAME}CopySharedBinaries) set_target_properties(${PROJECT_NAME}CopySharedBinaries PROPERTIES FOLDER UtilityTargets/${ParentFolder}) endif() endif() if(CMAKE_SYSTEM_NAME STREQUAL "Windows") add_custom_target(${PROJECT_NAME}PatchMinject ALL COMMAND ${MINJECT_EXECUTABLE} -i -f $ COMMENT "Patching ${PROJECT_NAME} to ensure mimalloc dynamic override" ) add_dependencies(${PROJECT_NAME}PatchMinject ${PROJECT_NAME}) set_target_properties(${PROJECT_NAME}PatchMinject PROPERTIES FOLDER "UtilityTargets/${ParentFolder}") endif() endfunction()