/
CMakeLists.txt
148 lines (128 loc) · 4.88 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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
cmake_minimum_required(VERSION 3.5.1)
project(asionet)
set(CMAKE_CXX_STANDARD 14)
# Packages to find
find_package(Boost REQUIRED COMPONENTS system)
find_package(Threads)
###########################
# NetworkLib Library Target
# =========================
###########################
set(SOURCE_FILES
include/asionet/Context.h
include/asionet/Socket.h
include/asionet/Stream.h
include/asionet/Message.h
include/asionet/ServiceClient.h
include/asionet/ServiceServer.h
include/asionet/DatagramReceiver.h
include/asionet/DatagramSender.h
include/asionet/Time.h
include/asionet/Timer.h
include/asionet/Resolver.h
include/asionet/Utils.h
include/asionet/Closeable.h
include/asionet/Error.h
include/asionet/Frame.h
include/asionet/Worker.h
include/asionet/WorkerPool.h
include/asionet/WorkSerializer.h
include/asionet/AsyncOperationManager.h
include/asionet/Monitor.h
include/asionet/Wait.h
include/asionet/ConstBuffer.h
src/Wait.cpp)
set(PUBLIC_HEADER_FILES
include/asionet/Context.h
include/asionet/Socket.h
include/asionet/Stream.h
include/asionet/Message.h
include/asionet/ServiceClient.h
include/asionet/ServiceServer.h
include/asionet/DatagramReceiver.h
include/asionet/DatagramSender.h
include/asionet/Time.h
include/asionet/Timer.h
include/asionet/Resolver.h
include/asionet/Utils.h
include/asionet/Closeable.h
include/asionet/Error.h
include/asionet/Frame.h
include/asionet/Worker.h
include/asionet/WorkerPool.h
include/asionet/WorkSerializer.h
include/asionet/AsyncOperationManager.h
include/asionet/Monitor.h
include/asionet/Wait.h
include/asionet/ConstBuffer.h)
foreach(HEADER ${PUBLIC_HEADER_FILES})
set(PUBLIC_HEADER_FILES_COMBINED "${PUBLIC_HEADER_FILES_COMBINED}\\;${HEADER}")
endforeach()
add_library(asionet STATIC ${SOURCE_FILES})
# Specify public header files
set_target_properties(asionet PROPERTIES PUBLIC_HEADER ${PUBLIC_HEADER_FILES_COMBINED})
target_link_libraries(asionet ${Boost_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
set(INCLUDE_DIRS ${Boost_INCLUDE_DIRS})
include_directories(${INCLUDE_DIRS})
#############################
# Specify install directories
#############################
set(INSTALL_LIB_DIR lib/asionet)
set(INSTALL_INCLUDE_DIR include/asionet)
set(INSTALL_CMAKE_DIR lib/asionet/CMake)
# Make relative paths absolute (needed later on)
foreach(p LIB INCLUDE CMAKE)
set(var INSTALL_${p}_DIR)
if(NOT IS_ABSOLUTE "${${var}}")
set(${var} "${CMAKE_INSTALL_PREFIX}/${${var}}")
endif()
endforeach()
####################################################
# Create the *Config.cmake and *ConfigVersion files
####################################################
# Configure *Config.cmake.in for the build tree
set(CONF_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/include" ${INCLUDE_DIRS})
configure_file(asionetConfig.cmake.in
"${PROJECT_BINARY_DIR}/asionetConfig.cmake"
@ONLY)
# Add target for the build tree
export(TARGETS asionet
FILE "${PROJECT_BINARY_DIR}/asionetTargets.cmake")
# Get the relative path from the cmake install directory to the include install directory
file(RELATIVE_PATH REL_INCLUDE_DIR "${INSTALL_CMAKE_DIR}" "${INSTALL_INCLUDE_DIR}")
# Configure *Config.cmake.in for the install tree
# Put it inside the cmake-files directory (which is located inside the binary directory)
set(CONF_INCLUDE_DIRS "\${ASIONET_CMAKE_DIR}/${REL_INCLUDE_DIR}/.." ${INCLUDE_DIRS})
configure_file(asionetConfig.cmake.in
"${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/asionetConfig.cmake"
@ONLY)
########################
# Install asionet
########################
# Install library and header files
install(TARGETS asionet
EXPORT asionetTargets
LIBRARY DESTINATION "${INSTALL_LIB_DIR}"
ARCHIVE DESTINATION "${INSTALL_LIB_DIR}"
RUNTIME DESTINATION "${INSTALL_LIB_DIR}" # for windows
PUBLIC_HEADER DESTINATION "${INSTALL_INCLUDE_DIR}")
# Install the asionetConfig.cmake
install(FILES "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/asionetConfig.cmake"
DESTINATION "${INSTALL_CMAKE_DIR}")
# Install the export set for use with the install-tree
install(EXPORT asionetTargets
DESTINATION "${INSTALL_CMAKE_DIR}")
########################
# Test Executable Target
# ======================
########################
set(TEST_SOURCE_FILES
${SOURCE_FILES}
test/Test.cpp
test/TestMessage.h
test/TestService.h
test/TestUtils.h)
add_executable(asionetTest ${TEST_SOURCE_FILES})
target_link_libraries(asionetTest ${Boost_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} gtest gtest_main)
# For debugging
# target_compile_options(asionetTest PUBLIC -fopenmp -fPIC -O0 -g3 -ggdb)