function(bigfoot_create_package_lib PackagePublicDependencies PackagePrivateDependencies PackageBigfootPublicDependencies PackageBigfootPrivateDependencies ParentFolder) add_library(${PROJECT_NAME} STATIC) set_target_properties(${PROJECT_NAME} PROPERTIES LINKER_LANGUAGE CXX) target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/Include) bigfoot_compile_flatbuffers("${PackageBigfootPublicDependencies}") # 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_link_libraries(${PROJECT_NAME} PUBLIC unordered_dense::unordered_dense EASTL::EASTL flatbuffers::flatbuffers rapidhash::rapidhash) target_link_libraries(${PROJECT_NAME} PRIVATE ${CMAKE_DL_LIBS}) target_link_libraries(${PROJECT_NAME} PUBLIC ${PackagePublicDependencies}) target_link_libraries(${PROJECT_NAME} PRIVATE ${PackagePrivateDependencies}) target_link_libraries(${PROJECT_NAME} PUBLIC $) target_link_libraries(${PROJECT_NAME} PRIVATE $) source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} PREFIX Src FILES ${_BF_SOURCES}) set_target_properties(${PROJECT_NAME} PROPERTIES FOLDER Bigfoot/${ParentFolder}) endfunction() function(bigfoot_create_package_tests ParentFolder BigfootDependencies) add_executable(${PROJECT_NAME}) set_target_properties(${PROJECT_NAME} PROPERTIES LINKER_LANGUAGE CXX) bigfoot_compile_flatbuffers("${BigfootDependencies}") 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 $) target_link_libraries(${PROJECT_NAME} PRIVATE gtest::gtest) 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}) ##################COPY FIXTURE FOLDER################### if(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Fixture) file(MAKE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Fixture) endif() # Track all fixture files file(GLOB_RECURSE FIXTURE_FILES CONFIGURE_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/Fixture/* ) add_custom_target(${PROJECT_NAME}Fixture COMMAND ${CMAKE_COMMAND} -E remove_directory $/Fixture COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/Fixture $/Fixture DEPENDS ${FIXTURE_FILES} COMMENT "Copying Fixture folder for ${PROJECT_NAME}" ) add_dependencies(${PROJECT_NAME} ${PROJECT_NAME}Fixture) set_target_properties(${PROJECT_NAME}Fixture PROPERTIES FOLDER UtilityTargets/Tests/Bigfoot/${ParentFolder}) endfunction()