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 "") list(APPEND IncludeFolders ${CMAKE_CURRENT_SOURCE_DIR}/Include) foreach(Dependency IN LISTS BigfootDependencies) if(TARGET ${Dependency}) get_target_property(DependencyIncludeDirs ${Dependency} INTERFACE_INCLUDE_DIRECTORIES) if(DependencyIncludeDirs) foreach(Dir IN LISTS DependencyIncludeDirs) # Strip $ generator expression if(Dir MATCHES "^\\$$") list(APPEND IncludeFolders "${CMAKE_MATCH_1}") elseif(NOT Dir MATCHES "^\\$<") # Pass through plain paths, skip other generator expressions list(APPEND IncludeFolders "${Dir}") endif() endforeach() endif() 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) get_filename_component(SOURCE_NAME_WE ${SOURCE_FILE} NAME_WE) 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}" ) execute_process( COMMAND ${BIN2CPP_EXECUTABLE} --input "${SOURCE_FILE}" --output "${SOURCE_DIRECTORY}/${SOURCE_NAME_WE}.fbs_generated.hpp" --arrayType eastl::array --arrayInclude --namespace Bigfoot ) endforeach() endfunction()