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