1
+ cmake_minimum_required(VERSION 3.1)
2
+ project(xthreejs)
3
+
4
+ message(STATUS "Forcing tests build type to Release")
5
+ set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE)
6
+
7
+ set(XTHREEJS_INCLUDE_DIR ${ CMAKE_CURRENT_SOURCE_DIR} /include)
8
+ set(XTHREEJS_SOURCE_DIR ${ CMAKE_CURRENT_SOURCE_DIR} /src)
9
+
10
+ # Configuration
11
+ # =============
12
+
13
+ include(GNUInstallDirs)
14
+ include(CMakePackageConfigHelpers)
15
+
16
+ set(XTHREEJS_INSTALL_LIBRARY_DIR "\"${ CMAKE_INSTALL_PREFIX} /${ CMAKE_INSTALL_LIBDIR} \"")
17
+
18
+ configure_file (
19
+ "${ XTHREEJS_INCLUDE_DIR} /xthreejs/xthreejs_config.hpp.in"
20
+ "${ XTHREEJS_INCLUDE_DIR} /xthreejs/xthreejs_config.hpp"
21
+ )
22
+
23
+ # Versionning
24
+ # ===========
25
+
26
+ file(STRINGS "${ XTHREEJS_INCLUDE_DIR} /xthreejs/xthreejs_config.hpp" xthreejs_version_defines
27
+ REGEX "#define XTHREEJS_VERSION_(MAJOR|MINOR|PATCH)")
28
+ foreach(ver ${ xthreejs_version_defines} )
29
+ if(ver MATCHES "#define XTHREEJS_VERSION_(MAJOR|MINOR|PATCH) +([^ ]+)$")
30
+ set(XTHREEJS_VERSION_${ CMAKE_MATCH_1} "${ CMAKE_MATCH_2} " CACHE INTERNAL "")
31
+ endif()
32
+ endforeach()
33
+ set(XTHREEJS_VERSION
34
+ ${ XTHREEJS_VERSION_MAJOR} .${ XTHREEJS_VERSION_MINOR} .${ XTHREEJS_VERSION_PATCH} )
35
+ message(STATUS "xthreejs version: v${ XTHREEJS_VERSION} ")
36
+
37
+ # Binary version
38
+ # See the following URL for explanations about the binary versionning
39
+ # https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html#Updating-version-info
40
+ file(STRINGS "${ XTHREEJS_INCLUDE_DIR} /xthreejs/xthreejs_config.hpp" xthreejs_version_defines
41
+ REGEX "#define XTHREEJS_BINARY_(CURRENT|REVISION|AGE)")
42
+ foreach(ver ${ xthreejs_version_defines} )
43
+ if(ver MATCHES "#define XTHREEJS_BINARY_(CURRENT|REVISION|AGE) +([^ ]+)$")
44
+ set(XTHREEJS_BINARY_${ CMAKE_MATCH_1} "${ CMAKE_MATCH_2} " CACHE INTERNAL "")
45
+ endif()
46
+ endforeach()
47
+ set(XTHREEJS_BINARY_VERSION
48
+ ${ XTHREEJS_BINARY_CURRENT} .${ XTHREEJS_BINARY_REVISION} .${ XTHREEJS_BINARY_AGE} )
49
+ message(STATUS "xthreejs binary version: v${ XTHREEJS_BINARY_VERSION} ")
50
+
51
+ # Dependencies
52
+ # ============
53
+
54
+ find_package(cppzmq 4.2.3 REQUIRED)
55
+ find_package(xtl 0.4 REQUIRED)
56
+ find_package(xeus 0.10.1 REQUIRED)
57
+ find_package(xwidgets 0.7 REQUIRED)
58
+ find_package(xproperty 0.7 REQUIRED)
59
+
60
+ # Source files
61
+ # ============
62
+
63
+ set(XTHREEJS_HEADERS
64
+ { {#each hppfiles as |file|} }
65
+ ${ XTHREEJS_INCLUDE_DIR} /xthreejs/{ {{ file } }}
66
+ { {/each} }
67
+ ${ XTHREEJS_INCLUDE_DIR} /xthreejs/xthreejs_config.hpp
68
+ )
69
+
70
+ set(XTHREEJS_SOURCES
71
+ { {#each cppfiles as |file|} }
72
+ ${ XTHREEJS_SOURCE_DIR} /{ {{ file } }}
73
+ { {/each} }
74
+ )
75
+
76
+ # Output
77
+ # ======
78
+
79
+ OPTION(XTHREEJS_PRECOMPILED "precompile xthreejs instances" ON)
80
+ if(XTHREEJS_PRECOMPILED)
81
+ add_definitions(-DXTHREEJS_PRECOMPILED)
82
+ endif()
83
+
84
+ add_library(xthreejs SHARED ${ XTHREEJS_SOURCES} ${ XTHREEJS_HEADERS} )
85
+
86
+ target_include_directories(xthreejs PUBLIC $<BUILD _INTERFACE:${XTHREEJS_INCLUDE_DIR} >
87
+ $<INSTALL _INTERFACE:include >)
88
+
89
+ target_link_libraries(xthreejs
90
+ PUBLIC xtl
91
+ PUBLIC xwidgets
92
+ PRIVATE xeus)
93
+
94
+ set_target_properties(xthreejs PROPERTIES
95
+ PUBLIC_HEADER "${ XTHREEJS_HEADERS} "
96
+ COMPILE_DEFINITIONS "XTHREEJS_EXPORTS"
97
+ PREFIX ""
98
+ VERSION ${ XTHREEJS_BINARY_VERSION}
99
+ SOVERSION ${ XTHREEJS_BINARY_CURRENT}
100
+ OUTPUT_NAME "libxthreejs")
101
+
102
+ # Compilation flags
103
+ # =================
104
+
105
+ include(CheckCXXCompilerFlag)
106
+ string(TOUPPER "${ CMAKE_BUILD_TYPE} " U_CMAKE_BUILD_TYPE)
107
+ OPTION(DISABLE_ARCH_NATIVE "disable -march=native flag" OFF)
108
+
109
+ set_target_properties(xthreejs PROPERTIES
110
+ CXX_EXTENSIONS OFF
111
+ CXX_STANDARD_REQUIRED 14)
112
+
113
+ target_compile_features(xthreejs PRIVATE cxx_std_14)
114
+
115
+ if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Intel")
116
+ target_compile_options(xthreejs PUBLIC -Wunused-parameter -Wextra -Wreorder)
117
+ if (DISABLE_ARCH_NATIVE)
118
+ target_compile_options(xthreejs PUBLIC -mtune=generic)
119
+ else()
120
+ target_compile_options(xthreejs PUBLIC -march=native)
121
+ endif()
122
+
123
+ # Enable link time optimization and set the default symbol
124
+ # visibility to hidden (very important to obtain small binaries)
125
+ if (NOT ${ U_CMAKE_BUILD_TYPE} MATCHES DEBUG)
126
+ # Check for Link Time Optimization support
127
+ # (GCC/Clang)
128
+ CHECK_CXX_COMPILER_FLAG("-flto" HAS_LTO_FLAG)
129
+ if (HAS_LTO_FLAG)
130
+ target_compile_options(xthreejs PUBLIC -flto)
131
+ endif()
132
+
133
+ # Intel equivalent to LTO is called IPO
134
+ if (CMAKE_CXX_COMPILER_ID MATCHES "Intel")
135
+ CHECK_CXX_COMPILER_FLAG("-ipo" HAS_IPO_FLAG)
136
+ if (HAS_IPO_FLAG)
137
+ target_compile_options(xthreejs PUBLIC -ipo)
138
+ endif()
139
+ endif()
140
+ endif()
141
+ message(STATUS "CMAKE_CXX_FLAGS: ${ CMAKE_CXX_FLAGS} ")
142
+ endif()
143
+
144
+ # Installation
145
+ # ============
146
+
147
+ set(XTHREEJS_CMAKECONFIG_INSTALL_DIR "${ CMAKE_INSTALL_LIBDIR} /cmake/${ PROJECT_NAME} " CACHE STRING "install path for xthreejsConfig.cmake")
148
+
149
+ install(DIRECTORY ${ XTHREEJS_INCLUDE_DIR} /xthreejs DESTINATION ${ CMAKE_INSTALL_INCLUDEDIR} )
150
+
151
+ install(TARGETS xthreejs
152
+ EXPORT ${ PROJECT_NAME} -targets
153
+ #PUBLIC_HEADER DESTINATION ${ CMAKE_INSTALL_INCLUDEDIR} /xthreejs
154
+ ARCHIVE DESTINATION ${ CMAKE_INSTALL_LIBDIR}
155
+ LIBRARY DESTINATION ${ CMAKE_INSTALL_LIBDIR}
156
+ RUNTIME DESTINATION ${ CMAKE_INSTALL_BINDIR} )
157
+
158
+ # Makes the project importable from the build directory
159
+ export(EXPORT ${ PROJECT_NAME} -targets
160
+ FILE "${ CMAKE_CURRENT_BINARY_DIR} /${ PROJECT_NAME} Targets.cmake")
161
+
162
+ configure_package_config_file(${ PROJECT_NAME} Config.cmake.in
163
+ "${ CMAKE_CURRENT_BINARY_DIR} /${ PROJECT_NAME} Config.cmake"
164
+ INSTALL_DESTINATION ${ XTHREEJS_CMAKECONFIG_INSTALL_DIR} )
165
+ write_basic_package_version_file(${ CMAKE_CURRENT_BINARY_DIR} /${ PROJECT_NAME} ConfigVersion.cmake
166
+ VERSION ${ XTHREEJS_VERSION}
167
+ COMPATIBILITY AnyNewerVersion)
168
+ install(FILES ${ CMAKE_CURRENT_BINARY_DIR} /${ PROJECT_NAME} Config.cmake
169
+ ${ CMAKE_CURRENT_BINARY_DIR} /${ PROJECT_NAME} ConfigVersion.cmake
170
+ DESTINATION ${ XTHREEJS_CMAKECONFIG_INSTALL_DIR} )
171
+ install(EXPORT ${ PROJECT_NAME} -targets
172
+ FILE ${ PROJECT_NAME} Targets.cmake
173
+ DESTINATION ${ XTHREEJS_CMAKECONFIG_INSTALL_DIR} )
0 commit comments