85 lines
3.6 KiB
CMake
85 lines
3.6 KiB
CMake
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() |