diff options
| author | Felix Morgner <felix.morgner@gmail.com> | 2018-12-11 07:42:05 +0100 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@gmail.com> | 2018-12-11 07:42:05 +0100 |
| commit | ed419140280553b070943b7ba539120a26ff5686 (patch) | |
| tree | 3d134977a6dfae71a45c318305166d044b50320d /cmake/Modules/WandaTargets.cmake | |
| parent | d3e691c9200b7b782c8acf17468068a699588a73 (diff) | |
| download | wanda-ed419140280553b070943b7ba539120a26ff5686.tar.xz wanda-ed419140280553b070943b7ba539120a26ff5686.zip | |
wanda: restructure directory hierarchy
Diffstat (limited to 'cmake/Modules/WandaTargets.cmake')
| -rw-r--r-- | cmake/Modules/WandaTargets.cmake | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/cmake/Modules/WandaTargets.cmake b/cmake/Modules/WandaTargets.cmake new file mode 100644 index 0000000..38fc169 --- /dev/null +++ b/cmake/Modules/WandaTargets.cmake @@ -0,0 +1,135 @@ +include(CMakeParseArguments) + +function(add_wanda_library) + set(OPTIONS) + set(SV_ARGS "NAME") + set(MV_ARGS "SOURCES;HEADERS;LIBRARIES") + cmake_parse_arguments(WANDA_LIBRARY "${OPTIONS}" "${SV_ARGS}" "${MV_ARGS}" ${ARGN}) + + if(NOT WANDA_LIBRARY_NAME) + message(FATAL_ERROR "Missing argument 'NAME' to call of 'add_wanda_library'") + endif() + + if(NOT WANDA_LIBRARY_SOURCES) + message(FATAL_ERROR "Missing argument 'SOURCES' to call of 'add_wanda_library'") + endif() + + set(RESOLVED_SOURCES) + foreach(SOURCE IN LISTS WANDA_LIBRARY_SOURCES) + list(APPEND RESOLVED_SOURCES "src/wanda/${SOURCE}") + endforeach() + + set(RESOLVED_HEADERS) + foreach(HEADER IN LISTS WANDA_LIBRARY_HEADERS) + list(APPEND RESOLVED_HEADERS "include/wanda/${HEADER}") + endforeach() + + add_library("${WANDA_LIBRARY_NAME}" + ${RESOLVED_SOURCES} # Source files + ${RESOLVED_HEADERS} # Header files + ) + + target_include_directories("${WANDA_LIBRARY_NAME}" SYSTEM PUBLIC + $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include> + $<INSTALL_INTERFACE:include> + ) + + target_link_libraries("${WANDA_LIBRARY_NAME}" + ${WANDA_LIBRARY_LIBRARIES} + ) + + set_target_properties("${WANDA_LIBRARY_NAME}" + PROPERTIES PUBLIC_HEADER "${RESOLVED_HEADERS}" + ) + + install(TARGETS "${WANDA_LIBRARY_NAME}" + ARCHIVE DESTINATION "lib" PUBLIC_HEADER DESTINATION "include/wanda" + ) +endfunction() + +function(add_wanda_executable) + set(OPTIONS) + set(SV_ARGS "NAME") + set(MV_ARGS "SOURCES;HEADERS;LIBRARIES") + cmake_parse_arguments(WANDA_EXECUTABLE "${OPTIONS}" "${SV_ARGS}" "${MV_ARGS}" ${ARGN}) + + if(NOT WANDA_EXECUTABLE_NAME) + message(FATAL_ERROR "Missing argument 'NAME' to call of 'add_wanda_executable'") + endif() + + if(NOT WANDA_EXECUTABLE_SOURCES) + message(FATAL_ERROR "Missing argument 'SOURCES' to call of 'add_wanda_executable'") + endif() + + set(RESOLVED_SOURCES) + foreach(SOURCE IN LISTS WANDA_EXECUTABLE_SOURCES) + list(APPEND RESOLVED_SOURCES "src/wanda/${SOURCE}") + endforeach() + + set(RESOLVED_HEADERS) + foreach(HEADER IN LISTS WANDA_EXECUTABLE_HEADERS) + list(APPEND RESOLVED_HEADERS "include/wanda/${HEADER}") + endforeach() + + add_executable("${WANDA_EXECUTABLE_NAME}" + ${RESOLVED_SOURCES} # Source files + ${RESOLVED_HEADERS} # Header files + ) + + target_include_directories("${WANDA_EXECUTABLE_NAME}" SYSTEM PRIVATE + $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include> + ) + + target_link_libraries("${WANDA_EXECUTABLE_NAME}" + ${WANDA_EXECUTABLE_LIBRARIES} + ) + + install(TARGETS "${WANDA_EXECUTABLE_NAME}" + ARCHIVE DESTINATION "lib" RUNTIME DESTINATION "bin" + ) +endfunction() + +function(add_wanda_test) + set(OPTIONS) + set(SV_ARGS "NAME") + set(MV_ARGS "SOURCES;HEADERS;LIBRARIES") + cmake_parse_arguments(WANDA_TEST "${OPTIONS}" "${SV_ARGS}" "${MV_ARGS}" ${ARGN}) + + if(NOT WANDA_TEST_NAME) + message(FATAL_ERROR "Missing argument 'NAME' to call of 'add_wanda_test'") + endif() + + if(NOT WANDA_TEST_SOURCES) + message(FATAL_ERROR "Missing argument 'SOURCES' to call of 'add_wanda_test'") + endif() + + set(RESOLVED_SOURCES) + foreach(SOURCE IN LISTS WANDA_TEST_SOURCES) + list(APPEND RESOLVED_SOURCES "tests/wanda/${SOURCE}") + endforeach() + + set(RESOLVED_HEADERS) + foreach(HEADER IN LISTS WANDA_TEST_HEADERS) + list(APPEND RESOLVED_HEADERS "tests/wanda/${HEADER}") + endforeach() + + if(NOT CUTE_FOUND) + message(STATUS "CUTE not found. Skipping test '${WANDA_TEST_NAME}'") + return() + endif() + + add_executable("${WANDA_TEST_NAME}_driver" + ${RESOLVED_SOURCES} # Source files + ${RESOLVED_HEADERS} # Header files + ) + + target_include_directories("${WANDA_TEST_NAME}_driver" SYSTEM PRIVATE + $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include> + ) + + target_link_libraries("${WANDA_TEST_NAME}_driver" + ${WANDA_TEST_LIBRARIES} + ) + + add_test(NAME "${WANDA_TEST_NAME}" COMMAND "${WANDA_TEST_NAME}_driver") +endfunction()
\ No newline at end of file |
