format cmake files (#975)
* format cmake files * update format.sh * fix linker flags for emscripten * update readme * use gersemi * actual format * should be public instead of interface * make test work without download * simplification * format
This commit is contained in:
@@ -0,0 +1,2 @@
|
||||
line_length: 80
|
||||
indent: 2
|
||||
@@ -22,3 +22,12 @@ jobs:
|
||||
with:
|
||||
options: "--check --verbose"
|
||||
src: "./bindings/python/examples"
|
||||
- uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.12'
|
||||
cache: 'pip'
|
||||
- name: "gersemi cmake check"
|
||||
run: |
|
||||
pip3 install gersemi
|
||||
./scripts/gersemi-check.sh
|
||||
|
||||
|
||||
+156
-89
@@ -26,32 +26,54 @@ set(CMAKE_VERBOSE_MAKEFILE ON)
|
||||
set(MANIFOLD_VERSION_MAJOR 2)
|
||||
set(MANIFOLD_VERSION_MINOR 5)
|
||||
set(MANIFOLD_VERSION_PATCH 1)
|
||||
set(MANIFOLD_VERSION "${MANIFOLD_VERSION_MAJOR}.${MANIFOLD_VERSION_MINOR}.${MANIFOLD_VERSION_PATCH}")
|
||||
set(
|
||||
MANIFOLD_VERSION
|
||||
"${MANIFOLD_VERSION_MAJOR}.${MANIFOLD_VERSION_MINOR}.${MANIFOLD_VERSION_PATCH}"
|
||||
)
|
||||
|
||||
# Correct MANIFOLD_PAR values to on/off (previous NONE/TBB values should still
|
||||
# work this way)
|
||||
if (DEFINED MANIFOLD_PAR)
|
||||
if ("${MANIFOLD_PAR}" STREQUAL "" OR "${MANIFOLD_PAR}" STREQUAL "NONE" OR "${MANIFOLD_PAR}" STREQUAL "OFF")
|
||||
if(DEFINED MANIFOLD_PAR)
|
||||
if(
|
||||
"${MANIFOLD_PAR}" STREQUAL ""
|
||||
OR "${MANIFOLD_PAR}" STREQUAL "NONE"
|
||||
OR "${MANIFOLD_PAR}" STREQUAL "OFF"
|
||||
)
|
||||
set(MANIFOLD_PAR OFF)
|
||||
else()
|
||||
set(MANIFOLD_PAR ON)
|
||||
endif ()
|
||||
endif ()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Primary user facing options
|
||||
option(MANIFOLD_CROSS_SECTION "Build CrossSection for 2D support" ON)
|
||||
option(MANIFOLD_DEBUG "Enable debug tracing/timing" OFF)
|
||||
option(MANIFOLD_DOWNLOADS "Allow Manifold build to download missing dependencies" ON)
|
||||
option(
|
||||
MANIFOLD_DOWNLOADS
|
||||
"Allow Manifold build to download missing dependencies"
|
||||
ON
|
||||
)
|
||||
option(MANIFOLD_EXCEPTIONS "Build manifold with exception enabled" ON)
|
||||
option(MANIFOLD_EXPORT "Build mesh export (via assimp) utility library" OFF)
|
||||
option(MANIFOLD_FUZZ "Enable fuzzing tests" OFF) # fuzztest is a rather large dependency
|
||||
option(MANIFOLD_PAR "Enable Parallel backend" OFF)
|
||||
option(MANIFOLD_TEST "Enable testing suite" ON)
|
||||
option(BUILD_SHARED_LIBS "Build shared library" ON)
|
||||
include(CMakeDependentOption)
|
||||
cmake_dependent_option(MANIFOLD_CBIND "Build C (FFI) bindings" ON "MANIFOLD_CROSS_SECTION" OFF)
|
||||
cmake_dependent_option(
|
||||
MANIFOLD_CBIND
|
||||
"Build C (FFI) bindings"
|
||||
ON
|
||||
"MANIFOLD_CROSS_SECTION"
|
||||
OFF
|
||||
)
|
||||
option(MANIFOLD_PYBIND "Build python bindings" OFF)
|
||||
cmake_dependent_option(MANIFOLD_JSBIND "Build js binding" ON "EMSCRIPTEN" OFF)
|
||||
cmake_dependent_option(
|
||||
MANIFOLD_JSBIND
|
||||
"Build js binding"
|
||||
ON
|
||||
"EMSCRIPTEN"
|
||||
OFF
|
||||
)
|
||||
|
||||
# Set some option values in the CMake cache
|
||||
if(NOT MANIFOLD_FLAGS)
|
||||
@@ -59,7 +81,6 @@ if(NOT MANIFOLD_FLAGS)
|
||||
endif()
|
||||
set(MANIFOLD_FLAGS "" CACHE STRING "Manifold compiler flags")
|
||||
|
||||
|
||||
# Development options
|
||||
option(TRACY_ENABLE "Use tracy profiling" OFF)
|
||||
option(TRACY_MEMORY_USAGE "Track memory allocation with tracy (expensive)" OFF)
|
||||
@@ -68,6 +89,10 @@ mark_as_advanced(TRACY_ENABLE)
|
||||
mark_as_advanced(TRACY_MEMORY_USAGE)
|
||||
mark_as_advanced(BUILD_TEST_CGAL)
|
||||
|
||||
# fuzztest is a rather large dependency
|
||||
option(MANIFOLD_FUZZ "Enable fuzzing tests" OFF)
|
||||
mark_as_advanced(MANIFOLD_FUZZ)
|
||||
|
||||
# Define some paths for CMake
|
||||
include(GNUInstallDirs)
|
||||
|
||||
@@ -77,23 +102,23 @@ set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||
# Various Compiler Flags
|
||||
if(MANIFOLD_FUZZ)
|
||||
if(NOT CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
||||
message(FATAL_ERROR "fuzztest only supports clang" )
|
||||
message(FATAL_ERROR "fuzztest only supports clang")
|
||||
endif()
|
||||
# we should enable debug checks
|
||||
set(MANIFOLD_DEBUG ON)
|
||||
# enable fuzztest fuzzing mode
|
||||
set(FUZZTEST_FUZZING_MODE ON)
|
||||
# address sanitizer required
|
||||
set(CMAKE_CXX_FLAGS "$CMAKE_CXX_FLAGS -fsanitize=address")
|
||||
list(APPEND CMAKE_CXX_FLAGS -fsanitize=address)
|
||||
endif()
|
||||
|
||||
if(TRACY_ENABLE)
|
||||
option(CMAKE_BUILD_TYPE "Build type" RelWithDebInfo)
|
||||
if(TRACY_MEMORY_USAGE)
|
||||
set(MANIFOLD_FLAGS ${MANIFOLD_FLAGS} -DTRACY_MEMORY_USAGE)
|
||||
list(APPEND MANIFOLD_FLAGS -DTRACY_MEMORY_USAGE)
|
||||
endif()
|
||||
if(NOT MSVC)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-omit-frame-pointer")
|
||||
list(APPEND CMAKE_CXX_FLAGS -fno-omit-frame-pointer)
|
||||
endif()
|
||||
else()
|
||||
option(CMAKE_BUILD_TYPE "Build type" Release)
|
||||
@@ -102,11 +127,14 @@ endif()
|
||||
if(EMSCRIPTEN)
|
||||
message("Building for Emscripten")
|
||||
if(MANIFOLD_EXCEPTIONS)
|
||||
set(MANIFOLD_FLAGS -fexceptions -D_LIBCUDACXX_HAS_THREAD_API_EXTERNAL -D_LIBCUDACXX_HAS_THREAD_API_CUDA)
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -sALLOW_MEMORY_GROWTH=1 -fexceptions -sDISABLE_EXCEPTION_CATCHING=0")
|
||||
list(APPEND MANIFOLD_FLAGS -fexceptions)
|
||||
string(
|
||||
APPEND
|
||||
CMAKE_EXE_LINKER_FLAGS
|
||||
"-sALLOW_MEMORY_GROWTH=1 -fexceptions -sDISABLE_EXCEPTION_CATCHING=0 "
|
||||
)
|
||||
else()
|
||||
set(MANIFOLD_FLAGS -D_LIBCUDACXX_HAS_THREAD_API_EXTERNAL -D_LIBCUDACXX_HAS_THREAD_API_CUDA)
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -sALLOW_MEMORY_GROWTH=1")
|
||||
string(APPEND CMAKE_EXE_LINKER_FLAGS "-sALLOW_MEMORY_GROWTH=1 ")
|
||||
endif()
|
||||
set(MANIFOLD_PYBIND OFF)
|
||||
set(BUILD_SHARED_LIBS OFF)
|
||||
@@ -114,32 +142,48 @@ endif()
|
||||
|
||||
if(CMAKE_EXPORT_COMPILE_COMMANDS AND NOT EMSCRIPTEN)
|
||||
# for nixos
|
||||
set(CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES
|
||||
${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES})
|
||||
set(
|
||||
CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES
|
||||
${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES}
|
||||
)
|
||||
endif()
|
||||
|
||||
if (MSVC)
|
||||
set(MANIFOLD_FLAGS ${MANIFOLD_FLAGS} /DNOMINMAX /bigobj)
|
||||
if(MSVC)
|
||||
list(APPEND MANIFOLD_FLAGS /DNOMINMAX /bigobj)
|
||||
else()
|
||||
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||
set(WARNING_FLAGS -Wall -Wno-unused -Wno-array-bounds
|
||||
-Wno-stringop-overflow -Wno-alloc-size-larger-than)
|
||||
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||
list(
|
||||
APPEND
|
||||
WARNING_FLAGS
|
||||
-Wall
|
||||
-Wno-unused
|
||||
-Wno-array-bounds
|
||||
-Wno-stringop-overflow
|
||||
-Wno-alloc-size-larger-than
|
||||
)
|
||||
else()
|
||||
set(WARNING_FLAGS -Wall -Wno-unused -Wno-shorten-64-to-32)
|
||||
list(APPEND WARNING_FLAGS -Wall -Wno-unused -Wno-shorten-64-to-32)
|
||||
endif()
|
||||
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
||||
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||
set(WARNING_FLAGS ${WARNING_FLAGS} -Wno-format)
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
||||
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||
list(APPEND WARNING_FLAGS -Wno-format)
|
||||
endif()
|
||||
else()
|
||||
set(WARNING_FLAGS ${WARNING_FLAGS} -Werror)
|
||||
list(APPEND WARNING_FLAGS -Werror)
|
||||
endif()
|
||||
set(MANIFOLD_FLAGS ${MANIFOLD_FLAGS} ${WARNING_FLAGS})
|
||||
list(APPEND MANIFOLD_FLAGS ${WARNING_FLAGS})
|
||||
endif()
|
||||
|
||||
if(CODE_COVERAGE AND NOT MSVC)
|
||||
set(COVERAGE_FLAGS -coverage -fno-inline-small-functions -fkeep-inline-functions -fkeep-static-functions)
|
||||
set(MANIFOLD_FLAGS ${MANIFOLD_FLAGS} ${COVERAGE_FLAGS})
|
||||
list(
|
||||
APPEND
|
||||
COVERAGE_FLAGS
|
||||
-coverage
|
||||
-fno-inline-small-functions
|
||||
-fkeep-inline-functions
|
||||
-fkeep-static-functions
|
||||
)
|
||||
list(APPEND MANIFOLD_FLAGS ${COVERAGE_FLAGS})
|
||||
add_link_options("-coverage")
|
||||
endif()
|
||||
|
||||
@@ -148,28 +192,44 @@ set(CMAKE_SKIP_BUILD_RPATH FALSE)
|
||||
set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
|
||||
set(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR})
|
||||
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
|
||||
list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR} isSystemDir)
|
||||
list(
|
||||
FIND
|
||||
CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES
|
||||
${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}
|
||||
isSystemDir
|
||||
)
|
||||
if("${isSystemDir}" STREQUAL "-1")
|
||||
set(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR})
|
||||
endif("${isSystemDir}" STREQUAL "-1")
|
||||
|
||||
|
||||
# Dependencies
|
||||
include(FetchContent)
|
||||
|
||||
function(logmissingdep PKG)
|
||||
if(NOT MANIFOLD_DOWNLOADS)
|
||||
if(ARGC EQUAL 3)
|
||||
set(MSG "${ARGV2} enabled, but ${PKG} was not found ")
|
||||
string(APPEND MSG "and dependency downloading is disabled. ")
|
||||
else()
|
||||
set(MSG "${PKG} not found, and dependency downloading disabled. ")
|
||||
endif()
|
||||
string(APPEND MSG "Please install ${PKG} and reconfigure.\n")
|
||||
message(FATAL_ERROR ${MSG})
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
# GLM is required in all configurations.
|
||||
find_package(glm QUIET)
|
||||
if(NOT glm_FOUND)
|
||||
if (NOT MANIFOLD_DOWNLOADS)
|
||||
message(FATAL_ERROR "glm not found, and dependency downloading disabled. Please install glm and reconfigure.\n")
|
||||
endif()
|
||||
logmissingdep("glm")
|
||||
message(STATUS "glm not found, downloading from source")
|
||||
set(GLM_BUILD_INSTALL "ON" CACHE STRING "")
|
||||
FetchContent_Declare(glm
|
||||
FetchContent_Declare(
|
||||
glm
|
||||
GIT_REPOSITORY https://github.com/g-truc/glm.git
|
||||
GIT_TAG 1.0.1
|
||||
GIT_PROGRESS TRUE
|
||||
)
|
||||
)
|
||||
FetchContent_MakeAvailable(glm)
|
||||
if(NOT EMSCRIPTEN)
|
||||
install(TARGETS glm)
|
||||
@@ -185,20 +245,18 @@ if(MANIFOLD_PAR)
|
||||
pkg_check_modules(TBB tbb)
|
||||
endif()
|
||||
if(NOT TBB_FOUND)
|
||||
if (NOT MANIFOLD_DOWNLOADS)
|
||||
message(FATAL_ERROR "Parallel mode enabled, but TBB was not found and dependency downloading is disabled. Please install TBB and reconfigure.\n")
|
||||
endif()
|
||||
|
||||
logmissingdep("TBB" , "Parallel mode")
|
||||
# TODO - this isn't recommended by the TBB upstream - should we be
|
||||
# doing it?
|
||||
message(STATUS "TBB not found, downloading from source")
|
||||
set(TBB_TEST OFF CACHE INTERNAL "" FORCE)
|
||||
set(TBB_STRICT OFF CACHE INTERNAL "" FORCE)
|
||||
FetchContent_Declare(TBB
|
||||
FetchContent_Declare(
|
||||
TBB
|
||||
GIT_REPOSITORY https://github.com/oneapi-src/oneTBB.git
|
||||
GIT_TAG v2021.11.0
|
||||
GIT_PROGRESS TRUE
|
||||
)
|
||||
GIT_TAG v2021.11.0
|
||||
GIT_PROGRESS TRUE
|
||||
)
|
||||
FetchContent_MakeAvailable(TBB)
|
||||
set_property(DIRECTORY ${tbb_SOURCE_DIR} PROPERTY EXCLUDE_FROM_ALL YES)
|
||||
# note: we do want to install tbb to the user machine when built from
|
||||
@@ -217,28 +275,36 @@ if(MANIFOLD_CROSS_SECTION)
|
||||
endif()
|
||||
if(Clipper2_FOUND)
|
||||
add_library(Clipper2 SHARED IMPORTED)
|
||||
set_property(TARGET Clipper2 PROPERTY
|
||||
IMPORTED_LOCATION ${Clipper2_LINK_LIBRARIES})
|
||||
set_property(
|
||||
TARGET Clipper2
|
||||
PROPERTY IMPORTED_LOCATION ${Clipper2_LINK_LIBRARIES}
|
||||
)
|
||||
if(WIN32)
|
||||
set_property(TARGET Clipper2 PROPERTY
|
||||
IMPORTED_IMPLIB ${Clipper2_LINK_LIBRARIES})
|
||||
set_property(
|
||||
TARGET Clipper2
|
||||
PROPERTY IMPORTED_IMPLIB ${Clipper2_LINK_LIBRARIES}
|
||||
)
|
||||
endif()
|
||||
target_include_directories(Clipper2 INTERFACE ${Clipper2_INCLUDE_DIRS})
|
||||
else()
|
||||
if (NOT MANIFOLD_DOWNLOADS)
|
||||
message(FATAL_ERROR "cross_section enabled, but Clipper2 was not found and dependency downloading is disabled. Please install Clipper2 and reconfigure.\n")
|
||||
endif()
|
||||
logmissingdep("Clipper2" , "cross_section")
|
||||
message(STATUS "clipper2 not found, downloading from source")
|
||||
set(CLIPPER2_UTILS OFF)
|
||||
set(CLIPPER2_EXAMPLES OFF)
|
||||
set(CLIPPER2_TESTS OFF)
|
||||
set(CLIPPER2_USINGZ "OFF" CACHE STRING "Preempt cache default of USINGZ (we only use 2d)")
|
||||
FetchContent_Declare(Clipper2
|
||||
set(
|
||||
CLIPPER2_USINGZ
|
||||
"OFF"
|
||||
CACHE STRING
|
||||
"Preempt cache default of USINGZ (we only use 2d)"
|
||||
)
|
||||
FetchContent_Declare(
|
||||
Clipper2
|
||||
GIT_REPOSITORY https://github.com/AngusJohnson/Clipper2.git
|
||||
GIT_TAG ff378668baae3570e9d8070aa9eb339bdd5a6aba
|
||||
GIT_PROGRESS TRUE
|
||||
SOURCE_SUBDIR CPP
|
||||
)
|
||||
)
|
||||
FetchContent_MakeAvailable(Clipper2)
|
||||
if(NOT EMSCRIPTEN)
|
||||
install(TARGETS Clipper2)
|
||||
@@ -263,17 +329,17 @@ message(STATUS "====================================")
|
||||
message(STATUS "Manifold Build Configuration Summary")
|
||||
message(STATUS "====================================")
|
||||
message(STATUS " ")
|
||||
if (MXECROSS)
|
||||
if(MXECROSS)
|
||||
message(STATUS "Environment: MXE")
|
||||
elseif (APPLE)
|
||||
elseif(APPLE)
|
||||
message(STATUS "Environment: macOS")
|
||||
elseif (WIN32)
|
||||
if (MINGW)
|
||||
elseif(WIN32)
|
||||
if(MINGW)
|
||||
message(STATUS "Environment: msys2")
|
||||
else()
|
||||
message(STATUS "Environment: Windows")
|
||||
endif()
|
||||
elseif (LINUX)
|
||||
elseif(LINUX)
|
||||
message(STATUS "Environment: Linux")
|
||||
elseif(UNIX)
|
||||
message(STATUS "Environment: Unknown Unix")
|
||||
@@ -289,7 +355,7 @@ message(STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}")
|
||||
message(STATUS "CMAKE_PREFIX_PATH: ${CMAKE_PREFIX_PATH}")
|
||||
message(STATUS "CMAKE_CXX_COMPILER_ID: ${CMAKE_CXX_COMPILER_ID}")
|
||||
message(STATUS "CMAKE_CXX_COMPILER_VERSION: ${CMAKE_CXX_COMPILER_VERSION}")
|
||||
if (APPLE)
|
||||
if(APPLE)
|
||||
message(STATUS "CMAKE_OSX_DEPLOYMENT_TARGET: ${CMAKE_OSX_DEPLOYMENT_TARGET}")
|
||||
message(STATUS "CMAKE_OSX_ARCHITECTURES: ${CMAKE_OSX_ARCHITECTURES}")
|
||||
endif()
|
||||
@@ -312,32 +378,38 @@ if(EMSCRIPTEN)
|
||||
return()
|
||||
endif()
|
||||
|
||||
|
||||
# CMake exports
|
||||
configure_file(manifoldConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/manifoldConfig.cmake @ONLY)
|
||||
configure_file(
|
||||
manifoldConfig.cmake.in
|
||||
${CMAKE_CURRENT_BINARY_DIR}/manifoldConfig.cmake
|
||||
@ONLY
|
||||
)
|
||||
include(CMakePackageConfigHelpers)
|
||||
write_basic_package_version_file(
|
||||
${CMAKE_BINARY_DIR}/cmake/manifoldConfigVersion.cmake
|
||||
VERSION ${MANIFOLD_VERSION}
|
||||
COMPATIBILITY SameMajorVersion
|
||||
)
|
||||
)
|
||||
|
||||
# Location of inputs for CMake find_package - see:
|
||||
# https://cmake.org/cmake/help/latest/command/find_package.html
|
||||
set(EXPORT_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR}/cmake)
|
||||
|
||||
install(EXPORT manifoldTargets
|
||||
install(
|
||||
EXPORT manifoldTargets
|
||||
NAMESPACE manifold::
|
||||
DESTINATION ${EXPORT_INSTALL_DIR}/manifold
|
||||
)
|
||||
install(FILES
|
||||
${CMAKE_CURRENT_BINARY_DIR}/cmake/manifoldConfigVersion.cmake
|
||||
${CMAKE_CURRENT_BINARY_DIR}/manifoldConfig.cmake
|
||||
)
|
||||
install(
|
||||
FILES
|
||||
${CMAKE_CURRENT_BINARY_DIR}/cmake/manifoldConfigVersion.cmake
|
||||
${CMAKE_CURRENT_BINARY_DIR}/manifoldConfig.cmake
|
||||
DESTINATION ${EXPORT_INSTALL_DIR}/manifold
|
||||
)
|
||||
)
|
||||
|
||||
# install public headers
|
||||
set(MANIFOLD_PUBLIC_HDRS
|
||||
set(
|
||||
MANIFOLD_PUBLIC_HDRS
|
||||
include/manifold/common.h
|
||||
include/manifold/iters.h
|
||||
include/manifold/manifold.h
|
||||
@@ -345,32 +417,27 @@ set(MANIFOLD_PUBLIC_HDRS
|
||||
include/manifold/parallel.h
|
||||
include/manifold/polygon.h
|
||||
include/manifold/vec_view.h
|
||||
)
|
||||
)
|
||||
|
||||
if (MANIFOLD_CROSS_SECTION)
|
||||
if(MANIFOLD_CROSS_SECTION)
|
||||
list(APPEND MANIFOLD_PUBLIC_HDRS include/manifold/cross_section.h)
|
||||
endif()
|
||||
|
||||
if (MANIFOLD_EXPORT)
|
||||
if(MANIFOLD_EXPORT)
|
||||
list(APPEND MANIFOLD_PUBLIC_HDRS include/manifold/meshIO.h)
|
||||
endif()
|
||||
|
||||
install(FILES ${MANIFOLD_PUBLIC_HDRS}
|
||||
install(
|
||||
FILES ${MANIFOLD_PUBLIC_HDRS}
|
||||
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/manifold
|
||||
)
|
||||
)
|
||||
|
||||
# PkgConfig file
|
||||
if(MANIFOLD_CROSS_SECTION)
|
||||
set(TEMPLATE_OPTIONAL_CLIPPER "Clipper2")
|
||||
endif()
|
||||
configure_file(manifold.pc.in ${CMAKE_CURRENT_BINARY_DIR}/manifold.pc @ONLY)
|
||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/manifold.pc
|
||||
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
||||
|
||||
|
||||
# Local Variables:
|
||||
# tab-width: 8
|
||||
# mode: cmake
|
||||
# indent-tabs-mode: t
|
||||
# End:
|
||||
# ex: shiftwidth=2 tabstop=8
|
||||
install(
|
||||
FILES ${CMAKE_CURRENT_BINARY_DIR}/manifold.pc
|
||||
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig
|
||||
)
|
||||
|
||||
@@ -161,10 +161,12 @@ Contributions are welcome! A lower barrier contribution is to simply make a PR t
|
||||
### Formatting
|
||||
|
||||
There is a formatting script `format.sh` that automatically formats everything.
|
||||
It requires clang-format 11 and black formatter for python.
|
||||
It requires clang-format, black formatter for python and [gersemi](https://github.com/BlankSpruce/gersemi) for formatting cmake files.
|
||||
|
||||
If you have clang-format installed but without clang-11, you can specify the
|
||||
clang-format executable by setting the `CLANG_FORMAT` environment variable.
|
||||
Note that our script can run with clang-format older than 18, but the GitHub
|
||||
action check may fail due to slight differences between different versions of
|
||||
clang-format. In that case, either update your clang-format version or apply the
|
||||
patch from the GitHub action log.
|
||||
|
||||
### Profiling
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
if (NOT MANIFOLD_CROSS_SECTION)
|
||||
if(NOT MANIFOLD_CROSS_SECTION)
|
||||
return()
|
||||
endif()
|
||||
|
||||
@@ -27,10 +27,3 @@ endif()
|
||||
if(EMSCRIPTEN AND MANIFOLD_JSBIND)
|
||||
add_subdirectory(wasm)
|
||||
endif()
|
||||
|
||||
# Local Variables:
|
||||
# tab-width: 8
|
||||
# mode: cmake
|
||||
# indent-tabs-mode: t
|
||||
# End:
|
||||
# ex: shiftwidth=2 tabstop=8
|
||||
|
||||
+23
-22
@@ -3,22 +3,28 @@ include_directories(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/../../include
|
||||
)
|
||||
)
|
||||
|
||||
add_library(manifoldc SHARED
|
||||
add_library(
|
||||
manifoldc
|
||||
SHARED
|
||||
manifoldc.cpp
|
||||
conv.cpp
|
||||
box.cpp
|
||||
cross.cpp
|
||||
rect.cpp
|
||||
)
|
||||
)
|
||||
|
||||
if(MSVC)
|
||||
set_target_properties(manifoldc PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON)
|
||||
set_target_properties(manifoldc PROPERTIES RUNTIME_OUTPUT_DIRECTORY
|
||||
${CMAKE_BINARY_DIR}/bin )
|
||||
set_target_properties(manifoldc PROPERTIES LIBRARY_OUTPUT_DIRECTORY
|
||||
${CMAKE_BINARY_DIR}/bin )
|
||||
set_target_properties(
|
||||
manifoldc
|
||||
PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
|
||||
)
|
||||
set_target_properties(
|
||||
manifoldc
|
||||
PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
|
||||
)
|
||||
endif()
|
||||
|
||||
if(MANIFOLD_EXPORT)
|
||||
@@ -28,22 +34,17 @@ endif()
|
||||
|
||||
target_link_libraries(manifoldc PRIVATE manifold)
|
||||
|
||||
target_include_directories(manifoldc PUBLIC
|
||||
$<INSTALL_INTERFACE:include>
|
||||
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/bindings/c/include>
|
||||
)
|
||||
target_include_directories(
|
||||
manifoldc
|
||||
PUBLIC
|
||||
$<INSTALL_INTERFACE:include>
|
||||
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/bindings/c/include>
|
||||
)
|
||||
target_compile_options(manifoldc PRIVATE ${MANIFOLD_FLAGS})
|
||||
target_compile_features(manifoldc PRIVATE cxx_std_17)
|
||||
|
||||
install(TARGETS manifoldc EXPORT manifoldTargets)
|
||||
install(FILES
|
||||
include/manifold/manifoldc.h
|
||||
include/manifold/types.h DESTINATION
|
||||
${CMAKE_INSTALL_INCLUDEDIR}/manifold)
|
||||
|
||||
# Local Variables:
|
||||
# tab-width: 8
|
||||
# mode: cmake
|
||||
# indent-tabs-mode: t
|
||||
# End:
|
||||
# ex: shiftwidth=2 tabstop=8
|
||||
install(
|
||||
FILES include/manifold/manifoldc.h include/manifold/types.h
|
||||
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/manifold
|
||||
)
|
||||
|
||||
@@ -33,22 +33,28 @@ endif()
|
||||
|
||||
execute_process(
|
||||
COMMAND "${Python_EXECUTABLE}" -m nanobind --version
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE NB_VERSION)
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
OUTPUT_VARIABLE NB_VERSION
|
||||
)
|
||||
# we are fine with 2.0.0
|
||||
if(NB_VERSION VERSION_GREATER_EQUAL 2.0.0)
|
||||
message("Found nanobind, version ${NB_VERSION}")
|
||||
execute_process(
|
||||
COMMAND "${Python_EXECUTABLE}" -m nanobind --cmake_dir
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE nanobind_ROOT)
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
OUTPUT_VARIABLE nanobind_ROOT
|
||||
)
|
||||
find_package(nanobind CONFIG REQUIRED)
|
||||
else()
|
||||
message(STATUS "nanobind not found, downloading from source")
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(nanobind
|
||||
FetchContent_Declare(
|
||||
nanobind
|
||||
GIT_REPOSITORY https://github.com/wjakob/nanobind.git
|
||||
GIT_TAG 9641bb7151f04120013b812789b3ebdfa7e7324f # v2.1.0
|
||||
GIT_TAG
|
||||
9641bb7151f04120013b812789b3ebdfa7e7324f # v2.1.0
|
||||
GIT_PROGRESS TRUE
|
||||
)
|
||||
)
|
||||
FetchContent_MakeAvailable(nanobind)
|
||||
endif()
|
||||
|
||||
@@ -57,11 +63,9 @@ if(NB_VERSION VERSION_LESS 2.1.0)
|
||||
set(MANIFOLD_PYBIND_STUBGEN OFF)
|
||||
endif()
|
||||
|
||||
nanobind_add_module(
|
||||
manifold3d
|
||||
NB_STATIC STABLE_ABI LTO
|
||||
autogen_docstrings.inl
|
||||
manifold3d.cpp)
|
||||
nanobind_add_module(manifold3d NB_STATIC STABLE_ABI LTO autogen_docstrings.inl
|
||||
manifold3d.cpp
|
||||
)
|
||||
|
||||
if(MANIFOLD_PYBIND_STUBGEN)
|
||||
nanobind_add_stub(
|
||||
@@ -71,30 +75,35 @@ if(MANIFOLD_PYBIND_STUBGEN)
|
||||
PYTHON_PATH $<TARGET_FILE_DIR:manifold3d>
|
||||
DEPENDS manifold3d
|
||||
PATTERN_FILE ${CMAKE_CURRENT_SOURCE_DIR}/stub_pattern.txt
|
||||
)
|
||||
)
|
||||
endif()
|
||||
|
||||
target_link_libraries(manifold3d PRIVATE manifold)
|
||||
target_compile_options(manifold3d PRIVATE ${MANIFOLD_FLAGS} -DMODULE_NAME=manifold3d)
|
||||
target_compile_options(
|
||||
manifold3d
|
||||
PRIVATE ${MANIFOLD_FLAGS} -DMODULE_NAME=manifold3d
|
||||
)
|
||||
target_compile_features(manifold3d PUBLIC cxx_std_17)
|
||||
set_target_properties(manifold3d PROPERTIES OUTPUT_NAME "manifold3d")
|
||||
|
||||
message(Python_EXECUTABLE = ${Python_EXECUTABLE})
|
||||
# ideally we should generate a dependency file from python...
|
||||
set(DOCSTRING_DEPS
|
||||
set(
|
||||
DOCSTRING_DEPS
|
||||
${CMAKE_SOURCE_DIR}/src/manifold.cpp
|
||||
${CMAKE_SOURCE_DIR}/src/constructors.cpp
|
||||
${CMAKE_SOURCE_DIR}/src/sort.cpp
|
||||
${CMAKE_SOURCE_DIR}/src/cross_section/cross_section.cpp
|
||||
${CMAKE_SOURCE_DIR}/src/polygon.cpp
|
||||
${CMAKE_SOURCE_DIR}/include/manifold/common.h
|
||||
)
|
||||
)
|
||||
add_custom_command(
|
||||
OUTPUT autogen_docstrings.inl
|
||||
DEPENDS ${DOCSTRING_DEPS}
|
||||
COMMAND ${Python_EXECUTABLE} ARGS ${CMAKE_CURRENT_SOURCE_DIR}/gen_docs.py
|
||||
COMMAND ${Python_EXECUTABLE}
|
||||
ARGS ${CMAKE_CURRENT_SOURCE_DIR}/gen_docs.py
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||
)
|
||||
)
|
||||
target_include_directories(manifold3d PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
|
||||
|
||||
if(SKBUILD)
|
||||
@@ -105,20 +114,12 @@ endif()
|
||||
|
||||
install(
|
||||
TARGETS manifold3d
|
||||
LIBRARY DESTINATION ${MANIFOLD_PYBIND_LIBDIR}
|
||||
COMPONENT bindings
|
||||
)
|
||||
LIBRARY DESTINATION ${MANIFOLD_PYBIND_LIBDIR} COMPONENT bindings
|
||||
)
|
||||
if(MANIFOLD_PYBIND_STUBGEN)
|
||||
install(
|
||||
FILES ${CMAKE_CURRENT_BINARY_DIR}/manifold3d.pyi
|
||||
DESTINATION ${MANIFOLD_PYBIND_LIBDIR}
|
||||
COMPONENT bindings
|
||||
)
|
||||
)
|
||||
endif()
|
||||
|
||||
# Local Variables:
|
||||
# tab-width: 8
|
||||
# mode: cmake
|
||||
# indent-tabs-mode: t
|
||||
# End:
|
||||
# ex: shiftwidth=2 tabstop=8
|
||||
|
||||
@@ -16,11 +16,23 @@ project(wasm)
|
||||
|
||||
add_executable(manifoldjs bindings.cpp)
|
||||
|
||||
set_source_files_properties(bindings.cpp PROPERTIES OBJECT_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/bindings.js)
|
||||
set_source_files_properties(
|
||||
bindings.cpp
|
||||
PROPERTIES OBJECT_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/bindings.js
|
||||
)
|
||||
target_link_libraries(manifoldjs manifold)
|
||||
target_compile_options(manifoldjs PRIVATE ${MANIFOLD_FLAGS})
|
||||
target_link_options(manifoldjs PUBLIC --pre-js ${CMAKE_CURRENT_SOURCE_DIR}/bindings.js --bind -sALLOW_TABLE_GROWTH=1
|
||||
-sEXPORTED_RUNTIME_METHODS=addFunction,removeFunction -sMODULARIZE=1 -sEXPORT_ES6=1)
|
||||
target_link_options(
|
||||
manifoldjs
|
||||
PUBLIC
|
||||
--pre-js
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/bindings.js
|
||||
--bind
|
||||
-sALLOW_TABLE_GROWTH=1
|
||||
-sEXPORTED_RUNTIME_METHODS=addFunction,removeFunction
|
||||
-sMODULARIZE=1
|
||||
-sEXPORT_ES6=1
|
||||
)
|
||||
|
||||
target_compile_features(manifoldjs PUBLIC cxx_std_17)
|
||||
set_target_properties(manifoldjs PROPERTIES OUTPUT_NAME "manifold")
|
||||
@@ -28,34 +40,35 @@ set_target_properties(manifoldjs PROPERTIES OUTPUT_NAME "manifold")
|
||||
file(MAKE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/examples/built)
|
||||
|
||||
# ensure that interface files are copied over when modified
|
||||
add_custom_target(js_deps ALL
|
||||
DEPENDS manifoldjs
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/manifold*.d.ts)
|
||||
add_custom_target(
|
||||
js_deps
|
||||
ALL
|
||||
DEPENDS manifoldjs ${CMAKE_CURRENT_SOURCE_DIR}/manifold*.d.ts
|
||||
)
|
||||
|
||||
# copy WASM build back here for publishing to npm
|
||||
add_custom_command(
|
||||
TARGET js_deps POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy
|
||||
${CMAKE_CURRENT_BINARY_DIR}/manifold.*
|
||||
${CMAKE_CURRENT_SOURCE_DIR})
|
||||
TARGET js_deps
|
||||
POST_BUILD
|
||||
COMMAND
|
||||
${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/manifold.*
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
)
|
||||
|
||||
# copy WASM build and TS declarations for Vite to package into ManifoldCAD.org
|
||||
add_custom_command(
|
||||
TARGET js_deps POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/manifold*
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/examples/built/)
|
||||
TARGET js_deps
|
||||
POST_BUILD
|
||||
COMMAND
|
||||
${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/manifold*
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/examples/built/
|
||||
)
|
||||
|
||||
# copy TS declarations to public so they can be accessed by our editor
|
||||
add_custom_command(
|
||||
TARGET js_deps POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/manifold*.d.ts
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/examples/public/)
|
||||
|
||||
# Local Variables:
|
||||
# tab-width: 8
|
||||
# mode: cmake
|
||||
# indent-tabs-mode: t
|
||||
# End:
|
||||
# ex: shiftwidth=2 tabstop=8
|
||||
TARGET js_deps
|
||||
POST_BUILD
|
||||
COMMAND
|
||||
${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/manifold*.d.ts
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/examples/public/
|
||||
)
|
||||
|
||||
+15
-10
@@ -52,21 +52,26 @@ if(BUILD_TEST_CGAL)
|
||||
find_package(CGAL REQUIRED COMPONENTS Core)
|
||||
find_package(Boost REQUIRED COMPONENTS thread)
|
||||
target_compile_definitions(perfTestCGAL PRIVATE CGAL_USE_GMPXX)
|
||||
target_link_libraries(perfTestCGAL manifold CGAL::CGAL CGAL::CGAL_Core Boost::thread)
|
||||
target_link_libraries(
|
||||
perfTestCGAL
|
||||
manifold
|
||||
CGAL::CGAL
|
||||
CGAL::CGAL_Core
|
||||
Boost::thread
|
||||
)
|
||||
target_compile_options(perfTestCGAL PRIVATE ${MANIFOLD_FLAGS})
|
||||
target_compile_features(perfTestCGAL PUBLIC cxx_std_17)
|
||||
|
||||
add_executable(testHullPerformance test_hull_performance.cpp)
|
||||
target_compile_definitions(testHullPerformance PRIVATE CGAL_USE_GMPXX)
|
||||
target_link_libraries(testHullPerformance manifold samples CGAL::CGAL CGAL::CGAL_Core Boost::thread)
|
||||
target_link_libraries(
|
||||
testHullPerformance
|
||||
manifold
|
||||
samples
|
||||
CGAL::CGAL
|
||||
CGAL::CGAL_Core
|
||||
Boost::thread
|
||||
)
|
||||
target_compile_options(testHullPerformance PRIVATE ${MANIFOLD_FLAGS})
|
||||
target_compile_features(testHullPerformance PUBLIC cxx_std_17)
|
||||
endif()
|
||||
|
||||
|
||||
# Local Variables:
|
||||
# tab-width: 8
|
||||
# mode: cmake
|
||||
# indent-tabs-mode: t
|
||||
# End:
|
||||
# ex: shiftwidth=2 tabstop=8
|
||||
|
||||
@@ -15,18 +15,18 @@ set(glm_ROOT "${_FIND_ROOT}")
|
||||
find_package(glm REQUIRED)
|
||||
set(MANIFOLD_CROSS_SECTION "@MANIFOLD_CROSS_SECTION@")
|
||||
if(MANIFOLD_CROSS_SECTION)
|
||||
set(Clipper2_ROOT "${_FIND_ROOT}")
|
||||
find_package(Clipper2 REQUIRED)
|
||||
set(Clipper2_ROOT "${_FIND_ROOT}")
|
||||
find_package(Clipper2 REQUIRED)
|
||||
endif()
|
||||
set(MANIFOLD_PAR "@MANIFOLD_PAR@")
|
||||
if(MANIFOLD_PAR STREQUAL "ON")
|
||||
find_package(TBB REQUIRED)
|
||||
if(APPLE)
|
||||
find_package(oneDPL REQUIRED)
|
||||
endif()
|
||||
find_package(TBB REQUIRED)
|
||||
if(APPLE)
|
||||
find_package(oneDPL REQUIRED)
|
||||
endif()
|
||||
endif()
|
||||
set(MANIFOLD_EXPORT "@MANIFOLD_EXPORT@")
|
||||
if(MANIFOLD_EXPORT)
|
||||
find_package(assimp REQUIRED)
|
||||
find_package(assimp REQUIRED)
|
||||
endif(MANIFOLD_EXPORT)
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/manifoldTargets.cmake")
|
||||
|
||||
+11
-14
@@ -12,29 +12,26 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
if (NOT MANIFOLD_TEST)
|
||||
if(NOT MANIFOLD_TEST)
|
||||
return()
|
||||
endif()
|
||||
|
||||
add_library(samples src/menger_sponge.cpp
|
||||
src/rounded_frame.cpp src/scallop.cpp src/tet_puzzle.cpp
|
||||
src/gyroid_module.cpp src/condensed_matter.cpp)
|
||||
add_library(
|
||||
samples
|
||||
src/menger_sponge.cpp
|
||||
src/rounded_frame.cpp
|
||||
src/scallop.cpp
|
||||
src/tet_puzzle.cpp
|
||||
src/gyroid_module.cpp
|
||||
src/condensed_matter.cpp
|
||||
)
|
||||
if(MANIFOLD_CROSS_SECTION)
|
||||
target_sources(samples PUBLIC src/bracelet.cpp src/knot.cpp)
|
||||
endif()
|
||||
|
||||
target_include_directories(samples
|
||||
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include
|
||||
)
|
||||
target_include_directories(samples PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)
|
||||
|
||||
target_link_libraries(samples PUBLIC manifold)
|
||||
|
||||
target_compile_options(samples PRIVATE ${MANIFOLD_FLAGS})
|
||||
target_compile_features(samples PUBLIC cxx_std_17)
|
||||
|
||||
# Local Variables:
|
||||
# tab-width: 8
|
||||
# mode: cmake
|
||||
# indent-tabs-mode: t
|
||||
# End:
|
||||
# ex: shiftwidth=2 tabstop=8
|
||||
|
||||
+19
-4
@@ -6,14 +6,29 @@ CLANG_FORMAT=clang-format
|
||||
fi
|
||||
|
||||
$CLANG_FORMAT -i extras/*.cpp
|
||||
$CLANG_FORMAT -i meshIO/**/*.{h,cpp}
|
||||
$CLANG_FORMAT -i samples/**/*.{h,cpp}
|
||||
$CLANG_FORMAT -i samples/*/*.{h,cpp}
|
||||
$CLANG_FORMAT -i test/*.{h,cpp}
|
||||
$CLANG_FORMAT -i bindings/*/*.cpp
|
||||
$CLANG_FORMAT -i bindings/c/include/manifold/*.h
|
||||
$CLANG_FORMAT -i bindings/wasm/*.{js,ts}
|
||||
$CLANG_FORMAT -i bindings/wasm/examples/*.{js,ts,html}
|
||||
$CLANG_FORMAT -i bindings/wasm/examples/public/*.{js,ts}
|
||||
$CLANG_FORMAT -i src/*/src/*.{h,cpp}
|
||||
$CLANG_FORMAT -i src/*/include/manifold/*.h
|
||||
$CLANG_FORMAT -i src/*.{h,cpp}
|
||||
$CLANG_FORMAT -i src/*/*.cpp
|
||||
$CLANG_FORMAT -i include/manifold/*.h
|
||||
|
||||
black bindings/python/examples/*.py
|
||||
|
||||
for f in $(find -name CMakeLists.txt); do
|
||||
# skip build directories
|
||||
if [[ $f != *build* ]]; then
|
||||
gersemi -i $f
|
||||
fi
|
||||
done
|
||||
|
||||
for f in $(find -name '*.cmake.in'); do
|
||||
# skip build directories
|
||||
if [[ $f != *build* ]]; then
|
||||
gersemi -i $f
|
||||
fi
|
||||
done
|
||||
|
||||
Executable
+25
@@ -0,0 +1,25 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
FAILED=0
|
||||
|
||||
function check() {
|
||||
if [[ $1 != *build* ]]; then
|
||||
gersemi -c $1 2> /dev/null
|
||||
if [ $? -ne 0 ]; then
|
||||
gersemi --diff $1 2> /dev/null
|
||||
FAILED=1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
for f in $(find -name CMakeLists.txt); do
|
||||
check $f
|
||||
done
|
||||
|
||||
for f in $(find -name '*.cmake.in'); do
|
||||
check $f
|
||||
done
|
||||
|
||||
if [[ $FAILED -ne 0 ]]; then
|
||||
exit 1
|
||||
fi
|
||||
+54
-52
@@ -15,7 +15,8 @@
|
||||
# For private headers
|
||||
include_directories("${CMAKE_CURRENT_SOURCE_DIR}")
|
||||
|
||||
set(MANIFOLD_SRCS
|
||||
set(
|
||||
MANIFOLD_SRCS
|
||||
boolean3.cpp
|
||||
boolean_result.cpp
|
||||
constructors.cpp
|
||||
@@ -31,9 +32,10 @@ set(MANIFOLD_SRCS
|
||||
smoothing.cpp
|
||||
sort.cpp
|
||||
subdivision.cpp
|
||||
)
|
||||
)
|
||||
|
||||
set(MANIFOLD_PRIVATE_HDRS
|
||||
set(
|
||||
MANIFOLD_PRIVATE_HDRS
|
||||
boolean3.h
|
||||
collider.h
|
||||
csg_tree.h
|
||||
@@ -47,18 +49,14 @@ set(MANIFOLD_PRIVATE_HDRS
|
||||
tri_dist.h
|
||||
utils.h
|
||||
vec.h
|
||||
)
|
||||
)
|
||||
|
||||
if(MANIFOLD_CROSS_SECTION)
|
||||
list(APPEND MANIFOLD_SRCS
|
||||
cross_section/cross_section.cpp
|
||||
)
|
||||
list(APPEND MANIFOLD_SRCS cross_section/cross_section.cpp)
|
||||
endif()
|
||||
|
||||
if(MANIFOLD_EXPORT)
|
||||
list(APPEND MANIFOLD_SRCS
|
||||
meshIO/meshIO.cpp
|
||||
)
|
||||
list(APPEND MANIFOLD_SRCS meshIO/meshIO.cpp)
|
||||
endif()
|
||||
|
||||
# Dependency libraries
|
||||
@@ -77,11 +75,12 @@ if(MANIFOLD_PAR)
|
||||
list(APPEND MANIFOLD_LIBS ${TBB_LINK_LIBRARIES})
|
||||
endif()
|
||||
endif()
|
||||
if(MANIFOLD_EXPORT)
|
||||
list(APPEND MANIFOLD_LIBS assimp::assimp)
|
||||
endif()
|
||||
|
||||
#Include directories
|
||||
set(MANIFOLD_INCLUDE_DIRS
|
||||
${CMAKE_SOURCE_DIR}/include
|
||||
)
|
||||
# Include directories
|
||||
set(MANIFOLD_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/include)
|
||||
if(TBB_INCLUDE_DIRS)
|
||||
list(APPEND MANIFOLD_INCLUDE_DIRS ${TBB_INCLUDE_DIRS})
|
||||
endif()
|
||||
@@ -90,54 +89,57 @@ add_library(manifold ${MANIFOLD_SRCS} ${MANIFOLD_PRIVATE_HDRS})
|
||||
set_property(TARGET manifold PROPERTY VERSION "${MANIFOLD_VERSION}")
|
||||
set_property(TARGET manifold PROPERTY SOVERSION ${MANIFOLD_VERSION_MAJOR})
|
||||
if(MSVC)
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON)
|
||||
set_target_properties(
|
||||
${PROJECT_NAME}
|
||||
PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON
|
||||
)
|
||||
endif()
|
||||
target_link_libraries(manifold PUBLIC ${MANIFOLD_LIBS})
|
||||
if(MANIFOLD_FLAGS)
|
||||
target_compile_options(manifold PRIVATE ${MANIFOLD_FLAGS})
|
||||
endif()
|
||||
target_include_directories(manifold PUBLIC
|
||||
$<INSTALL_INTERFACE:include>
|
||||
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/include>
|
||||
target_include_directories(
|
||||
manifold
|
||||
PUBLIC
|
||||
$<INSTALL_INTERFACE:include>
|
||||
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/include>
|
||||
PRIVATE ${MANIFOLD_INCLUDE_DIRS}
|
||||
)
|
||||
if(MANIFOLD_EXCEPTIONS)
|
||||
target_compile_options(manifold PRIVATE -DMANIFOLD_EXCEPTIONS=1)
|
||||
endif()
|
||||
if(MANIFOLD_DEBUG)
|
||||
target_compile_options(manifold PRIVATE -DMANIFOLD_DEBUG)
|
||||
endif()
|
||||
if(MANIFOLD_EXPORT)
|
||||
target_link_libraries(manifold PRIVATE assimp::assimp)
|
||||
target_compile_options(manifold PUBLIC -DMANIFOLD_EXPORT)
|
||||
endif()
|
||||
)
|
||||
|
||||
set(
|
||||
OPTIONS
|
||||
MANIFOLD_EXCEPTIONS
|
||||
MANIFOLD_DEBUG
|
||||
MANIFOLD_CROSS_SECTION
|
||||
MANIFOLD_EXPORT
|
||||
MANIFOLD_PAR
|
||||
)
|
||||
foreach(OPT IN LISTS OPTIONS)
|
||||
if(${${OPT}})
|
||||
target_compile_options(manifold PUBLIC -D${OPT})
|
||||
endif()
|
||||
endforeach()
|
||||
target_compile_features(manifold PUBLIC cxx_std_17)
|
||||
if(MANIFOLD_PAR)
|
||||
target_compile_options(manifold INTERFACE -DMANIFOLD_PAR)
|
||||
endif()
|
||||
|
||||
install(TARGETS manifold EXPORT manifoldTargets)
|
||||
|
||||
# Tracy Support
|
||||
if (MANIFOLD_DOWNLOADS)
|
||||
include(FetchContent)
|
||||
if (TRACY_ENABLE)
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(tracy
|
||||
GIT_REPOSITORY https://github.com/wolfpld/tracy.git
|
||||
GIT_TAG v0.10
|
||||
GIT_SHALLOW TRUE
|
||||
GIT_PROGRESS TRUE
|
||||
)
|
||||
FetchContent_MakeAvailable(tracy)
|
||||
target_link_libraries(manifold INTERFACE TracyClient)
|
||||
if(TRACY_ENABLE)
|
||||
if(NOT MANIFOLD_DOWNLOADS)
|
||||
message(
|
||||
WARNING
|
||||
"Downloading is disabled, but tracy requires download - skipping.\n"
|
||||
)
|
||||
return()
|
||||
endif()
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
tracy
|
||||
GIT_REPOSITORY https://github.com/wolfpld/tracy.git
|
||||
GIT_TAG v0.10
|
||||
GIT_SHALLOW TRUE
|
||||
GIT_PROGRESS TRUE
|
||||
)
|
||||
FetchContent_MakeAvailable(tracy)
|
||||
target_link_libraries(manifold INTERFACE TracyClient)
|
||||
endif()
|
||||
|
||||
|
||||
# Local Variables:
|
||||
# tab-width: 8
|
||||
# mode: cmake
|
||||
# indent-tabs-mode: t
|
||||
# End:
|
||||
# ex: shiftwidth=2 tabstop=8
|
||||
|
||||
+58
-47
@@ -12,16 +12,41 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
if (NOT MANIFOLD_TEST)
|
||||
if(NOT MANIFOLD_TEST)
|
||||
return()
|
||||
endif()
|
||||
if (NOT MANIFOLD_DOWNLOADS)
|
||||
message("Downloading is disabled, but testing requires googletest - skipping.\n")
|
||||
endif()
|
||||
|
||||
enable_testing()
|
||||
|
||||
set(SOURCE_FILES
|
||||
find_package(gtest QUIET)
|
||||
if(NOT gtest_FOUND)
|
||||
if(NOT MANIFOLD_DOWNLOADS)
|
||||
message(
|
||||
WARNING
|
||||
"Downloading is disabled, but testing requires googletest - skipping.\n"
|
||||
)
|
||||
return()
|
||||
endif()
|
||||
|
||||
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
|
||||
# Prevent installation of GTest with your project
|
||||
set(INSTALL_GTEST OFF CACHE BOOL "" FORCE)
|
||||
set(INSTALL_GMOCK OFF CACHE BOOL "" FORCE)
|
||||
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
googletest
|
||||
GIT_REPOSITORY https://github.com/google/googletest.git
|
||||
GIT_TAG v1.14.0
|
||||
GIT_SHALLOW TRUE
|
||||
GIT_PROGRESS TRUE
|
||||
FIND_PACKAGE_ARGS NAMES GTest gtest
|
||||
)
|
||||
FetchContent_MakeAvailable(googletest)
|
||||
endif()
|
||||
|
||||
set(
|
||||
SOURCE_FILES
|
||||
boolean_complex_test.cpp
|
||||
boolean_test.cpp
|
||||
hull_test.cpp
|
||||
@@ -32,7 +57,7 @@ set(SOURCE_FILES
|
||||
sdf_test.cpp
|
||||
smooth_test.cpp
|
||||
test_main.cpp
|
||||
)
|
||||
)
|
||||
|
||||
if(MANIFOLD_CROSS_SECTION)
|
||||
list(APPEND SOURCE_FILES cross_section_test.cpp)
|
||||
@@ -42,21 +67,6 @@ if(MANIFOLD_CBIND AND NOT EMSCRIPTEN)
|
||||
list(APPEND SOURCE_FILES manifoldc_test.cpp)
|
||||
endif()
|
||||
|
||||
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
|
||||
# Prevent installation of GTest with your project
|
||||
set(INSTALL_GTEST OFF CACHE BOOL "" FORCE)
|
||||
set(INSTALL_GMOCK OFF CACHE BOOL "" FORCE)
|
||||
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(googletest
|
||||
GIT_REPOSITORY https://github.com/google/googletest.git
|
||||
GIT_TAG v1.14.0
|
||||
GIT_SHALLOW TRUE
|
||||
GIT_PROGRESS TRUE
|
||||
FIND_PACKAGE_ARGS NAMES GTest gtest
|
||||
)
|
||||
FetchContent_MakeAvailable(googletest)
|
||||
|
||||
if(NOT TARGET GTest::gtest_main)
|
||||
add_library(GTest::gtest_main ALIAS gtest_main)
|
||||
endif()
|
||||
@@ -65,12 +75,13 @@ add_executable(manifold_test ${SOURCE_FILES})
|
||||
target_link_libraries(manifold_test GTest::gtest_main manifold samples)
|
||||
|
||||
if(MANIFOLD_FUZZ)
|
||||
FetchContent_Declare(fuzztest
|
||||
FetchContent_Declare(
|
||||
fuzztest
|
||||
GIT_REPOSITORY https://github.com/google/fuzztest.git
|
||||
# note that if commit hash is used, it cannot be a shallow clone
|
||||
GIT_TAG 2606e04a43e5a7730e437a849604a61f1cb0ff28
|
||||
GIT_PROGRESS TRUE
|
||||
)
|
||||
GIT_TAG 2606e04a43e5a7730e437a849604a61f1cb0ff28
|
||||
GIT_PROGRESS TRUE
|
||||
)
|
||||
FetchContent_MakeAvailable(fuzztest)
|
||||
fuzztest_setup_fuzzing_flags()
|
||||
add_executable(polygon_fuzz polygon_fuzz.cpp)
|
||||
@@ -83,14 +94,6 @@ if(MANIFOLD_CBIND AND NOT EMSCRIPTEN)
|
||||
target_link_libraries(manifold_test manifoldc)
|
||||
endif()
|
||||
|
||||
if(MANIFOLD_CROSS_SECTION)
|
||||
target_compile_options(manifold_test PUBLIC -DMANIFOLD_CROSS_SECTION)
|
||||
endif()
|
||||
|
||||
if(MANIFOLD_EXPORT)
|
||||
target_compile_options(manifold_test PUBLIC -DMANIFOLD_EXPORT)
|
||||
endif()
|
||||
|
||||
target_compile_options(manifold_test PRIVATE ${MANIFOLD_FLAGS})
|
||||
target_compile_features(manifold_test PUBLIC cxx_std_17)
|
||||
|
||||
@@ -98,21 +101,29 @@ add_test(test_all manifold_test)
|
||||
target_precompile_headers(manifold_test INTERFACE test.h)
|
||||
|
||||
if(EMSCRIPTEN)
|
||||
set_target_properties(manifold_test PROPERTIES LINK_FLAGS
|
||||
"-s ASSERTIONS=1 -s DEMANGLE_SUPPORT=1 --bind --preload-file ${CMAKE_CURRENT_SOURCE_DIR}/polygons@/polygons")
|
||||
list(
|
||||
APPEND
|
||||
EMSCRIPTEN_LINK_FLAGS
|
||||
-sASSERTIONS=1
|
||||
-sDEMANGLE_SUPPORT=1
|
||||
--bind
|
||||
--preload-file
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/polygons@/polygons
|
||||
)
|
||||
list(JOIN EMSCRIPTEN_LINK_FLAGS " " EMSCRIPTEN_LINK_FLAGS)
|
||||
set_target_properties(
|
||||
manifold_test
|
||||
PROPERTIES LINK_FLAGS ${EMSCRIPTEN_LINK_FLAGS}
|
||||
)
|
||||
endif()
|
||||
|
||||
if(MSVC)
|
||||
set_target_properties(manifold_test PROPERTIES RUNTIME_OUTPUT_DIRECTORY
|
||||
${CMAKE_BINARY_DIR}/bin )
|
||||
set_target_properties(manifold_test PROPERTIES LIBRARY_OUTPUT_DIRECTORY
|
||||
${CMAKE_BINARY_DIR}/bin )
|
||||
set_target_properties(
|
||||
manifold_test
|
||||
PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
|
||||
)
|
||||
set_target_properties(
|
||||
manifold_test
|
||||
PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
|
||||
)
|
||||
endif()
|
||||
|
||||
|
||||
# Local Variables:
|
||||
# tab-width: 8
|
||||
# mode: cmake
|
||||
# indent-tabs-mode: t
|
||||
# End:
|
||||
# ex: shiftwidth=2 tabstop=8
|
||||
|
||||
Reference in New Issue
Block a user