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
|
From: =?utf-8?q?Timo_R=C3=B6hling?= <timo.roehling@fkie.fraunhofer.de>
Date: Fri, 13 Mar 2020 21:57:20 +0100
Subject: Build both single and double precision version
---
CMakeLists.txt | 53 ++++++++++++++++++++++++++-----------------
tinyobjloader-config.cmake.in | 7 +++++-
tinyobjloader.pc.in | 4 ++--
3 files changed, 40 insertions(+), 24 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5226a95..c0ae54c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -7,8 +7,6 @@ set(TINYOBJLOADER_SOVERSION 2rc13)
set(TINYOBJLOADER_VERSION 2.0.0-rc.13)
set(PY_TARGET "pytinyobjloader")
-#optional double precision support
-option(TINYOBJLOADER_USE_DOUBLE "Build library with double precision instead of single (float)" OFF)
option(TINYOBJLOADER_WITH_PYTHON "Build Python module(for developer). Use pyproject.toml/setup.py to build Python module for end-users" OFF)
option(TINYOBJLOADER_PREFER_LOCAL_PYTHON_INSTALLATION
"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."
@@ -19,11 +17,6 @@ list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/sanitizers)
find_package(Sanitizers) # Address sanitizer (-DSANITIZE_ADDRESS=ON)
-if(TINYOBJLOADER_USE_DOUBLE)
- set(LIBRARY_NAME ${PROJECT_NAME}_double)
-else()
- set(LIBRARY_NAME ${PROJECT_NAME})
-endif()
#Folder Shortcuts
set(TINYOBJLOADEREXAMPLES_DIR ${CMAKE_CURRENT_SOURCE_DIR}/examples)
@@ -83,38 +76,49 @@ endif()
-add_library(${LIBRARY_NAME} ${tinyobjloader-Source})
-add_sanitizers(${LIBRARY_NAME})
+add_library(${PROJECT_NAME} ${tinyobjloader-Source})
+add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
+add_library(${PROJECT_NAME}_double ${tinyobjloader-Source})
+add_library(${PROJECT_NAME}::${PROJECT_NAME}_double ALIAS ${PROJECT_NAME}_double)
if(BUILD_SHARED_LIBS)
- set_target_properties(${LIBRARY_NAME} PROPERTIES
+ set_target_properties(${PROJECT_NAME} ${PROJECT_NAME}_double PROPERTIES
SOVERSION ${TINYOBJLOADER_SOVERSION}
WINDOWS_EXPORT_ALL_SYMBOLS ON
)
+else()
+ set_target_properties(${PROJECT_NAME} ${PROJECT_NAME}_double PROPERTIES
+ POSITION_INDEPENDENT_CODE ON
+ )
endif()
-if(TINYOBJLOADER_USE_DOUBLE)
- target_compile_definitions(${LIBRARY_NAME} PUBLIC TINYOBJLOADER_USE_DOUBLE)
-endif()
+target_compile_definitions(${PROJECT_NAME}_double PUBLIC TINYOBJLOADER_USE_DOUBLE)
-set_target_properties(${LIBRARY_NAME} PROPERTIES VERSION ${TINYOBJLOADER_VERSION})
+set_target_properties(${PROJECT_NAME} ${PROJECT_NAME}_double PROPERTIES
+ VERSION ${TINYOBJLOADER_VERSION}
+ VISIBILITY_INLINES_HIDDEN ON
+)
-target_include_directories(${LIBRARY_NAME} INTERFACE
+target_include_directories(${PROJECT_NAME} INTERFACE
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
+ $<INSTALL_INTERFACE:${TINYOBJLOADER_INCLUDE_DIR}>
+ )
+target_include_directories(${PROJECT_NAME}_double INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<INSTALL_INTERFACE:${TINYOBJLOADER_INCLUDE_DIR}>
)
-export(TARGETS ${LIBRARY_NAME} FILE ${PROJECT_NAME}-targets.cmake)
+export(TARGETS ${PROJECT_NAME} ${PROJECT_NAME}_double FILE ${PROJECT_NAME}-targets.cmake)
if(TINYOBJLOADER_BUILD_TEST_LOADER)
add_executable(test_loader ${tinyobjloader-Example-Source})
- target_link_libraries(test_loader ${LIBRARY_NAME})
+ target_link_libraries(test_loader ${PROJECT_NAME})
endif()
option(TINYOBJLOADER_BUILD_OBJ_STICHER "Build OBJ Sticher Application" OFF)
if(TINYOBJLOADER_BUILD_OBJ_STICHER)
add_executable(obj_sticher ${tinyobjloader-examples-objsticher})
- target_link_libraries(obj_sticher ${LIBRARY_NAME})
+ target_link_libraries(obj_sticher ${PROJECT_NAME})
install(TARGETS
obj_sticher
@@ -163,7 +167,13 @@ write_basic_package_version_file(${PROJECT_NAME}-config-version.cmake
)
#pkg-config file
+set(LIBRARY_NAME ${PROJECT_NAME})
+set(TINYOBJLOADER_USE_DOUBLE)
+configure_file(${PROJECT_NAME}.pc.in ${LIBRARY_NAME}.pc @ONLY)
+set(LIBRARY_NAME ${PROJECT_NAME}_double)
+set(TINYOBJLOADER_USE_DOUBLE " -DTINYOBJLOADER_USE_DOUBLE")
configure_file(${PROJECT_NAME}.pc.in ${LIBRARY_NAME}.pc @ONLY)
+unset(LIBRARY_NAME)
if(DEFINED ENV{LIB_FUZZING_ENGINE})
add_executable(fuzz_ParseFromString fuzzer/fuzz_ParseFromString.cc)
@@ -172,7 +182,7 @@ endif()
#Installation
install(TARGETS
- ${LIBRARY_NAME}
+ ${PROJECT_NAME} ${PROJECT_NAME}_double
EXPORT ${PROJECT_NAME}-targets
DESTINATION
${TINYOBJLOADER_LIBRARY_DIR}
@@ -184,7 +194,7 @@ install(TARGETS
install(EXPORT
${PROJECT_NAME}-targets
NAMESPACE
- tinyobjloader::
+ ${PROJECT_NAME}::
DESTINATION
${TINYOBJLOADER_CMAKE_DIR}
)
@@ -205,7 +215,8 @@ install(FILES
${TINYOBJLOADER_CMAKE_DIR}
)
install(FILES
- "${CMAKE_CURRENT_BINARY_DIR}/${LIBRARY_NAME}.pc"
+ "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc"
+ "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}_double.pc"
DESTINATION
${TINYOBJLOADER_PKGCONFIG_DIR}
)
diff --git a/tinyobjloader-config.cmake.in b/tinyobjloader-config.cmake.in
index 91f01b0..43b75d0 100644
--- a/tinyobjloader-config.cmake.in
+++ b/tinyobjloader-config.cmake.in
@@ -4,6 +4,11 @@ set(TINYOBJLOADER_VERSION "@TINYOBJLOADER_VERSION@")
set_and_check(TINYOBJLOADER_INCLUDE_DIRS "@PACKAGE_TINYOBJLOADER_INCLUDE_DIR@")
set_and_check(TINYOBJLOADER_LIBRARY_DIRS "@PACKAGE_TINYOBJLOADER_LIBRARY_DIR@")
-set(TINYOBJLOADER_LIBRARIES @LIBRARY_NAME@)
+set(TINYOBJLOADER_LIBRARIES @PROJECT_NAME@::@PROJECT_NAME@)
include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@-targets.cmake")
+
+include(FindPackageHandleStandardArgs)
+set(@PROJECT_NAME@_CONFIG ${CMAKE_CURRENT_LIST_FILE})
+find_package_handle_standard_args(@PROJECT_NAME@ CONFIG_MODE)
+
diff --git a/tinyobjloader.pc.in b/tinyobjloader.pc.in
index 048a287..ce4f685 100644
--- a/tinyobjloader.pc.in
+++ b/tinyobjloader.pc.in
@@ -7,9 +7,9 @@ exec_prefix=${prefix}
libdir=${prefix}/@TINYOBJLOADER_LIBRARY_DIR@
includedir=${prefix}/@TINYOBJLOADER_INCLUDE_DIR@
-Name: @PROJECT_NAME@
+Name: @LIBRARY_NAME@
Description: Tiny but powerful single file wavefront obj loader
URL: https://syoyo.github.io/tinyobjloader/
Version: @TINYOBJLOADER_VERSION@
Libs: -L${libdir} -l@LIBRARY_NAME@
-Cflags: -I${includedir}
+Cflags: -I${includedir}@TINYOBJLOADER_USE_DOUBLE@
|