-
Notifications
You must be signed in to change notification settings - Fork 42
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
131 lines (110 loc) · 3.94 KB
/
CMakeLists.txt
File metadata and controls
131 lines (110 loc) · 3.94 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
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
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)
else()
set(PLATFORM Linux)
endif()
endif()
set(ENV{PYTHONPATH} ${CMAKE_SOURCE_DIR}/pywrap )
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}
all ${CMAKE_SOURCE_DIR}/ocp.toml ${PLATFORM}
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
DEPENDS ${CMAKE_SOURCE_DIR}/ocp.toml
USES_TERMINAL
COMMENT "Running pywrap"
)
add_custom_target(pywrap ALL DEPENDS ${CMAKE_BINARY_DIR}/OCP/CMakeLists.txt )