Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
536d566b61 |
@@ -0,0 +1,34 @@
|
||||
version: 1.0.{build}
|
||||
os: Visual Studio 2017
|
||||
platform: x64
|
||||
clone_folder: C:\projects\libigl
|
||||
shallow_clone: true
|
||||
branches:
|
||||
only:
|
||||
- master
|
||||
- dev
|
||||
environment:
|
||||
matrix:
|
||||
- CONFIG: Debug
|
||||
BOOST_ROOT: C:/Libraries/boost_1_65_1
|
||||
- CONFIG: Release
|
||||
BOOST_ROOT: C:/Libraries/boost_1_65_1
|
||||
build:
|
||||
parallel: true
|
||||
build_script:
|
||||
- cd c:\projects\libigl
|
||||
# Tutorials and tests
|
||||
- mkdir build
|
||||
- cd build
|
||||
- cmake -DCMAKE_BUILD_TYPE=%CONFIG%
|
||||
-DLIBIGL_WITH_CGAL=ON
|
||||
-DLIBIGL_WITH_COMISO=OFF
|
||||
-G "Visual Studio 15 2017 Win64"
|
||||
../
|
||||
- set MSBuildLogger="C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll"
|
||||
- set MSBuildOptions=/v:m /m /p:BuildInParallel=true /p:Configuration=%CONFIG% /logger:%MSBuildLogger%
|
||||
- msbuild %MSBuildOptions% libigl.sln
|
||||
|
||||
test_script:
|
||||
- set CTEST_OUTPUT_ON_FAILURE=1
|
||||
- ctest -C %CONFIG% --verbose --output-on-failure -j 2
|
||||
@@ -1,20 +0,0 @@
|
||||
# Set the default behavior, in case people don't have core.autocrlf set.
|
||||
* text=auto
|
||||
|
||||
# Explicitly declare text files you want to always be normalized and converted
|
||||
# to native line endings on checkout.
|
||||
*.tex text
|
||||
*.bib text
|
||||
*.svg text
|
||||
*.py text
|
||||
*.vbs text
|
||||
*.cpp text
|
||||
*.hpp text
|
||||
Makefile text
|
||||
|
||||
# Declare files that will always have CRLF line endings on checkout.
|
||||
*.sln text eol=crlf
|
||||
|
||||
# Denote all files that are truly binary and should not be modified.
|
||||
*.png binary
|
||||
*.jpg binary
|
||||
@@ -1,18 +0,0 @@
|
||||
---
|
||||
name: 🐛 Bug Report
|
||||
about: If something isn't working as expected
|
||||
title: ''
|
||||
labels: bug, pending verification
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
#### Describe the bug
|
||||
<!-- A clear and concise description of what the bug is. -->
|
||||
|
||||
#### Platform
|
||||
<!-- Check all that apply (change to `[x]`) -->
|
||||
|
||||
- [ ] Windows
|
||||
- [ ] macOS
|
||||
- [ ] Linux
|
||||
@@ -1,26 +0,0 @@
|
||||
---
|
||||
name: 😱 Compilation issue
|
||||
about: Report a problem when compiling the code
|
||||
title: ''
|
||||
labels: 'compilation'
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
#### Describe your issue
|
||||
<!-- Be sure to include any log file that may help use diagnose the issue -->
|
||||
|
||||
|
||||
#### Checklist
|
||||
<!-- Check all that apply (change to `[x]`) -->
|
||||
|
||||
- [ ] I have read the [bug report](https://libigl.github.io/bug-report/) page
|
||||
- [ ] CMake issue: I have tried with a fresh clone/empty build directory
|
||||
|
||||
#### Platform
|
||||
<!-- Check all that apply (change to `[x]`) -->
|
||||
|
||||
- [ ] Windows
|
||||
- [ ] macOS Intel
|
||||
- [ ] macOS Arm (e.g., M1, M2)
|
||||
- [ ] Linux
|
||||
@@ -1,8 +0,0 @@
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: 🚀 Feature Request
|
||||
url: https://github.com/libigl/libigl/discussions/new?category_id=32617689
|
||||
about: Share ideas for new features
|
||||
- name: ❓ Ask a Question
|
||||
url: https://github.com/libigl/libigl/discussions/new?category_id=32617688
|
||||
about: Ask the community for help
|
||||
@@ -0,0 +1,11 @@
|
||||
#### Describe your issue
|
||||
|
||||
...
|
||||
|
||||
#### Check all that apply (change to `[x]`)
|
||||
- [ ] Windows
|
||||
- [ ] Mac OS X
|
||||
- [ ] Linux
|
||||
- [ ] I have tried the `dev` branch and the problem persists
|
||||
|
||||
See https://libigl.github.io/CONTRIBUTING/#bugreport for more tips.
|
||||
@@ -1,12 +1,8 @@
|
||||
Fixes # .
|
||||
|
||||
<!-- Describe your changes and what you've already done to test it. -->
|
||||
|
||||
|
||||
#### Checklist
|
||||
<!-- Check all that apply (change to `[x]`) -->
|
||||
[Describe your changes and what you've already done to test it.]
|
||||
|
||||
#### Check all that apply (change to `[x]`)
|
||||
- [ ] All changes meet [libigl style-guidelines](https://libigl.github.io/style-guidelines/).
|
||||
- [ ] Adds new .cpp file.
|
||||
- [ ] Adds corresponding unit test.
|
||||
- [ ] Adds corresponding python binding.
|
||||
- [ ] This is a minor change.
|
||||
|
||||
@@ -1,177 +0,0 @@
|
||||
name: Build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- stable
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
- stable
|
||||
|
||||
env:
|
||||
CTEST_OUTPUT_ON_FAILURE: ON
|
||||
CTEST_PARALLEL_LEVEL: 2
|
||||
|
||||
jobs:
|
||||
####################
|
||||
# Linux / macOS
|
||||
####################
|
||||
|
||||
Unix:
|
||||
name: ${{ matrix.os }} ${{ fromJSON('["Header-Only", "Static"]')[matrix.build-params.static == 'ON'] }} ${{ matrix.build-params.tutorials == 'ON' && 'tutorial' || ''}} ${{ matrix.build-params.tests == 'ON' && 'tests' || ''}} ${{ matrix.config }}
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [ubuntu-24.04, macos-latest]
|
||||
config: [Release]
|
||||
build-params: [ {static: ON, tutorials: ON, tests: ON }, {static: OFF, tutorials: OFF, tests: ON }, {static: OFF, tutorials: ON, tests: OFF }]
|
||||
env:
|
||||
IGL_NUM_THREADS: 1 # See https://github.com/libigl/libigl/pull/996
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v1
|
||||
with:
|
||||
fetch-depth: 10
|
||||
|
||||
- name: Dependencies (Linux)
|
||||
if: runner.os == 'Linux'
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install \
|
||||
libblas-dev \
|
||||
libglu1-mesa-dev \
|
||||
liblapack-dev \
|
||||
xorg-dev \
|
||||
ccache
|
||||
|
||||
- name: Dependencies (macOS)
|
||||
if: runner.os == 'macOS'
|
||||
run: |
|
||||
HOMEBREW_NO_AUTO_UPDATE=1 brew install ccache
|
||||
|
||||
- name: Setup Xcode version
|
||||
if: runner.os == 'macOS'
|
||||
uses: maxim-lobanov/setup-xcode@v1
|
||||
with:
|
||||
xcode-version: '16.3.0'
|
||||
|
||||
- name: Cache Build
|
||||
id: cache-build
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ~/.ccache
|
||||
key: ${{ runner.os }}-${{ matrix.config }}-${{ matrix.build-params.static }}-cache
|
||||
|
||||
- name: Prepare ccache
|
||||
run: |
|
||||
ccache --max-size=1.0G
|
||||
ccache -V && ccache --show-stats && ccache --zero-stats
|
||||
|
||||
- name: Configure
|
||||
run: |
|
||||
mkdir -p build
|
||||
cd build
|
||||
# https://github.com/eclipse-ecal/ecal/issues/2041
|
||||
cmake .. \
|
||||
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
|
||||
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
|
||||
-DCMAKE_BUILD_TYPE=${{ matrix.config }} \
|
||||
-DLIBIGL_USE_STATIC_LIBRARY=${{ matrix.build-params.static }} \
|
||||
-DLIBIGL_BUILD_TUTORIALS=${{ matrix.build-params.tutorials }} \
|
||||
-DLIBIGL_GLFW_TESTS=OFF \
|
||||
-DLIBIGL_BUILD_TESTS=${{ matrix.build-params.tests }} \
|
||||
-DLIBIGL_COPYLEFT_CGAL=ON
|
||||
|
||||
- name: Build
|
||||
run: cd build; make -j2; ccache --show-stats
|
||||
|
||||
- name: Tests
|
||||
run: cd build; ctest --show-only; ctest --verbose
|
||||
|
||||
####################
|
||||
# Windows
|
||||
####################
|
||||
|
||||
Windows:
|
||||
name: Windows ${{ fromJSON('["Header-Only", "Static"]')[matrix.build-params.static == 'ON'] }} ${{ matrix.build-params.tutorials == 'ON' && 'tutorial' || ''}} ${{ matrix.build-params.selected_tutorial != 'NONE' && matrix.build-params.selected_tutorial || '' }} ${{ matrix.build-params.tests == 'ON' && 'tests' || ''}} ${{ matrix.config }}
|
||||
runs-on: windows-2022
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
config: [Release]
|
||||
build-params: [
|
||||
{static: ON, tutorials: ON, tests: ON, selected_tutorial: NONE},
|
||||
{static: OFF, tutorials: OFF, tests: ON, selected_tutorial: NONE},
|
||||
{static: OFF, tutorials: ON, tests: OFF, selected_tutorial: 1},
|
||||
{static: OFF, tutorials: ON, tests: OFF, selected_tutorial: 2},
|
||||
{static: OFF, tutorials: ON, tests: OFF, selected_tutorial: 3},
|
||||
{static: OFF, tutorials: ON, tests: OFF, selected_tutorial: 4},
|
||||
{static: OFF, tutorials: ON, tests: OFF, selected_tutorial: 5},
|
||||
{static: OFF, tutorials: ON, tests: OFF, selected_tutorial: 6},
|
||||
{static: OFF, tutorials: ON, tests: OFF, selected_tutorial: 7},
|
||||
{static: OFF, tutorials: ON, tests: OFF, selected_tutorial: 8},
|
||||
{static: OFF, tutorials: ON, tests: OFF, selected_tutorial: 9},
|
||||
{static: OFF, tutorials: ON, tests: OFF, selected_tutorial: 10},
|
||||
]
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v1
|
||||
with:
|
||||
fetch-depth: 10
|
||||
|
||||
- name: Install Ninja
|
||||
uses: seanmiddleditch/gha-setup-ninja@master
|
||||
|
||||
- name: Set env variable for sccache
|
||||
run: |
|
||||
echo "appdata=$env:LOCALAPPDATA" >> ${env:GITHUB_ENV}
|
||||
|
||||
- name: Cache build
|
||||
id: cache-build
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ${{ env.appdata }}\Mozilla\sccache
|
||||
key: ${{ runner.os }}-${{ matrix.config }}-${{ matrix.build-params.static }}-cache
|
||||
|
||||
- name: Prepare sccache
|
||||
run: |
|
||||
iwr -useb 'https://raw.githubusercontent.com/scoopinstaller/install/master/install.ps1' -outfile 'install.ps1'
|
||||
.\install.ps1 -RunAsAdmin
|
||||
scoop install sccache --global
|
||||
# Scoop modifies the PATH so we make it available for the next steps of the job
|
||||
echo "${env:PATH}" >> ${env:GITHUB_PATH}
|
||||
|
||||
- name: Configure and build
|
||||
shell: cmd
|
||||
run: |
|
||||
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\Tools\VsDevCmd.bat" -arch=x64
|
||||
# https://github.com/eclipse-ecal/ecal/issues/2041
|
||||
cmake -G Ninja ^
|
||||
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 ^
|
||||
-DCMAKE_CXX_COMPILER_LAUNCHER=sccache ^
|
||||
-DCMAKE_BUILD_TYPE=${{ matrix.config }} ^
|
||||
-DLIBIGL_USE_STATIC_LIBRARY=${{ matrix.build-params.static }} ^
|
||||
-DLIBIGL_COPYLEFT_CGAL=ON ^
|
||||
-DLIBIGL_BUILD_TUTORIALS=${{ matrix.build-params.tutorials }} ^
|
||||
-DLIBIGL_BUILD_TESTS=${{ matrix.build-params.tests }} ^
|
||||
-DLIBIGL_GLFW_TESTS=OFF ^
|
||||
-DLIBIGL_TUTORIALS_CHAPTER1=${{ (matrix.build-params.selected_tutorial == 'NONE' || matrix.build-params.selected_tutorial == '1') && 'ON' || 'OFF' }} ^
|
||||
-DLIBIGL_TUTORIALS_CHAPTER2=${{ (matrix.build-params.selected_tutorial == 'NONE' || matrix.build-params.selected_tutorial == '2') && 'ON' || 'OFF' }} ^
|
||||
-DLIBIGL_TUTORIALS_CHAPTER3=${{ (matrix.build-params.selected_tutorial == 'NONE' || matrix.build-params.selected_tutorial == '3') && 'ON' || 'OFF' }} ^
|
||||
-DLIBIGL_TUTORIALS_CHAPTER4=${{ (matrix.build-params.selected_tutorial == 'NONE' || matrix.build-params.selected_tutorial == '4') && 'ON' || 'OFF' }} ^
|
||||
-DLIBIGL_TUTORIALS_CHAPTER5=${{ (matrix.build-params.selected_tutorial == 'NONE' || matrix.build-params.selected_tutorial == '5') && 'ON' || 'OFF' }} ^
|
||||
-DLIBIGL_TUTORIALS_CHAPTER6=${{ (matrix.build-params.selected_tutorial == 'NONE' || matrix.build-params.selected_tutorial == '6') && 'ON' || 'OFF' }} ^
|
||||
-DLIBIGL_TUTORIALS_CHAPTER7=${{ (matrix.build-params.selected_tutorial == 'NONE' || matrix.build-params.selected_tutorial == '7') && 'ON' || 'OFF' }} ^
|
||||
-DLIBIGL_TUTORIALS_CHAPTER8=${{ (matrix.build-params.selected_tutorial == 'NONE' || matrix.build-params.selected_tutorial == '8') && 'ON' || 'OFF' }} ^
|
||||
-DLIBIGL_TUTORIALS_CHAPTER9=${{ (matrix.build-params.selected_tutorial == 'NONE' || matrix.build-params.selected_tutorial == '9') && 'ON' || 'OFF' }} ^
|
||||
-DLIBIGL_TUTORIALS_CHAPTER10=${{ (matrix.build-params.selected_tutorial == 'NONE' || matrix.build-params.selected_tutorial == '10') && 'ON' || 'OFF' }} ^
|
||||
-B build ^
|
||||
-S .
|
||||
cmake --build build -j2
|
||||
|
||||
- name: Tests
|
||||
run: cd build; ctest --show-only; ctest --verbose -j2
|
||||
|
||||
+96
-50
@@ -1,53 +1,99 @@
|
||||
# Prerequisites
|
||||
*.d
|
||||
|
||||
# Compiled Object files
|
||||
*.slo
|
||||
*.lo
|
||||
*.o
|
||||
*.obj
|
||||
|
||||
# Precompiled Headers
|
||||
*.gch
|
||||
*.pch
|
||||
|
||||
# Compiled Dynamic libraries
|
||||
*.so
|
||||
*.dylib
|
||||
*.dll
|
||||
|
||||
# Fortran module files
|
||||
*.mod
|
||||
*.smod
|
||||
|
||||
# Compiled Static libraries
|
||||
*.lai
|
||||
*.la
|
||||
# use glob syntax.
|
||||
*.a
|
||||
*.lib
|
||||
|
||||
# Executables
|
||||
*.dylib
|
||||
*.egg-info/
|
||||
*.exe
|
||||
*.out
|
||||
*.app
|
||||
|
||||
# Build folders
|
||||
/build*
|
||||
/tests/data
|
||||
/tutorial/data
|
||||
/install
|
||||
|
||||
# Libigl specific
|
||||
LibiglOptions.cmake
|
||||
|
||||
# vim debris
|
||||
.*.un~
|
||||
.*.swo
|
||||
.*.swp
|
||||
|
||||
# macos debris
|
||||
.DS_Store
|
||||
*.ilk
|
||||
*.log
|
||||
*.o
|
||||
*.opensdf
|
||||
*.orig
|
||||
*.pdb
|
||||
*.psess
|
||||
*.pyc
|
||||
*.sdf
|
||||
*.so
|
||||
*.so.[0123456789]
|
||||
*.so.[0123456789].[0123456789]
|
||||
*.suo
|
||||
*.swo
|
||||
*.swp
|
||||
*.tlog
|
||||
*.user
|
||||
*.vsp
|
||||
*CMakeFiles*
|
||||
*buildXcode*
|
||||
*tags
|
||||
*~
|
||||
dox/
|
||||
latex/
|
||||
scripts/
|
||||
.DS_Store
|
||||
.idea/
|
||||
.vs/
|
||||
.vscode/
|
||||
/external
|
||||
Debug/
|
||||
README.html
|
||||
Release/
|
||||
Untitled.ipynb
|
||||
build
|
||||
doc.html
|
||||
documentation/*.aux
|
||||
documentation/*.log
|
||||
documentation/*.out
|
||||
example
|
||||
example1
|
||||
example_header_only
|
||||
example_static
|
||||
examples/*/*.mexmaci64
|
||||
examples/*/*.rbr
|
||||
examples/bbw/bbw_demo
|
||||
examples/bbw/bbw_demo_selfcontained.zip
|
||||
examples/bbw/bbw_demo_selfcontained/*
|
||||
examples/bbw/examples/*-volume.dmat
|
||||
examples/bbw/examples/*-volume.mesh
|
||||
examples/principal_curvature/curvature
|
||||
examples/quicklook-mesh/Mesh.qlgenerator/*
|
||||
examples/upright/upright
|
||||
external/MeshFix/meshfix
|
||||
external/embree/build/*
|
||||
external/glew/build
|
||||
external/glfw/build
|
||||
external/libpng/build
|
||||
external/medit/rebar.rbr
|
||||
external/tetgen/tetgen
|
||||
external/tinyxml2/build
|
||||
external/tinyxml2/test
|
||||
external/tinyxml2/tinyxml2.pc
|
||||
external/yimg/showpng
|
||||
iglhelpers.pyc
|
||||
lib
|
||||
libigl.zip
|
||||
optional/build
|
||||
python/.idea
|
||||
python/.ipynb_checkpoints
|
||||
python/__pycache__
|
||||
python/build
|
||||
python/build2
|
||||
python/build3
|
||||
python/build4
|
||||
python/builddebug
|
||||
python/buildstatic
|
||||
python/py_igl/todo
|
||||
python/py_igl/todo
|
||||
python/scripts/generated
|
||||
scripts/change_name.sh
|
||||
site/
|
||||
syntax: glob
|
||||
tests/bin
|
||||
tests/build
|
||||
tests/data
|
||||
tutorial/*/*.mexmaci64
|
||||
tutorial/*/Makefile
|
||||
tutorial/*/build/*
|
||||
tutorial/.idea
|
||||
tutorial/XXX_test/CMakeLists.txt
|
||||
tutorial/XXX_test/main.cpp
|
||||
tutorial/build
|
||||
tutorial/cmake-build-debug
|
||||
tutorial/data
|
||||
tutorial/readme.html
|
||||
untitled
|
||||
|
||||
+72
@@ -0,0 +1,72 @@
|
||||
dist: trusty
|
||||
sudo: true
|
||||
language: cpp
|
||||
cache: ccache
|
||||
addons:
|
||||
apt:
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
packages:
|
||||
- g++-7
|
||||
- gcc-7
|
||||
- libblas-dev
|
||||
- libboost-filesystem-dev
|
||||
- libboost-system-dev
|
||||
- libboost-thread-dev
|
||||
- libglu1-mesa-dev
|
||||
- liblapack-dev
|
||||
- libmpfr-dev
|
||||
- xorg-dev
|
||||
homebrew:
|
||||
packages:
|
||||
- ccache
|
||||
matrix:
|
||||
include:
|
||||
- os: linux
|
||||
compiler: gcc # 4.8.4 by default on Trusty
|
||||
env:
|
||||
- MATRIX_EVAL="export CONFIG=Release"
|
||||
- os: linux
|
||||
compiler: gcc-7
|
||||
env:
|
||||
- MATRIX_EVAL="export CC=gcc-7 CXX=g++-7 CONFIG=Release"
|
||||
- os: linux # same config like above but with -DLIBIGL_USE_STATIC_LIBRARY=OFF to test static and header-only builds
|
||||
compiler: gcc-7
|
||||
env:
|
||||
- MATRIX_EVAL="export CC=gcc-7 CXX=g++-7 CONFIG=Release CMAKE_EXTRA='-DLIBIGL_USE_STATIC_LIBRARY=OFF'"
|
||||
- os: osx
|
||||
osx_image: xcode10.2
|
||||
compiler: clang
|
||||
env:
|
||||
- MATRIX_EVAL="export CONFIG=Debug LIBIGL_NUM_THREADS=1"
|
||||
- os: osx # same config like above but with -DLIBIGL_USE_STATIC_LIBRARY=OFF to test static and header-only builds
|
||||
osx_image: xcode10.2
|
||||
compiler: clang
|
||||
env:
|
||||
- MATRIX_EVAL="export CONFIG=Debug LIBIGL_NUM_THREADS=1 CMAKE_EXTRA='-DLIBIGL_USE_STATIC_LIBRARY=OFF'"
|
||||
- os: osx
|
||||
osx_image: xcode10.2
|
||||
compiler: clang
|
||||
env:
|
||||
- MATRIX_EVAL="export CONFIG=Debug PYTHON=python3 LIBIGL_NUM_THREADS=1 CMAKE_EXTRA='-DLIBIGL_EIGEN_VERSION=3.3.7'""
|
||||
|
||||
install:
|
||||
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then export PATH="/usr/local/opt/ccache/libexec:$PATH"; fi
|
||||
- eval "${MATRIX_EVAL}"
|
||||
- ccache --max-size=5.0G
|
||||
- ccache -V && ccache --show-stats && ccache --zero-stats
|
||||
|
||||
script:
|
||||
# Tutorials and tests
|
||||
- mkdir build
|
||||
- pushd build
|
||||
- cmake ${CMAKE_EXTRA}
|
||||
-DCMAKE_BUILD_TYPE=$CONFIG
|
||||
-DLIBIGL_CHECK_UNDEFINED=ON
|
||||
-DLIBIGL_WITH_CGAL=ON
|
||||
../
|
||||
- make -j 2
|
||||
- ctest --verbose
|
||||
- popd
|
||||
- rm -rf build
|
||||
- ccache --show-stats
|
||||
+52
-168
@@ -1,190 +1,74 @@
|
||||
cmake_minimum_required(VERSION 3.1)
|
||||
|
||||
# Toggles the use of the hunter package manager
|
||||
option(HUNTER_ENABLED "Enable Hunter package manager support" OFF)
|
||||
|
||||
include("cmake/HunterGate.cmake")
|
||||
HunterGate(
|
||||
URL "https://github.com/ruslo/hunter/archive/v0.23.171.tar.gz"
|
||||
SHA1 "5d68bcca78eee347239ca5f4d34f4b6c12683154"
|
||||
)
|
||||
|
||||
project(libigl)
|
||||
|
||||
# Detects whether this is a top-level project
|
||||
get_directory_property(LIBIGL_PARENT_DIR PARENT_DIRECTORY)
|
||||
if(NOT LIBIGL_PARENT_DIR)
|
||||
set(LIBIGL_TOPLEVEL_PROJECT ON)
|
||||
set(LIBIGL_TOPLEVEL_PROJECT ON)
|
||||
else()
|
||||
set(LIBIGL_TOPLEVEL_PROJECT OFF)
|
||||
endif()
|
||||
|
||||
|
||||
|
||||
# Check required CMake version
|
||||
set(REQUIRED_CMAKE_VERSION "3.16.0")
|
||||
if(LIBIGL_TOPLEVEL_PROJECT)
|
||||
cmake_minimum_required(VERSION ${REQUIRED_CMAKE_VERSION})
|
||||
else()
|
||||
# Don't use cmake_minimum_required here to avoid implicitly overriding parent policies
|
||||
if(${CMAKE_VERSION} VERSION_LESS ${REQUIRED_CMAKE_VERSION})
|
||||
message(FATAL_ERROR "CMake required version to build Libigl is ${REQUIRED_CMAKE_VERSION}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Include user-provided default options if available. We do that before the main
|
||||
# `project()` so that we can define the C/C++ compilers from the option file.
|
||||
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/LibiglOptions.cmake)
|
||||
message(STATUS "Using local options file: ${CMAKE_CURRENT_SOURCE_DIR}/LibiglOptions.cmake")
|
||||
include(${CMAKE_CURRENT_SOURCE_DIR}/LibiglOptions.cmake)
|
||||
endif()
|
||||
|
||||
# If this option is enabled, this will setup the Hunter package manager.
|
||||
option(HUNTER_ENABLED "Enable Hunter package manager support" OFF)
|
||||
if(HUNTER_ENABLED)
|
||||
include("cmake/misc/HunterGate.cmake")
|
||||
HunterGate(
|
||||
URL "https://github.com/cpp-pm/hunter/archive/v0.24.8.tar.gz"
|
||||
SHA1 "ca7838dded9a1811b04ffd56175f629e0af82d3d"
|
||||
)
|
||||
endif()
|
||||
|
||||
################################################################################
|
||||
project(libigl VERSION 2.5.0)
|
||||
|
||||
# CMake module path
|
||||
list(PREPEND CMAKE_MODULE_PATH
|
||||
${CMAKE_CURRENT_LIST_DIR}/cmake/
|
||||
${CMAKE_CURRENT_LIST_DIR}/cmake/igl
|
||||
${CMAKE_CURRENT_LIST_DIR}/cmake/find
|
||||
${CMAKE_CURRENT_LIST_DIR}/cmake/recipes/external
|
||||
)
|
||||
|
||||
if(HUNTER_ENABLED)
|
||||
list(PREPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake/recipes/hunter)
|
||||
else()
|
||||
list(PREPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake/recipes/external)
|
||||
endif()
|
||||
|
||||
set_property(GLOBAL PROPERTY __igl_module_path ${CMAKE_MODULE_PATH})
|
||||
|
||||
set(LIBIGL_DEFAULT_CGAL ${LIBIGL_TOPLEVEL_PROJECT})
|
||||
set(MATLAB_ADDITIONAL_VERSIONS
|
||||
"R2023b=10.4"
|
||||
"R2023a=10.4"
|
||||
"R2022b=10.3"
|
||||
"R2022a=10.2"
|
||||
"R2021b=10.1"
|
||||
"R2021a=10.0"
|
||||
)
|
||||
set(LIBIGL_DEFAULT_MATLAB ${LIBIGL_TOPLEVEL_PROJECT})
|
||||
set(LIBIGL_DEFAULT_MOSEK ${LIBIGL_TOPLEVEL_PROJECT})
|
||||
if(LIBIGL_TOPLEVEL_PROJECT)
|
||||
find_package(Matlab QUIET)
|
||||
if(NOT Matlab_FOUND)
|
||||
set(LIBIGL_DEFAULT_MATLAB OFF)
|
||||
message(WARNING "Matlab not found, disabling igl_restricted::matlab module.")
|
||||
endif()
|
||||
find_package(MOSEK QUIET)
|
||||
if(NOT MOSEK_FOUND)
|
||||
set(LIBIGL_DEFAULT_MOSEK OFF)
|
||||
message(WARNING "Mosek not found, disabling igl_restricted::mosek module.")
|
||||
endif()
|
||||
endif()
|
||||
set(LIBIGL_DEFAULT_COMISO ${LIBIGL_TOPLEVEL_PROJECT})
|
||||
if(LIBIGL_TOPLEVEL_PROJECT AND (NOT APPLE) AND UNIX)
|
||||
find_package(BLAS QUIET)
|
||||
if(NOT BLAS_FOUND)
|
||||
set(LIBIGL_DEFAULT_COMISO OFF)
|
||||
message(WARNING "BLAS not found, disabling igl_copyleft::comiso module.")
|
||||
endif()
|
||||
set(LIBIGL_TOPLEVEL_PROJECT OFF)
|
||||
endif()
|
||||
|
||||
# Build tests and tutorials
|
||||
option(LIBIGL_BUILD_TESTS "Build libigl unit test" ${LIBIGL_TOPLEVEL_PROJECT})
|
||||
option(LIBIGL_BUILD_TUTORIALS "Build libigl tutorial" ${LIBIGL_TOPLEVEL_PROJECT})
|
||||
option(LIBIGL_INSTALL "Enable installation of libigl targets" ${LIBIGL_TOPLEVEL_PROJECT})
|
||||
option(LIBIGL_BUILD_TESTS "Build libigl unit test" ${LIBIGL_TOPLEVEL_PROJECT})
|
||||
option(LIBIGL_BUILD_TUTORIALS "Build libigl tutorial" ${LIBIGL_TOPLEVEL_PROJECT})
|
||||
option(LIBIGL_EXPORT_TARGETS "Export libigl CMake targets" ${LIBIGL_TOPLEVEL_PROJECT})
|
||||
|
||||
# USE_STATIC_LIBRARY speeds up the generation of multiple binaries,
|
||||
# at the cost of a longer initial compilation time
|
||||
# (by default, static build is off since libigl is a header-only library)
|
||||
option(LIBIGL_USE_STATIC_LIBRARY "Use libigl as static library" ${LIBIGL_TOPLEVEL_PROJECT})
|
||||
option(LIBIGL_USE_STATIC_LIBRARY "Use libigl as static library" ON)
|
||||
|
||||
# Permissive modules. These modules are available under MPL2 license, and their dependencies are available
|
||||
# under a permissive or public domain license.
|
||||
option(LIBIGL_CYCODEBASE "Build target igl::cycodebase" ${LIBIGL_TOPLEVEL_PROJECT})
|
||||
option(LIBIGL_EMBREE "Build target igl::embree" ${LIBIGL_TOPLEVEL_PROJECT})
|
||||
option(LIBIGL_GLFW "Build target igl::glfw" ${LIBIGL_TOPLEVEL_PROJECT})
|
||||
option(LIBIGL_IMGUI "Build target igl::imgui" ${LIBIGL_TOPLEVEL_PROJECT})
|
||||
option(LIBIGL_OPENGL "Build target igl::opengl" ${LIBIGL_TOPLEVEL_PROJECT})
|
||||
option(LIBIGL_STB "Build target igl::stb" ${LIBIGL_TOPLEVEL_PROJECT})
|
||||
option(LIBIGL_PREDICATES "Build target igl::predicates" ${LIBIGL_TOPLEVEL_PROJECT})
|
||||
option(LIBIGL_SPECTRA "Build target igl::spectra" ${LIBIGL_TOPLEVEL_PROJECT})
|
||||
option(LIBIGL_XML "Build target igl::xml" ${LIBIGL_TOPLEVEL_PROJECT})
|
||||
# All dependencies that are downloaded as cmake projects and tested on the auto-builds are ON
|
||||
# (by default, all build options are off)
|
||||
option(LIBIGL_WITH_COMISO "Use CoMiso" ON)
|
||||
option(LIBIGL_WITH_EMBREE "Use Embree" ON)
|
||||
option(LIBIGL_WITH_OPENGL "Use OpenGL" ON)
|
||||
option(LIBIGL_WITH_OPENGL_GLFW "Use GLFW" ON)
|
||||
option(LIBIGL_WITH_OPENGL_GLFW_IMGUI "Use ImGui" ON)
|
||||
option(LIBIGL_WITH_PNG "Use PNG" ON)
|
||||
option(LIBIGL_WITH_TETGEN "Use Tetgen" ON)
|
||||
option(LIBIGL_WITH_TRIANGLE "Use Triangle" ON)
|
||||
option(LIBIGL_WITH_PREDICATES "Use exact predicates" ON)
|
||||
option(LIBIGL_WITH_XML "Use XML" ON)
|
||||
option(LIBIGL_WITH_PYTHON "Use Python" OFF)
|
||||
### End
|
||||
|
||||
# Copyleft modules. These modules are available under GPL license, and their dependencies are
|
||||
# available under a copyleft license.
|
||||
option(LIBIGL_COPYLEFT_CORE "Build target igl_copyleft::core" ${LIBIGL_TOPLEVEL_PROJECT})
|
||||
option(LIBIGL_COPYLEFT_CGAL "Build target igl_copyleft::cgal" ${LIBIGL_DEFAULT_CGAL})
|
||||
option(LIBIGL_COPYLEFT_COMISO "Build target igl_copyleft::comiso" ${LIBIGL_TOPLEVEL_PROJECT})
|
||||
option(LIBIGL_COPYLEFT_TETGEN "Build target igl_copyleft::tetgen" ${LIBIGL_TOPLEVEL_PROJECT})
|
||||
|
||||
# Restricted modules. These modules are available under MPL2 license, but their dependencies are
|
||||
# only available under a non-commercial or proprietary license.
|
||||
option(LIBIGL_RESTRICTED_MATLAB "Build target igl_restricted::matlab" ${LIBIGL_DEFAULT_MATLAB})
|
||||
option(LIBIGL_RESTRICTED_MOSEK "Build target igl_restricted::mosek" ${LIBIGL_DEFAULT_MOSEK})
|
||||
option(LIBIGL_RESTRICTED_TRIANGLE "Build target igl_restricted::triangle" ${LIBIGL_TOPLEVEL_PROJECT})
|
||||
|
||||
# GLFW doesn't run on headless CI machines so don't run (or build them).
|
||||
# Unfortunately on headless mac machines glfw seems to hang rather than crash
|
||||
# making it hard to catch at runtime.
|
||||
option(LIBIGL_GLFW_TESTS "Build igl::glfw tests" ${LIBIGL_TOPLEVEL_PROJECT})
|
||||
|
||||
option(LIBIGL_WARNINGS_AS_ERRORS "Turn on many warnings and treat as errors" OFF)
|
||||
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
|
||||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
|
||||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
|
||||
|
||||
|
||||
# Include CMake helper functions
|
||||
include(igl_add_library)
|
||||
include(igl_add_test)
|
||||
include(igl_add_tutorial)
|
||||
include(igl_copy_dll)
|
||||
include(igl_include)
|
||||
include(igl_install)
|
||||
include(igl_target_sources)
|
||||
|
||||
# Enable unit testing at the root level
|
||||
if(LIBIGL_BUILD_TESTS)
|
||||
include(CTest)
|
||||
if(${LIBIGL_WITH_PYTHON})
|
||||
message(FATAL_ERROR "Python binding are in the process of being redone. Please use the master branch or refer to https://github.com/geometryprocessing/libigl-python-bindings for the developement version or https://anaconda.org/conda-forge/igl for the stable version.")
|
||||
endif()
|
||||
|
||||
# Defines CMake targets for selected libigl modules
|
||||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
|
||||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
|
||||
|
||||
### conditionally compile certain modules depending on libraries found on the system
|
||||
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake)
|
||||
|
||||
### Adding libIGL: choose the path to your local copy libIGL
|
||||
include(libigl)
|
||||
|
||||
if(LIBIGL_BUILD_TUTORIALS)
|
||||
add_subdirectory(tutorial)
|
||||
add_subdirectory(tutorial)
|
||||
endif()
|
||||
|
||||
################################################################################
|
||||
# Install CMake config files
|
||||
################################################################################
|
||||
|
||||
if(LIBIGL_INSTALL)
|
||||
include(GNUInstallDirs)
|
||||
set(project_config_in "${PROJECT_SOURCE_DIR}/cmake/igl/libigl-config.cmake.in")
|
||||
set(project_config_out "${CMAKE_CURRENT_BINARY_DIR}/libigl-config.cmake")
|
||||
set(config_targets_base "LibiglConfigTargets")
|
||||
set(version_config_file "${CMAKE_CURRENT_BINARY_DIR}/LibiglConfigVersion.cmake")
|
||||
set(export_dest_dir "${CMAKE_INSTALL_LIBDIR}/cmake/igl")
|
||||
|
||||
foreach(suffix IN ITEMS "") #"_restricted" "_copyleft")
|
||||
install(EXPORT LibiglTargets${suffix}
|
||||
DESTINATION ${export_dest_dir}
|
||||
NAMESPACE igl${suffix}::
|
||||
FILE ${config_targets_base}${suffix}.cmake
|
||||
COMPONENT LibiglDevelopment
|
||||
)
|
||||
endforeach()
|
||||
|
||||
include(CMakePackageConfigHelpers)
|
||||
configure_package_config_file(
|
||||
"${project_config_in}"
|
||||
"${project_config_out}"
|
||||
INSTALL_DESTINATION
|
||||
${CMAKE_INSTALL_DATAROOTDIR}/libigl/cmake
|
||||
)
|
||||
|
||||
write_basic_package_version_file("${version_config_file}" COMPATIBILITY SameMajorVersion)
|
||||
install(FILES "${project_config_out}" "${version_config_file}" DESTINATION "${export_dest_dir}")
|
||||
if(LIBIGL_BUILD_TESTS)
|
||||
include(CTest)
|
||||
enable_testing()
|
||||
add_subdirectory(tests)
|
||||
endif()
|
||||
|
||||
if(LIBIGL_TOPLEVEL_PROJECT)
|
||||
# Set folders for Visual Studio/Xcode
|
||||
igl_set_folders()
|
||||
endif()
|
||||
|
||||
@@ -1,78 +0,0 @@
|
||||
# If you are cloning and compiling the libigl repository as a standalone, you
|
||||
# can use this file as a convenience to set default CMake options. Simply copy
|
||||
# this file and remove the '.sample' suffix. Then, uncomment the relevant
|
||||
# options as desired. Note that this file is included before `project(Libigl)`
|
||||
# is defined, so we can use it to define the C and C++ compilers, but some
|
||||
# variables such as PROJECT_SOURCE_DIR will not be defined yet. You can use
|
||||
# CMAKE_SOURCE_DIR instead.
|
||||
#
|
||||
# If you are using libigl as a subproject (e.g. see the libigl-example-project
|
||||
# template), then you do NOT need to use this file. Simply set your preferred
|
||||
# CMake options in the parent project, # before including libigl.
|
||||
|
||||
################################################################################
|
||||
# CMake Options
|
||||
################################################################################
|
||||
|
||||
# Specify a custom install prefix path
|
||||
# set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/install CACHE STRING "Install directory used by install().")
|
||||
|
||||
# Generates a `compile_commands.json` that can be used for autocompletion
|
||||
# set(CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE BOOL "Enable/Disable output of compile commands during generation.")
|
||||
|
||||
# Use ccache to speed up compilation of repeated builds
|
||||
# find_program(CCACHE_PROGRAM ccache)
|
||||
# if(CCACHE_PROGRAM)
|
||||
# message(STATUS "Enabling Ccache support")
|
||||
# set(CMAKE_C_COMPILER_LAUNCHER ${CCACHE_PROGRAM} CACHE STRING "")
|
||||
# set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE_PROGRAM} CACHE STRING "")
|
||||
# endif()
|
||||
|
||||
# Use a specific C/C++ compiler, e.g. llvm-clang on macOS (so we can use clangd)
|
||||
# set(CMAKE_C_COMPILER "/usr/bin/clang" CACHE STRING "C compiler")
|
||||
# set(CMAKE_CXX_COMPILER "/usr/bin/clang++" CACHE STRING "C++ compiler")
|
||||
|
||||
# Set deployment platform for macOS
|
||||
# set(CMAKE_OSX_DEPLOYMENT_TARGET 10.12 CACHE STRING "macOS deployment target")
|
||||
|
||||
# Always add colored output (e.g. when using Ninja)
|
||||
# add_compile_options(-fdiagnostics-color=always) # GCC
|
||||
# add_compile_options(-fcolor-diagnostics) # Clang
|
||||
|
||||
# add_compile_options(-ftime-trace) # Clang
|
||||
|
||||
################################################################################
|
||||
# Libigl Options
|
||||
################################################################################
|
||||
|
||||
# Build options
|
||||
# option(LIBIGL_BUILD_TESTS "Build libigl unit test" OFF)
|
||||
# option(LIBIGL_BUILD_TUTORIALS "Build libigl tutorial" OFF)
|
||||
# option(LIBIGL_INSTALL "Enable installation of libigl targets" OFF)
|
||||
# option(LIBIGL_USE_STATIC_LIBRARY "Use libigl as static library" OFF)
|
||||
|
||||
# Module options
|
||||
# option(LIBIGL_EMBREE "Build target igl::embree" ON)
|
||||
# option(LIBIGL_GLFW "Build target igl::glfw" ON)
|
||||
# option(LIBIGL_IMGUI "Build target igl::imgui" ON)
|
||||
# option(LIBIGL_OPENGL "Build target igl::opengl" ON)
|
||||
# option(LIBIGL_STB "Build target igl::stb" ON)
|
||||
# option(LIBIGL_PREDICATES "Build target igl::predicates" ON)
|
||||
# option(LIBIGL_XML "Build target igl::xml" ON)
|
||||
# option(LIBIGL_COPYLEFT_CGAL "Build target igl_copyleft::cgal" ON)
|
||||
# option(LIBIGL_COPYLEFT_COMISO "Build target igl_copyleft::comiso" ON)
|
||||
# option(LIBIGL_COPYLEFT_CORE "Build target igl_copyleft::core" ON)
|
||||
# option(LIBIGL_COPYLEFT_CORK "Build target igl_copyleft::cork" ON)
|
||||
# option(LIBIGL_COPYLEFT_TETGEN "Build target igl_copyleft::tetgen" ON)
|
||||
# option(LIBIGL_RESTRICTED_MATLAB "Build target igl_restricted::matlab" ON)
|
||||
# option(LIBIGL_RESTRICTED_MOSEK "Build target igl_restricted::mosek" ON)
|
||||
# option(LIBIGL_RESTRICTED_TRIANGLE "Build target igl_restricted::triangle" ON)
|
||||
|
||||
################################################################################
|
||||
# FetchContent Options
|
||||
################################################################################
|
||||
|
||||
# option(FETCHCONTENT_FULLY_DISCONNECTED "Disables all attempts to download or update content and assumes source dirs already exist" ON)
|
||||
# option(FETCHCONTENT_UPDATES_DISCONNECTED "Enables UPDATE_DISCONNECTED behavior for all content population" ON)
|
||||
# option(FETCHCONTENT_QUIET "Enables QUIET option for all content population" ON)
|
||||
# set(FETCHCONTENT_BASE_DIR "${CMAKE_SOURCE_DIR}/external" CACHE PATH "Directory under which to collect all populated content")
|
||||
@@ -1,13 +1,8 @@
|
||||
# libigl - A simple C++ geometry processing library
|
||||
|
||||
[](https://github.com/libigl/libigl/actions?query=workflow%3ABuild+branch%3Amain+event%3Apush)
|
||||
[](https://anaconda.org/conda-forge/igl)
|
||||
|
||||

|
||||
[](https://travis-ci.org/libigl/libigl)
|
||||
[](https://ci.appveyor.com/project/danielepanozzo/libigl-6hjk1/branch/master)
|
||||

|
||||
|
||||
Documentation, tutorial, and instructions at <https://libigl.github.io>.
|
||||
|
||||
|
||||
| 🆕 Doxygen Documentation |
|
||||
|:---|
|
||||
| The latest version of libigl (v2.5.0) introduces [doxygen generated detailed documentation](https://libigl.github.io/dox/index.html) |
|
||||
:exclamation: **On October 15, 2018, a new, cleaned-up history was pushed onto the main libigl repository. To learn more about the consequences of this, and troubleshooting, please read [this page](https://libigl.github.io/rewritten-history/).**
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
################################################################################
|
||||
|
||||
if(NOT (${CMAKE_VERSION} VERSION_LESS "3.8.0"))
|
||||
# For CMake 3.8 and above, we can use meta features directly provided by CMake itself
|
||||
set(CXX11_FEATURES cxx_std_11)
|
||||
set(CXX14_FEATURES cxx_std_14)
|
||||
set(CXX17_FEATURES cxx_std_17)
|
||||
return()
|
||||
endif()
|
||||
|
||||
################################################################################
|
||||
|
||||
set(CXX11_FEATURES
|
||||
cxx_auto_type
|
||||
cxx_constexpr
|
||||
)
|
||||
|
||||
set(CXX14_FEATURES
|
||||
cxx_generic_lambdas
|
||||
)
|
||||
|
||||
set(CXX17_FEATURES
|
||||
|
||||
)
|
||||
|
||||
################################################################################
|
||||
|
||||
# https://cmake.org/cmake/help/v3.1/prop_gbl/CMAKE_CXX_KNOWN_FEATURES.html
|
||||
# cxx_aggregate_default_initializers Aggregate default initializers, as defined in N3605.
|
||||
# cxx_alias_templates Template aliases, as defined in N2258.
|
||||
# cxx_alignas Alignment control alignas, as defined in N2341.
|
||||
# cxx_alignof Alignment control alignof, as defined in N2341.
|
||||
# cxx_attributes Generic attributes, as defined in N2761.
|
||||
# cxx_attribute_deprecated deprecated]] attribute, as defined in N3760.
|
||||
# cxx_auto_type Automatic type deduction, as defined in N1984.
|
||||
# cxx_binary_literals Binary literals, as defined in N3472.
|
||||
# cxx_constexpr Constant expressions, as defined in N2235.
|
||||
# cxx_contextual_conversions Contextual conversions, as defined in N3323.
|
||||
# cxx_decltype_incomplete_return_types Decltype on incomplete return types, as defined in N3276.
|
||||
# cxx_decltype Decltype, as defined in N2343.
|
||||
# cxx_decltype_auto decltype(auto) semantics, as defined in N3638.
|
||||
# cxx_default_function_template_args Default template arguments for function templates, as defined in DR226
|
||||
# cxx_defaulted_functions Defaulted functions, as defined in N2346.
|
||||
# cxx_defaulted_move_initializers Defaulted move initializers, as defined in N3053.
|
||||
# cxx_delegating_constructors Delegating constructors, as defined in N1986.
|
||||
# cxx_deleted_functions Deleted functions, as defined in N2346.
|
||||
# cxx_digit_separators Digit separators, as defined in N3781.
|
||||
# cxx_enum_forward_declarations Enum forward declarations, as defined in N2764.
|
||||
# cxx_explicit_conversions Explicit conversion operators, as defined in N2437.
|
||||
# cxx_extended_friend_declarations Extended friend declarations, as defined in N1791.
|
||||
# cxx_extern_templates Extern templates, as defined in N1987.
|
||||
# cxx_final Override control final keyword, as defined in N2928, N3206 and N3272.
|
||||
# cxx_func_identifier Predefined __func__ identifier, as defined in N2340.
|
||||
# cxx_generalized_initializers Initializer lists, as defined in N2672.
|
||||
# cxx_generic_lambdas Generic lambdas, as defined in N3649.
|
||||
# cxx_inheriting_constructors Inheriting constructors, as defined in N2540.
|
||||
# cxx_inline_namespaces Inline namespaces, as defined in N2535.
|
||||
# cxx_lambdas Lambda functions, as defined in N2927.
|
||||
# cxx_lambda_init_captures Initialized lambda captures, as defined in N3648.
|
||||
# cxx_local_type_template_args Local and unnamed types as template arguments, as defined in N2657.
|
||||
# cxx_long_long_type long long type, as defined in N1811.
|
||||
# cxx_noexcept Exception specifications, as defined in N3050.
|
||||
# cxx_nonstatic_member_init Non-static data member initialization, as defined in N2756.
|
||||
# cxx_nullptr Null pointer, as defined in N2431.
|
||||
# cxx_override Override control override keyword, as defined in N2928, N3206 and N3272.
|
||||
# cxx_range_for Range-based for, as defined in N2930.
|
||||
# cxx_raw_string_literals Raw string literals, as defined in N2442.
|
||||
# cxx_reference_qualified_functions Reference qualified functions, as defined in N2439.
|
||||
# cxx_relaxed_constexpr Relaxed constexpr, as defined in N3652.
|
||||
# cxx_return_type_deduction Return type deduction on normal functions, as defined in N3386.
|
||||
# cxx_right_angle_brackets Right angle bracket parsing, as defined in N1757.
|
||||
# cxx_rvalue_references R-value references, as defined in N2118.
|
||||
# cxx_sizeof_member Size of non-static data members, as defined in N2253.
|
||||
# cxx_static_assert Static assert, as defined in N1720.
|
||||
# cxx_strong_enums Strongly typed enums, as defined in N2347.
|
||||
# cxx_thread_local Thread-local variables, as defined in N2659.
|
||||
# cxx_trailing_return_types Automatic function return type, as defined in N2541.
|
||||
# cxx_unicode_literals Unicode string literals, as defined in N2442.
|
||||
# cxx_uniform_initialization Uniform initialization, as defined in N2640.
|
||||
# cxx_unrestricted_unions Unrestricted unions, as defined in N2544.
|
||||
# cxx_user_literals User-defined literals, as defined in N2765.
|
||||
# cxx_variable_templates Variable templates, as defined in N3651.
|
||||
# cxx_variadic_macros Variadic macros, as defined in N1653.
|
||||
# cxx_variadic_templates Variadic templates, as defined in N2242.
|
||||
# cxx_template_template_parameters Template template parameters, as defined in ISO/IEC 14882:1998.
|
||||
@@ -0,0 +1,17 @@
|
||||
# Distributed under the OSI-approved MIT License. See accompanying
|
||||
# file LICENSE or https://github.com/Crascit/DownloadProject for details.
|
||||
|
||||
cmake_minimum_required(VERSION 2.8.2)
|
||||
|
||||
project(${DL_ARGS_PROJ}-download NONE)
|
||||
|
||||
include(ExternalProject)
|
||||
ExternalProject_Add(${DL_ARGS_PROJ}-download
|
||||
${DL_ARGS_UNPARSED_ARGUMENTS}
|
||||
SOURCE_DIR "${DL_ARGS_SOURCE_DIR}"
|
||||
BINARY_DIR "${DL_ARGS_BINARY_DIR}"
|
||||
CONFIGURE_COMMAND ""
|
||||
BUILD_COMMAND ""
|
||||
INSTALL_COMMAND ""
|
||||
TEST_COMMAND ""
|
||||
)
|
||||
@@ -0,0 +1,182 @@
|
||||
# Distributed under the OSI-approved MIT License. See accompanying
|
||||
# file LICENSE or https://github.com/Crascit/DownloadProject for details.
|
||||
#
|
||||
# MODULE: DownloadProject
|
||||
#
|
||||
# PROVIDES:
|
||||
# download_project( PROJ projectName
|
||||
# [PREFIX prefixDir]
|
||||
# [DOWNLOAD_DIR downloadDir]
|
||||
# [SOURCE_DIR srcDir]
|
||||
# [BINARY_DIR binDir]
|
||||
# [QUIET]
|
||||
# ...
|
||||
# )
|
||||
#
|
||||
# Provides the ability to download and unpack a tarball, zip file, git repository,
|
||||
# etc. at configure time (i.e. when the cmake command is run). How the downloaded
|
||||
# and unpacked contents are used is up to the caller, but the motivating case is
|
||||
# to download source code which can then be included directly in the build with
|
||||
# add_subdirectory() after the call to download_project(). Source and build
|
||||
# directories are set up with this in mind.
|
||||
#
|
||||
# The PROJ argument is required. The projectName value will be used to construct
|
||||
# the following variables upon exit (obviously replace projectName with its actual
|
||||
# value):
|
||||
#
|
||||
# projectName_SOURCE_DIR
|
||||
# projectName_BINARY_DIR
|
||||
#
|
||||
# The SOURCE_DIR and BINARY_DIR arguments are optional and would not typically
|
||||
# need to be provided. They can be specified if you want the downloaded source
|
||||
# and build directories to be located in a specific place. The contents of
|
||||
# projectName_SOURCE_DIR and projectName_BINARY_DIR will be populated with the
|
||||
# locations used whether you provide SOURCE_DIR/BINARY_DIR or not.
|
||||
#
|
||||
# The DOWNLOAD_DIR argument does not normally need to be set. It controls the
|
||||
# location of the temporary CMake build used to perform the download.
|
||||
#
|
||||
# The PREFIX argument can be provided to change the base location of the default
|
||||
# values of DOWNLOAD_DIR, SOURCE_DIR and BINARY_DIR. If all of those three arguments
|
||||
# are provided, then PREFIX will have no effect. The default value for PREFIX is
|
||||
# CMAKE_BINARY_DIR.
|
||||
#
|
||||
# The QUIET option can be given if you do not want to show the output associated
|
||||
# with downloading the specified project.
|
||||
#
|
||||
# In addition to the above, any other options are passed through unmodified to
|
||||
# ExternalProject_Add() to perform the actual download, patch and update steps.
|
||||
# The following ExternalProject_Add() options are explicitly prohibited (they
|
||||
# are reserved for use by the download_project() command):
|
||||
#
|
||||
# CONFIGURE_COMMAND
|
||||
# BUILD_COMMAND
|
||||
# INSTALL_COMMAND
|
||||
# TEST_COMMAND
|
||||
#
|
||||
# Only those ExternalProject_Add() arguments which relate to downloading, patching
|
||||
# and updating of the project sources are intended to be used. Also note that at
|
||||
# least one set of download-related arguments are required.
|
||||
#
|
||||
# If using CMake 3.2 or later, the UPDATE_DISCONNECTED option can be used to
|
||||
# prevent a check at the remote end for changes every time CMake is run
|
||||
# after the first successful download. See the documentation of the ExternalProject
|
||||
# module for more information. It is likely you will want to use this option if it
|
||||
# is available to you. Note, however, that the ExternalProject implementation contains
|
||||
# bugs which result in incorrect handling of the UPDATE_DISCONNECTED option when
|
||||
# using the URL download method or when specifying a SOURCE_DIR with no download
|
||||
# method. Fixes for these have been created, the last of which is scheduled for
|
||||
# inclusion in CMake 3.8.0. Details can be found here:
|
||||
#
|
||||
# https://gitlab.kitware.com/cmake/cmake/commit/bdca68388bd57f8302d3c1d83d691034b7ffa70c
|
||||
# https://gitlab.kitware.com/cmake/cmake/issues/16428
|
||||
#
|
||||
# If you experience build errors related to the update step, consider avoiding
|
||||
# the use of UPDATE_DISCONNECTED.
|
||||
#
|
||||
# EXAMPLE USAGE:
|
||||
#
|
||||
# include(DownloadProject)
|
||||
# download_project(PROJ googletest
|
||||
# GIT_REPOSITORY https://github.com/google/googletest.git
|
||||
# GIT_TAG master
|
||||
# UPDATE_DISCONNECTED 1
|
||||
# QUIET
|
||||
# )
|
||||
#
|
||||
# add_subdirectory(${googletest_SOURCE_DIR} ${googletest_BINARY_DIR})
|
||||
#
|
||||
#========================================================================================
|
||||
|
||||
|
||||
set(_DownloadProjectDir "${CMAKE_CURRENT_LIST_DIR}")
|
||||
|
||||
include(CMakeParseArguments)
|
||||
|
||||
function(download_project)
|
||||
|
||||
set(options QUIET)
|
||||
set(oneValueArgs
|
||||
PROJ
|
||||
PREFIX
|
||||
DOWNLOAD_DIR
|
||||
SOURCE_DIR
|
||||
BINARY_DIR
|
||||
# Prevent the following from being passed through
|
||||
CONFIGURE_COMMAND
|
||||
BUILD_COMMAND
|
||||
INSTALL_COMMAND
|
||||
TEST_COMMAND
|
||||
)
|
||||
set(multiValueArgs "")
|
||||
|
||||
cmake_parse_arguments(DL_ARGS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
||||
|
||||
# Hide output if requested
|
||||
if (DL_ARGS_QUIET)
|
||||
set(OUTPUT_QUIET "OUTPUT_QUIET")
|
||||
else()
|
||||
unset(OUTPUT_QUIET)
|
||||
message(STATUS "Downloading/updating ${DL_ARGS_PROJ}")
|
||||
endif()
|
||||
|
||||
# Set up where we will put our temporary CMakeLists.txt file and also
|
||||
# the base point below which the default source and binary dirs will be.
|
||||
# The prefix must always be an absolute path.
|
||||
if (NOT DL_ARGS_PREFIX)
|
||||
set(DL_ARGS_PREFIX "${CMAKE_BINARY_DIR}")
|
||||
else()
|
||||
get_filename_component(DL_ARGS_PREFIX "${DL_ARGS_PREFIX}" ABSOLUTE
|
||||
BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}")
|
||||
endif()
|
||||
if (NOT DL_ARGS_DOWNLOAD_DIR)
|
||||
set(DL_ARGS_DOWNLOAD_DIR "${DL_ARGS_PREFIX}/${DL_ARGS_PROJ}-download")
|
||||
endif()
|
||||
|
||||
# Ensure the caller can know where to find the source and build directories
|
||||
if (NOT DL_ARGS_SOURCE_DIR)
|
||||
set(DL_ARGS_SOURCE_DIR "${DL_ARGS_PREFIX}/${DL_ARGS_PROJ}-src")
|
||||
endif()
|
||||
if (NOT DL_ARGS_BINARY_DIR)
|
||||
set(DL_ARGS_BINARY_DIR "${DL_ARGS_PREFIX}/${DL_ARGS_PROJ}-build")
|
||||
endif()
|
||||
set(${DL_ARGS_PROJ}_SOURCE_DIR "${DL_ARGS_SOURCE_DIR}" PARENT_SCOPE)
|
||||
set(${DL_ARGS_PROJ}_BINARY_DIR "${DL_ARGS_BINARY_DIR}" PARENT_SCOPE)
|
||||
|
||||
# The way that CLion manages multiple configurations, it causes a copy of
|
||||
# the CMakeCache.txt to be copied across due to it not expecting there to
|
||||
# be a project within a project. This causes the hard-coded paths in the
|
||||
# cache to be copied and builds to fail. To mitigate this, we simply
|
||||
# remove the cache if it exists before we configure the new project. It
|
||||
# is safe to do so because it will be re-generated. Since this is only
|
||||
# executed at the configure step, it should not cause additional builds or
|
||||
# downloads.
|
||||
file(REMOVE "${DL_ARGS_DOWNLOAD_DIR}/CMakeCache.txt")
|
||||
|
||||
# Create and build a separate CMake project to carry out the download.
|
||||
# If we've already previously done these steps, they will not cause
|
||||
# anything to be updated, so extra rebuilds of the project won't occur.
|
||||
# Make sure to pass through CMAKE_MAKE_PROGRAM in case the main project
|
||||
# has this set to something not findable on the PATH.
|
||||
configure_file("${_DownloadProjectDir}/DownloadProject.CMakeLists.cmake.in"
|
||||
"${DL_ARGS_DOWNLOAD_DIR}/CMakeLists.txt")
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}"
|
||||
-D "CMAKE_MAKE_PROGRAM:FILE=${CMAKE_MAKE_PROGRAM}"
|
||||
.
|
||||
RESULT_VARIABLE result
|
||||
${OUTPUT_QUIET}
|
||||
WORKING_DIRECTORY "${DL_ARGS_DOWNLOAD_DIR}"
|
||||
)
|
||||
if(result)
|
||||
message(FATAL_ERROR "CMake step for ${DL_ARGS_PROJ} failed: ${result}")
|
||||
endif()
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} --build .
|
||||
RESULT_VARIABLE result
|
||||
${OUTPUT_QUIET}
|
||||
WORKING_DIRECTORY "${DL_ARGS_DOWNLOAD_DIR}"
|
||||
)
|
||||
if(result)
|
||||
message(FATAL_ERROR "Build step for ${DL_ARGS_PROJ} failed: ${result}")
|
||||
endif()
|
||||
|
||||
endfunction()
|
||||
@@ -0,0 +1,52 @@
|
||||
#
|
||||
# Try to find CORK library and include path.
|
||||
# Once done this will define
|
||||
#
|
||||
# CORK_FOUND
|
||||
# CORK_INCLUDE_DIR
|
||||
# CORK_LIBRARIES
|
||||
#
|
||||
|
||||
if(NOT CORK_FOUND)
|
||||
|
||||
FIND_PATH(CORK_INCLUDE_DIR cork.h
|
||||
PATHS
|
||||
${PROJECT_SOURCE_DIR}/../../external/cork/include
|
||||
${PROJECT_SOURCE_DIR}/../external/cork/include
|
||||
${PROJECT_SOURCE_DIR}/external/cork/include
|
||||
/usr/local/include
|
||||
/usr/X11/include
|
||||
/usr/include
|
||||
/opt/local/include
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
FIND_LIBRARY( CORK_LIBRARIES NAMES cork
|
||||
PATHS
|
||||
${PROJECT_SOURCE_DIR}/../../external/cork/lib/
|
||||
${PROJECT_SOURCE_DIR}/../external/cork/lib/
|
||||
${PROJECT_SOURCE_DIR}/external/cork/lib/
|
||||
/usr/local
|
||||
/usr/X11
|
||||
/usr
|
||||
PATH_SUFFIXES
|
||||
a
|
||||
lib64
|
||||
lib
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
SET(CORK_FOUND "NO")
|
||||
IF (CORK_INCLUDE_DIR AND CORK_LIBRARIES)
|
||||
SET(CORK_FOUND "YES")
|
||||
ENDIF (CORK_INCLUDE_DIR AND CORK_LIBRARIES)
|
||||
|
||||
if(CORK_FOUND)
|
||||
message(STATUS "Found CORK: ${CORK_INCLUDE_DIR}")
|
||||
else(CORK_FOUND)
|
||||
if (NOT CORK_FIND_QUIETLY)
|
||||
message(FATAL_ERROR "could NOT find CORK")
|
||||
endif (NOT CORK_FIND_QUIETLY)
|
||||
endif(CORK_FOUND)
|
||||
|
||||
endif(NOT CORK_FOUND)
|
||||
File diff suppressed because it is too large
Load Diff
@@ -9,10 +9,8 @@
|
||||
|
||||
# Hardcoded search paths
|
||||
set(SEARCH_PATHS
|
||||
${CMAKE_SOURCE_DIR}/mosek/9.2/tools/platform/osx64x86/
|
||||
/usr/local/mosek/7/tools/platform/osx64x86/
|
||||
/usr/local/mosek/8/tools/platform/osx64x86/
|
||||
/usr/local/mosek/9.2/tools/platform/osx64x86/
|
||||
/opt/mosek/7/tools/platform/linux64x86/
|
||||
)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2013-2019, Ruslan Baratov
|
||||
# Copyright (c) 2013-2018, Ruslan Baratov
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
@@ -59,9 +59,8 @@ include(CMakeParseArguments) # cmake_parse_arguments
|
||||
option(HUNTER_STATUS_PRINT "Print working status" ON)
|
||||
option(HUNTER_STATUS_DEBUG "Print a lot info" OFF)
|
||||
option(HUNTER_TLS_VERIFY "Enable/disable TLS certificate checking on downloads" ON)
|
||||
set(HUNTER_ROOT "" CACHE FILEPATH "Override the HUNTER_ROOT.")
|
||||
|
||||
set(HUNTER_ERROR_PAGE "https://hunter.readthedocs.io/en/latest/reference/errors")
|
||||
set(HUNTER_WIKI "https://github.com/ruslo/hunter/wiki")
|
||||
|
||||
function(hunter_gate_status_print)
|
||||
if(HUNTER_STATUS_PRINT OR HUNTER_STATUS_DEBUG)
|
||||
@@ -80,9 +79,9 @@ function(hunter_gate_status_debug)
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
function(hunter_gate_error_page error_page)
|
||||
message("------------------------------ ERROR ------------------------------")
|
||||
message(" ${HUNTER_ERROR_PAGE}/${error_page}.html")
|
||||
function(hunter_gate_wiki wiki_page)
|
||||
message("------------------------------ WIKI -------------------------------")
|
||||
message(" ${HUNTER_WIKI}/${wiki_page}")
|
||||
message("-------------------------------------------------------------------")
|
||||
message("")
|
||||
message(FATAL_ERROR "")
|
||||
@@ -95,13 +94,14 @@ function(hunter_gate_internal_error)
|
||||
endforeach()
|
||||
message("[hunter ** INTERNAL **] [Directory:${CMAKE_CURRENT_LIST_DIR}]")
|
||||
message("")
|
||||
hunter_gate_error_page("error.internal")
|
||||
hunter_gate_wiki("error.internal")
|
||||
endfunction()
|
||||
|
||||
function(hunter_gate_fatal_error)
|
||||
cmake_parse_arguments(hunter "" "ERROR_PAGE" "" "${ARGV}")
|
||||
if("${hunter_ERROR_PAGE}" STREQUAL "")
|
||||
hunter_gate_internal_error("Expected ERROR_PAGE")
|
||||
cmake_parse_arguments(hunter "" "WIKI" "" "${ARGV}")
|
||||
string(COMPARE EQUAL "${hunter_WIKI}" "" have_no_wiki)
|
||||
if(have_no_wiki)
|
||||
hunter_gate_internal_error("Expected wiki")
|
||||
endif()
|
||||
message("")
|
||||
foreach(x ${hunter_UNPARSED_ARGUMENTS})
|
||||
@@ -109,11 +109,11 @@ function(hunter_gate_fatal_error)
|
||||
endforeach()
|
||||
message("[hunter ** FATAL ERROR **] [Directory:${CMAKE_CURRENT_LIST_DIR}]")
|
||||
message("")
|
||||
hunter_gate_error_page("${hunter_ERROR_PAGE}")
|
||||
hunter_gate_wiki("${hunter_WIKI}")
|
||||
endfunction()
|
||||
|
||||
function(hunter_gate_user_error)
|
||||
hunter_gate_fatal_error(${ARGV} ERROR_PAGE "error.incorrect.input.data")
|
||||
hunter_gate_fatal_error(${ARGV} WIKI "error.incorrect.input.data")
|
||||
endfunction()
|
||||
|
||||
function(hunter_gate_self root version sha1 result)
|
||||
@@ -149,21 +149,24 @@ endfunction()
|
||||
# Set HUNTER_GATE_ROOT cmake variable to suitable value.
|
||||
function(hunter_gate_detect_root)
|
||||
# Check CMake variable
|
||||
if(HUNTER_ROOT)
|
||||
string(COMPARE NOTEQUAL "${HUNTER_ROOT}" "" not_empty)
|
||||
if(not_empty)
|
||||
set(HUNTER_GATE_ROOT "${HUNTER_ROOT}" PARENT_SCOPE)
|
||||
hunter_gate_status_debug("HUNTER_ROOT detected by cmake variable")
|
||||
return()
|
||||
endif()
|
||||
|
||||
# Check environment variable
|
||||
if(DEFINED ENV{HUNTER_ROOT})
|
||||
string(COMPARE NOTEQUAL "$ENV{HUNTER_ROOT}" "" not_empty)
|
||||
if(not_empty)
|
||||
set(HUNTER_GATE_ROOT "$ENV{HUNTER_ROOT}" PARENT_SCOPE)
|
||||
hunter_gate_status_debug("HUNTER_ROOT detected by environment variable")
|
||||
return()
|
||||
endif()
|
||||
|
||||
# Check HOME environment variable
|
||||
if(DEFINED ENV{HOME})
|
||||
string(COMPARE NOTEQUAL "$ENV{HOME}" "" result)
|
||||
if(result)
|
||||
set(HUNTER_GATE_ROOT "$ENV{HOME}/.hunter" PARENT_SCOPE)
|
||||
hunter_gate_status_debug("HUNTER_ROOT set using HOME environment variable")
|
||||
return()
|
||||
@@ -171,7 +174,8 @@ function(hunter_gate_detect_root)
|
||||
|
||||
# Check SYSTEMDRIVE and USERPROFILE environment variable (windows only)
|
||||
if(WIN32)
|
||||
if(DEFINED ENV{SYSTEMDRIVE})
|
||||
string(COMPARE NOTEQUAL "$ENV{SYSTEMDRIVE}" "" result)
|
||||
if(result)
|
||||
set(HUNTER_GATE_ROOT "$ENV{SYSTEMDRIVE}/.hunter" PARENT_SCOPE)
|
||||
hunter_gate_status_debug(
|
||||
"HUNTER_ROOT set using SYSTEMDRIVE environment variable"
|
||||
@@ -179,7 +183,8 @@ function(hunter_gate_detect_root)
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(DEFINED ENV{USERPROFILE})
|
||||
string(COMPARE NOTEQUAL "$ENV{USERPROFILE}" "" result)
|
||||
if(result)
|
||||
set(HUNTER_GATE_ROOT "$ENV{USERPROFILE}/.hunter" PARENT_SCOPE)
|
||||
hunter_gate_status_debug(
|
||||
"HUNTER_ROOT set using USERPROFILE environment variable"
|
||||
@@ -190,7 +195,7 @@ function(hunter_gate_detect_root)
|
||||
|
||||
hunter_gate_fatal_error(
|
||||
"Can't detect HUNTER_ROOT"
|
||||
ERROR_PAGE "error.detect.hunter.root"
|
||||
WIKI "error.detect.hunter.root"
|
||||
)
|
||||
endfunction()
|
||||
|
||||
@@ -209,7 +214,7 @@ function(hunter_gate_download dir)
|
||||
"Settings:"
|
||||
" HUNTER_ROOT: ${HUNTER_GATE_ROOT}"
|
||||
" HUNTER_SHA1: ${HUNTER_GATE_SHA1}"
|
||||
ERROR_PAGE "error.run.install"
|
||||
WIKI "error.run.install"
|
||||
)
|
||||
endif()
|
||||
string(COMPARE EQUAL "${dir}" "" is_bad)
|
||||
@@ -395,7 +400,7 @@ macro(HunterGate)
|
||||
hunter_gate_fatal_error(
|
||||
"Please set HunterGate *before* 'project' command. "
|
||||
"Detected project: ${PROJECT_NAME}"
|
||||
ERROR_PAGE "error.huntergate.before.project"
|
||||
WIKI "error.huntergate.before.project"
|
||||
)
|
||||
endif()
|
||||
|
||||
@@ -465,7 +470,7 @@ macro(HunterGate)
|
||||
"HUNTER_ROOT (${HUNTER_GATE_ROOT}) contains spaces."
|
||||
"Set HUNTER_ALLOW_SPACES_IN_PATH=ON to skip this error"
|
||||
"(Use at your own risk!)"
|
||||
ERROR_PAGE "error.spaces.in.hunter.root"
|
||||
WIKI "error.spaces.in.hunter.root"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
@@ -513,9 +518,7 @@ macro(HunterGate)
|
||||
hunter_gate_internal_error("${_sha1_location} not found")
|
||||
endif()
|
||||
file(READ "${_sha1_location}" _sha1_value)
|
||||
string(TOLOWER "${_sha1_value}" _sha1_value_lower)
|
||||
string(TOLOWER "${HUNTER_GATE_SHA1}" _HUNTER_GATE_SHA1_lower)
|
||||
string(COMPARE EQUAL "${_sha1_value_lower}" "${_HUNTER_GATE_SHA1_lower}" _is_equal)
|
||||
string(COMPARE EQUAL "${_sha1_value}" "${HUNTER_GATE_SHA1}" _is_equal)
|
||||
if(NOT _is_equal)
|
||||
hunter_gate_internal_error(
|
||||
"Short SHA1 collision:"
|
||||
@@ -0,0 +1,190 @@
|
||||
################################################################################
|
||||
include(DownloadProject)
|
||||
|
||||
# With CMake 3.8 and above, we can hide warnings about git being in a
|
||||
# detached head by passing an extra GIT_CONFIG option.
|
||||
set(LIBIGL_EXTRA_OPTIONS TLS_VERIFY OFF)
|
||||
if(NOT (${CMAKE_VERSION} VERSION_LESS "3.8.0"))
|
||||
list(APPEND LIBIGL_EXTRA_OPTIONS GIT_CONFIG advice.detachedHead=false)
|
||||
endif()
|
||||
|
||||
# On CMake 3.6.3 and above, there is an option to use shallow clones of git repositories.
|
||||
# The shallow clone option only works with real tags, not SHA1, so we use a separate option.
|
||||
set(LIBIGL_BRANCH_OPTIONS)
|
||||
if(NOT (${CMAKE_VERSION} VERSION_LESS "3.6.3"))
|
||||
# Disabled for now until we can make sure that it has no adverse effects
|
||||
# (Downside is that the eigen mirror is huge again)
|
||||
# list(APPEND LIBIGL_BRANCH_OPTIONS GIT_SHALLOW 1)
|
||||
endif()
|
||||
|
||||
option(LIBIGL_SKIP_DOWNLOAD "Skip downloading external libraries" OFF)
|
||||
|
||||
# Shortcut functions
|
||||
function(igl_download_project_aux name source)
|
||||
if(NOT LIBIGL_SKIP_DOWNLOAD)
|
||||
download_project(
|
||||
PROJ ${name}
|
||||
SOURCE_DIR "${source}"
|
||||
DOWNLOAD_DIR "${LIBIGL_EXTERNAL}/.cache/${name}"
|
||||
QUIET
|
||||
${LIBIGL_EXTRA_OPTIONS}
|
||||
${ARGN}
|
||||
)
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
function(igl_download_project name)
|
||||
igl_download_project_aux(${name} "${LIBIGL_EXTERNAL}/${name}" ${ARGN})
|
||||
endfunction()
|
||||
|
||||
################################################################################
|
||||
|
||||
## CGAL
|
||||
function(igl_download_cgal)
|
||||
igl_download_project(cgal
|
||||
GIT_REPOSITORY https://github.com/CGAL/cgal.git
|
||||
GIT_TAG f7c3c8212b56c0d6dae63787efc99093f4383415
|
||||
)
|
||||
endfunction()
|
||||
|
||||
## CoMISo
|
||||
function(igl_download_comiso)
|
||||
igl_download_project(CoMISo
|
||||
GIT_REPOSITORY https://github.com/libigl/CoMISo.git
|
||||
GIT_TAG 1f9618cf9b7bd77370d817976470d59091928606
|
||||
)
|
||||
endfunction()
|
||||
|
||||
## Cork
|
||||
function(igl_download_cork)
|
||||
igl_download_project(cork
|
||||
GIT_REPOSITORY https://github.com/libigl/cork.git
|
||||
GIT_TAG 27ad8a285838f5a480d856429e39d3d56d4338f9
|
||||
)
|
||||
endfunction()
|
||||
|
||||
## Eigen
|
||||
set(LIBIGL_EIGEN_VERSION 3.3.7 CACHE STRING "Default version of Eigen used by libigl.")
|
||||
function(igl_download_eigen)
|
||||
igl_download_project(eigen
|
||||
GIT_REPOSITORY https://github.com/eigenteam/eigen-git-mirror.git
|
||||
GIT_TAG ${LIBIGL_EIGEN_VERSION}
|
||||
${LIBIGL_BRANCH_OPTIONS}
|
||||
)
|
||||
endfunction()
|
||||
|
||||
## Embree
|
||||
function(igl_download_embree)
|
||||
igl_download_project(embree
|
||||
GIT_REPOSITORY https://github.com/embree/embree.git
|
||||
GIT_TAG v3.5.2
|
||||
${LIBIGL_BRANCH_OPTIONS}
|
||||
)
|
||||
endfunction()
|
||||
|
||||
## glad
|
||||
function(igl_download_glad)
|
||||
igl_download_project(glad
|
||||
GIT_REPOSITORY https://github.com/libigl/libigl-glad.git
|
||||
GIT_TAG 09b4969c56779f7ddf8e6176ec1873184aec890f
|
||||
)
|
||||
endfunction()
|
||||
|
||||
## GLFW
|
||||
function(igl_download_glfw)
|
||||
igl_download_project(glfw
|
||||
GIT_REPOSITORY https://github.com/glfw/glfw.git
|
||||
GIT_TAG 3.3
|
||||
${LIBIGL_BRANCH_OPTIONS}
|
||||
)
|
||||
endfunction()
|
||||
|
||||
## ImGui
|
||||
function(igl_download_imgui)
|
||||
igl_download_project(imgui
|
||||
GIT_REPOSITORY https://github.com/ocornut/imgui.git
|
||||
GIT_TAG v1.69
|
||||
${LIBIGL_BRANCH_OPTIONS}
|
||||
)
|
||||
igl_download_project(libigl-imgui
|
||||
GIT_REPOSITORY https://github.com/libigl/libigl-imgui.git
|
||||
GIT_TAG 07ecd3858acc71e70f0f9b2dea20a139bdddf8ae
|
||||
)
|
||||
endfunction()
|
||||
|
||||
## pybind11
|
||||
function(igl_download_pybind11)
|
||||
igl_download_project(pybind11
|
||||
GIT_REPOSITORY https://github.com/pybind/pybind11.git
|
||||
GIT_TAG 2d0507db43cd5a117f7843e053b17dffca114107
|
||||
)
|
||||
endfunction()
|
||||
|
||||
## stb_image
|
||||
function(igl_download_stb)
|
||||
igl_download_project(stb
|
||||
GIT_REPOSITORY https://github.com/libigl/libigl-stb.git
|
||||
GIT_TAG cd0fa3fcd90325c83be4d697b00214e029f94ca3
|
||||
)
|
||||
endfunction()
|
||||
|
||||
## TetGen
|
||||
function(igl_download_tetgen)
|
||||
igl_download_project(tetgen
|
||||
GIT_REPOSITORY https://github.com/jdumas/tetgen.git
|
||||
GIT_TAG c63e7a6434652b8a2065c835bd9d6d298db1a0bc
|
||||
)
|
||||
endfunction()
|
||||
|
||||
## TinyXML
|
||||
function(igl_download_tinyxml2)
|
||||
igl_download_project(tinyxml2
|
||||
GIT_REPOSITORY https://github.com/leethomason/tinyxml2.git
|
||||
GIT_TAG d175e9de0be0d4db75d0a8cf065599a435a87eb6
|
||||
)
|
||||
endfunction()
|
||||
|
||||
## Triangle
|
||||
function(igl_download_triangle)
|
||||
igl_download_project(triangle
|
||||
GIT_REPOSITORY https://github.com/libigl/triangle.git
|
||||
GIT_TAG d284c4a843efac043c310f5fa640b17cf7d96170
|
||||
)
|
||||
endfunction()
|
||||
|
||||
## Catch2
|
||||
function(igl_download_catch2)
|
||||
igl_download_project(catch2
|
||||
GIT_REPOSITORY https://github.com/catchorg/Catch2.git
|
||||
GIT_TAG 03d122a35c3f5c398c43095a87bc82ed44642516
|
||||
)
|
||||
endfunction()
|
||||
|
||||
## Predicates
|
||||
function(igl_download_predicates)
|
||||
igl_download_project(predicates
|
||||
GIT_REPOSITORY https://github.com/libigl/libigl-predicates.git
|
||||
GIT_TAG 5a1d2194ec114bff51d5a33230586cafb83adc86
|
||||
)
|
||||
endfunction()
|
||||
|
||||
################################################################################
|
||||
|
||||
## Test data
|
||||
function(igl_download_test_data)
|
||||
igl_download_project_aux(test_data
|
||||
"${LIBIGL_EXTERNAL}/../tests/data"
|
||||
GIT_REPOSITORY https://github.com/libigl/libigl-tests-data
|
||||
GIT_TAG 5994ecdab65aebc6c218c4c6f35e7822acf6fe99
|
||||
)
|
||||
endfunction()
|
||||
|
||||
## Tutorial data
|
||||
function(igl_download_tutorial_data)
|
||||
igl_download_project_aux(tutorial_data
|
||||
"${LIBIGL_EXTERNAL}/../tutorial/data"
|
||||
GIT_REPOSITORY https://github.com/libigl/libigl-tutorial-data
|
||||
GIT_TAG 5c6a1ea809c043d71e5595775709c15325a7158c
|
||||
)
|
||||
endfunction()
|
||||
|
||||
@@ -0,0 +1,116 @@
|
||||
# Sort projects inside the solution
|
||||
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
||||
|
||||
function(igl_folder_targets FOLDER_NAME)
|
||||
foreach(target IN ITEMS ${ARGN})
|
||||
if(TARGET ${target})
|
||||
get_target_property(TYPE ${target} TYPE)
|
||||
if(NOT (TYPE STREQUAL "INTERFACE_LIBRARY"))
|
||||
set_target_properties(${target} PROPERTIES FOLDER "${FOLDER_NAME}")
|
||||
endif()
|
||||
endif()
|
||||
endforeach()
|
||||
endfunction()
|
||||
|
||||
function(igl_set_folders)
|
||||
|
||||
igl_folder_targets("ThirdParty/Embree"
|
||||
algorithms
|
||||
embree
|
||||
lexers
|
||||
math
|
||||
simd
|
||||
sys
|
||||
tasking
|
||||
)
|
||||
|
||||
igl_folder_targets("ThirdParty"
|
||||
CoMISo
|
||||
glad
|
||||
glfw
|
||||
imgui
|
||||
predicates
|
||||
tetgen
|
||||
tinyxml2
|
||||
triangle
|
||||
)
|
||||
|
||||
igl_folder_targets("Libigl"
|
||||
igl
|
||||
igl_comiso
|
||||
igl_embree
|
||||
igl_opengl
|
||||
igl_opengl_glfw
|
||||
igl_opengl_glfw_imgui
|
||||
igl_png
|
||||
igl_predicates
|
||||
igl_stb_image
|
||||
igl_tetgen
|
||||
igl_triangle
|
||||
igl_xml
|
||||
)
|
||||
|
||||
igl_folder_targets("Unit Tests"
|
||||
libigl_tests
|
||||
)
|
||||
|
||||
igl_folder_targets("Tutorials"
|
||||
101_FileIO_bin
|
||||
102_DrawMesh_bin
|
||||
103_Events_bin
|
||||
104_Colors_bin
|
||||
105_Overlays_bin
|
||||
106_ViewerMenu_bin
|
||||
107_MultipleMeshes_bin
|
||||
108_MultipleViews_bin
|
||||
201_Normals_bin
|
||||
202_GaussianCurvature_bin
|
||||
203_CurvatureDirections_bin
|
||||
204_Gradient_bin
|
||||
205_Laplacian_bin
|
||||
206_GeodesicDistance_bin
|
||||
301_Slice_bin
|
||||
302_Sort_bin
|
||||
303_LaplaceEquation_bin
|
||||
304_LinearEqualityConstraints_bin
|
||||
305_QuadraticProgramming_bin
|
||||
306_EigenDecomposition_bin
|
||||
401_BiharmonicDeformation_bin
|
||||
402_PolyharmonicDeformation_bin
|
||||
403_BoundedBiharmonicWeights_bin
|
||||
404_DualQuaternionSkinning_bin
|
||||
405_AsRigidAsPossible_bin
|
||||
406_FastAutomaticSkinningTransformations_bin
|
||||
407_BiharmonicCoordinates_bin
|
||||
501_HarmonicParam_bin
|
||||
502_LSCMParam_bin
|
||||
503_ARAPParam_bin
|
||||
504_NRosyDesign_bin
|
||||
505_MIQ_bin
|
||||
506_FrameField_bin
|
||||
507_Planarization_bin
|
||||
601_Serialization_bin
|
||||
604_Triangle_bin
|
||||
605_Tetgen_bin
|
||||
606_AmbientOcclusion_bin
|
||||
607_ScreenCapture_bin
|
||||
701_Statistics_bin
|
||||
702_WindingNumber_bin
|
||||
703_Decimation_bin
|
||||
704_SignedDistance_bin
|
||||
705_MarchingCubes_bin
|
||||
706_FacetOrientation_bin
|
||||
707_SweptVolume_bin
|
||||
708_Picking_bin
|
||||
709_SLIM_bin
|
||||
710_SCAF_bin
|
||||
711_Subdivision_bin
|
||||
712_DataSmoothing_bin
|
||||
713_ShapeUp_bin
|
||||
714_MarchingTets_bin
|
||||
715_MeshImplicitFunction_bin
|
||||
716_HeatGeodesics_bin
|
||||
718_IterativeClosestPoint_bin
|
||||
)
|
||||
|
||||
endfunction()
|
||||
@@ -0,0 +1,22 @@
|
||||
if(MSVC)
|
||||
if("${MSVC_RUNTIME}" STREQUAL "")
|
||||
set(MSVC_RUNTIME "static")
|
||||
endif()
|
||||
if(${MSVC_RUNTIME} STREQUAL "static")
|
||||
message(STATUS "MSVC -> forcing use of statically-linked runtime.")
|
||||
foreach(config ${CMAKE_CONFIGURATION_TYPES})
|
||||
string(TOUPPER ${config} config)
|
||||
string(REPLACE /MD /MT CMAKE_C_FLAGS_${config} "${CMAKE_C_FLAGS_${config}}")
|
||||
string(REPLACE /MD /MT CMAKE_CXX_FLAGS_${config} "${CMAKE_CXX_FLAGS_${config}}")
|
||||
endforeach()
|
||||
string(REPLACE "/MDd" "/MTd" CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG})
|
||||
else()
|
||||
message(STATUS "MSVC -> forcing use of dynamically-linked runtime.")
|
||||
foreach(config ${CMAKE_CONFIGURATION_TYPES})
|
||||
string(TOUPPER ${config} config)
|
||||
string(REPLACE /MT /MD CMAKE_C_FLAGS_${config} "${CMAKE_C_FLAGS_${config}}")
|
||||
string(REPLACE /MT /MD CMAKE_CXX_FLAGS_${config} "${CMAKE_CXX_FLAGS_${config}}")
|
||||
endforeach()
|
||||
string(REPLACE "/MTd" "/MDd" CMAKE_CXX_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG})
|
||||
endif()
|
||||
endif()
|
||||
@@ -1,80 +0,0 @@
|
||||
# Creates a CMake target for a given libigl module. This convenience function also defines common
|
||||
# compilation flags, as well as installation rules for the target. Target sources and dependencies
|
||||
# need to be added separately.
|
||||
function(igl_add_library module_name)
|
||||
# Check if category is `copyleft` or `restricted`
|
||||
if(${module_name} MATCHES "^igl_copyleft")
|
||||
set(suffix "_copyleft")
|
||||
elseif(${module_name} MATCHES "^igl_restricted")
|
||||
set(suffix "_restricted")
|
||||
else()
|
||||
set(suffix "")
|
||||
endif()
|
||||
|
||||
# Check module name
|
||||
if(NOT ${module_name} MATCHES "^igl_")
|
||||
message(FATAL_ERROR "Libigl module name should start with 'igl_'")
|
||||
endif()
|
||||
string(REPLACE "igl${suffix}_" "" module_shortname ${module_name})
|
||||
|
||||
# Define target
|
||||
if(LIBIGL_USE_STATIC_LIBRARY)
|
||||
add_library(${module_name} STATIC)
|
||||
else()
|
||||
add_library(${module_name} INTERFACE)
|
||||
endif()
|
||||
|
||||
# Alias target name
|
||||
message(STATUS "Creating target: igl${suffix}::${module_shortname} (${module_name})")
|
||||
add_library(igl${suffix}::${module_shortname} ALIAS ${module_name})
|
||||
|
||||
# Compile definitions
|
||||
if(LIBIGL_USE_STATIC_LIBRARY)
|
||||
target_compile_definitions(${module_name} ${IGL_SCOPE} -DIGL_STATIC_LIBRARY)
|
||||
endif()
|
||||
|
||||
# C++17 features
|
||||
target_compile_features(${module_name} ${IGL_SCOPE} cxx_std_17)
|
||||
|
||||
if(LIBIGL_WARNINGS_AS_ERRORS)
|
||||
target_compile_options(${module_name} PRIVATE -Wall -Wextra -Wpedantic -Wno-sign-compare -Werror -Wno-gnu -Wno-unknown-pragmas)
|
||||
endif()
|
||||
|
||||
# Other compilation flags
|
||||
if(MSVC)
|
||||
# Enable parallel compilation for Visual Studio
|
||||
target_compile_options(${module_name} ${IGL_SCOPE} $<$<COMPILE_LANGUAGE:CXX>:/MP> $<$<COMPILE_LANGUAGE:CXX>:/bigobj>)
|
||||
target_compile_definitions(${module_name} ${IGL_SCOPE} -DNOMINMAX)
|
||||
|
||||
|
||||
# Silencing some compilation warnings
|
||||
if(LIBIGL_USE_STATIC_LIBRARY)
|
||||
target_compile_options(${module_name} PRIVATE
|
||||
# Type conversion warnings. These can be fixed with some effort and possibly more verbose code.
|
||||
/wd4267 # conversion from 'size_t' to 'type', possible loss of data
|
||||
/wd4244 # conversion from 'type1' to 'type2', possible loss of data
|
||||
/wd4018 # signed/unsigned mismatch
|
||||
/wd4305 # truncation from 'double' to 'float'
|
||||
# This one is from template instantiations generated by autoexplicit.sh:
|
||||
/wd4667 # no function template defined that matches forced instantiation ()
|
||||
# This one is easy to fix, just need to switch to safe version of C functions
|
||||
/wd4996 # this function or variable may be unsafe
|
||||
# This one is when using bools in adjacency matrices
|
||||
/wd4804 #'+=': unsafe use of type 'bool' in operation
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Generate position independent code
|
||||
if(LIBIGL_POSITION_INDEPENDENT_CODE)
|
||||
set_target_properties(${module_name} PROPERTIES INTERFACE_POSITION_INDEPENDENT_CODE ON)
|
||||
if(LIBIGL_USE_STATIC_LIBRARY)
|
||||
set_target_properties(${module_name} PROPERTIES POSITION_INDEPENDENT_CODE ON)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Folder for IDE
|
||||
if(LIBIGL_USE_STATIC_LIBRARY OR CMAKE_VERSION VERSION_GREATER_EQUAL 3.19.0)
|
||||
set_target_properties(${module_name} PROPERTIES FOLDER "Libigl")
|
||||
endif()
|
||||
endfunction()
|
||||
@@ -1,51 +0,0 @@
|
||||
function(igl_add_test module_name)
|
||||
if(NOT LIBIGL_BUILD_TESTS)
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(NOT TARGET ${module_name})
|
||||
message(FATAL_ERROR "'${module_name}' is not a CMake target")
|
||||
endif()
|
||||
|
||||
# Check if category is `copyleft` or `restricted`
|
||||
if(${module_name} MATCHES "^igl_copyleft")
|
||||
set(suffix "_copyleft")
|
||||
elseif(${module_name} MATCHES "^igl_restricted")
|
||||
set(suffix "_restricted")
|
||||
else()
|
||||
set(suffix "")
|
||||
endif()
|
||||
|
||||
# Create test executable
|
||||
add_executable(test_${module_name}
|
||||
${libigl_SOURCE_DIR}/tests/main.cpp
|
||||
${libigl_SOURCE_DIR}/tests/test_common.h
|
||||
${ARGN}
|
||||
)
|
||||
|
||||
# Include headers
|
||||
target_include_directories(test_${module_name} PUBLIC ${libigl_SOURCE_DIR}/tests)
|
||||
|
||||
# Compile definitions
|
||||
target_compile_definitions(test_${module_name} PUBLIC CATCH_CONFIG_ENABLE_BENCHMARKING)
|
||||
|
||||
# Dependencies
|
||||
include(catch2)
|
||||
include(libigl_tests_data)
|
||||
target_link_libraries(test_${module_name} PUBLIC
|
||||
${module_name}
|
||||
igl::tests_data
|
||||
Catch2::Catch2
|
||||
)
|
||||
|
||||
# IDE Folder
|
||||
set_target_properties(test_${module_name} PROPERTIES FOLDER Libigl_Tests)
|
||||
|
||||
# Output directory
|
||||
set_target_properties(test_${module_name} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/tests")
|
||||
|
||||
# Register tests
|
||||
FetchContent_GetProperties(catch2)
|
||||
include("${catch2_SOURCE_DIR}/contrib/Catch.cmake")
|
||||
catch_discover_tests(test_${module_name})
|
||||
endfunction()
|
||||
@@ -1,29 +0,0 @@
|
||||
function(igl_add_tutorial name)
|
||||
# Only create tutorial if dependencies have been enabled in the current build
|
||||
foreach(module IN ITEMS ${ARGN})
|
||||
if(NOT TARGET ${module})
|
||||
return()
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
message(STATUS "Creating libigl tutorial: ${name}")
|
||||
# get all cpp files in ${CMAKE_CURRENT_SOURCE_DIR}/${name}/
|
||||
file(GLOB SRCFILES ${CMAKE_CURRENT_SOURCE_DIR}/${name}/*.cpp)
|
||||
add_executable(${name} ${SRCFILES})
|
||||
target_link_libraries(${name} PRIVATE
|
||||
igl::core
|
||||
igl::tutorial_data
|
||||
${ARGN}
|
||||
)
|
||||
|
||||
set_target_properties(${name} PROPERTIES FOLDER Libigl_Tutorials)
|
||||
|
||||
# Do this codesign only on macOS
|
||||
# add_custom_command(TARGET your_target POST_BUILD COMMAND codesign -s - $<TARGET_FILE:your_target>
|
||||
if(APPLE)
|
||||
add_custom_command(TARGET ${name} POST_BUILD
|
||||
COMMAND codesign -f -s - $<TARGET_FILE:${name}>
|
||||
COMMENT "Codesigning ${name}"
|
||||
)
|
||||
endif()
|
||||
endfunction()
|
||||
@@ -1,101 +0,0 @@
|
||||
# Transitively list all link libraries of a target (recursive call)
|
||||
function(igl_get_dependencies_recursive OUTPUT_VARIABLE TARGET)
|
||||
get_target_property(_aliased ${TARGET} ALIASED_TARGET)
|
||||
if(_aliased)
|
||||
set(TARGET ${_aliased})
|
||||
endif()
|
||||
|
||||
get_target_property(_IMPORTED ${TARGET} IMPORTED)
|
||||
get_target_property(_TYPE ${TARGET} TYPE)
|
||||
if(_IMPORTED OR (${_TYPE} STREQUAL "INTERFACE_LIBRARY"))
|
||||
get_target_property(TARGET_DEPENDENCIES ${TARGET} INTERFACE_LINK_LIBRARIES)
|
||||
else()
|
||||
get_target_property(TARGET_DEPENDENCIES ${TARGET} LINK_LIBRARIES)
|
||||
endif()
|
||||
|
||||
# MKL-specific list of runtime dependencies
|
||||
get_property(RUNTIME_DEPENDENCIES TARGET ${TARGET} PROPERTY mkl_RUNTIME_DEPENDENCIES)
|
||||
if(RUNTIME_DEPENDENCIES)
|
||||
list(APPEND TARGET_DEPENDENCIES ${RUNTIME_DEPENDENCIES})
|
||||
endif()
|
||||
|
||||
set(VISITED_TARGETS ${${OUTPUT_VARIABLE}})
|
||||
foreach(DEPENDENCY IN ITEMS ${TARGET_DEPENDENCIES})
|
||||
if(TARGET ${DEPENDENCY})
|
||||
get_target_property(_aliased ${DEPENDENCY} ALIASED_TARGET)
|
||||
if(_aliased)
|
||||
set(DEPENDENCY ${_aliased})
|
||||
endif()
|
||||
|
||||
if(NOT (DEPENDENCY IN_LIST VISITED_TARGETS))
|
||||
list(APPEND VISITED_TARGETS ${DEPENDENCY})
|
||||
igl_get_dependencies_recursive(VISITED_TARGETS ${DEPENDENCY})
|
||||
endif()
|
||||
endif()
|
||||
endforeach()
|
||||
set(${OUTPUT_VARIABLE} ${VISITED_TARGETS} PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
# Transitively list all link libraries of a target
|
||||
function(igl_get_dependencies OUTPUT_VARIABLE TARGET)
|
||||
set(DISCOVERED_TARGETS "")
|
||||
igl_get_dependencies_recursive(DISCOVERED_TARGETS ${TARGET})
|
||||
set(${OUTPUT_VARIABLE} ${DISCOVERED_TARGETS} PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
# Copy .dll dependencies to a target executable's folder. This function must be called *after* all the CMake
|
||||
# dependencies of the executable target have been defined, otherwise some .dlls might not be copied to the target
|
||||
# folder.
|
||||
function(igl_copy_dll target)
|
||||
if(NOT WIN32)
|
||||
return()
|
||||
endif()
|
||||
if(NOT TARGET ${target})
|
||||
message(STATUS "igl_copy_dll() was called with a non-target: ${target}")
|
||||
return()
|
||||
endif()
|
||||
|
||||
# Sanity checks
|
||||
get_target_property(TYPE ${target} TYPE)
|
||||
if(NOT ${TYPE} STREQUAL "EXECUTABLE")
|
||||
message(FATAL_ERROR "igl_copy_dll() was called on a non-executable target: ${target}")
|
||||
endif()
|
||||
|
||||
# Create a custom command to do the actual copy. This needs to be executed before Catch2's POST_BUILD command,
|
||||
# so we define this as a PRE_LINK command for the executable target.
|
||||
add_custom_command(
|
||||
TARGET ${target}
|
||||
PRE_LINK
|
||||
COMMAND ${CMAKE_COMMAND} -E touch "${CMAKE_BINARY_DIR}/runtime_deps/copy_dll_${target}_$<CONFIG>.cmake"
|
||||
COMMAND ${CMAKE_COMMAND} -P "${CMAKE_BINARY_DIR}/runtime_deps/copy_dll_${target}_$<CONFIG>.cmake"
|
||||
COMMENT "Copying dlls for target ${target}"
|
||||
)
|
||||
|
||||
# Retrieve all target dependencies
|
||||
igl_get_dependencies(TARGET_DEPENDENCIES ${target})
|
||||
|
||||
# Iterate over dependencies, and create a copy rule for each .dll that we find
|
||||
set(COPY_SCRIPT_CONTENT "")
|
||||
foreach(DEPENDENCY IN ITEMS ${TARGET_DEPENDENCIES})
|
||||
get_target_property(TYPE ${DEPENDENCY} TYPE)
|
||||
if(NOT (${TYPE} STREQUAL "SHARED_LIBRARY" OR ${TYPE} STREQUAL "MODULE_LIBRARY"))
|
||||
continue()
|
||||
endif()
|
||||
|
||||
# Instruction to copy target file if it exists
|
||||
string(APPEND COPY_SCRIPT_CONTENT
|
||||
"if(EXISTS \"$<TARGET_FILE:${DEPENDENCY}>\")\n "
|
||||
"execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different "
|
||||
"\"$<TARGET_FILE:${DEPENDENCY}>\" "
|
||||
"\"$<TARGET_FILE_DIR:${target}>/$<TARGET_FILE_NAME:${DEPENDENCY}>\")\n"
|
||||
"endif()\n"
|
||||
)
|
||||
endforeach()
|
||||
|
||||
# Finally generate one script for each configuration supported by this generator
|
||||
message(STATUS "Populating copy rules for target: ${target}")
|
||||
file(GENERATE
|
||||
OUTPUT ${CMAKE_BINARY_DIR}/runtime_deps/copy_dll_${target}_$<CONFIG>.cmake
|
||||
CONTENT "${COPY_SCRIPT_CONTENT}"
|
||||
)
|
||||
endfunction()
|
||||
@@ -1,56 +0,0 @@
|
||||
# Helper functions to include libigl modules
|
||||
function(_igl_include_full prefix name force)
|
||||
string(TOUPPER "${prefix}" prefix_uc)
|
||||
string(TOUPPER "${name}" name_uc)
|
||||
if(prefix_uc)
|
||||
string(PREPEND prefix_uc _)
|
||||
endif()
|
||||
string(TOLOWER "${prefix_uc}" prefix_lc)
|
||||
|
||||
if(TARGET igl${prefix_lc}::${name})
|
||||
# Target already exists, skip
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(${force} AND NOT ${name} STREQUAL "core")
|
||||
message(STATUS "Forcing include of libigl module: ${name}")
|
||||
endif()
|
||||
|
||||
# Dependencies are linked as INTERFACE targets unless libigl is compiled as a static library
|
||||
if(LIBIGL_USE_STATIC_LIBRARY)
|
||||
set(IGL_SCOPE PUBLIC)
|
||||
else()
|
||||
set(IGL_SCOPE INTERFACE)
|
||||
endif()
|
||||
|
||||
# Retrieve module path use by libigl (necessary when calling igl_include() from a subproject)
|
||||
get_property(igl_module_path GLOBAL PROPERTY __igl_module_path)
|
||||
set(CMAKE_MODULE_PATH ${igl_module_path})
|
||||
|
||||
# Include igl target definition
|
||||
if(LIBIGL${prefix_uc}_${name_uc} OR ${force})
|
||||
include(${libigl_SOURCE_DIR}/cmake/igl/modules/${prefix}/${name}.cmake)
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
# Include module only if CMake option is provided
|
||||
function(igl_include_optional name)
|
||||
if(ARGC GREATER_EQUAL 2)
|
||||
# Two args given: prefix + name
|
||||
_igl_include_full(${name} ${ARGV1} FALSE)
|
||||
else()
|
||||
# Only one arg given: prefix (which contains module name)
|
||||
_igl_include_full("" ${name} FALSE)
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
# Include module only unconditionally (e.g. if module is a dependency of another module)
|
||||
function(igl_include name)
|
||||
if(ARGC GREATER_EQUAL 2)
|
||||
# Two args given: prefix + name
|
||||
_igl_include_full(${name} ${ARGV1} TRUE)
|
||||
else()
|
||||
# Only one arg given: prefix (which contains module name)
|
||||
_igl_include_full("" ${name} TRUE)
|
||||
endif()
|
||||
endfunction()
|
||||
@@ -1,63 +0,0 @@
|
||||
function(igl_install module_name)
|
||||
if(NOT LIBIGL_INSTALL)
|
||||
return()
|
||||
endif()
|
||||
|
||||
# Check if category is `copyleft` or `restricted`
|
||||
if(${module_name} MATCHES "^igl_copyleft")
|
||||
set(suffix "_copyleft")
|
||||
elseif(${module_name} MATCHES "^igl_restricted")
|
||||
set(suffix "_restricted")
|
||||
else()
|
||||
set(suffix "")
|
||||
endif()
|
||||
|
||||
########################
|
||||
# Install CMake target #
|
||||
########################
|
||||
|
||||
set_property(TARGET ${module_name} PROPERTY EXPORT_NAME ${module_export})
|
||||
|
||||
include(GNUInstallDirs)
|
||||
install(TARGETS ${module_name}
|
||||
EXPORT LibiglTargets${suffix}
|
||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||
COMPONENT LibiglRuntime
|
||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
COMPONENT LibiglRuntime
|
||||
NAMELINK_COMPONENT LibiglDevelopment
|
||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
COMPONENT LibiglRuntime
|
||||
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
|
||||
COMPONENT LibiglDevelopment
|
||||
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
|
||||
)
|
||||
|
||||
###################
|
||||
# Install headers #
|
||||
###################
|
||||
|
||||
# TODO: When moving module definition to their own CMakeLists.txt, we should
|
||||
# refactor this to use the folder where the target was defined (via the
|
||||
# target property SOURCE_DIR).
|
||||
set(target_include_dir ${libigl_SOURCE_DIR}/include)
|
||||
foreach(source_path IN ITEMS ${ARGN})
|
||||
# Filter out .cpp files in "static lib" mode
|
||||
if(LIBIGL_USE_STATIC_LIBRARY)
|
||||
get_filename_component(extension ${source_path} LAST_EXT)
|
||||
if(extension MATCHES ".cpp")
|
||||
continue()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Compute relative path to copy
|
||||
get_filename_component(source_directory ${source_path} DIRECTORY)
|
||||
file(RELATIVE_PATH source_subdir ${target_include_dir} ${source_directory})
|
||||
|
||||
# Create install rule to copy specific header
|
||||
install(
|
||||
FILES ${source_path}
|
||||
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${source_subdir}
|
||||
)
|
||||
endforeach()
|
||||
endfunction()
|
||||
@@ -1,8 +0,0 @@
|
||||
function(igl_target_sources module_name)
|
||||
if(${CMAKE_VERSION} VERSION_LESS 3.19 AND NOT LIBIGL_USE_STATIC_LIBRARY)
|
||||
# Old approach: defines a dummy custom target for the IDE
|
||||
add_custom_target(${module_name}_ SOURCES ${ARGN})
|
||||
else()
|
||||
target_sources(${module_name} PRIVATE ${ARGN})
|
||||
endif()
|
||||
endfunction()
|
||||
@@ -1,7 +0,0 @@
|
||||
if(MSVC)
|
||||
# https://github.com/mozilla/sccache/issues/242
|
||||
if(CMAKE_CXX_COMPILER_LAUNCHER STREQUAL "sccache")
|
||||
string(REGEX REPLACE "/Z[iI7]" "" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Z7")
|
||||
endif()
|
||||
endif()
|
||||
@@ -1,7 +0,0 @@
|
||||
@PACKAGE_INIT@
|
||||
|
||||
include(CMakeFindDependencyMacro)
|
||||
find_dependency(Eigen3 REQUIRED)
|
||||
find_dependency(Threads REQUIRED)
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/LibiglConfigTargets.cmake")
|
||||
check_required_components(Libigl)
|
||||
@@ -1,34 +0,0 @@
|
||||
# 1. Define module
|
||||
igl_add_library(igl_copyleft_cgal)
|
||||
|
||||
# 2. Include headers
|
||||
include(GNUInstallDirs)
|
||||
target_include_directories(igl_copyleft_cgal ${IGL_SCOPE}
|
||||
$<BUILD_INTERFACE:${libigl_SOURCE_DIR}/include>
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
||||
)
|
||||
|
||||
# 3. Target sources
|
||||
file(GLOB INC_FILES "${libigl_SOURCE_DIR}/include/igl/copyleft/cgal/*.h")
|
||||
file(GLOB SRC_FILES "${libigl_SOURCE_DIR}/include/igl/copyleft/cgal/*.cpp")
|
||||
igl_target_sources(igl_copyleft_cgal ${INC_FILES} ${SRC_FILES})
|
||||
|
||||
# 4. Dependencies
|
||||
include(cgal)
|
||||
igl_include(copyleft core)
|
||||
target_link_libraries(igl_copyleft_cgal ${IGL_SCOPE}
|
||||
igl::core
|
||||
igl_copyleft::core
|
||||
CGAL::CGAL
|
||||
CGAL::CGAL_Core
|
||||
)
|
||||
|
||||
# 5. Unit tests
|
||||
file(GLOB SRC_FILES
|
||||
"${libigl_SOURCE_DIR}/tests/include/igl/copyleft/boolean/*.cpp"
|
||||
"${libigl_SOURCE_DIR}/tests/include/igl/copyleft/cgal/*.cpp"
|
||||
)
|
||||
igl_add_test(igl_copyleft_cgal ${SRC_FILES})
|
||||
if(TARGET test_igl_copyleft_cgal)
|
||||
igl_copy_dll(test_igl_copyleft_cgal)
|
||||
endif()
|
||||
@@ -1,19 +0,0 @@
|
||||
# 1. Define module
|
||||
igl_add_library(igl_copyleft_core)
|
||||
|
||||
# 2. Include headers
|
||||
include(GNUInstallDirs)
|
||||
target_include_directories(igl_copyleft_core ${IGL_SCOPE}
|
||||
$<BUILD_INTERFACE:${libigl_SOURCE_DIR}/include>
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
||||
)
|
||||
|
||||
# 3. Target sources
|
||||
file(GLOB INC_FILES "${libigl_SOURCE_DIR}/include/igl/copyleft/*.h")
|
||||
file(GLOB SRC_FILES "${libigl_SOURCE_DIR}/include/igl/copyleft/*.cpp")
|
||||
igl_target_sources(igl_copyleft_core ${INC_FILES} ${SRC_FILES})
|
||||
|
||||
# 4. Dependencies
|
||||
target_link_libraries(igl_copyleft_core ${IGL_SCOPE}
|
||||
igl::core
|
||||
)
|
||||
@@ -1,27 +0,0 @@
|
||||
# 1. Define module
|
||||
igl_add_library(igl_copyleft_tetgen)
|
||||
|
||||
# 2. Include headers
|
||||
include(GNUInstallDirs)
|
||||
target_include_directories(igl_copyleft_tetgen ${IGL_SCOPE}
|
||||
$<BUILD_INTERFACE:${libigl_SOURCE_DIR}/include>
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
||||
)
|
||||
|
||||
# 3. Target sources
|
||||
file(GLOB INC_FILES "${libigl_SOURCE_DIR}/include/igl/copyleft/tetgen/*.h")
|
||||
file(GLOB SRC_FILES "${libigl_SOURCE_DIR}/include/igl/copyleft/tetgen/*.cpp")
|
||||
igl_target_sources(igl_copyleft_tetgen ${INC_FILES} ${SRC_FILES})
|
||||
|
||||
# 4. Dependencies
|
||||
include(tetgen)
|
||||
igl_include(copyleft core)
|
||||
target_link_libraries(igl_copyleft_tetgen ${IGL_SCOPE}
|
||||
igl::core
|
||||
igl_copyleft::core
|
||||
tetgen::tetgen
|
||||
)
|
||||
|
||||
# 5. Unit tests
|
||||
file(GLOB SRC_FILES "${libigl_SOURCE_DIR}/tests/include/igl/copyleft/tetgen/*.cpp")
|
||||
igl_add_test(igl_copyleft_tetgen ${SRC_FILES})
|
||||
@@ -1,32 +0,0 @@
|
||||
# 1. Define module
|
||||
igl_add_library(igl_core)
|
||||
if(LIBIGL_USE_STATIC_LIBRARY)
|
||||
set_target_properties(igl_core PROPERTIES OUTPUT_NAME igl)
|
||||
endif()
|
||||
|
||||
# 2. Include headers
|
||||
include(GNUInstallDirs)
|
||||
target_include_directories(igl_core ${IGL_SCOPE}
|
||||
$<BUILD_INTERFACE:${libigl_SOURCE_DIR}/include>
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
||||
)
|
||||
|
||||
# 3. Target sources
|
||||
file(GLOB INC_FILES "${libigl_SOURCE_DIR}/include/igl/*.h")
|
||||
file(GLOB SRC_FILES "${libigl_SOURCE_DIR}/include/igl/*.cpp")
|
||||
igl_target_sources(igl_core ${INC_FILES} ${SRC_FILES})
|
||||
|
||||
# 4. Install target & headers
|
||||
igl_install(igl_core ${INC_FILES} ${SRC_FILES})
|
||||
|
||||
# 5. Dependencies
|
||||
include(eigen)
|
||||
find_package(Threads REQUIRED)
|
||||
target_link_libraries(igl_core ${IGL_SCOPE}
|
||||
Eigen3::Eigen
|
||||
Threads::Threads
|
||||
)
|
||||
|
||||
# 6. Unit tests
|
||||
file(GLOB SRC_FILES "${libigl_SOURCE_DIR}/tests/include/igl/*.cpp")
|
||||
igl_add_test(igl_core ${SRC_FILES})
|
||||
@@ -1,26 +0,0 @@
|
||||
# 1. Define module
|
||||
igl_add_library(igl_cycodebase)
|
||||
|
||||
# 2. Include headers
|
||||
include(GNUInstallDirs)
|
||||
target_include_directories(igl_cycodebase ${IGL_SCOPE}
|
||||
$<BUILD_INTERFACE:${libigl_SOURCE_DIR}/include>
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
||||
)
|
||||
|
||||
# 3. Target sources
|
||||
file(GLOB INC_FILES "${libigl_SOURCE_DIR}/include/igl/cycodebase/*.h")
|
||||
file(GLOB SRC_FILES "${libigl_SOURCE_DIR}/include/igl/cycodebase/*.cpp")
|
||||
igl_target_sources(igl_cycodebase ${INC_FILES} ${SRC_FILES})
|
||||
|
||||
# 4. Dependencies
|
||||
include(cycodebase)
|
||||
target_link_libraries(igl_cycodebase ${IGL_SCOPE}
|
||||
igl::core
|
||||
cyCodeBase::cyCodeBase
|
||||
)
|
||||
|
||||
# 5. Unit tests
|
||||
file(GLOB SRC_FILES "${libigl_SOURCE_DIR}/tests/include/igl/cycodebase/*.cpp")
|
||||
igl_add_test(igl_cycodebase ${SRC_FILES})
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
# 1. Define module
|
||||
igl_add_library(igl_embree)
|
||||
|
||||
# 2. Include headers
|
||||
include(GNUInstallDirs)
|
||||
target_include_directories(igl_embree ${IGL_SCOPE}
|
||||
$<BUILD_INTERFACE:${libigl_SOURCE_DIR}/include>
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
||||
)
|
||||
|
||||
# 3. Target sources
|
||||
file(GLOB INC_FILES "${libigl_SOURCE_DIR}/include/igl/embree/*.h")
|
||||
file(GLOB SRC_FILES "${libigl_SOURCE_DIR}/include/igl/embree/*.cpp")
|
||||
igl_target_sources(igl_embree ${INC_FILES} ${SRC_FILES})
|
||||
|
||||
# 4. Dependencies
|
||||
include(embree)
|
||||
target_link_libraries(igl_embree ${IGL_SCOPE}
|
||||
igl::core
|
||||
embree::embree
|
||||
)
|
||||
|
||||
# 5. Unit tests
|
||||
file(GLOB SRC_FILES "${libigl_SOURCE_DIR}/tests/include/igl/embree/*.cpp")
|
||||
igl_add_test(igl_embree ${SRC_FILES})
|
||||
@@ -1,29 +0,0 @@
|
||||
# 1. Define module
|
||||
igl_add_library(igl_glfw)
|
||||
|
||||
# 2. Include headers
|
||||
include(GNUInstallDirs)
|
||||
target_include_directories(igl_glfw ${IGL_SCOPE}
|
||||
$<BUILD_INTERFACE:${libigl_SOURCE_DIR}/include>
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
||||
)
|
||||
|
||||
# 3. Target sources
|
||||
file(GLOB INC_FILES "${libigl_SOURCE_DIR}/include/igl/opengl/glfw/*.h")
|
||||
file(GLOB SRC_FILES "${libigl_SOURCE_DIR}/include/igl/opengl/glfw/*.cpp")
|
||||
igl_target_sources(igl_glfw ${INC_FILES} ${SRC_FILES})
|
||||
|
||||
# 4. Dependencies
|
||||
include(glfw)
|
||||
igl_include(opengl)
|
||||
target_link_libraries(igl_glfw ${IGL_SCOPE}
|
||||
igl::core
|
||||
igl::opengl
|
||||
glfw::glfw
|
||||
)
|
||||
|
||||
# 5. Unit tests
|
||||
if(LIBIGL_GLFW_TESTS)
|
||||
file(GLOB SRC_FILES "${libigl_SOURCE_DIR}/tests/include/igl/opengl/glfw/*.cpp")
|
||||
igl_add_test(igl_glfw ${SRC_FILES})
|
||||
endif()
|
||||
@@ -1,27 +0,0 @@
|
||||
# 1. Define module
|
||||
igl_add_library(igl_imgui)
|
||||
|
||||
# 2. Include headers
|
||||
include(GNUInstallDirs)
|
||||
target_include_directories(igl_imgui ${IGL_SCOPE}
|
||||
$<BUILD_INTERFACE:${libigl_SOURCE_DIR}/include>
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
||||
)
|
||||
|
||||
# 3. Target sources
|
||||
file(GLOB INC_FILES "${libigl_SOURCE_DIR}/include/igl/opengl/glfw/imgui/*.h")
|
||||
file(GLOB SRC_FILES "${libigl_SOURCE_DIR}/include/igl/opengl/glfw/imgui/*.cpp")
|
||||
igl_target_sources(igl_imgui ${INC_FILES} ${SRC_FILES})
|
||||
|
||||
# 4. Dependencies
|
||||
include(imgui)
|
||||
include(imguizmo)
|
||||
include(libigl_imgui_fonts)
|
||||
igl_include(glfw)
|
||||
target_link_libraries(igl_imgui ${IGL_SCOPE}
|
||||
igl::core
|
||||
igl::glfw
|
||||
imgui::imgui
|
||||
imguizmo::imguizmo
|
||||
igl::imgui_fonts
|
||||
)
|
||||
@@ -1,24 +0,0 @@
|
||||
# 1. Define module
|
||||
igl_add_library(igl_opengl)
|
||||
|
||||
# 2. Include headers
|
||||
include(GNUInstallDirs)
|
||||
target_include_directories(igl_opengl ${IGL_SCOPE}
|
||||
$<BUILD_INTERFACE:${libigl_SOURCE_DIR}/include>
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
||||
)
|
||||
|
||||
# 3. Target sources
|
||||
file(GLOB INC_FILES "${libigl_SOURCE_DIR}/include/igl/opengl/*.h")
|
||||
file(GLOB SRC_FILES "${libigl_SOURCE_DIR}/include/igl/opengl/*.cpp")
|
||||
igl_target_sources(igl_opengl ${INC_FILES} ${SRC_FILES})
|
||||
|
||||
# 4. Dependencies
|
||||
include(glad)
|
||||
find_package(OpenGL REQUIRED OPTIONAL_COMPONENTS OpenGL)
|
||||
target_link_libraries(igl_opengl ${IGL_SCOPE}
|
||||
igl::core
|
||||
glad::glad
|
||||
# Link against OpenGL::OpenGL if available, or fallback to OpenGL::GL
|
||||
$<IF:$<TARGET_EXISTS:OpenGL::OpenGL>,OpenGL::OpenGL,OpenGL::GL>
|
||||
)
|
||||
@@ -1,25 +0,0 @@
|
||||
# 1. Define module
|
||||
igl_add_library(igl_predicates)
|
||||
|
||||
# 2. Include headers
|
||||
include(GNUInstallDirs)
|
||||
target_include_directories(igl_predicates ${IGL_SCOPE}
|
||||
$<BUILD_INTERFACE:${libigl_SOURCE_DIR}/include>
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
||||
)
|
||||
|
||||
# 3. Target sources
|
||||
file(GLOB INC_FILES "${libigl_SOURCE_DIR}/include/igl/predicates/*.h")
|
||||
file(GLOB SRC_FILES "${libigl_SOURCE_DIR}/include/igl/predicates/*.cpp")
|
||||
igl_target_sources(igl_predicates ${INC_FILES} ${SRC_FILES})
|
||||
|
||||
# 4. Dependencies
|
||||
include(predicates)
|
||||
target_link_libraries(igl_predicates ${IGL_SCOPE}
|
||||
igl::core
|
||||
predicates::predicates
|
||||
)
|
||||
|
||||
# 5. Unit tests
|
||||
file(GLOB SRC_FILES "${libigl_SOURCE_DIR}/tests/include/igl/predicates/*.cpp")
|
||||
igl_add_test(igl_predicates ${SRC_FILES})
|
||||
@@ -1,25 +0,0 @@
|
||||
# 1. Define module
|
||||
igl_add_library(igl_restricted_matlab)
|
||||
|
||||
# 2. Include headers
|
||||
include(GNUInstallDirs)
|
||||
target_include_directories(igl_restricted_matlab ${IGL_SCOPE}
|
||||
$<BUILD_INTERFACE:${libigl_SOURCE_DIR}/include>
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
||||
)
|
||||
|
||||
# 3. Target sources
|
||||
file(GLOB INC_FILES "${libigl_SOURCE_DIR}/include/igl/matlab/*.h")
|
||||
file(GLOB SRC_FILES "${libigl_SOURCE_DIR}/include/igl/matlab/*.cpp")
|
||||
igl_target_sources(igl_restricted_matlab ${INC_FILES} ${SRC_FILES})
|
||||
|
||||
# 4. Dependencies
|
||||
# MATLAB_ADDITIONAL_VERSIONS should have already been set in libigl/CMakeLists.txt
|
||||
find_package(Matlab REQUIRED COMPONENTS MEX_COMPILER MX_LIBRARY ENG_LIBRARY MAT_LIBRARY)
|
||||
# to-do detect if imported targets are available (cmake 3.22's findmatlab has
|
||||
# them) and use those instead of hard coding these.
|
||||
target_link_libraries(igl_restricted_matlab ${IGL_SCOPE} igl::core ${Matlab_LIBRARIES})
|
||||
target_include_directories(igl_restricted_matlab ${IGL_SCOPE} ${Matlab_INCLUDE_DIRS})
|
||||
|
||||
# 5. Unit tests
|
||||
# to-do write some matlab tests
|
||||
@@ -1,27 +0,0 @@
|
||||
# 1. Define module
|
||||
igl_add_library(igl_restricted_mosek)
|
||||
|
||||
# 2. Include headers
|
||||
include(GNUInstallDirs)
|
||||
target_include_directories(igl_restricted_mosek ${IGL_SCOPE}
|
||||
$<BUILD_INTERFACE:${libigl_SOURCE_DIR}/include>
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
||||
)
|
||||
|
||||
# 3. Target sources
|
||||
file(GLOB INC_FILES "${libigl_SOURCE_DIR}/include/igl/mosek/*.h")
|
||||
file(GLOB SRC_FILES "${libigl_SOURCE_DIR}/include/igl/mosek/*.cpp")
|
||||
igl_target_sources(igl_restricted_mosek ${INC_FILES} ${SRC_FILES})
|
||||
|
||||
# 4. Dependencies
|
||||
find_package(MOSEK REQUIRED)
|
||||
target_include_directories(igl_restricted_mosek ${IGL_SCOPE} ${MOSEK_INCLUDE_DIRS})
|
||||
target_link_libraries(igl_restricted_mosek ${IGL_SCOPE} igl::core ${MOSEK_LIBRARIES})
|
||||
|
||||
# 5. Unit tests
|
||||
file(GLOB SRC_FILES "${libigl_SOURCE_DIR}/tests/include/igl/mosek/*.cpp")
|
||||
igl_add_test(igl_restricted_mosek ${SRC_FILES})
|
||||
IF(APPLE)
|
||||
INCLUDE(${libigl_SOURCE_DIR}/cmake/misc/OSXFixDylibReferences.cmake)
|
||||
OSX_FIX_DYLIB_REFERENCES(test_igl_restricted_mosek "${MOSEK_LIBRARIES}")
|
||||
ENDIF()
|
||||
@@ -1,29 +0,0 @@
|
||||
# 1. Define module
|
||||
igl_add_library(igl_restricted_triangle)
|
||||
|
||||
# 2. Include headers
|
||||
include(GNUInstallDirs)
|
||||
target_include_directories(igl_restricted_triangle ${IGL_SCOPE}
|
||||
$<BUILD_INTERFACE:${libigl_SOURCE_DIR}/include>
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
||||
)
|
||||
|
||||
# 3. Target sources
|
||||
file(GLOB INC_FILES "${libigl_SOURCE_DIR}/include/igl/triangle/*.h")
|
||||
file(GLOB SRC_FILES "${libigl_SOURCE_DIR}/include/igl/triangle/*.cpp")
|
||||
igl_target_sources(igl_restricted_triangle ${INC_FILES} ${SRC_FILES})
|
||||
|
||||
# 4. Dependencies
|
||||
include(triangle)
|
||||
target_link_libraries(igl_restricted_triangle ${IGL_SCOPE}
|
||||
igl::core
|
||||
triangle::triangle
|
||||
)
|
||||
|
||||
# 5. Unit tests
|
||||
file(GLOB SRC_FILES "${libigl_SOURCE_DIR}/tests/include/igl/triangle/*.cpp")
|
||||
igl_add_test(igl_restricted_triangle ${SRC_FILES})
|
||||
if(TARGET test_igl_restricted_triangle)
|
||||
igl_include(predicates)
|
||||
target_link_libraries(test_igl_restricted_triangle PUBLIC igl::predicates)
|
||||
endif()
|
||||
@@ -1,25 +0,0 @@
|
||||
# 1. Define module
|
||||
igl_add_library(igl_spectra)
|
||||
|
||||
# 2. Include headers
|
||||
include(GNUInstallDirs)
|
||||
target_include_directories(igl_spectra ${IGL_SCOPE}
|
||||
$<BUILD_INTERFACE:${libigl_SOURCE_DIR}/include>
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
||||
)
|
||||
|
||||
# 3. Target sources
|
||||
file(GLOB INC_FILES "${libigl_SOURCE_DIR}/include/igl/spectra/*.h")
|
||||
file(GLOB SRC_FILES "${libigl_SOURCE_DIR}/include/igl/spectra/*.cpp")
|
||||
igl_target_sources(igl_spectra ${INC_FILES} ${SRC_FILES})
|
||||
|
||||
# 4. Dependencies
|
||||
include(spectra)
|
||||
target_link_libraries(igl_spectra ${IGL_SCOPE}
|
||||
igl::core
|
||||
spectra::spectra
|
||||
)
|
||||
|
||||
# 5. Unit tests
|
||||
file(GLOB SRC_FILES "${libigl_SOURCE_DIR}/tests/include/igl/spectra/*.cpp")
|
||||
igl_add_test(igl_spectra ${SRC_FILES})
|
||||
@@ -1,35 +0,0 @@
|
||||
# 1. Define module
|
||||
igl_add_library(igl_stb)
|
||||
|
||||
# 2. Include headers
|
||||
include(GNUInstallDirs)
|
||||
target_include_directories(igl_stb ${IGL_SCOPE}
|
||||
$<BUILD_INTERFACE:${libigl_SOURCE_DIR}/include>
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
||||
)
|
||||
|
||||
# 3. Target sources
|
||||
file(GLOB INC_FILES "${libigl_SOURCE_DIR}/include/igl/stb/*.h")
|
||||
file(GLOB SRC_FILES "${libigl_SOURCE_DIR}/include/igl/stb/*.cpp")
|
||||
if(LIBIGL_OPENGL)
|
||||
message(STATUS "Including igl/opengl/stb support")
|
||||
file(GLOB OPENGL_INC_FILES "${libigl_SOURCE_DIR}/include/igl/opengl/stb/*.h")
|
||||
file(GLOB OPENGL_SRC_FILES "${libigl_SOURCE_DIR}/include/igl/opengl/stb/*.cpp")
|
||||
list(APPEND INC_FILES ${OPENGL_INC_FILES})
|
||||
list(APPEND SRC_FILES ${OPENGL_SRC_FILES})
|
||||
endif()
|
||||
igl_target_sources(igl_stb ${INC_FILES} ${SRC_FILES})
|
||||
|
||||
# 4. Dependencies
|
||||
include(stb)
|
||||
target_link_libraries(igl_stb ${IGL_SCOPE}
|
||||
igl::core
|
||||
stb::stb
|
||||
)
|
||||
|
||||
if(LIBIGL_OPENGL)
|
||||
igl_include(opengl)
|
||||
target_link_libraries(igl_stb ${IGL_SCOPE}
|
||||
igl::opengl
|
||||
)
|
||||
endif()
|
||||
@@ -1,21 +0,0 @@
|
||||
# 1. Define module
|
||||
igl_add_library(igl_xml)
|
||||
|
||||
# 2. Include headers
|
||||
include(GNUInstallDirs)
|
||||
target_include_directories(igl_xml ${IGL_SCOPE}
|
||||
$<BUILD_INTERFACE:${libigl_SOURCE_DIR}/include>
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
||||
)
|
||||
|
||||
# 3. Target sources
|
||||
file(GLOB INC_FILES "${libigl_SOURCE_DIR}/include/igl/xml/*.h")
|
||||
file(GLOB SRC_FILES "${libigl_SOURCE_DIR}/include/igl/xml/*.cpp")
|
||||
igl_target_sources(igl_xml ${INC_FILES} ${SRC_FILES})
|
||||
|
||||
# 4. Dependencies
|
||||
include(tinyxml2)
|
||||
target_link_libraries(igl_xml ${IGL_SCOPE}
|
||||
igl::core
|
||||
tinyxml2::tinyxml2
|
||||
)
|
||||
@@ -0,0 +1,8 @@
|
||||
# This is a conda environment that can be used to compile libigl with CGAL on Windows
|
||||
# Only boost is required to be installed on the system, CGAL is automatically downloaded
|
||||
# by CMake and is built with libigl.
|
||||
name: libigl-cgal
|
||||
channels:
|
||||
- conda-forge
|
||||
dependencies:
|
||||
- boost-cpp=1.65.0
|
||||
@@ -0,0 +1,31 @@
|
||||
@PACKAGE_INIT@
|
||||
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/libigl-export.cmake)
|
||||
|
||||
# Check if Eigen3 target is avaiable, if not try to locate it
|
||||
# with find_package.
|
||||
message(STATUS "[libigl] Looking for Eigen3")
|
||||
if (NOT TARGET Eigen3::Eigen)
|
||||
# Try if Eigen3 can be found with find_package
|
||||
find_package(Eigen3 CONFIG REQUIRED)
|
||||
endif()
|
||||
|
||||
|
||||
if (TARGET igl::core)
|
||||
if (TARGET Eigen3::Eigen)
|
||||
# Inject dependency
|
||||
set_target_properties(igl::core PROPERTIES INTERFACE_LINK_LIBRARIES Eigen3::Eigen)
|
||||
set(libigl_core_FOUND TRUE)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (TARGET igl::common)
|
||||
if (TARGET Eigen3::Eigen)
|
||||
# Inject dependency
|
||||
set_target_properties(igl::common PROPERTIES INTERFACE_LINK_LIBRARIES Eigen3::Eigen)
|
||||
set(libigl_common_FOUND TRUE)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
check_required_components(libigl)
|
||||
|
||||
+562
-29
@@ -1,34 +1,567 @@
|
||||
# Sanity check for backward compatibility
|
||||
get_filename_component(PATH_X "${libigl_SOURCE_DIR}" REALPATH)
|
||||
get_filename_component(PATH_Y "${CMAKE_CURRENT_LIST_DIR}/.." REALPATH)
|
||||
if(NOT PATH_X STREQUAL PATH_Y)
|
||||
message(FATAL_ERROR "You included libigl.cmake directly from your own project. This behavior "
|
||||
"is not supported anymore. Please add libigl to your project via "
|
||||
"add_subdirectory(<path_to_libigl>). See the libigl example project for "
|
||||
"more information: https://github.com/libigl/libigl-example-project/")
|
||||
cmake_minimum_required(VERSION 3.1)
|
||||
|
||||
# https://github.com/libigl/libigl/issues/751
|
||||
# http://lists.llvm.org/pipermail/llvm-commits/Week-of-Mon-20160425/351643.html
|
||||
if(APPLE)
|
||||
if(NOT CMAKE_LIBTOOL)
|
||||
find_program(CMAKE_LIBTOOL NAMES libtool)
|
||||
endif()
|
||||
if(CMAKE_LIBTOOL)
|
||||
set(CMAKE_LIBTOOL ${CMAKE_LIBTOOL} CACHE PATH "libtool executable")
|
||||
message(STATUS "Found libtool - ${CMAKE_LIBTOOL}")
|
||||
get_property(languages GLOBAL PROPERTY ENABLED_LANGUAGES)
|
||||
foreach(lang ${languages})
|
||||
# Added -c
|
||||
set(CMAKE_${lang}_CREATE_STATIC_LIBRARY
|
||||
"${CMAKE_LIBTOOL} -c -static -o <TARGET> <LINK_FLAGS> <OBJECTS> ")
|
||||
endforeach()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Global options
|
||||
include(igl_windows)
|
||||
### Available options ###
|
||||
option(LIBIGL_USE_STATIC_LIBRARY "Use libigl as static library" OFF)
|
||||
option(LIBIGL_WITH_CGAL "Use CGAL" OFF)
|
||||
option(LIBIGL_WITH_COMISO "Use CoMiso" OFF)
|
||||
option(LIBIGL_WITH_CORK "Use Cork" OFF)
|
||||
option(LIBIGL_WITH_EMBREE "Use Embree" OFF)
|
||||
option(LIBIGL_WITH_MATLAB "Use Matlab" OFF)
|
||||
option(LIBIGL_WITH_MOSEK "Use MOSEK" OFF)
|
||||
option(LIBIGL_WITH_OPENGL "Use OpenGL" OFF)
|
||||
option(LIBIGL_WITH_OPENGL_GLFW "Use GLFW" OFF)
|
||||
option(LIBIGL_WITH_OPENGL_GLFW_IMGUI "Use ImGui" OFF)
|
||||
option(LIBIGL_WITH_PNG "Use PNG" OFF)
|
||||
option(LIBIGL_WITH_TETGEN "Use Tetgen" OFF)
|
||||
option(LIBIGL_WITH_TRIANGLE "Use Triangle" OFF)
|
||||
option(LIBIGL_WITH_PREDICATES "Use exact predicates" OFF)
|
||||
option(LIBIGL_WITH_XML "Use XML" OFF)
|
||||
option(LIBIGL_WITHOUT_COPYLEFT "Disable Copyleft libraries" OFF)
|
||||
option(LIBIGL_EXPORT_TARGETS "Export libigl CMake targets" OFF)
|
||||
|
||||
# Libigl permissive modules
|
||||
igl_include(core)
|
||||
igl_include_optional(cycodebase)
|
||||
igl_include_optional(embree)
|
||||
igl_include_optional(opengl)
|
||||
igl_include_optional(glfw)
|
||||
igl_include_optional(imgui)
|
||||
igl_include_optional(predicates)
|
||||
igl_include_optional(stb)
|
||||
igl_include_optional(spectra)
|
||||
igl_include_optional(xml)
|
||||
if(LIBIGL_BUILD_PYTHON)
|
||||
message(FATAL_ERROR "Python bindings have been removed in this version. Please use an older version of libigl, or wait for the new bindings to be released.")
|
||||
endif()
|
||||
|
||||
# Libigl copyleft modules
|
||||
igl_include_optional(copyleft core)
|
||||
igl_include_optional(copyleft cgal)
|
||||
igl_include_optional(copyleft tetgen)
|
||||
################################################################################
|
||||
|
||||
### Configuration
|
||||
set(LIBIGL_ROOT "${CMAKE_CURRENT_LIST_DIR}/..")
|
||||
set(LIBIGL_SOURCE_DIR "${LIBIGL_ROOT}/include")
|
||||
set(LIBIGL_EXTERNAL "${LIBIGL_ROOT}/external")
|
||||
|
||||
# Dependencies are linked as INTERFACE targets unless libigl is compiled as a static library
|
||||
if(LIBIGL_USE_STATIC_LIBRARY)
|
||||
set(IGL_SCOPE PUBLIC)
|
||||
else()
|
||||
set(IGL_SCOPE INTERFACE)
|
||||
endif()
|
||||
|
||||
# Download and update 3rdparty libraries
|
||||
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
include(LibiglDownloadExternal)
|
||||
|
||||
# Provides igl_set_folders() to set folders for Visual Studio/Xcode
|
||||
include(LibiglFolders)
|
||||
|
||||
################################################################################
|
||||
### IGL Common
|
||||
################################################################################
|
||||
|
||||
add_library(igl_common INTERFACE)
|
||||
target_include_directories(igl_common SYSTEM INTERFACE
|
||||
$<BUILD_INTERFACE:${LIBIGL_SOURCE_DIR}>
|
||||
$<INSTALL_INTERFACE:include>
|
||||
)
|
||||
# Export igl_common as igl::common
|
||||
set_property(TARGET igl_common PROPERTY EXPORT_NAME igl::common)
|
||||
if(LIBIGL_USE_STATIC_LIBRARY)
|
||||
target_compile_definitions(igl_common INTERFACE -DIGL_STATIC_LIBRARY)
|
||||
endif()
|
||||
|
||||
# Transitive C++11 flags
|
||||
include(CXXFeatures)
|
||||
target_compile_features(igl_common INTERFACE ${CXX11_FEATURES})
|
||||
|
||||
# Other compilation flags
|
||||
if(MSVC)
|
||||
# Enable parallel compilation for Visual Studio
|
||||
target_compile_options(igl_common INTERFACE /MP /bigobj)
|
||||
target_compile_definitions(igl_common INTERFACE -DNOMINMAX)
|
||||
endif()
|
||||
|
||||
### Set compiler flags for building the tests on Windows with Visual Studio
|
||||
include(LibiglWindows)
|
||||
|
||||
if(BUILD_SHARED_LIBS)
|
||||
# Generate position independent code
|
||||
set_target_properties(igl_common PROPERTIES INTERFACE_POSITION_INDEPENDENT_CODE ON)
|
||||
endif()
|
||||
|
||||
if(UNIX AND NOT HUNTER_ENABLED)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
|
||||
endif()
|
||||
|
||||
if(HUNTER_ENABLED)
|
||||
hunter_add_package(Eigen)
|
||||
find_package(Eigen3 CONFIG REQUIRED)
|
||||
endif()
|
||||
|
||||
# Eigen
|
||||
if(NOT TARGET Eigen3::Eigen)
|
||||
igl_download_eigen()
|
||||
add_library(igl_eigen INTERFACE)
|
||||
target_include_directories(igl_eigen SYSTEM INTERFACE
|
||||
$<BUILD_INTERFACE:${LIBIGL_EXTERNAL}/eigen>
|
||||
$<INSTALL_INTERFACE:include>
|
||||
)
|
||||
set_property(TARGET igl_eigen PROPERTY EXPORT_NAME Eigen3::Eigen)
|
||||
add_library(Eigen3::Eigen ALIAS igl_eigen)
|
||||
endif()
|
||||
target_link_libraries(igl_common INTERFACE Eigen3::Eigen)
|
||||
|
||||
# C++11 Thread library
|
||||
find_package(Threads REQUIRED)
|
||||
target_link_libraries(igl_common INTERFACE ${CMAKE_THREAD_LIBS_INIT})
|
||||
|
||||
################################################################################
|
||||
|
||||
## CGAL dependencies on Windows: GMP & MPFR
|
||||
function(igl_download_cgal_deps)
|
||||
if(WIN32)
|
||||
igl_download_project(gmp
|
||||
URL https://cgal.geometryfactory.com/CGAL/precompiled_libs/auxiliary/x64/GMP/5.0.1/gmp-all-CGAL-3.9.zip
|
||||
URL_MD5 508c1292319c832609329116a8234c9f
|
||||
)
|
||||
igl_download_project(mpfr
|
||||
URL https://cgal.geometryfactory.com/CGAL/precompiled_libs/auxiliary/x64/MPFR/3.0.0/mpfr-all-CGAL-3.9.zip
|
||||
URL_MD5 48840454eef0ff18730050c05028734b
|
||||
)
|
||||
set(ENV{GMP_DIR} "${LIBIGL_EXTERNAL}/gmp")
|
||||
set(ENV{MPFR_DIR} "${LIBIGL_EXTERNAL}/mpfr")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
################################################################################
|
||||
|
||||
function(compile_igl_module module_dir)
|
||||
string(REPLACE "/" "_" module_name "${module_dir}")
|
||||
if(module_name STREQUAL "core")
|
||||
set(module_libname "igl")
|
||||
else()
|
||||
set(module_libname "igl_${module_name}")
|
||||
endif()
|
||||
if(LIBIGL_USE_STATIC_LIBRARY)
|
||||
file(GLOB SOURCES_IGL_${module_name}
|
||||
"${LIBIGL_SOURCE_DIR}/igl/${module_dir}/*.cpp"
|
||||
"${LIBIGL_SOURCE_DIR}/igl/${module_dir}/*.h*"
|
||||
)
|
||||
if(NOT LIBIGL_WITHOUT_COPYLEFT)
|
||||
file(GLOB COPYLEFT_SOURCES_IGL_${module_name}
|
||||
"${LIBIGL_SOURCE_DIR}/igl/copyleft/${module_dir}/*.cpp"
|
||||
"${LIBIGL_SOURCE_DIR}/igl/copyleft/${module_dir}/*.h*"
|
||||
)
|
||||
list(APPEND SOURCES_IGL_${module_name} ${COPYLEFT_SOURCES_IGL_${module_name}})
|
||||
endif()
|
||||
add_library(${module_libname} STATIC ${SOURCES_IGL_${module_name}} ${ARGN})
|
||||
if(MSVC)
|
||||
# Silencing some compile warnings
|
||||
target_compile_options(${module_libname} PRIVATE
|
||||
# Type conversion warnings. These can be fixed with some effort and possibly more verbose code.
|
||||
/wd4267 # conversion from 'size_t' to 'type', possible loss of data
|
||||
/wd4244 # conversion from 'type1' to 'type2', possible loss of data
|
||||
/wd4018 # signed/unsigned mismatch
|
||||
/wd4305 # truncation from 'double' to 'float'
|
||||
# This one is from template instantiations generated by autoexplicit.sh:
|
||||
/wd4667 # no function template defined that matches forced instantiation ()
|
||||
# This one is easy to fix, just need to switch to safe version of C functions
|
||||
/wd4996 # this function or variable may be unsafe
|
||||
# This one is when using bools in adjacency matrices
|
||||
/wd4804 #'+=': unsafe use of type 'bool' in operation
|
||||
)
|
||||
else()
|
||||
#target_compile_options(${module_libname} PRIVATE -w) # disable all warnings (not ideal but...)
|
||||
endif()
|
||||
else()
|
||||
add_library(${module_libname} INTERFACE)
|
||||
endif()
|
||||
|
||||
target_link_libraries(${module_libname} ${IGL_SCOPE} igl_common)
|
||||
if(NOT module_name STREQUAL "core")
|
||||
target_link_libraries(${module_libname} ${IGL_SCOPE} igl)
|
||||
endif()
|
||||
|
||||
# Alias target because it looks nicer
|
||||
message(STATUS "Creating target: igl::${module_name} (${module_libname})")
|
||||
add_library(igl::${module_name} ALIAS ${module_libname})
|
||||
# Export as igl::${module_name}
|
||||
set_property(TARGET ${module_libname} PROPERTY EXPORT_NAME igl::${module_name})
|
||||
endfunction()
|
||||
|
||||
################################################################################
|
||||
### IGL Core
|
||||
################################################################################
|
||||
|
||||
if(LIBIGL_USE_STATIC_LIBRARY)
|
||||
file(GLOB SOURCES_IGL
|
||||
"${LIBIGL_SOURCE_DIR}/igl/*.cpp"
|
||||
"${LIBIGL_SOURCE_DIR}/igl/*.h*"
|
||||
"${LIBIGL_SOURCE_DIR}/igl/copyleft/*.cpp"
|
||||
"${LIBIGL_SOURCE_DIR}/igl/copyleft/*.h*"
|
||||
)
|
||||
endif()
|
||||
compile_igl_module("core" ${SOURCES_IGL})
|
||||
|
||||
################################################################################
|
||||
### Download the python part ###
|
||||
if(LIBIGL_WITH_PYTHON)
|
||||
endif()
|
||||
|
||||
################################################################################
|
||||
### Compile the CGAL part ###
|
||||
if(LIBIGL_WITH_CGAL)
|
||||
# Try to find the CGAL library
|
||||
# CGAL Core is needed for
|
||||
# `Exact_predicates_exact_constructions_kernel_with_sqrt`
|
||||
if(NOT TARGET CGAL::CGAL)
|
||||
set(CGAL_DIR "${LIBIGL_EXTERNAL}/cgal")
|
||||
igl_download_cgal()
|
||||
igl_download_cgal_deps()
|
||||
if(EXISTS ${LIBIGL_EXTERNAL}/boost)
|
||||
set(BOOST_ROOT "${LIBIGL_EXTERNAL}/boost")
|
||||
endif()
|
||||
option(CGAL_Boost_USE_STATIC_LIBS "Use static Boost libs with CGAL" ON)
|
||||
|
||||
find_package(CGAL CONFIG COMPONENTS Core PATHS ${CGAL_DIR} NO_DEFAULT_PATH)
|
||||
endif()
|
||||
|
||||
# If CGAL has been found, then build the libigl module
|
||||
if(TARGET CGAL::CGAL AND TARGET CGAL::CGAL_Core)
|
||||
compile_igl_module("cgal")
|
||||
target_link_libraries(igl_cgal ${IGL_SCOPE} CGAL::CGAL CGAL::CGAL_Core)
|
||||
else()
|
||||
set(LIBIGL_WITH_CGAL OFF CACHE BOOL "" FORCE)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Helper function for `igl_copy_cgal_dll()`
|
||||
function(igl_copy_imported_dll src_target dst_target)
|
||||
get_target_property(other_libs ${src_target} INTERFACE_LINK_LIBRARIES)
|
||||
set(locations)
|
||||
list(APPEND locations ${main_lib} ${other_libs})
|
||||
foreach(location ${locations})
|
||||
string(REGEX MATCH "^(.*)\\.[^.]*$" dummy ${location})
|
||||
set(location "${CMAKE_MATCH_1}.dll")
|
||||
if(EXISTS "${location}" AND location MATCHES "^.*\\.dll$")
|
||||
add_custom_command(TARGET ${dst_target} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "${location}" $<TARGET_FILE_DIR:${dst_target}>)
|
||||
endif()
|
||||
endforeach()
|
||||
endfunction()
|
||||
|
||||
# Convenient functions to copy CGAL dlls into a target (executable) destination folder (for Windows)
|
||||
function(igl_copy_cgal_dll target)
|
||||
if(WIN32 AND LIBIGL_WITH_CGAL)
|
||||
igl_copy_imported_dll(CGAL::CGAL ${target})
|
||||
igl_copy_imported_dll(CGAL::CGAL_Core ${target})
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
################################################################################
|
||||
### Compile the CoMISo part ###
|
||||
# NOTE: this cmakefile works only with the
|
||||
# comiso available here: https://github.com/libigl/CoMISo
|
||||
if(LIBIGL_WITH_COMISO)
|
||||
compile_igl_module("comiso")
|
||||
if(NOT TARGET CoMISo)
|
||||
igl_download_comiso()
|
||||
add_subdirectory("${LIBIGL_EXTERNAL}/CoMISo" CoMISo)
|
||||
endif()
|
||||
target_link_libraries(igl_comiso ${IGL_SCOPE} CoMISo)
|
||||
endif()
|
||||
|
||||
################################################################################
|
||||
### Compile the cork part ###
|
||||
if(LIBIGL_WITH_CORK)
|
||||
set(CORK_DIR "${LIBIGL_EXTERNAL}/cork")
|
||||
if(NOT TARGET cork)
|
||||
# call this "lib-cork" instead of "cork", otherwise cmake gets confused about
|
||||
# "cork" executable
|
||||
igl_download_cork()
|
||||
add_subdirectory("${CORK_DIR}" "lib-cork")
|
||||
endif()
|
||||
compile_igl_module("cork")
|
||||
target_include_directories(igl_cork ${IGL_SCOPE} cork)
|
||||
target_include_directories(igl_cork ${IGL_SCOPE} "${CORK_DIR}/src")
|
||||
target_link_libraries(igl_cork ${IGL_SCOPE} cork)
|
||||
endif()
|
||||
|
||||
################################################################################
|
||||
### Compile the embree part ###
|
||||
if(LIBIGL_WITH_EMBREE)
|
||||
set(EMBREE_DIR "${LIBIGL_EXTERNAL}/embree")
|
||||
|
||||
set(EMBREE_TESTING_INTENSITY 0 CACHE STRING "" FORCE)
|
||||
set(EMBREE_ISPC_SUPPORT OFF CACHE BOOL " " FORCE)
|
||||
set(EMBREE_TASKING_SYSTEM "INTERNAL" CACHE BOOL " " FORCE)
|
||||
set(EMBREE_TUTORIALS OFF CACHE BOOL " " FORCE)
|
||||
set(EMBREE_MAX_ISA "SSE2" CACHE STRING " " FORCE)
|
||||
set(EMBREE_STATIC_LIB ON CACHE BOOL " " FORCE)
|
||||
if(MSVC)
|
||||
set(EMBREE_STATIC_RUNTIME ON CACHE BOOL " " FORCE)
|
||||
endif()
|
||||
|
||||
if(NOT TARGET embree)
|
||||
# TODO: Should probably save/restore the CMAKE_CXX_FLAGS_*, since embree seems to be
|
||||
# overriding them on Windows. But well... it works for now.
|
||||
igl_download_embree()
|
||||
add_subdirectory("${EMBREE_DIR}" "embree" EXCLUDE_FROM_ALL)
|
||||
endif()
|
||||
|
||||
compile_igl_module("embree")
|
||||
target_link_libraries(igl_embree ${IGL_SCOPE} embree)
|
||||
target_include_directories(igl_embree ${IGL_SCOPE} ${EMBREE_DIR}/include)
|
||||
target_compile_definitions(igl_embree ${IGL_SCOPE} -DEMBREE_STATIC_LIB)
|
||||
endif()
|
||||
|
||||
################################################################################
|
||||
### Compile the matlab part ###
|
||||
if(LIBIGL_WITH_MATLAB)
|
||||
find_package(Matlab REQUIRED COMPONENTS MEX_COMPILER MX_LIBRARY ENG_LIBRARY MAT_LIBRARY)
|
||||
compile_igl_module("matlab")
|
||||
target_link_libraries(igl_matlab ${IGL_SCOPE} ${Matlab_LIBRARIES})
|
||||
target_include_directories(igl_matlab ${IGL_SCOPE} ${Matlab_INCLUDE_DIRS})
|
||||
endif()
|
||||
|
||||
################################################################################
|
||||
### Compile the mosek part ###
|
||||
if(LIBIGL_WITH_MOSEK)
|
||||
find_package(MOSEK REQUIRED)
|
||||
compile_igl_module("mosek")
|
||||
target_link_libraries(igl_mosek ${IGL_SCOPE} ${MOSEK_LIBRARIES})
|
||||
target_include_directories(igl_mosek ${IGL_SCOPE} ${MOSEK_INCLUDE_DIRS})
|
||||
target_compile_definitions(igl_mosek ${IGL_SCOPE} -DLIBIGL_WITH_MOSEK)
|
||||
endif()
|
||||
|
||||
################################################################################
|
||||
### Compile the opengl part ###
|
||||
if(LIBIGL_WITH_OPENGL)
|
||||
# OpenGL module
|
||||
compile_igl_module("opengl")
|
||||
|
||||
# OpenGL library
|
||||
if (NOT CMAKE_VERSION VERSION_LESS "3.11")
|
||||
cmake_policy(SET CMP0072 NEW)
|
||||
endif()
|
||||
find_package(OpenGL REQUIRED)
|
||||
if(TARGET OpenGL::GL)
|
||||
target_link_libraries(igl_opengl ${IGL_SCOPE} OpenGL::GL)
|
||||
else()
|
||||
target_link_libraries(igl_opengl ${IGL_SCOPE} ${OPENGL_gl_LIBRARY})
|
||||
target_include_directories(igl_opengl SYSTEM ${IGL_SCOPE} ${OPENGL_INCLUDE_DIR})
|
||||
endif()
|
||||
|
||||
# glad module
|
||||
if(NOT TARGET glad)
|
||||
igl_download_glad()
|
||||
add_subdirectory(${LIBIGL_EXTERNAL}/glad glad)
|
||||
endif()
|
||||
target_link_libraries(igl_opengl ${IGL_SCOPE} glad)
|
||||
endif()
|
||||
|
||||
################################################################################
|
||||
### Compile the GLFW part ###
|
||||
if(LIBIGL_WITH_OPENGL_GLFW)
|
||||
if(TARGET igl::opengl)
|
||||
# GLFW module
|
||||
compile_igl_module("opengl/glfw")
|
||||
if(NOT TARGET glfw)
|
||||
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL " " FORCE)
|
||||
set(GLFW_BUILD_TESTS OFF CACHE BOOL " " FORCE)
|
||||
set(GLFW_BUILD_DOCS OFF CACHE BOOL " " FORCE)
|
||||
set(GLFW_INSTALL OFF CACHE BOOL " " FORCE)
|
||||
igl_download_glfw()
|
||||
add_subdirectory(${LIBIGL_EXTERNAL}/glfw glfw)
|
||||
endif()
|
||||
target_link_libraries(igl_opengl_glfw ${IGL_SCOPE} igl_opengl glfw)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
################################################################################
|
||||
### Compile the ImGui part ###
|
||||
if(LIBIGL_WITH_OPENGL_GLFW_IMGUI)
|
||||
if(TARGET igl::opengl_glfw)
|
||||
# ImGui module
|
||||
compile_igl_module("opengl/glfw/imgui")
|
||||
if(NOT TARGET imgui)
|
||||
igl_download_imgui()
|
||||
add_subdirectory(${LIBIGL_EXTERNAL}/libigl-imgui imgui)
|
||||
endif()
|
||||
target_link_libraries(igl_opengl_glfw_imgui ${IGL_SCOPE} igl_opengl_glfw imgui)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
################################################################################
|
||||
### Compile the png part ###
|
||||
if(LIBIGL_WITH_PNG)
|
||||
# png/ module is anomalous because it also depends on opengl it really should
|
||||
# be moved into the opengl/ directory and namespace ...
|
||||
if(TARGET igl_opengl)
|
||||
if(NOT TARGET stb_image)
|
||||
igl_download_stb()
|
||||
add_subdirectory(${LIBIGL_EXTERNAL}/stb stb_image)
|
||||
endif()
|
||||
compile_igl_module("png" "")
|
||||
target_link_libraries(igl_png ${IGL_SCOPE} igl_stb_image igl_opengl)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
################################################################################
|
||||
### Compile the tetgen part ###
|
||||
if(LIBIGL_WITH_TETGEN)
|
||||
set(TETGEN_DIR "${LIBIGL_EXTERNAL}/tetgen")
|
||||
if(NOT TARGET tetgen)
|
||||
igl_download_tetgen()
|
||||
add_subdirectory("${TETGEN_DIR}" "tetgen")
|
||||
endif()
|
||||
compile_igl_module("tetgen")
|
||||
target_link_libraries(igl_tetgen ${IGL_SCOPE} tetgen)
|
||||
target_include_directories(igl_tetgen ${IGL_SCOPE} ${TETGEN_DIR})
|
||||
endif()
|
||||
|
||||
################################################################################
|
||||
### Compile the triangle part ###
|
||||
if(LIBIGL_WITH_TRIANGLE)
|
||||
set(TRIANGLE_DIR "${LIBIGL_EXTERNAL}/triangle")
|
||||
if(NOT TARGET triangle)
|
||||
igl_download_triangle()
|
||||
add_subdirectory("${TRIANGLE_DIR}" "triangle")
|
||||
endif()
|
||||
compile_igl_module("triangle")
|
||||
target_link_libraries(igl_triangle ${IGL_SCOPE} triangle)
|
||||
target_include_directories(igl_triangle ${IGL_SCOPE} ${TRIANGLE_DIR})
|
||||
endif()
|
||||
|
||||
################################################################################
|
||||
### Compile the predicates part ###
|
||||
if(LIBIGL_WITH_PREDICATES)
|
||||
set(PREDICATES_DIR "${LIBIGL_EXTERNAL}/predicates")
|
||||
if(NOT TARGET predicates)
|
||||
igl_download_predicates()
|
||||
add_subdirectory("${PREDICATES_DIR}" "predicates")
|
||||
endif()
|
||||
compile_igl_module("predicates")
|
||||
target_link_libraries(igl_predicates ${IGL_SCOPE} predicates)
|
||||
target_include_directories(igl_predicates ${IGL_SCOPE} ${PREDICATES_DIR})
|
||||
target_compile_definitions(igl_predicates ${IGL_SCOPE} -DLIBIGL_WITH_PREDICATES)
|
||||
endif()
|
||||
|
||||
################################################################################
|
||||
### Compile the xml part ###
|
||||
if(LIBIGL_WITH_XML)
|
||||
set(TINYXML2_DIR "${LIBIGL_EXTERNAL}/tinyxml2")
|
||||
if(NOT TARGET tinyxml2)
|
||||
igl_download_tinyxml2()
|
||||
add_library(tinyxml2 STATIC ${TINYXML2_DIR}/tinyxml2.cpp ${TINYXML2_DIR}/tinyxml2.h)
|
||||
target_include_directories(tinyxml2 PUBLIC ${TINYXML2_DIR})
|
||||
set_target_properties(tinyxml2 PROPERTIES
|
||||
COMPILE_DEFINITIONS "TINYXML2_EXPORT"
|
||||
VERSION "3.0.0"
|
||||
SOVERSION "3")
|
||||
endif()
|
||||
compile_igl_module("xml")
|
||||
target_link_libraries(igl_xml ${IGL_SCOPE} tinyxml2)
|
||||
target_include_directories(igl_xml ${IGL_SCOPE} ${TINYXML2_DIR})
|
||||
endif()
|
||||
|
||||
################################################################################
|
||||
### Install and export all modules
|
||||
|
||||
if(NOT LIBIGL_EXPORT_TARGETS)
|
||||
return()
|
||||
endif()
|
||||
|
||||
function(install_dir_files dir_name)
|
||||
if (dir_name STREQUAL "core")
|
||||
set(subpath "")
|
||||
else()
|
||||
set(subpath "/${dir_name}")
|
||||
endif()
|
||||
|
||||
file(GLOB public_headers
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include/igl${subpath}/*.h
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include/igl${subpath}/*.hpp
|
||||
)
|
||||
|
||||
set(files_to_install ${public_headers})
|
||||
|
||||
if(NOT LIBIGL_USE_STATIC_LIBRARY)
|
||||
file(GLOB public_sources
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include/igl${subpath}/*.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include/igl${subpath}/*.c
|
||||
)
|
||||
endif()
|
||||
list(APPEND files_to_install ${public_sources})
|
||||
|
||||
install(
|
||||
FILES ${files_to_install}
|
||||
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/igl${subpath}
|
||||
)
|
||||
endfunction()
|
||||
|
||||
################################################################################
|
||||
|
||||
include(GNUInstallDirs)
|
||||
include(CMakePackageConfigHelpers)
|
||||
|
||||
if(TARGET igl_eigen)
|
||||
set(IGL_EIGEN igl_eigen)
|
||||
else()
|
||||
set(IGL_EIGEN)
|
||||
message(WARNING "Trying to export igl targets while using an imported target for Eigen.")
|
||||
endif()
|
||||
|
||||
# Install and export core library
|
||||
install(
|
||||
TARGETS
|
||||
igl
|
||||
igl_common
|
||||
${IGL_EIGEN}
|
||||
EXPORT igl-export
|
||||
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
|
||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
)
|
||||
export(
|
||||
TARGETS
|
||||
igl
|
||||
igl_common
|
||||
${IGL_EIGEN}
|
||||
FILE libigl-export.cmake
|
||||
)
|
||||
|
||||
# Install headers for core library
|
||||
install_dir_files(core)
|
||||
install_dir_files(copyleft)
|
||||
|
||||
# Write package configuration file
|
||||
configure_package_config_file(
|
||||
${CMAKE_CURRENT_LIST_DIR}/libigl-config.cmake.in
|
||||
${CMAKE_BINARY_DIR}/libigl-config.cmake
|
||||
INSTALL_DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/libigl/cmake
|
||||
)
|
||||
install(
|
||||
FILES
|
||||
${CMAKE_BINARY_DIR}/libigl-config.cmake
|
||||
DESTINATION
|
||||
${CMAKE_INSTALL_DATADIR}/libigl/cmake
|
||||
)
|
||||
|
||||
# Write export file
|
||||
export(EXPORT igl-export
|
||||
FILE "${CMAKE_BINARY_DIR}/libigl-export.cmake"
|
||||
)
|
||||
install(EXPORT igl-export DESTINATION ${CMAKE_INSTALL_DATADIR}/libigl/cmake FILE libigl-export.cmake)
|
||||
|
||||
|
||||
export(PACKAGE libigl)
|
||||
|
||||
# Libigl restricted modules
|
||||
igl_include_optional(restricted matlab)
|
||||
igl_include_optional(restricted mosek)
|
||||
igl_include_optional(restricted triangle)
|
||||
|
||||
@@ -1,151 +0,0 @@
|
||||
# OS X requires a Mach-O dynamic library to have a baked "install name", that is used by other modules to link to it. Depending
|
||||
# on how the library is built, the install name is not always an absolute path, nor necessarily the same as the name of the
|
||||
# library file itself. This macro takes as input the name of a target, and a list of libraries that it links to (the output of
|
||||
# FIND_PACKAGE or FIND_LIBRARY calls), and generates a set of custom, post-build commands that, for each linked dylib, changes
|
||||
# the name the target uses to refer to it with a fully-qualified (absolute) version of the library's own install name. This
|
||||
# helps ensure that the target can be used from any location while still being able to locate the linked dynamic libraries.
|
||||
#
|
||||
# Note that this script does NOT handle the case when a linked library itself refers to another library using a non-absolute
|
||||
# name (Boost is a notorious example). To avoid such issues, it is recommended to use a static library instead of a shared one
|
||||
# in a non-standard location. Alternatively, set DYLD_LIBRARY_PATH to include these non-standard locations when running the
|
||||
# program (not recommended).
|
||||
#
|
||||
# Author: Siddhartha Chaudhuri, 2009.
|
||||
#
|
||||
|
||||
# Set the minimum required CMake version
|
||||
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
|
||||
|
||||
# See cmake --help-policy CMP0011 for details on this one
|
||||
IF(POLICY CMP0011)
|
||||
CMAKE_POLICY(SET CMP0011 NEW)
|
||||
ENDIF(POLICY CMP0011)
|
||||
|
||||
# See cmake --help-policy CMP0026 for details on this one
|
||||
IF(POLICY CMP0026)
|
||||
CMAKE_POLICY(SET CMP0026 NEW)
|
||||
ENDIF(POLICY CMP0026)
|
||||
|
||||
# See cmake --help-policy CMP0045 for details on this one
|
||||
IF(POLICY CMP0045)
|
||||
CMAKE_POLICY(SET CMP0045 NEW)
|
||||
ENDIF(POLICY CMP0045)
|
||||
|
||||
MACRO(OSX_FIX_DYLIB_REFERENCES target libraries)
|
||||
|
||||
IF(APPLE)
|
||||
SET(OFIN_${target}_RPATHS )
|
||||
|
||||
FOREACH(OFIN_${target}_Library ${libraries})
|
||||
IF(${OFIN_${target}_Library} MATCHES "[.]dylib$"
|
||||
OR ${OFIN_${target}_Library} MATCHES "[.]framework/.+")
|
||||
|
||||
# Resolve symlinks and get absolute location
|
||||
GET_FILENAME_COMPONENT(OFIN_${target}_LibraryAbsolute ${OFIN_${target}_Library} ABSOLUTE)
|
||||
|
||||
# Get the baked install name of the library
|
||||
EXECUTE_PROCESS(COMMAND otool -D ${OFIN_${target}_LibraryAbsolute}
|
||||
OUTPUT_VARIABLE OFIN_${target}_LibraryInstallNameOutput
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
STRING(REGEX REPLACE "[\r\n]" " " OFIN_${target}_LibraryInstallNameOutput ${OFIN_${target}_LibraryInstallNameOutput})
|
||||
SEPARATE_ARGUMENTS(OFIN_${target}_LibraryInstallNameOutput)
|
||||
LIST(GET OFIN_${target}_LibraryInstallNameOutput 1 OFIN_${target}_LibraryInstallName)
|
||||
|
||||
IF(${OFIN_${target}_LibraryInstallName} MATCHES "^[@]rpath/")
|
||||
|
||||
# Ideally, we want to eliminate the longest common suffix of the install name and the absolute path. Whatever's left
|
||||
# will be the desired rpath. But this is difficult to do (especially if there are naming variations, e.g.
|
||||
# "Versions/Current" vs "Versions/5" is a common culprit). So we'll add various candidate rpaths and hope at least one
|
||||
# is correct.
|
||||
|
||||
# Typically, the rpath to a library within a framework looks like this:
|
||||
# @rpath/A.framework/Versions/5/libFoo.dylib
|
||||
#
|
||||
# Hence, we'll extract for the path unit immediately following the @rpath (in this case A.framework) and then look for
|
||||
# it in the library's actual path. Everything before this location will be put in the rpath.
|
||||
SET(OFIN_${target}_PathPrefix ${OFIN_${target}_LibraryInstallName})
|
||||
SET(OFIN_${target}_RpathFirstChild )
|
||||
WHILE(NOT OFIN_${target}_PathPrefix STREQUAL "@rpath")
|
||||
GET_FILENAME_COMPONENT(OFIN_${target}_RpathFirstChild ${OFIN_${target}_PathPrefix} NAME)
|
||||
GET_FILENAME_COMPONENT(OFIN_${target}_PathPrefix ${OFIN_${target}_PathPrefix} PATH)
|
||||
|
||||
IF(NOT OFIN_${target}_PathPrefix) # should never happen but just in case
|
||||
BREAK()
|
||||
ENDIF(NOT OFIN_${target}_PathPrefix)
|
||||
|
||||
IF(OFIN_${target}_PathPrefix STREQUAL "/") # should never happen but just in case
|
||||
BREAK()
|
||||
ENDIF(OFIN_${target}_PathPrefix STREQUAL "/")
|
||||
ENDWHILE(NOT OFIN_${target}_PathPrefix STREQUAL "@rpath")
|
||||
|
||||
IF(OFIN_${target}_RpathFirstChild)
|
||||
SET(OFIN_${target}_PathPrefix ${OFIN_${target}_LibraryAbsolute})
|
||||
SET(OFIN_${target}_PathUnit )
|
||||
WHILE(NOT OFIN_${target}_PathUnit STREQUAL ${OFIN_${target}_RpathFirstChild})
|
||||
GET_FILENAME_COMPONENT(OFIN_${target}_PathUnit ${OFIN_${target}_PathPrefix} NAME)
|
||||
GET_FILENAME_COMPONENT(OFIN_${target}_PathPrefix ${OFIN_${target}_PathPrefix} PATH)
|
||||
|
||||
IF(NOT OFIN_${target}_PathPrefix)
|
||||
BREAK()
|
||||
ENDIF(NOT OFIN_${target}_PathPrefix)
|
||||
|
||||
IF(OFIN_${target}_PathPrefix STREQUAL "/")
|
||||
BREAK()
|
||||
ENDIF(OFIN_${target}_PathPrefix STREQUAL "/")
|
||||
ENDWHILE(NOT OFIN_${target}_PathUnit STREQUAL ${OFIN_${target}_RpathFirstChild})
|
||||
|
||||
IF(OFIN_${target}_PathPrefix)
|
||||
SET(OFIN_${target}_RPATHS ${OFIN_${target}_RPATHS} "${OFIN_${target}_PathPrefix}")
|
||||
ENDIF(OFIN_${target}_PathPrefix)
|
||||
ENDIF(OFIN_${target}_RpathFirstChild)
|
||||
|
||||
# Add the directory containing the library
|
||||
GET_FILENAME_COMPONENT(OFIN_${target}_LibraryAbsolutePath ${OFIN_${target}_LibraryAbsolute} PATH)
|
||||
SET(OFIN_${target}_RPATHS ${OFIN_${target}_RPATHS} "${OFIN_${target}_LibraryAbsolutePath}")
|
||||
|
||||
# Add paths specified as library search prefixes
|
||||
FOREACH(prefix ${CMAKE_PREFIX_PATH})
|
||||
SET(OFIN_${target}_RPATHS ${OFIN_${target}_RPATHS} "${CMAKE_PREFIX_PATH}")
|
||||
SET(OFIN_${target}_RPATHS ${OFIN_${target}_RPATHS} "${CMAKE_PREFIX_PATH}/lib")
|
||||
ENDFOREACH()
|
||||
|
||||
ELSEIF(NOT ${OFIN_${target}_LibraryInstallName} MATCHES "^[@/]") # just a relative path
|
||||
|
||||
# Replace the unqualified filename, if it appears, with the absolute location, either by directly changing the path or
|
||||
# by editing the rpath
|
||||
|
||||
# -- handle the case when the actual filename is baked in
|
||||
GET_FILENAME_COMPONENT(OFIN_${target}_LibraryFilename ${OFIN_${target}_LibraryAbsolute} NAME)
|
||||
ADD_CUSTOM_COMMAND(TARGET ${target} POST_BUILD
|
||||
COMMAND install_name_tool
|
||||
ARGS -change
|
||||
${OFIN_${target}_LibraryFilename}
|
||||
${OFIN_${target}_LibraryAbsolute}
|
||||
$<TARGET_FILE:${target}>)
|
||||
|
||||
# -- handle the case when the install name is baked in
|
||||
ADD_CUSTOM_COMMAND(TARGET ${target} POST_BUILD
|
||||
COMMAND install_name_tool
|
||||
ARGS -change
|
||||
${OFIN_${target}_LibraryInstallName}
|
||||
${OFIN_${target}_LibraryAbsolute}
|
||||
$<TARGET_FILE:${target}>)
|
||||
ENDIF()
|
||||
|
||||
ENDIF()
|
||||
ENDFOREACH(OFIN_${target}_Library)
|
||||
|
||||
# Add the collected rpaths
|
||||
IF(OFIN_${target}_RPATHS)
|
||||
LIST(REMOVE_DUPLICATES OFIN_${target}_RPATHS)
|
||||
|
||||
FOREACH(rpath ${OFIN_${target}_RPATHS})
|
||||
ADD_CUSTOM_COMMAND(TARGET ${target} POST_BUILD
|
||||
COMMAND bash
|
||||
ARGS -c "install_name_tool -add_rpath '${rpath}' '$<TARGET_FILE:${target}>' > /dev/null 2>&1 || true"
|
||||
VERBATIM)
|
||||
ENDFOREACH()
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
ENDMACRO(OSX_FIX_DYLIB_REFERENCES)
|
||||
Vendored
-60
@@ -1,60 +0,0 @@
|
||||
if(TARGET Boost::boost)
|
||||
return()
|
||||
endif()
|
||||
|
||||
message(STATUS "Third-party: creating targets 'Boost::boost'...")
|
||||
|
||||
cmake_minimum_required(VERSION 3.24) # Ensure modern FetchContent features
|
||||
project(BoostFetchExample)
|
||||
|
||||
include(FetchContent)
|
||||
|
||||
# Define the Boost library to fetch
|
||||
FetchContent_Declare(
|
||||
Boost
|
||||
URL https://archives.boost.io/release/1.86.0/source/boost_1_86_0.tar.gz
|
||||
URL_HASH MD5=ac857d73bb754b718a039830b07b9624
|
||||
)
|
||||
# Fetch Boost
|
||||
FetchContent_MakeAvailable(Boost)
|
||||
|
||||
|
||||
# Ensure Boost paths are set before CGAL
|
||||
set(Boost_INCLUDE_DIR ${boost_SOURCE_DIR})
|
||||
set(Boost_LIBRARY_DIR ${boost_BINARY_DIR})
|
||||
|
||||
# Add Boost libraries needed for your project
|
||||
set(BOOST_LIBRARIES
|
||||
container
|
||||
regex
|
||||
atomic
|
||||
exception
|
||||
chrono
|
||||
wave
|
||||
context
|
||||
coroutine
|
||||
date_time
|
||||
fiber
|
||||
filesystem
|
||||
graph
|
||||
iostreams
|
||||
locale
|
||||
log
|
||||
log_setup
|
||||
unit_test_framework
|
||||
math
|
||||
multiprecision
|
||||
program_options
|
||||
timer
|
||||
random
|
||||
serialization
|
||||
system
|
||||
thread
|
||||
type_erasure
|
||||
)
|
||||
|
||||
foreach(lib IN LISTS BOOST_LIBRARIES)
|
||||
add_library(boost_${lib} INTERFACE)
|
||||
target_include_directories(boost_${lib} INTERFACE ${Boost_SOURCE_DIR})
|
||||
target_link_libraries(boost_${lib} INTERFACE Boost::${lib})
|
||||
endforeach()
|
||||
Vendored
-14
@@ -1,14 +0,0 @@
|
||||
if(TARGET Catch2::Catch2)
|
||||
return()
|
||||
endif()
|
||||
|
||||
message(STATUS "Third-party: creating target 'Catch2::Catch2'")
|
||||
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
catch2
|
||||
GIT_REPOSITORY https://github.com/catchorg/Catch2.git
|
||||
GIT_TAG v2.13.8
|
||||
GIT_SHALLOW TRUE
|
||||
)
|
||||
FetchContent_MakeAvailable(catch2)
|
||||
Vendored
-50
@@ -1,50 +0,0 @@
|
||||
if(TARGET CGAL::CGAL)
|
||||
return()
|
||||
endif()
|
||||
|
||||
message(STATUS "Third-party: creating target 'CGAL::CGAL'")
|
||||
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
cgal
|
||||
URL https://github.com/CGAL/cgal/releases/download/v6.0.1/CGAL-6.0.1-library.tar.xz
|
||||
URL_MD5 ea827f6778063e00554ae41f4c845492
|
||||
)
|
||||
FetchContent_GetProperties(cgal)
|
||||
if(cgal_POPULATED)
|
||||
return()
|
||||
endif()
|
||||
FetchContent_Populate(cgal)
|
||||
|
||||
function(cgal_import_target)
|
||||
macro(ignore_package NAME VERSION_NUM)
|
||||
include(CMakePackageConfigHelpers)
|
||||
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${NAME}/${NAME}Config.cmake "")
|
||||
write_basic_package_version_file(
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${NAME}/${NAME}ConfigVersion.cmake
|
||||
VERSION ${VERSION_NUM}
|
||||
COMPATIBILITY AnyNewerVersion
|
||||
)
|
||||
set(${NAME}_DIR ${CMAKE_CURRENT_BINARY_DIR}/${NAME} CACHE PATH "")
|
||||
set(${NAME}_ROOT ${CMAKE_CURRENT_BINARY_DIR}/${NAME} CACHE PATH "")
|
||||
endmacro()
|
||||
|
||||
include(boost)
|
||||
|
||||
|
||||
ignore_package(Boost 1.71.0)
|
||||
set(Boost_INCLUDE_DIRS "")
|
||||
set(Boost_LIBRARIES Boost::thread Boost::system Boost::multiprecision)
|
||||
|
||||
# Prefer Config mode before Module mode to prevent CGAL from loading its own FindXXX.cmake
|
||||
set(CMAKE_FIND_PACKAGE_PREFER_CONFIG TRUE)
|
||||
|
||||
# https://stackoverflow.com/a/71714947/148668
|
||||
set(CGAL_DATA_DIR "unspecified")
|
||||
|
||||
set(CGAL_CMAKE_EXACT_NT_BACKEND "BOOST_BACKEND" CACHE STRING "CGAL exact NT backend")
|
||||
set(CGAL_DISABLE_GMP ON CACHE BOOL "Disable GMP")
|
||||
find_package(CGAL CONFIG COMPONENTS Core PATHS ${cgal_SOURCE_DIR} NO_DEFAULT_PATH)
|
||||
endfunction()
|
||||
|
||||
cgal_import_target()
|
||||
-18
@@ -1,18 +0,0 @@
|
||||
if(TARGET cycodebase::cycodebase)
|
||||
return()
|
||||
endif()
|
||||
|
||||
FetchContent_Declare(
|
||||
cyCodeBase
|
||||
GIT_REPOSITORY https://github.com/cemyuksel/cyCodeBase/
|
||||
GIT_TAG e36f3cffca65eb12a8a071f0443128b7de6ed75d
|
||||
)
|
||||
FetchContent_Populate(cyCodeBase)
|
||||
add_library(cyCodeBase_interface INTERFACE)
|
||||
target_include_directories(cyCodeBase_interface INTERFACE ${cycodebase_SOURCE_DIR})
|
||||
|
||||
if(NOT (CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|AMD64|i[3-6]86"))
|
||||
target_compile_definitions(cyCodeBase_interface INTERFACE CY_NO_INTRIN_H)
|
||||
endif()
|
||||
|
||||
add_library(cyCodeBase::cyCodeBase ALIAS cyCodeBase_interface)
|
||||
Vendored
-43
@@ -1,43 +0,0 @@
|
||||
if(TARGET Eigen3::Eigen)
|
||||
return()
|
||||
endif()
|
||||
|
||||
message(STATUS "Third-party: creating target 'Eigen3::Eigen'")
|
||||
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
eigen
|
||||
GIT_REPOSITORY https://gitlab.com/libeigen/eigen.git
|
||||
GIT_TAG tags/3.4.0
|
||||
GIT_SHALLOW TRUE
|
||||
)
|
||||
FetchContent_GetProperties(eigen)
|
||||
if(NOT eigen_POPULATED)
|
||||
FetchContent_Populate(eigen)
|
||||
endif()
|
||||
|
||||
add_library(Eigen3_Eigen INTERFACE)
|
||||
add_library(Eigen3::Eigen ALIAS Eigen3_Eigen)
|
||||
|
||||
include(GNUInstallDirs)
|
||||
target_include_directories(Eigen3_Eigen SYSTEM INTERFACE
|
||||
$<BUILD_INTERFACE:${eigen_SOURCE_DIR}>
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
||||
)
|
||||
|
||||
option(EIGEN_MPL2_ONLY "Compile Eigen with MPL2 code only" OFF)
|
||||
if(EIGEN_MPL2_ONLY)
|
||||
target_compile_definitions(Eigen3_Eigen INTERFACE EIGEN_MPL2_ONLY)
|
||||
endif()
|
||||
|
||||
# On Windows, enable natvis files to improve debugging experience
|
||||
if(WIN32 AND eigen_SOURCE_DIR)
|
||||
target_sources(Eigen3_Eigen INTERFACE $<BUILD_INTERFACE:${eigen_SOURCE_DIR}/debug/msvc/eigen.natvis>)
|
||||
endif()
|
||||
|
||||
# Install rules
|
||||
set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME eigen)
|
||||
set_target_properties(Eigen3_Eigen PROPERTIES EXPORT_NAME Eigen)
|
||||
install(DIRECTORY ${eigen_SOURCE_DIR}/Eigen DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
||||
install(TARGETS Eigen3_Eigen EXPORT EigenTargets)
|
||||
install(EXPORT EigenTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/eigen NAMESPACE Eigen3::)
|
||||
Vendored
-53
@@ -1,53 +0,0 @@
|
||||
if(TARGET embree::embree)
|
||||
return()
|
||||
endif()
|
||||
|
||||
message(STATUS "Third-party: creating target 'embree::embree'")
|
||||
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
embree
|
||||
GIT_REPOSITORY https://github.com/embree/embree.git
|
||||
GIT_TAG v4.4.0
|
||||
GIT_SHALLOW TRUE
|
||||
)
|
||||
|
||||
# Set Embree's default options
|
||||
option(EMBREE_ISPC_SUPPORT "Build Embree with support for ISPC applications." OFF)
|
||||
option(EMBREE_TUTORIALS "Enable to build Embree tutorials" OFF)
|
||||
option(EMBREE_STATIC_LIB "Build Embree as a static library." ON)
|
||||
set(EMBREE_TESTING_INTENSITY 0 CACHE STRING "Intensity of testing (0 = no testing, 1 = verify and tutorials, 2 = light testing, 3 = intensive testing.")
|
||||
set(EMBREE_TASKING_SYSTEM "INTERNAL" CACHE STRING "Selects tasking system")
|
||||
set(EMBREE_MAX_ISA "DEFAULT" CACHE STRING "Selects highest ISA to support.")
|
||||
|
||||
# Ready to include embree's atrocious CMake
|
||||
FetchContent_MakeAvailable(embree)
|
||||
|
||||
# Disable warnings
|
||||
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
||||
# Embree's subgrid.h is known for causing array subscript out of bound
|
||||
# warning. Embree dev claim the code is correct and it is a GCC bug
|
||||
# for misfiring warnings. See https://github.com/embree/embree/issues/271
|
||||
#
|
||||
# The issue should be fixed for gcc 9.2.1 and later.
|
||||
target_compile_options(embree PRIVATE "-Wno-array-bounds")
|
||||
endif()
|
||||
|
||||
# Now we need to do some juggling to propagate the include directory properties
|
||||
# along with the `embree` target
|
||||
include(GNUInstallDirs)
|
||||
target_include_directories(embree SYSTEM INTERFACE
|
||||
"$<BUILD_INTERFACE:${embree_SOURCE_DIR}/include>"
|
||||
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/>"
|
||||
)
|
||||
|
||||
add_library(embree::embree ALIAS embree)
|
||||
|
||||
# Some order for IDEs
|
||||
set_target_properties(embree PROPERTIES FOLDER "ThirdParty//Embree")
|
||||
set_target_properties(lexers PROPERTIES FOLDER "ThirdParty//Embree")
|
||||
set_target_properties(math PROPERTIES FOLDER "ThirdParty//Embree")
|
||||
set_target_properties(simd PROPERTIES FOLDER "ThirdParty//Embree")
|
||||
set_target_properties(sys PROPERTIES FOLDER "ThirdParty//Embree")
|
||||
set_target_properties(tasking PROPERTIES FOLDER "ThirdParty//Embree")
|
||||
set_target_properties(uninstall PROPERTIES FOLDER "ThirdParty//Embree")
|
||||
Vendored
-17
@@ -1,17 +0,0 @@
|
||||
if(TARGET glad::glad)
|
||||
return()
|
||||
endif()
|
||||
|
||||
message(STATUS "Third-party: creating target 'glad::glad'")
|
||||
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
glad
|
||||
GIT_REPOSITORY https://github.com/libigl/libigl-glad.git
|
||||
GIT_TAG 651a425101365aa6e8504988ef9bb363d066c5ee
|
||||
)
|
||||
|
||||
FetchContent_MakeAvailable(glad)
|
||||
add_library(glad::glad ALIAS glad)
|
||||
|
||||
set_target_properties(glad PROPERTIES FOLDER ThirdParty)
|
||||
Vendored
-42
@@ -1,42 +0,0 @@
|
||||
if(TARGET glfw::glfw)
|
||||
return()
|
||||
endif()
|
||||
|
||||
message(STATUS "Third-party: creating target 'glfw::glfw'")
|
||||
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
glfw
|
||||
GIT_REPOSITORY https://github.com/glfw/glfw.git
|
||||
GIT_TAG 3327050ca66ad34426a82c217c2d60ced61526b7
|
||||
)
|
||||
|
||||
option(GLFW_BUILD_EXAMPLES "Build the GLFW example programs" OFF)
|
||||
option(GLFW_BUILD_TESTS "Build the GLFW test programs" OFF)
|
||||
option(GLFW_BUILD_DOCS "Build the GLFW documentation" OFF)
|
||||
option(GLFW_INSTALL "Generate installation target" OFF)
|
||||
option(GLFW_VULKAN_STATIC "Use the Vulkan loader statically linked into application" OFF)
|
||||
FetchContent_MakeAvailable(glfw)
|
||||
|
||||
add_library(glfw::glfw ALIAS glfw)
|
||||
|
||||
set_target_properties(glfw PROPERTIES FOLDER ThirdParty)
|
||||
|
||||
# Warning config
|
||||
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang")
|
||||
target_compile_options(glfw PRIVATE
|
||||
"-Wno-missing-field-initializers"
|
||||
"-Wno-objc-multiple-method-names"
|
||||
)
|
||||
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
||||
target_compile_options(glfw PRIVATE
|
||||
"-Wno-missing-field-initializers"
|
||||
"-Wno-objc-multiple-method-names"
|
||||
)
|
||||
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
||||
target_compile_options(glfw PRIVATE
|
||||
"-Wno-missing-field-initializers"
|
||||
"-Wno-sign-compare"
|
||||
"-Wno-unused-parameter"
|
||||
)
|
||||
endif()
|
||||
Vendored
-53
@@ -1,53 +0,0 @@
|
||||
if(TARGET imgui::imgui)
|
||||
return()
|
||||
endif()
|
||||
|
||||
message(STATUS "Third-party: creating target 'imgui::imgui'")
|
||||
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
imgui
|
||||
GIT_REPOSITORY https://github.com/ocornut/imgui.git
|
||||
GIT_TAG v1.85
|
||||
GIT_SHALLOW TRUE
|
||||
)
|
||||
FetchContent_MakeAvailable(imgui)
|
||||
|
||||
set(IMGUI_SRC
|
||||
"${imgui_SOURCE_DIR}/imgui.h"
|
||||
"${imgui_SOURCE_DIR}/imconfig.h"
|
||||
"${imgui_SOURCE_DIR}/imgui_internal.h"
|
||||
"${imgui_SOURCE_DIR}/imgui.cpp"
|
||||
"${imgui_SOURCE_DIR}/imgui_demo.cpp"
|
||||
"${imgui_SOURCE_DIR}/imgui_draw.cpp"
|
||||
"${imgui_SOURCE_DIR}/imgui_widgets.cpp"
|
||||
"${imgui_SOURCE_DIR}/imgui_tables.cpp"
|
||||
"${imgui_SOURCE_DIR}/imstb_rectpack.h"
|
||||
"${imgui_SOURCE_DIR}/imstb_textedit.h"
|
||||
"${imgui_SOURCE_DIR}/imstb_truetype.h"
|
||||
"${imgui_SOURCE_DIR}/backends/imgui_impl_opengl3.h"
|
||||
"${imgui_SOURCE_DIR}/backends/imgui_impl_opengl3.cpp"
|
||||
"${imgui_SOURCE_DIR}/backends/imgui_impl_glfw.h"
|
||||
"${imgui_SOURCE_DIR}/backends/imgui_impl_glfw.cpp"
|
||||
"${imgui_SOURCE_DIR}/misc/cpp/imgui_stdlib.h"
|
||||
"${imgui_SOURCE_DIR}/misc/cpp/imgui_stdlib.cpp"
|
||||
)
|
||||
|
||||
add_library(imgui ${IMGUI_SRC})
|
||||
add_library(imgui::imgui ALIAS imgui)
|
||||
|
||||
# Include headers
|
||||
target_include_directories(imgui PUBLIC "${imgui_SOURCE_DIR}")
|
||||
|
||||
# Compile definitions
|
||||
target_compile_definitions(imgui PUBLIC
|
||||
IMGUI_IMPL_OPENGL_LOADER_GLAD
|
||||
IMGUI_DISABLE_OBSOLETE_FUNCTIONS # to check for obsolete functions
|
||||
)
|
||||
|
||||
# Dependencies
|
||||
include(glfw)
|
||||
include(glad)
|
||||
target_link_libraries(imgui PUBLIC glfw::glfw glad::glad)
|
||||
|
||||
set_target_properties(imgui PROPERTIES FOLDER ThirdParty)
|
||||
-30
@@ -1,30 +0,0 @@
|
||||
if(TARGET imguizmo::imguizmo)
|
||||
return()
|
||||
endif()
|
||||
|
||||
message(STATUS "Third-party: creating target 'imguizmo::imguizmo'")
|
||||
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
imguizmo
|
||||
GIT_REPOSITORY https://github.com/CedricGuillemet/ImGuizmo.git
|
||||
GIT_TAG a23567269f6617342bcc112394bdad937b54b2d7
|
||||
)
|
||||
FetchContent_MakeAvailable(imguizmo)
|
||||
|
||||
set(IMGUIZMO_SRC
|
||||
"${imguizmo_SOURCE_DIR}/ImGuizmo.h"
|
||||
"${imguizmo_SOURCE_DIR}/ImGuizmo.cpp"
|
||||
)
|
||||
|
||||
add_library(imguizmo ${IMGUIZMO_SRC})
|
||||
add_library(imguizmo::imguizmo ALIAS imguizmo)
|
||||
|
||||
target_compile_features(imguizmo PUBLIC cxx_std_11)
|
||||
|
||||
target_include_directories(imguizmo PUBLIC "${imguizmo_SOURCE_DIR}")
|
||||
|
||||
include(imgui)
|
||||
target_link_libraries(imguizmo PUBLIC imgui::imgui)
|
||||
|
||||
set_target_properties(imguizmo PROPERTIES FOLDER ThirdParty)
|
||||
-25
@@ -1,25 +0,0 @@
|
||||
if(TARGET igl::imgui_fonts)
|
||||
return()
|
||||
endif()
|
||||
|
||||
message(STATUS "Third-party: creating target 'igl::imgui_fonts'")
|
||||
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
libigl_imgui_fonts
|
||||
GIT_REPOSITORY https://github.com/libigl/libigl-imgui.git
|
||||
GIT_TAG 7e1053e750b0f4c129b046f4e455243cb7f804f3
|
||||
)
|
||||
FetchContent_GetProperties(libigl_imgui_fonts)
|
||||
if(NOT libigl_imgui_fonts_POPULATED)
|
||||
FetchContent_Populate(libigl_imgui_fonts)
|
||||
endif()
|
||||
|
||||
add_library(igl_imgui_fonts INTERFACE)
|
||||
add_library(igl::imgui_fonts ALIAS igl_imgui_fonts)
|
||||
|
||||
include(GNUInstallDirs)
|
||||
target_include_directories(igl_imgui_fonts SYSTEM INTERFACE
|
||||
$<BUILD_INTERFACE:${libigl_imgui_fonts_SOURCE_DIR}>
|
||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
||||
)
|
||||
-18
@@ -1,18 +0,0 @@
|
||||
if(TARGET igl::tests_data)
|
||||
return()
|
||||
endif()
|
||||
|
||||
message(STATUS "Third-party: creating target 'igl::tests_data'")
|
||||
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
libigl_tests_data
|
||||
GIT_REPOSITORY https://github.com/libigl/libigl-tests-data
|
||||
GIT_TAG 19cedf96d70702d8b3a83eb27934780c542356fe
|
||||
)
|
||||
FetchContent_MakeAvailable(libigl_tests_data)
|
||||
|
||||
add_library(igl_tests_data INTERFACE)
|
||||
add_library(igl::tests_data ALIAS igl_tests_data)
|
||||
|
||||
target_compile_definitions(igl_tests_data INTERFACE LIBIGL_DATA_DIR=\"${libigl_tests_data_SOURCE_DIR}\")
|
||||
@@ -1,18 +0,0 @@
|
||||
if(TARGET igl::tutorial_data)
|
||||
return()
|
||||
endif()
|
||||
|
||||
message(STATUS "Third-party: creating target 'igl::tutorial_data'")
|
||||
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
libigl_tutorial_data
|
||||
GIT_REPOSITORY https://github.com/libigl/libigl-tutorial-data
|
||||
GIT_TAG 644dd4104843b6d736745d9dafbd70bf8d175648
|
||||
)
|
||||
FetchContent_MakeAvailable(libigl_tutorial_data)
|
||||
|
||||
add_library(igl_tutorial_data INTERFACE)
|
||||
add_library(igl::tutorial_data ALIAS igl_tutorial_data)
|
||||
|
||||
target_compile_definitions(igl_tutorial_data INTERFACE "-DTUTORIAL_SHARED_PATH=\"${libigl_tutorial_data_SOURCE_DIR}\"")
|
||||
-17
@@ -1,17 +0,0 @@
|
||||
if(TARGET predicates::predicates)
|
||||
return()
|
||||
endif()
|
||||
|
||||
message(STATUS "Third-party: creating target 'predicates::predicates'")
|
||||
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
predicates
|
||||
GIT_REPOSITORY https://github.com/libigl/libigl-predicates.git
|
||||
GIT_TAG decb7bc1260e689cbe008109e3cc5d3a5a433aea
|
||||
)
|
||||
|
||||
FetchContent_MakeAvailable(predicates)
|
||||
add_library(predicates::predicates ALIAS predicates)
|
||||
|
||||
set_target_properties(predicates PROPERTIES FOLDER ThirdParty)
|
||||
Vendored
-16
@@ -1,16 +0,0 @@
|
||||
if(TARGET spectra::spectra)
|
||||
return()
|
||||
endif()
|
||||
include(FetchContent)
|
||||
|
||||
message(STATUS "Third-party: creating target 'spectra::spectra'")
|
||||
|
||||
# Use fork because yixuan/spectra struggles to find Eigen3
|
||||
FetchContent_Declare(
|
||||
Spectra
|
||||
GIT_REPOSITORY https://github.com/alecjacobson/spectra/
|
||||
GIT_TAG bbdc521b70a733c52ebfc0ac1484c82e13c3d140
|
||||
)
|
||||
FetchContent_MakeAvailable(Spectra)
|
||||
|
||||
add_library(spectra::spectra ALIAS Spectra)
|
||||
Vendored
-32
@@ -1,32 +0,0 @@
|
||||
if(TARGET stb::stb)
|
||||
return()
|
||||
endif()
|
||||
|
||||
message(STATUS "Third-party: creating target 'stb::stb'")
|
||||
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
stb
|
||||
GIT_REPOSITORY https://github.com/nothings/stb.git
|
||||
GIT_TAG f67165c2bb2af3060ecae7d20d6f731173485ad0
|
||||
)
|
||||
FetchContent_MakeAvailable(stb)
|
||||
|
||||
# Generate implementation file
|
||||
file(WRITE "${stb_BINARY_DIR}/stb_image.cpp.in" [[
|
||||
#define STB_IMAGE_IMPLEMENTATION
|
||||
#include <stb_image.h>
|
||||
|
||||
#define STB_IMAGE_WRITE_IMPLEMENTATION
|
||||
#include <stb_image_write.h>
|
||||
]])
|
||||
|
||||
configure_file(${stb_BINARY_DIR}/stb_image.cpp.in ${stb_BINARY_DIR}/stb_image.cpp COPYONLY)
|
||||
|
||||
# Define stb library
|
||||
add_library(stb ${stb_BINARY_DIR}/stb_image.cpp)
|
||||
add_library(stb::stb ALIAS stb)
|
||||
|
||||
target_include_directories(stb PUBLIC "${stb_SOURCE_DIR}")
|
||||
|
||||
set_target_properties(stb PROPERTIES FOLDER ThirdParty)
|
||||
Vendored
-19
@@ -1,19 +0,0 @@
|
||||
if(TARGET tetgen::tetgen)
|
||||
return()
|
||||
endif()
|
||||
|
||||
message(STATUS "Third-party: creating target 'tetgen::tetgen'")
|
||||
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
tetgen
|
||||
GIT_REPOSITORY https://github.com/libigl/tetgen.git
|
||||
GIT_TAG e05aca7df74e3f531bc35733ed87d36d437266c5
|
||||
)
|
||||
|
||||
FetchContent_MakeAvailable(tetgen)
|
||||
add_library(tetgen::tetgen ALIAS tetgen)
|
||||
|
||||
target_include_directories(tetgen INTERFACE "${tetgen_SOURCE_DIR}")
|
||||
|
||||
set_target_properties(tetgen PROPERTIES FOLDER ThirdParty)
|
||||
-24
@@ -1,24 +0,0 @@
|
||||
if(TARGET tinyxml2::tinyxml2)
|
||||
return()
|
||||
endif()
|
||||
|
||||
message(STATUS "Third-party: creating target 'tinyxml2::tinyxml2'")
|
||||
|
||||
# TODO: Update tinyxml2 version + use FetchContent_MakeAvailable with upstream CMake code
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
tinyxml2
|
||||
GIT_REPOSITORY https://github.com/leethomason/tinyxml2.git
|
||||
GIT_TAG d175e9de0be0d4db75d0a8cf065599a435a87eb6
|
||||
)
|
||||
FetchContent_GetProperties(tinyxml2)
|
||||
if(NOT tinyxml2_POPULATED)
|
||||
FetchContent_Populate(tinyxml2)
|
||||
endif()
|
||||
|
||||
add_library(tinyxml2 STATIC ${tinyxml2_SOURCE_DIR}/tinyxml2.cpp ${tinyxml2_SOURCE_DIR}/tinyxml2.h)
|
||||
add_library(tinyxml2::tinyxml2 ALIAS tinyxml2)
|
||||
target_include_directories(tinyxml2 PUBLIC ${tinyxml2_SOURCE_DIR})
|
||||
set_target_properties(tinyxml2 PROPERTIES DEFINE_SYMBOL "TINYXML2_EXPORT")
|
||||
|
||||
set_target_properties(tinyxml2 PROPERTIES FOLDER ThirdParty)
|
||||
-19
@@ -1,19 +0,0 @@
|
||||
if(TARGET triangle::triangle)
|
||||
return()
|
||||
endif()
|
||||
|
||||
message(STATUS "Third-party: creating target 'triangle::triangle'")
|
||||
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
triangle
|
||||
GIT_REPOSITORY https://github.com/libigl/triangle.git
|
||||
GIT_TAG 62f02db9ab4ff4b62d5ff82a77c8ea458c84c23a
|
||||
)
|
||||
|
||||
FetchContent_MakeAvailable(triangle)
|
||||
add_library(triangle::triangle ALIAS triangle)
|
||||
|
||||
target_include_directories(triangle INTERFACE "${triangle_SOURCE_DIR}")
|
||||
|
||||
set_target_properties(triangle PROPERTIES FOLDER ThirdParty)
|
||||
@@ -1,5 +0,0 @@
|
||||
get_filename_component(current_filename ${CMAKE_CURRENT_LIST_FILE} NAME_WLE)
|
||||
message(FATAL_ERROR
|
||||
"${current_filename} is not set up to be used with Hunter. "
|
||||
"Please disable the libigl modules depending on it, or set HUNTER_ENABLED to OFF."
|
||||
)
|
||||
@@ -1 +0,0 @@
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/../external/catch2.cmake)
|
||||
@@ -1,5 +0,0 @@
|
||||
get_filename_component(current_filename ${CMAKE_CURRENT_LIST_FILE} NAME_WLE)
|
||||
message(FATAL_ERROR
|
||||
"${current_filename} is not set up to be used with Hunter. "
|
||||
"Please disable the libigl modules depending on it, or set HUNTER_ENABLED to OFF."
|
||||
)
|
||||
@@ -1,5 +0,0 @@
|
||||
get_filename_component(current_filename ${CMAKE_CURRENT_LIST_FILE} NAME_WLE)
|
||||
message(FATAL_ERROR
|
||||
"${current_filename} is not set up to be used with Hunter. "
|
||||
"Please disable the libigl modules depending on it, or set HUNTER_ENABLED to OFF."
|
||||
)
|
||||
@@ -1,2 +0,0 @@
|
||||
hunter_add_package(Eigen)
|
||||
find_package(Eigen3 CONFIG REQUIRED)
|
||||
@@ -1,5 +0,0 @@
|
||||
get_filename_component(current_filename ${CMAKE_CURRENT_LIST_FILE} NAME_WLE)
|
||||
message(FATAL_ERROR
|
||||
"${current_filename} is not set up to be used with Hunter. "
|
||||
"Please disable the libigl modules depending on it, or set HUNTER_ENABLED to OFF."
|
||||
)
|
||||
@@ -1,5 +0,0 @@
|
||||
get_filename_component(current_filename ${CMAKE_CURRENT_LIST_FILE} NAME_WLE)
|
||||
message(FATAL_ERROR
|
||||
"${current_filename} is not set up to be used with Hunter. "
|
||||
"Please disable the libigl modules depending on it, or set HUNTER_ENABLED to OFF."
|
||||
)
|
||||
@@ -1,5 +0,0 @@
|
||||
get_filename_component(current_filename ${CMAKE_CURRENT_LIST_FILE} NAME_WLE)
|
||||
message(FATAL_ERROR
|
||||
"${current_filename} is not set up to be used with Hunter. "
|
||||
"Please disable the libigl modules depending on it, or set HUNTER_ENABLED to OFF."
|
||||
)
|
||||
@@ -1,5 +0,0 @@
|
||||
get_filename_component(current_filename ${CMAKE_CURRENT_LIST_FILE} NAME_WLE)
|
||||
message(FATAL_ERROR
|
||||
"${current_filename} is not set up to be used with Hunter. "
|
||||
"Please disable the libigl modules depending on it, or set HUNTER_ENABLED to OFF."
|
||||
)
|
||||
@@ -1,5 +0,0 @@
|
||||
get_filename_component(current_filename ${CMAKE_CURRENT_LIST_FILE} NAME_WLE)
|
||||
message(FATAL_ERROR
|
||||
"${current_filename} is not set up to be used with Hunter. "
|
||||
"Please disable the libigl modules depending on it, or set HUNTER_ENABLED to OFF."
|
||||
)
|
||||
@@ -1,5 +0,0 @@
|
||||
get_filename_component(current_filename ${CMAKE_CURRENT_LIST_FILE} NAME_WLE)
|
||||
message(FATAL_ERROR
|
||||
"${current_filename} is not set up to be used with Hunter. "
|
||||
"Please disable the libigl modules depending on it, or set HUNTER_ENABLED to OFF."
|
||||
)
|
||||
@@ -1,5 +0,0 @@
|
||||
get_filename_component(current_filename ${CMAKE_CURRENT_LIST_FILE} NAME_WLE)
|
||||
message(FATAL_ERROR
|
||||
"${current_filename} is not set up to be used with Hunter. "
|
||||
"Please disable the libigl modules depending on it, or set HUNTER_ENABLED to OFF."
|
||||
)
|
||||
@@ -1 +0,0 @@
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/../external/libigl_tests_data.cmake)
|
||||
@@ -1 +0,0 @@
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/../external/libigl_tutorial_data.cmake)
|
||||
@@ -1,5 +0,0 @@
|
||||
get_filename_component(current_filename ${CMAKE_CURRENT_LIST_FILE} NAME_WLE)
|
||||
message(FATAL_ERROR
|
||||
"${current_filename} is not set up to be used with Hunter. "
|
||||
"Please disable the libigl modules depending on it, or set HUNTER_ENABLED to OFF."
|
||||
)
|
||||
@@ -1,5 +0,0 @@
|
||||
get_filename_component(current_filename ${CMAKE_CURRENT_LIST_FILE} NAME_WLE)
|
||||
message(FATAL_ERROR
|
||||
"${current_filename} is not set up to be used with Hunter. "
|
||||
"Please disable the libigl modules depending on it, or set HUNTER_ENABLED to OFF."
|
||||
)
|
||||
@@ -1,5 +0,0 @@
|
||||
get_filename_component(current_filename ${CMAKE_CURRENT_LIST_FILE} NAME_WLE)
|
||||
message(FATAL_ERROR
|
||||
"${current_filename} is not set up to be used with Hunter. "
|
||||
"Please disable the libigl modules depending on it, or set HUNTER_ENABLED to OFF."
|
||||
)
|
||||
@@ -1,5 +0,0 @@
|
||||
get_filename_component(current_filename ${CMAKE_CURRENT_LIST_FILE} NAME_WLE)
|
||||
message(FATAL_ERROR
|
||||
"${current_filename} is not set up to be used with Hunter. "
|
||||
"Please disable the libigl modules depending on it, or set HUNTER_ENABLED to OFF."
|
||||
)
|
||||
@@ -1,5 +0,0 @@
|
||||
get_filename_component(current_filename ${CMAKE_CURRENT_LIST_FILE} NAME_WLE)
|
||||
message(FATAL_ERROR
|
||||
"${current_filename} is not set up to be used with Hunter. "
|
||||
"Please disable the libigl modules depending on it, or set HUNTER_ENABLED to OFF."
|
||||
)
|
||||
@@ -1,5 +0,0 @@
|
||||
get_filename_component(current_filename ${CMAKE_CURRENT_LIST_FILE} NAME_WLE)
|
||||
message(FATAL_ERROR
|
||||
"${current_filename} is not set up to be used with Hunter. "
|
||||
"Please disable the libigl modules depending on it, or set HUNTER_ENABLED to OFF."
|
||||
)
|
||||
File diff suppressed because it is too large
Load Diff
-2729
File diff suppressed because it is too large
Load Diff
@@ -1,54 +0,0 @@
|
||||
# libigl - A simple C++ geometry processing library
|
||||
|
||||
This detailed documentation browser is automatically generated from the comments
|
||||
in libigl header (.h) files.
|
||||
|
||||
In general, each [libigl function](./namespaceigl.html#func-members) (e.g., `igl::func`) will be defined in a
|
||||
correspondingly named header file (e.g., `#include <igl/func.h>`).
|
||||
|
||||
The _core_ library only depends on the standard template library (`std::`) and
|
||||
Eigen. These functions reside directly the [`igl::` namespace](./namespaceigl.html)
|
||||
|
||||
Functions with further dependencies reside in a corresonding sub-namespace. For
|
||||
example, the function `igl::spectra::lscm` depends on the Spectra library so it
|
||||
resides in the [`igl::spectra::` namespace](./namespaceigl_1_1spectra.html).
|
||||
|
||||
Functions which depend on external code under a copyleft license reside in the
|
||||
[`igl::copyleft::` namepsace](file:///Users/alecjacobson/Repos/libigl/dox/namespaceigl_1_1copyleft.html).
|
||||
|
||||
|
||||
Most libigl functions are templated over the Eigen matrix inputs and outputs.
|
||||
Callers can choose their own scalar types (e.g., `double`/`float`) and storage
|
||||
orders (`Eigen::ColMajor`/`Eigen::RowMajor`). Libigl can be used as a:
|
||||
|
||||
- **header only library** (via CMake, make sure
|
||||
`LIBIGL_USE_STATIC_LIBRARY=OFF`) and insure that `IGL_STATIC_LIBRARY` is
|
||||
_not_ defined_ when compiling --- easiest if you're new to libigl, or
|
||||
- **static library** (`LIBIGL_USE_STATIC_LIBRARY=ON` → `IGL_STATIC_LIBRARY` is
|
||||
defined) --- speeds up repeated compilation.
|
||||
|
||||
The libigl static library is filled with _explicit template instantiations_ for
|
||||
common Eigen inputs and outputs. If the library doesn't contain your types, you
|
||||
may get some form of linker error (e.g., `Undefined symbols for architecture`,
|
||||
`undefined reference to` or `unresolved external symbol`).
|
||||
|
||||
You can fix this by:
|
||||
|
||||
1. Switching to header only mode for your project,
|
||||
2. Making a file in your project to compile the missing templates. E.g., `my_templates.cpp`
|
||||
```cpp
|
||||
#ifdef IGL_STATIC_LIBRARY
|
||||
#undef IGL_STATIC_LIBRARY
|
||||
#endif
|
||||
#include <igl/per_vertex_normals.h>
|
||||
template void igl::per_vertex_normals<Eigen::Matrix<float, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<float, -1, -1, 0, -1, -1> >(Eigen::MatrixBase<Eigen::Matrix<float, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<float, -1, -1, 0, -1, -1> >&);
|
||||
```
|
||||
3. [Submit a PR](https://github.com/libigl/libigl/pulls) containing your missing template to the development branch of libigl
|
||||
4. Change your input/output types to match existing templates (e.g., `Eigen::MatrixXd`).
|
||||
|
||||
|
||||
|
||||
|
||||
https://libigl.github.io/
|
||||
|
||||
https://github.com/libigl/libigl/
|
||||
+375
-1064
File diff suppressed because it is too large
Load Diff
+199
-641
File diff suppressed because it is too large
Load Diff
@@ -9,24 +9,27 @@
|
||||
#define IGL_ARAPENERGYTYPE_H
|
||||
namespace igl
|
||||
{
|
||||
/// Enum for choosing ARAP energy type
|
||||
// ARAP_ENERGY_TYPE_SPOKES "As-rigid-as-possible Surface Modeling" by [Sorkine and
|
||||
// Alexa 2007], rotations defined at vertices affecting incident edges,
|
||||
// default
|
||||
// ARAP_ENERGY_TYPE_SPOKES-AND-RIMS Adapted version of "As-rigid-as-possible Surface
|
||||
// Modeling" by [Sorkine and Alexa 2007] presented in section 4.2 of or
|
||||
// "A simple geometric model for elastic deformation" by [Chao et al.
|
||||
// 2010], rotations defined at vertices affecting incident edges and
|
||||
// opposite edges
|
||||
// ARAP_ENERGY_TYPE_ELEMENTS "A local-global approach to mesh parameterization" by
|
||||
// [Liu et al. 2010] or "A simple geometric model for elastic
|
||||
// deformation" by [Chao et al. 2010], rotations defined at elements
|
||||
// (triangles or tets)
|
||||
// ARAP_ENERGY_TYPE_DEFAULT Choose one automatically: spokes and rims
|
||||
// for surfaces, elements for planar meshes and tets (not fully
|
||||
// supported)
|
||||
enum ARAPEnergyType
|
||||
{
|
||||
/// "As-rigid-as-possible Surface Modeling" by [Sorkine and Alexa 2007],
|
||||
/// rotations defined at vertices affecting incident edges, default
|
||||
ARAP_ENERGY_TYPE_SPOKES = 0,
|
||||
/// Adapted version of "As-rigid-as-possible Surface Modeling" by [Sorkine
|
||||
/// and Alexa 2007] presented in section 4.2 of or "A simple geometric model
|
||||
/// for elastic deformation" by [Chao et al.\ 2010], rotations defined at
|
||||
/// vertices affecting incident edges and opposite edges
|
||||
ARAP_ENERGY_TYPE_SPOKES_AND_RIMS = 1,
|
||||
/// "A local-global approach to mesh parameterization" by [Liu et al.\ 2010]
|
||||
/// or "A simple geometric model for elastic deformation" by [Chao et al.\ 2010], rotations defined at elements (triangles or tets)
|
||||
ARAP_ENERGY_TYPE_ELEMENTS = 2,
|
||||
/// Choose one automatically: spokes and rims for surfaces, elements for
|
||||
/// planar meshes and tets (not fully supported)
|
||||
ARAP_ENERGY_TYPE_DEFAULT = 3,
|
||||
/// Total number of types
|
||||
NUM_ARAP_ENERGY_TYPES = 4
|
||||
};
|
||||
}
|
||||
|
||||
+12
-13
@@ -6,7 +6,6 @@
|
||||
// v. 2.0. If a copy of the MPL was not distributed with this file, You can
|
||||
// obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#include "AtA_cached.h"
|
||||
#include "IGL_ASSERT.h"
|
||||
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
@@ -35,12 +34,12 @@ IGL_INLINE void igl::AtA_cached_precompute(
|
||||
int col = k;
|
||||
int row = *(A.innerIndexPtr()+l);
|
||||
int value_index = l;
|
||||
IGL_ASSERT(col < A.cols());
|
||||
IGL_ASSERT(col >= 0);
|
||||
IGL_ASSERT(row < A.rows());
|
||||
IGL_ASSERT(row >= 0);
|
||||
IGL_ASSERT(value_index >= 0);
|
||||
IGL_ASSERT(value_index < A.nonZeros());
|
||||
assert(col < A.cols());
|
||||
assert(col >= 0);
|
||||
assert(row < A.rows());
|
||||
assert(row >= 0);
|
||||
assert(value_index >= 0);
|
||||
assert(value_index < A.nonZeros());
|
||||
|
||||
Col_RowPtr[col].push_back(row);
|
||||
Col_IndexPtr[col].push_back(value_index);
|
||||
@@ -75,12 +74,12 @@ IGL_INLINE void igl::AtA_cached_precompute(
|
||||
int col = k;
|
||||
int row = *(AtA.innerIndexPtr()+l);
|
||||
int value_index = l;
|
||||
IGL_ASSERT(col < AtA.cols());
|
||||
IGL_ASSERT(col >= 0);
|
||||
IGL_ASSERT(row < AtA.rows());
|
||||
IGL_ASSERT(row >= 0);
|
||||
IGL_ASSERT(value_index >= 0);
|
||||
IGL_ASSERT(value_index < AtA.nonZeros());
|
||||
assert(col < AtA.cols());
|
||||
assert(col >= 0);
|
||||
assert(row < AtA.rows());
|
||||
assert(row >= 0);
|
||||
assert(value_index >= 0);
|
||||
assert(value_index < AtA.nonZeros());
|
||||
|
||||
data.I_outer.push_back(data.I_row.size());
|
||||
|
||||
|
||||
+20
-32
@@ -13,47 +13,40 @@
|
||||
#include <Eigen/Sparse>
|
||||
namespace igl
|
||||
{
|
||||
/// Hold precomputed data for AtA_cached
|
||||
struct AtA_cached_data
|
||||
{
|
||||
/// Weights (diagonal of W)
|
||||
// Weights
|
||||
Eigen::VectorXd W;
|
||||
|
||||
// Flatten composition rules
|
||||
/// @private
|
||||
std::vector<int> I_row;
|
||||
/// @private
|
||||
std::vector<int> I_col;
|
||||
/// @private
|
||||
std::vector<int> I_w;
|
||||
|
||||
// For each entry of AtA, points to the beginning
|
||||
// of the composition rules
|
||||
/// @private
|
||||
std::vector<int> I_outer;
|
||||
};
|
||||
|
||||
/// Computes At * W * A, where A is sparse and W is diagonal.
|
||||
///
|
||||
/// Divides the construction in two phases, one for fixing the sparsity
|
||||
/// pattern, and one to populate it with values. Compared to evaluating it
|
||||
/// directly, this version is slower for the first time (since it requires a
|
||||
/// precomputation), but faster to the subsequent evaluations.
|
||||
///
|
||||
/// @param[in] A m x n sparse matrix
|
||||
/// @param[in,out] data stores the precomputed sparsity pattern, data.W contains the optional diagonal weights (stored as a dense vector). If W is not provided, it is replaced by the identity.
|
||||
/// @param[out] AtA m by m matrix computed as AtA * W * A
|
||||
///
|
||||
/// #### Example:
|
||||
///
|
||||
/// \code{cpp}
|
||||
/// AtA_data = igl::AtA_cached_data();
|
||||
/// AtA_data.W = W;
|
||||
/// if (s.AtA.rows() == 0)
|
||||
/// igl::AtA_cached_precompute(s.A,s.AtA_data,s.AtA);
|
||||
/// else
|
||||
/// igl::AtA_cached(s.A,s.AtA_data,s.AtA);
|
||||
/// \endcode
|
||||
// Computes At * W * A, where A is sparse and W is diagonal. Divides the
|
||||
// construction in two phases, one
|
||||
// for fixing the sparsity pattern, and one to populate it with values. Compared to
|
||||
// evaluating it directly, this version is slower for the first time (since it requires a
|
||||
// precomputation), but faster to the subsequent evaluations.
|
||||
//
|
||||
// Input:
|
||||
// A m x n sparse matrix
|
||||
// data stores the precomputed sparsity pattern, data.W contains the optional diagonal weights (stored as a dense vector). If W is not provided, it is replaced by the identity.
|
||||
// Outputs:
|
||||
// AtA m by m matrix computed as AtA * W * A
|
||||
//
|
||||
// Example:
|
||||
// AtA_data = igl::AtA_cached_data();
|
||||
// AtA_data.W = W;
|
||||
// if (s.AtA.rows() == 0)
|
||||
// igl::AtA_cached_precompute(s.A,s.AtA_data,s.AtA);
|
||||
// else
|
||||
// igl::AtA_cached(s.A,s.AtA_data,s.AtA);
|
||||
template <typename Scalar>
|
||||
IGL_INLINE void AtA_cached_precompute(
|
||||
const Eigen::SparseMatrix<Scalar>& A,
|
||||
@@ -61,11 +54,6 @@ namespace igl
|
||||
Eigen::SparseMatrix<Scalar>& AtA
|
||||
);
|
||||
|
||||
/// Computes At * W * A, where A is sparse and W is diagonal precomputed into data.
|
||||
///
|
||||
/// @param[in] A m x n sparse matrix
|
||||
/// @param[in] data stores the precomputed sparsity pattern, data.W contains the optional diagonal weights (stored as a dense vector). If W is not provided, it is replaced by the identity.
|
||||
/// @param[out] AtA m by m matrix computed as AtA * W * A
|
||||
template <typename Scalar>
|
||||
IGL_INLINE void AtA_cached(
|
||||
const Eigen::SparseMatrix<Scalar>& A,
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
// This file is part of libigl, a simple c++ geometry processing library.
|
||||
//
|
||||
// Copyright (C) 2025 Alec Jacobson <alecjacobson@gmail.com>
|
||||
//
|
||||
// This Source Code Form is subject to the terms of the Mozilla Public License
|
||||
// v. 2.0. If a copy of the MPL was not distributed with this file, You can
|
||||
// obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#ifndef IGL_COLLAPSE_EDGE_NULL_H
|
||||
#define IGL_COLLAPSE_EDGE_NULL_H
|
||||
namespace igl
|
||||
{
|
||||
#ifndef IGL_COLLAPSE_EDGE_NULL
|
||||
/// Special value for indicating a null vertex index as the result of a
|
||||
/// collapsed edge.
|
||||
#define IGL_COLLAPSE_EDGE_NULL 0
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user