-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
135 lines (116 loc) · 6.15 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
cmake_minimum_required(VERSION 3.12)
project(lambdacommon)
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
include(GenerateExportHeader)
include(utils/CompileUtility)
include(utils/InstallUtility)
include(utils/VersionUtility)
set(CMAKE_CXX_STANDARD 17)
# Options
option(LAMBDACOMMON_BUILD_STATIC "Build static libraries" OFF)
option(LAMBDACOMMON_INSTALL "Generate installation target" ON)
option(LAMBDACOMMON_BUILD_C_WRAPPER "Build the λcommon C wrapper" OFF)
option(LAMBDACOMMON_BUILD_TESTS "Build the λcommon test programs" ON)
# Version
set(LAMBDACOMMON_VERSION_MAJOR 1)
set(LAMBDACOMMON_VERSION_MINOR 10)
set(LAMBDACOMMON_VERSION_PATCH 0)
set(LAMBDACOMMON_VERSION_TYPE "Release")
# Generate compile flags.
generate_flags(LAMBDACOMMON_COMPILE_FLAGS "native" 2 true)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}${LAMBDACOMMON_COMPILE_FLAGS}")
if (NOT LAMBDA_WINDOWS)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-attributes")
endif ()
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -framework CoreFoundation -framework ApplicationServices -Wno-unused-command-line-argument")
endif ()
# All files:
# There is the C++ header files.
set(HEADERS_CONNECTION include/lambdacommon/connection/address.h)
set(HEADERS_DOCUMENT include/lambdacommon/documents/document.h)
set(HEADERS_GRAPHICS include/lambdacommon/graphics/color.h include/lambdacommon/graphics/scene.h)
set(HEADERS_MATHS include/lambdacommon/maths.h include/lambdacommon/maths/geometry/geometry.h include/lambdacommon/maths/geometry/point.h include/lambdacommon/maths/geometry/vector.h)
set(HEADERS_EXCEPTIONS include/lambdacommon/exceptions/exceptions.h)
set(HEADERS_SYSTEM include/lambdacommon/system/system.h include/lambdacommon/system/terminal.h include/lambdacommon/system/fs.h include/lambdacommon/system/os.h include/lambdacommon/system/devices.h include/lambdacommon/system/input.h include/lambdacommon/system/uri.h include/lambdacommon/system/time.h)
set(HEADERS_BASE include/lambdacommon/lambdacommon.h include/lambdacommon/serializable.h include/lambdacommon/lstring.h include/lambdacommon/object.h include/lambdacommon/path.h include/lambdacommon/resources.h include/lambdacommon/sizes.h include/lambdacommon/types.h include/lambdacommon/test.h include/lambdacommon/lerror.h)
set(HEADER_FILES ${HEADERS_CONNECTION} ${HEADERS_DOCUMENT} ${HEADERS_GRAPHICS} ${HEADERS_MATHS} ${HEADERS_EXCEPTIONS} ${HEADERS_SYSTEM} ${HEADERS_BASE})
# There is the C++ source files.
set(SOURCES_CONNECTION src/connection/address.cpp)
set(SOURCES_DOCUMENT)
set(SOURCES_GRAPHICS src/graphics/color.cpp src/graphics/scene.cpp)
set(SOURCES_MATHS src/maths.cpp)
set(SOURCES_SERIALIZERS)
set(SOURCES_SYSTEM src/system/system.cpp src/system/terminal.cpp src/system/fs.cpp src/system/os.cpp src/system/uri.cpp src/system/time.cpp)
set(SOURCES_BASE src/lambdacommon.cpp src/serializable.cpp src/lstring.cpp src/object.cpp src/path.cpp src/resources.cpp)
set(SOURCE_FILES ${SOURCES_CONNECTION} ${SOURCES_DOCUMENT} ${SOURCES_GRAPHICS} ${SOURCES_MATHS} ${SOURCES_SERIALIZERS} ${SOURCES_SYSTEM} ${SOURCES_BASE})
if (WIN32)
list(APPEND SOURCE_FILES resources/lambdacommon.rc)
endif ()
# Now build the library.
# Build static if the option is on.
if (LAMBDACOMMON_BUILD_STATIC)
add_library(lambdacommon_static STATIC ${HEADER_FILES} ${SOURCE_FILES})
target_link_libraries(lambdacommon_static)
endif ()
# Build the shared library.
add_library(lambdacommon SHARED ${HEADER_FILES} ${SOURCE_FILES})
target_link_libraries(lambdacommon)
# Generate the export header and include it.
GENERATE_EXPORT_HEADER(lambdacommon
BASE_NAME lambdacommon
EXPORT_MACRO_NAME LAMBDACOMMON_API
EXPORT_FILE_NAME ${CMAKE_BINARY_DIR}/exports/lambdacommon_exports.h
STATIC_DEFINE LAMBDACOMMON_SHARED_EXPORTS_BUILT_AS_STATIC)
# Generate the version header and include it.
generate_version_header("LAMBDACOMMON" "lambdacommon" ${LAMBDACOMMON_VERSION_MAJOR} ${LAMBDACOMMON_VERSION_MINOR} ${LAMBDACOMMON_VERSION_PATCH} "${LAMBDACOMMON_VERSION_TYPE}")
target_include_directories(lambdacommon PUBLIC ${CMAKE_BINARY_DIR}/exports)
if (LAMBDACOMMON_BUILD_STATIC)
target_compile_definitions(lambdacommon_static PUBLIC -DLAMBDACOMMON_SHARED_EXPORTS_BUILT_AS_STATIC)
target_include_directories(lambdacommon_static PUBLIC ${CMAKE_BINARY_DIR}/exports)
endif ()
# WebAssembly specific
if (LAMBDA_WASM)
set_target_properties(lambdacommon PROPERTIES SUFFIX ".bc")
set_target_properties(lambdacommon PROPERTIES LINK_FLAGS "-s WASM=1")
endif ()
include_directories(include)
if (WIN32)
set(LCOMMON_ICON resources/lambdacommon_info.rc)
endif ()
# Build the information executable.
add_executable(lambdacommon_info src/lc_info.cpp ${LCOMMON_ICON})
target_link_libraries(lambdacommon_info lambdacommon)
# Install if the option is on.
if (LAMBDACOMMON_INSTALL)
foreach (LOOP_HEADER ${HEADER_FILES})
get_filename_component(HEADER_PARENT_DIR ${LOOP_HEADER} DIRECTORY)
install(FILES ${LOOP_HEADER} DESTINATION ${HEADER_PARENT_DIR})
endforeach ()
install(FILES ${CMAKE_BINARY_DIR}/exports/lambdacommon_version.h DESTINATION include/lambdacommon)
install(FILES ${CMAKE_BINARY_DIR}/exports/lambdacommon_exports.h DESTINATION include/lambdacommon)
install(FILES ${CMAKE_SOURCE_DIR}/LICENSE DESTINATION share/licenses/lambdacommon)
install(TARGETS lambdacommon
RUNTIME DESTINATION bin COMPONENT libraries
LIBRARY DESTINATION lib COMPONENT libraries
ARCHIVE DESTINATION lib COMPONENT libraries)
if (LAMBDACOMMON_BUILD_STATIC)
install(TARGETS lambdacommon_static
RUNTIME DESTINATION bin COMPONENT libraries
LIBRARY DESTINATION lib COMPONENT libraries
ARCHIVE DESTINATION lib COMPONENT libraries)
endif ()
install(TARGETS lambdacommon_info
RUNTIME DESTINATION bin COMPONENT libraries
LIBRARY DESTINATION lib COMPONENT libraries
ARCHIVE DESTINATION lib COMPONENT libraries)
# Uninstall target.
setup_uninstall_target()
endif ()
# Build the tests if the option is on.
if (LAMBDACOMMON_BUILD_TESTS)
add_subdirectory(tests)
endif ()
if (LAMBDACOMMON_BUILD_C_WRAPPER)
add_subdirectory(c_wrapper)
endif ()