forked from BluEye-Robotics/tyndall
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
68 lines (57 loc) · 2.9 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
project(tyndall)
cmake_minimum_required(VERSION 3.11)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(C_CXX_EXTRA_FLAGS "-O2 -Wall -Wconversion -Wextra -Wno-unused-parameter -Wno-missing-field-initializers")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${C_CXX_EXTRA_FLAGS}")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${C_CXX_EXTRA_FLAGS}")
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
add_definitions(-DDEBUG)
include_directories(${CMAKE_SOURCE_DIR})
set(LD_FLAGS "-lpthread -lrt -latomic -lfmt")
file(GLOB CFILES "tyndall/*.c*" "tyndall/*/*.c*")
add_library(tyndall SHARED ${CFILES})
target_link_libraries(tyndall ${LD_FLAGS})
install(TARGETS tyndall DESTINATION lib)
file(GLOB HEADERS "tyndall/*.h*" "tyndall/*/*.h*")
foreach(HEADER ${HEADERS})
execute_process(COMMAND bash "-c" "dirname -z $(realpath --relative-to=${CMAKE_SOURCE_DIR} ${HEADER})" OUTPUT_VARIABLE HEADER_DIR)
install(FILES ${HEADER} DESTINATION include/${HEADER_DIR})
endforeach(HEADER)
set(EXAMPLE_PREFIX "${CMAKE_PROJECT_NAME}_ex_")
file(GLOB EXAMPLES "examples/*/*.c*")
foreach(EXAMPLE ${EXAMPLES})
execute_process(COMMAND bash "-c" "printf ${EXAMPLE_PREFIX}$(dirname ${EXAMPLE} | xargs basename)_$(basename ${EXAMPLE} | cut -f 1 -d '.')" OUTPUT_VARIABLE EXAMPLE_TARGET)
add_executable(${EXAMPLE_TARGET} EXCLUDE_FROM_ALL ${EXAMPLE})
target_link_libraries(${EXAMPLE_TARGET} tyndall)
install(TARGETS ${EXAMPLE_TARGET} DESTINATION bin OPTIONAL)
set(EXAMPLE_TARGETS "${EXAMPLE_TARGETS}${EXAMPLE_TARGET};")
endforeach(EXAMPLE)
add_custom_target(examples)
add_dependencies(examples ${EXAMPLE_TARGETS})
set(TEST_PREFIX "${CMAKE_PROJECT_NAME}_test_")
file(GLOB CPP_TESTS "tests/*/*.cpp")
foreach(CPP_TEST ${CPP_TESTS})
execute_process(COMMAND bash "-c" "printf ${TEST_PREFIX}$(dirname ${CPP_TEST} | xargs basename)_$(basename ${CPP_TEST} | cut -f 1 -d '.')" OUTPUT_VARIABLE CPP_TEST_TARGET)
add_executable(${CPP_TEST_TARGET} EXCLUDE_FROM_ALL ${CPP_TEST})
target_link_libraries(${CPP_TEST_TARGET} tyndall)
install(TARGETS ${CPP_TEST_TARGET} DESTINATION bin OPTIONAL)
set(CPP_TEST_TARGETS "${CPP_TEST_TARGETS}${CPP_TEST_TARGET};")
endforeach(CPP_TEST)
IF(CMAKE_CROSSCOMPILING)
set(TEST_CMD "echo WARNING: Tests are not executed when cross compiling")
ELSE()
set(TEST_CMD "set -e; for t in ${CMAKE_BINARY_DIR}/${TEST_PREFIX}*; do $t; done")
ENDIF()
add_custom_target(tests COMMAND /bin/bash -c "${TEST_CMD}" VERBATIM DEPENDS ${CPP_TEST_TARGETS})
set(TOOL_PREFIX "${CMAKE_PROJECT_NAME}_tool_")
file(GLOB TOOLS "tools/*.c*")
foreach(TOOL ${TOOLS})
execute_process(COMMAND bash "-c" "printf ${TOOL_PREFIX}$(basename ${TOOL} | cut -f 1 -d '.')" OUTPUT_VARIABLE TOOL_TARGET)
add_executable(${TOOL_TARGET} EXCLUDE_FROM_ALL ${TOOL})
target_link_libraries(${TOOL_TARGET} tyndall)
install(TARGETS ${TOOL_TARGET} DESTINATION bin OPTIONAL)
set(TOOL_TARGETS "${TOOL_TARGETS}${TOOL_TARGET};")
endforeach(TOOL)
add_custom_target(tools)
add_dependencies(tools ${TOOL_TARGETS})