1cmake_minimum_required( VERSION 3.16 )
2project( {{ name }}
3         LANGUAGES CXX )
4
5list( APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR} )
6
7if(WIN32)
8  set( PYTHON_EXECUTABLE "$ENV{CONDA_PREFIX}/python.exe" )
9  add_compile_definitions( _hypot=hypot _AMD64_ _WINDOWS)
10  execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "from sys import version_info as vi; print(f'{vi.major}{vi.minor}')"
11                  OUTPUT_VARIABLE PYTHON_VER )
12  string(STRIP ${PYTHON_VER} PYTHON_VER)
13  set( PYTHON_LIBRARY $ENV{CONDA_PREFIX}/libs/python${PYTHON_VER}.lib )
14else()
15  set( PYTHON_EXECUTABLE "$ENV{CONDA_PREFIX}/bin/python" )
16endif()
17
18find_package( pybind11 REQUIRED )
19find_package( OpenCascade REQUIRED COMPONENTS OPENCASCADE )
20
21#clang-cl related workaround
22if(WIN32)
23  set( PYTHON_LIBRARY $ENV{CONDA_PREFIX}/libs/python${PYTHON_VER}.lib )
24endif()
25
26include_directories( ${PROJECT_SOURCE_DIR} )
27file( GLOB CPP_FILES ${PROJECT_SOURCE_DIR}/*.cpp )
28
29add_library( {{ name }} MODULE ${CPP_FILES} )
30
31target_link_libraries( {{ name }} PRIVATE OPENCASCADE pybind11::pybind11 )
32set_target_properties( {{ name }}
33                       PROPERTIES
34                       CXX_STANDARD 17
35                       INTERPROCEDURAL_OPTIMIZATION FALSE
36                       PREFIX "${PYTHON_MODULE_PREFIX}"
37                       SUFFIX "${PYTHON_MODULE_EXTENSION}" )
38
39if(WIN32)
40  target_compile_options( {{ name }} PRIVATE /bigobj )
41  target_compile_definitions( {{ name }} PRIVATE
42                              "Standard_EXPORT="
43                              "Standard_EXPORTEXTERN="
44                              "Standard_EXPORTEXTERNC=extern \"C\""
45                              "Standard_IMPORT=extern"
46                              "Standard_IMPORTC=extern \"C\""
47                              "_SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING")
48  target_link_libraries( {{ name }} PRIVATE opengl32 )
49  target_link_libraries( {{ name }} PRIVATE ${PYTHON_LIBRARY} )
50else()
51  set_target_properties( {{ name }}
52                         PROPERTIES
53                         CMAKE_CXX_FLAGS_RELEASE "-O3 "
54                         COMPILE_FLAGS "-fpermissive -fvisibility=hidden -fvisibility-inlines-hidden" )
55endif()
56
57if(UNIX AND NOT APPLE)
58  target_link_options( {{ name }} PRIVATE "LINKER:--allow-multiple-definition")
59endif()
60
61if(APPLE)
62  target_link_libraries( {{ name }} PRIVATE "-undefined dynamic_lookup")
63endif()
64