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 "$") target_link_libraries(${PROJECT_NAME} PRIVATE "$") target_link_libraries(${PROJECT_NAME} PRIVATE ${CMAKE_DL_LIBS}) target_link_options(${PROJECT_NAME} PRIVATE $<$:/INCREMENTAL:NO>) target_compile_options(${PROJECT_NAME} PRIVATE $<$:/W4 /WX /D_HAS_EXCEPTIONS=0 /GR- /Zc:__cplusplus /fp:fast> $<$>:-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 "$") target_link_libraries(${PROJECT_NAME} PRIVATE gtest::gtest) target_link_options(${PROJECT_NAME} PRIVATE $<$:/INCREMENTAL:NO>) target_compile_options(${PROJECT_NAME} PRIVATE $<$:/W4 /WX /D_HAS_EXCEPTIONS=0 /GR- /Zc:__cplusplus /fp:fast> $<$>:-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()