|
1 | 1 | #Tiny Object Loader Cmake configuration file. |
2 | 2 | #This configures the Cmake system with multiple properties, depending |
3 | 3 | #on the platform and configuration it is set to build in. |
4 | | -cmake_minimum_required(VERSION 3.2) |
5 | | -project(tinyobjloader) |
| 4 | +cmake_minimum_required(VERSION 3.16) |
| 5 | +project(tinyobjloader CXX) |
6 | 6 | set(TINYOBJLOADER_SOVERSION 2) |
7 | 7 | set(TINYOBJLOADER_VERSION 2.0.0-rc.10) |
| 8 | +set(PY_TARGET "aaa") |
8 | 9 |
|
9 | 10 | #optional double precision support |
10 | 11 | option(TINYOBJLOADER_USE_DOUBLE "Build library with double precision instead of single (float)" OFF) |
| 12 | +option(TINYOBJLOADER_WITH_PYTHON "Build Python module(for developer). Use pyproject.toml/setup.py to build Python module for end-users" OFF) |
| 13 | +option(TINYOBJLOADER_PREFER_LOCAL_PYTHON_INSTALLATION |
| 14 | + "Prefer locally-installed Python interpreter than system or conda/brew installed Python. Please specify your Python interpreter with `Python3_EXECUTABLE` cmake option if you enable this option." |
| 15 | + OFF) |
| 16 | + |
| 17 | +list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) |
| 18 | +list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/sanitizers) |
| 19 | +find_package(Sanitizers) # Address sanitizer (-DSANITIZE_ADDRESS=ON) |
| 20 | + |
11 | 21 |
|
12 | 22 | if(TINYOBJLOADER_USE_DOUBLE) |
13 | 23 | set(LIBRARY_NAME ${PROJECT_NAME}_double) |
14 | 24 | else() |
15 | 25 | set(LIBRARY_NAME ${PROJECT_NAME}) |
16 | 26 | endif() |
17 | 27 |
|
18 | | - |
19 | 28 | #Folder Shortcuts |
20 | 29 | set(TINYOBJLOADEREXAMPLES_DIR ${CMAKE_CURRENT_SOURCE_DIR}/examples) |
21 | 30 |
|
@@ -46,7 +55,36 @@ set(TINYOBJLOADER_RUNTIME_DIR ${CMAKE_INSTALL_BINDIR}) |
46 | 55 |
|
47 | 56 | option(TINYOBJLOADER_BUILD_TEST_LOADER "Build Example Loader Application" OFF) |
48 | 57 |
|
| 58 | +set(CMAKE_CXX_STANDARD 11) |
| 59 | +set(CMAKE_CXX_STANDARD_REQUIRED ON) |
| 60 | +set(CMAKE_CXX_EXTENSIONS OFF) |
| 61 | + |
| 62 | +# Build standalone .so for Python binding(for developer) |
| 63 | +if (TINYOBJLOADER_WITH_PYTHON) |
| 64 | + |
| 65 | + if(TINYOBJLOADER_PREFER_LOCAL_PYTHON_INSTALLATION) |
| 66 | + #message(STATUS "Local Python") |
| 67 | + set(Python3_FIND_FRAMEWORK NEVER) # Do not search framework python |
| 68 | + set(Python3_FIND_STRATEGY LOCATION) |
| 69 | + set(Python3_FIND_REGISTRY NEVER) # Windows only |
| 70 | + else() |
| 71 | + set(Python3_FIND_FRAMEWORK LAST |
| 72 | + )# Prefer Brew/Conda to Apple framework python |
| 73 | + endif() |
| 74 | + |
| 75 | + find_package( |
| 76 | + Python3 |
| 77 | + COMPONENTS Interpreter Development |
| 78 | + REQUIRED) |
| 79 | + |
| 80 | + find_package(pybind11 CONFIG REQUIRED) |
| 81 | + |
| 82 | +endif() |
| 83 | + |
| 84 | + |
| 85 | + |
49 | 86 | add_library(${LIBRARY_NAME} ${tinyobjloader-Source}) |
| 87 | +add_sanitizers(${LIBRARY_NAME}) |
50 | 88 |
|
51 | 89 | if(BUILD_SHARED_LIBS) |
52 | 90 | set_target_properties(${LIBRARY_NAME} PROPERTIES |
@@ -85,6 +123,24 @@ if(TINYOBJLOADER_BUILD_OBJ_STICHER) |
85 | 123 | ) |
86 | 124 | endif() |
87 | 125 |
|
| 126 | +if (TINYOBJLOADER_WITH_PYTHON) |
| 127 | + # pybind11 method: |
| 128 | + pybind11_add_module(${PY_TARGET} ${CMAKE_SOURCE_DIR}/python/bindings.cc ) |
| 129 | + |
| 130 | + add_sanitizers(${PY_TARGET}) |
| 131 | + set_target_properties(${PY_TARGET} PROPERTIES OUTPUT_NAME "tinyobjloader") |
| 132 | + |
| 133 | + # copy .so to jdepp/ |
| 134 | + add_custom_command( |
| 135 | + TARGET ${PY_TARGET} |
| 136 | + POST_BUILD |
| 137 | + COMMAND "${CMAKE_COMMAND}" -E copy "$<TARGET_FILE:${PY_TARGET}>" |
| 138 | + "${CMAKE_SOURCE_DIR}/python/$<TARGET_FILE_NAME:${PY_TARGET}>" |
| 139 | + COMMENT "copying tinyobjloader native python module file to python/" |
| 140 | + VERBATIM) |
| 141 | + |
| 142 | +endif() |
| 143 | + |
88 | 144 | #Write CMake package config files |
89 | 145 | include(CMakePackageConfigHelpers) |
90 | 146 |
|
|
0 commit comments