-
Notifications
You must be signed in to change notification settings - Fork 47
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
175 lines (150 loc) · 5.47 KB
/
Copy pathCMakeLists.txt
File metadata and controls
175 lines (150 loc) · 5.47 KB
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
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
cmake_minimum_required(VERSION 3.29)
project(OCP)
set(N_PROC
2
CACHE STRING "Number of processes used for generating code")
set(DLL_EXT
dll
CACHE STRING "DLL suffix")
set(MSVC_VER
16
CACHE STRING "MSVC version to download for win generation")
set(OCCT_LIB_DIR CACHE PATH "Location of OCCT sos/dlls")
find_package(OpenGL REQUIRED)
find_package(LLVM REQUIRED)
find_package(
VTK REQUIRED
COMPONENTS CommonCore
WrappingPythonCore
RenderingCore
RenderingOpenGL2
CommonDataModel
CommonExecutionModel
freetype)
message(STATUS "VTK ${VTK_VERSION} found")
find_package(RapidJSON REQUIRED)
find_package(Clang REQUIRED)
set(Python_FIND_VIRTUALENV FIRST)
find_package(
Python
COMPONENTS Interpreter Development
REQUIRED)
# find OCCT and dump symbols
if(EXISTS ${OCCT_LIB_DIR})
file(
GLOB occt_libs
LIST_DIRECTORIES false
${OCCT_LIB_DIR}/*.${DLL_EXT})
message(STATUS Found OCCT libs: ${occt_libs})
else()
find_package(
OpenCASCADE REQUIRED
)
foreach(target ${OpenCASCADE_LIBRARIES})
get_target_property(loc ${target} IMPORTED_LOCATION_RELEASE)
list(APPEND occt_libs ${loc})
endforeach()
endif()
execute_process(COMMAND ${Python_EXECUTABLE} ${CMAKE_SOURCE_DIR}/dump_symbols.py
"${occt_libs}" WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
get_target_property(LIBCLANG_PATH libclang IMPORTED_LOCATION_RELEASE)
get_target_property(VTK_INCLUDE_DIR VTK::CommonCore
INTERFACE_INCLUDE_DIRECTORIES)
# for some reason I get multiple generator expressions
string(REPLACE ">" ">;" VTK_INCLUDE_DIR ${VTK_INCLUDE_DIR})
list(GET VTK_INCLUDE_DIR 0 VTK_INCLUDE_DIR)
message(STATUS "Include dirs: ${VTK_INCLUDE_DIR}")
message(STATUS "Include dirs: ${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES}")
# OSX
if(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
list(APPEND CXX_INCLUDES -i /opt/usr/local/include/c++/v1/ -i
/opt/usr/local/include/)
# Linux-like (including FreeBSD)
elseif(NOT PLATFORM STREQUAL "Windows")
foreach(inc IN LISTS CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES)
list(APPEND CXX_INCLUDES -i ${inc}/)
endforeach()
# X-generation from Linux to Windows
else()
# download part of msvc 16 and winsdk
if(NOT EXISTS ${CMAKE_BINARY_DIR}/msvc)
execute_process(
COMMAND
${Python_EXECUTABLE} ${CMAKE_SOURCE_DIR}/extern/msvc-wine/vsdownload.py
--major ${MSVC_VER} --accept-license --dest msvc Win10SDK_10.0.19041
Microsoft.VisualCpp.CRT.Headers
WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
endif()
list(APPEND CXX_INCLUDES -i
${CMAKE_BINARY_DIR}/msvc/VC/Tools/MSVC/14.29.30133/include)
list(APPEND CXX_INCLUDES -i
${CMAKE_BINARY_DIR}/msvc/Windows\ Kits/10/Include/10.0.19041.0/ucrt/)
list(APPEND CXX_INCLUDES -i ${CMAKE_SOURCE_DIR}/extern/include/)
endif()
if(PLATFORM)
message(STATUS "Requested platform: ${PLATFORM}")
else()
message(STATUS "Platform not specified.")
if(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
set(PLATFORM Windows)
elseif(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
set(PLATFORM OSX)
elseif(${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
set(PLATFORM FreeBSD)
else()
set(PLATFORM Linux)
endif()
endif()
set(ENV{PYTHONPATH} ${CMAKE_SOURCE_DIR}/pywrap)
# handle the possibility of multiple opengl include dirs
list(JOIN OPENGL_INCLUDE_DIRS " -i " OPENGL_INCLUDE_DIRS)
add_custom_command(
OUTPUT ${CMAKE_BINARY_DIR}/tmp.pkl
COMMAND
${CMAKE_COMMAND} -E env "PYTHONPATH=${CMAKE_SOURCE_DIR}/pywrap"
${Python_EXECUTABLE} -m bindgen -n ${N_PROC} -l ${LIBCLANG_PATH} -i
${VTK_INCLUDE_DIR}/
-i ${OPENGL_INCLUDE_DIRS}
-i ${RapidJSON_INCLUDE_DIRS} -i
${CLANG_INSTALL_PREFIX}/lib/clang/${LLVM_VERSION_MAJOR}/include/ -p
${CMAKE_SOURCE_DIR} ${CXX_INCLUDES} parse ${CMAKE_SOURCE_DIR}/ocp.toml
tmp.pkl ${PLATFORM}
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
DEPENDS ${CMAKE_SOURCE_DIR}/ocp.toml
USES_TERMINAL
COMMENT "Running pywrap - parse")
add_custom_target(pywrap_parse ALL DEPENDS ${CMAKE_BINARY_DIR}/tmp.pkl)
add_custom_command(
OUTPUT ${CMAKE_BINARY_DIR}/tmp_filtered.pkl
COMMAND
${CMAKE_COMMAND} -E env "PYTHONPATH=${CMAKE_SOURCE_DIR}/pywrap"
${Python_EXECUTABLE} -m bindgen -n ${N_PROC} -l ${LIBCLANG_PATH} -i
${VTK_INCLUDE_DIR}/
-i ${OPENGL_INCLUDE_DIRS}
-i ${RapidJSON_INCLUDE_DIRS} -i
${CLANG_INSTALL_PREFIX}/lib/clang/${LLVM_VERSION_MAJOR}/include/ -p
${CMAKE_SOURCE_DIR} ${CXX_INCLUDES} transform ${CMAKE_SOURCE_DIR}/ocp.toml
${PLATFORM} tmp.pkl tmp_filtered.pkl
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
DEPENDS ${CMAKE_BINARY_DIR}/tmp.pkl
USES_TERMINAL
COMMENT "Running pywrap - transform")
add_custom_target(pywrap_transform ALL
DEPENDS ${CMAKE_BINARY_DIR}/tmp_filtered.pkl)
add_custom_command(
OUTPUT ${CMAKE_BINARY_DIR}/OCP/CMakeLists.txt
COMMAND
${CMAKE_COMMAND} -E env "PYTHONPATH=${CMAKE_SOURCE_DIR}/pywrap"
${Python_EXECUTABLE} -m bindgen -n ${N_PROC} -l ${LIBCLANG_PATH} -i
${VTK_INCLUDE_DIR}/
-i ${OPENGL_INCLUDE_DIRS}
-i ${RapidJSON_INCLUDE_DIRS} -i
${CLANG_INSTALL_PREFIX}/lib/clang/${LLVM_VERSION_MAJOR}/include/ -p
${CMAKE_SOURCE_DIR} ${CXX_INCLUDES} generate ${CMAKE_SOURCE_DIR}/ocp.toml
${PLATFORM} tmp_filtered.pkl
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
DEPENDS ${CMAKE_BINARY_DIR}/tmp_filtered.pkl
USES_TERMINAL
COMMENT "Running pywrap - generate")
add_custom_target(pywrap_generate ALL
DEPENDS ${CMAKE_BINARY_DIR}/OCP/CMakeLists.txt)