forked from deepsig/libsigmf
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
104 lines (88 loc) · 4.66 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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
cmake_minimum_required(VERSION 3.0)
project(libsigmf CXX)
# c++14 used for auto return type for functions without having to do the -> declaration
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
list(APPEND CMAKE_MODULE_PATH cmake)
function(generate_sigmf_header generate_sigmf_target FBS_FILE OUTPUT_LOCATION)
add_custom_target(generate_sigmf_target_${generate_sigmf_target}
COMMAND flatc -c --reflect-types --reflect-names --gen-object-api -o "${OUTPUT_LOCATION}/" "${FBS_FILE}"
COMMENT "Building C++ header for flatbuffers definition ${FBS_FILE}"
WORKING_DIRECTORY .)
add_library(${generate_sigmf_target} INTERFACE)
add_dependencies(${generate_sigmf_target} generate_sigmf_target_${generate_sigmf_target} flatc)
target_include_directories(${generate_sigmf_target} INTERFACE "${OUTPUT_LOCATION}/")
endfunction(generate_sigmf_header)
# Initialize Json submodule if unititialized
set(JSON_INCLUDE_DIR
${CMAKE_CURRENT_SOURCE_DIR}/external/json/single_include
CACHE PATH "json include directory")
if (NOT IS_DIRECTORY ${JSON_INCLUDE_DIR})
message("Json submodule not found! Downloading...")
execute_process(COMMAND git submodule update --init -- external/json
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
endif(NOT IS_DIRECTORY ${JSON_INCLUDE_DIR})
# Initialize Flatbuffers submodule if unititialized
set(FLATBUFFERS_INCLUDE_DIR
${CMAKE_CURRENT_SOURCE_DIR}/external/flatbuffers/include
CACHE PATH "flatbuffers include directory")
if (NOT IS_DIRECTORY ${FLATBUFFERS_INCLUDE_DIR})
message("Flatbuffers submodule not found! Downloading...")
execute_process(COMMAND git submodule update --init -- external/flatbuffers
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
endif(NOT IS_DIRECTORY ${FLATBUFFERS_INCLUDE_DIR})
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/external/flatbuffers
${CMAKE_CURRENT_BINARY_DIR}/flatbuffers-build
EXCLUDE_FROM_ALL)
# Create targets for generating the namespace definitions that we ship by default (using this requiers building flatc)
generate_sigmf_header(generated_core_ns "${CMAKE_SOURCE_DIR}/sigmf_protocols/sigmf_core.fbs" "${CMAKE_CURRENT_BINARY_DIR}/include")
generate_sigmf_header(generated_antenna_ns "${CMAKE_SOURCE_DIR}/sigmf_protocols/sigmf_antenna.fbs" "${CMAKE_CURRENT_BINARY_DIR}/include")
generate_sigmf_header(generated_testing_ns "${CMAKE_SOURCE_DIR}/sigmf_protocols/testing_protocols.fbs" "${CMAKE_CURRENT_BINARY_DIR}/include")
# We also carry around pre-generated headers so downstream doesn't need to build flatc
set(SIGMF_GEN_HEADERS "${CMAKE_CURRENT_SOURCE_DIR}/sigmf_protocols")
# Our interface target that downstream should ideally use target_link_libraries( ) with to get access to our include dirs
add_library(libsigmf INTERFACE)
target_include_directories(libsigmf INTERFACE ${JSON_INCLUDE_DIR} ${FLATBUFFERS_INCLUDE_DIR} ${SIGMF_GEN_HEADERS} ${CMAKE_CURRENT_SOURCE_DIR}/src)
# Ensure that our protocol headers are generated before libsigmf dependency is satisfied (i.e. so examples have them)
add_dependencies(libsigmf libsigmf_genheaders)
add_custom_target(libsigmf_genheaders DEPENDS
generate_sigmf_target_generated_core_ns
generate_sigmf_target_generated_antenna_ns
generate_sigmf_target_generated_testing_ns
)
add_subdirectory(examples)
add_custom_target(makedocs
COMMAND mkdocs build
COMMENT "Building documentation website"
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
configure_file(
${CMAKE_SOURCE_DIR}/cmake/SigmfConfig.cmake.in
${CMAKE_BINARY_DIR}/cmake/SigmfConfig.cmake
@ONLY
)
# TODO: can we install flatc with a different binary name? sigmf-flatc?
install(TARGETS flatc DESTINATION bin)
INSTALL( # install original headers
DIRECTORY ${CMAKE_SOURCE_DIR}/src/
DESTINATION include/sigmf
FILES_MATCHING PATTERN "*.h*")
INSTALL( # install flatbuffers headers
DIRECTORY ${CMAKE_SOURCE_DIR}/external/flatbuffers/include/flatbuffers/
DESTINATION include/sigmf/external/flatbuffers/
FILES_MATCHING PATTERN "*.h*")
INSTALL( # install nlohmann headers
DIRECTORY ${CMAKE_SOURCE_DIR}/external/json/include/nlohmann/
DESTINATION include/sigmf/external/nlohmann/
FILES_MATCHING PATTERN "*.hpp*")
INSTALL( # install flatbuf proto defs
DIRECTORY ${CMAKE_SOURCE_DIR}/sigmf_protocols/
DESTINATION include/sigmf/fbs
FILES_MATCHING PATTERN "*.fbs*")
INSTALL( # install generated headers
DIRECTORY ${CMAKE_BINARY_DIR}/include/
DESTINATION include/sigmf/
FILES_MATCHING PATTERN "*.h*")
INSTALL(
FILES ${CMAKE_BINARY_DIR}/cmake/SigmfConfig.cmake
DESTINATION cmake/sigmf
)