Compare commits
484
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8e6b59fdbc | ||
|
|
fdfcf14180 | ||
|
|
fdaac01bcc | ||
|
|
b4152c576c | ||
|
|
1b07ebcf9e | ||
|
|
64c2740230 | ||
|
|
2b05343e0d | ||
|
|
7547801f58 | ||
|
|
d154f0587c | ||
|
|
dddfd92c7a | ||
|
|
6ddf3b0dd7 | ||
|
|
e139702373 | ||
|
|
fe8e17c095 | ||
|
|
0c78def493 | ||
|
|
3c0f31f132 | ||
|
|
2b62322cd5 | ||
|
|
cb111f6838 | ||
|
|
68684132e5 | ||
|
|
0c1865a8d6 | ||
|
|
5dcce37c9d | ||
|
|
d6448a86fb | ||
|
|
6a31dbf126 | ||
|
|
321d0d8ed0 | ||
|
|
9bfacf8fb6 | ||
|
|
f48c5a93f1 | ||
|
|
d326251896 | ||
|
|
74160c4c1c | ||
|
|
b774e1b31c | ||
|
|
f5702f63e7 | ||
|
|
0262ef5866 | ||
|
|
9350803420 | ||
|
|
0e39b473b1 | ||
|
|
7a84503c8e | ||
|
|
deae7a2767 | ||
|
|
a0bb5bb813 | ||
|
|
5779714a5b | ||
|
|
687530283c | ||
|
|
5c17f85621 | ||
|
|
e5e0539e7d | ||
|
|
eee808949e | ||
|
|
75209c5d6c | ||
|
|
ab6229c77a | ||
|
|
b1fe6ba49c | ||
|
|
8d940367bf | ||
|
|
fb13b11a19 | ||
|
|
7c58cb041d | ||
|
|
10e95bb93b | ||
|
|
00100b60db | ||
|
|
3f8c5426b8 | ||
|
|
fd16e24391 | ||
|
|
44785345e5 | ||
|
|
71676a111e | ||
|
|
e5e7d8a76a | ||
|
|
10002b6cf1 | ||
|
|
418dd43cfe | ||
|
|
9162fb7d79 | ||
|
|
dd38f82afd | ||
|
|
215368a07b | ||
|
|
17787c86d6 | ||
|
|
f3f7879364 | ||
|
|
e2a345a43d | ||
|
|
e45a7e0868 | ||
|
|
c410e80608 | ||
|
|
7765697eb6 | ||
|
|
83922780e1 | ||
|
|
02e0a1ba83 | ||
|
|
97fb89c955 | ||
|
|
62fe771ae1 | ||
|
|
a183e28109 | ||
|
|
a69c8c96f3 | ||
|
|
724ff6b05a | ||
|
|
3cf08b7f68 | ||
|
|
5ded7da086 | ||
|
|
2cc372f70d | ||
|
|
b1bd5b1216 | ||
|
|
598b0b194a | ||
|
|
4de0a0569a | ||
|
|
afafc7cf5a | ||
|
|
514271af51 | ||
|
|
282388c68a | ||
|
|
7b6cc27284 | ||
|
|
a05865e265 | ||
|
|
1d007f4252 | ||
|
|
3374c1ad71 | ||
|
|
90464ffbc3 | ||
|
|
7e5512ce71 | ||
|
|
46f0860c18 | ||
|
|
67b406d60d | ||
|
|
c01718d0b4 | ||
|
|
78015d4da1 | ||
|
|
4a91b88f81 | ||
|
|
3e3c96d0fd | ||
|
|
ee7a7a0aa1 | ||
|
|
70dad85a27 | ||
|
|
610a495be4 | ||
|
|
f1981ff873 | ||
|
|
83dbca4ffd | ||
|
|
a3b0fe4a20 | ||
|
|
50ac379c53 | ||
|
|
dcd1d45d4f | ||
|
|
e4b8bfb28d | ||
|
|
e9c9c5d228 | ||
|
|
bd85c8998f | ||
|
|
af06a10939 | ||
|
|
2f625e66fd | ||
|
|
d91f4edeb0 | ||
|
|
1284a39f13 | ||
|
|
0c77359c89 | ||
|
|
87a550af22 | ||
|
|
574ab1a3a8 | ||
|
|
d6db1cf8c2 | ||
|
|
3ea7f94809 | ||
|
|
3370a3e9ca | ||
|
|
33ed4e010b | ||
|
|
b4406f2397 | ||
|
|
fda700937b | ||
|
|
30019acb17 | ||
|
|
2869f98629 | ||
|
|
04f06d7837 | ||
|
|
91f6c503f6 | ||
|
|
639378c1f4 | ||
|
|
dbecea2bc4 | ||
|
|
238a607032 | ||
|
|
4fff4670d3 | ||
|
|
1c3d487d8e | ||
|
|
c35f0fee39 | ||
|
|
4498aa8dfc | ||
|
|
e83a560347 | ||
|
|
322db89acd | ||
|
|
d444bb173f | ||
|
|
7174a7ac94 | ||
|
|
6f1571bacd | ||
|
|
85db4b17e3 | ||
|
|
142fd6026a | ||
|
|
c98c375270 | ||
|
|
fc42e420cd | ||
|
|
a95612e2c9 | ||
|
|
5c2aa0bed8 | ||
|
|
068a28f431 | ||
|
|
6a8e81f800 | ||
|
|
92f790b48a | ||
|
|
3479ca7ab1 | ||
|
|
f9547b8e56 | ||
|
|
b7e94cb4a2 | ||
|
|
ec72a81b78 | ||
|
|
5da64bcbb5 | ||
|
|
69c662b1fa | ||
|
|
9de1784fcf | ||
|
|
1f44d1e025 | ||
|
|
d474dca3a1 | ||
|
|
1dca5f0fef | ||
|
|
45a4f79b5e | ||
|
|
66b3ef2253 | ||
|
|
269700322a | ||
|
|
09e90b47c4 | ||
|
|
19a7487a74 | ||
|
|
0b5148f646 | ||
|
|
b3294905f4 | ||
|
|
e91fb2b9e0 | ||
|
|
624b146a4a | ||
|
|
28a811da5d | ||
|
|
b319a97447 | ||
|
|
cf46c31e8c | ||
|
|
6829872b74 | ||
|
|
4c6966430c | ||
|
|
0c5c526817 | ||
|
|
60c6357a37 | ||
|
|
06ee3b5c1f | ||
|
|
799b54cb61 | ||
|
|
36cb980cb3 | ||
|
|
7fe68a3237 | ||
|
|
46a497559d | ||
|
|
29ac7b213f | ||
|
|
e19a68cfa6 | ||
|
|
10b3cd442e | ||
|
|
4166366c3b | ||
|
|
5a2180321c | ||
|
|
f8f2c70aee | ||
|
|
ce1de2c0db | ||
|
|
c828ecf4ef | ||
|
|
f6b88d6d81 | ||
|
|
237ffa20b1 | ||
|
|
3e8884d079 | ||
|
|
b0fd49d598 | ||
|
|
79dc4f6838 | ||
|
|
54a4e4bafd | ||
|
|
dcff572e35 | ||
|
|
3f3d186db7 | ||
|
|
fc7f4b9941 | ||
|
|
aa37a39e33 | ||
|
|
fa94bb27e8 | ||
|
|
579dc0e2a7 | ||
|
|
dda197248e | ||
|
|
7de3ff04fa | ||
|
|
957dcf32b3 | ||
|
|
2a3af5f5d3 | ||
|
|
96f5386b9a | ||
|
|
e314e83e98 | ||
|
|
87ed88a955 | ||
|
|
bd411de7db | ||
|
|
f0657f96bc | ||
|
|
b5d4d9b5d0 | ||
|
|
a537dc0c45 | ||
|
|
c6e4a656cd | ||
|
|
dfda6de04e | ||
|
|
7342dbe1f8 | ||
|
|
46b9ab8fdb | ||
|
|
61de7603d6 | ||
|
|
e9ff3a9e96 | ||
|
|
2ce04b54fc | ||
|
|
2aa80074d9 | ||
|
|
c62273ac43 | ||
|
|
78c5137453 | ||
|
|
be83a69332 | ||
|
|
4ba9c8de4e | ||
|
|
bf5607bf99 | ||
|
|
aaa89ffcbb | ||
|
|
e287703912 | ||
|
|
c37fa050f9 | ||
|
|
36e8435a2f | ||
|
|
3450b44688 | ||
|
|
bf079eb962 | ||
|
|
3ff8460324 | ||
|
|
51e4207155 | ||
|
|
b44b9ec895 | ||
|
|
45f0fd44d5 | ||
|
|
b99351efe4 | ||
|
|
a21c0e2be0 | ||
|
|
bb929a290a | ||
|
|
9f2ae303d4 | ||
|
|
e60423e28c | ||
|
|
c96b13b97a | ||
|
|
7a3af9c851 | ||
|
|
e9ff76d9bb | ||
|
|
b56f53beff | ||
|
|
ec9fe116f4 | ||
|
|
22620eb925 | ||
|
|
01086ed865 | ||
|
|
ad0f1e6b5b | ||
|
|
bdd33218a9 | ||
|
|
55f7aa89d9 | ||
|
|
38a1235756 | ||
|
|
6f0233183d | ||
|
|
00bd753289 | ||
|
|
31a9dff085 | ||
|
|
822ffc7684 | ||
|
|
5e2c82dbbc | ||
|
|
747274b792 | ||
|
|
f73dc5c9f5 | ||
|
|
2e988bec2e | ||
|
|
a6550e6849 | ||
|
|
233c1027db | ||
|
|
f7288d5655 | ||
|
|
b36868f15a | ||
|
|
8c4ebeb995 | ||
|
|
1a9bc50125 | ||
|
|
6e81f2555c | ||
|
|
eae92b5060 | ||
|
|
91ae2f6cea | ||
|
|
03448998fb | ||
|
|
4d70f145d4 | ||
|
|
c20c12460d | ||
|
|
86042b0085 | ||
|
|
c371e243da | ||
|
|
d85f0c7537 | ||
|
|
41591d2a49 | ||
|
|
4d8efa03ad | ||
|
|
505cbfa8a6 | ||
|
|
4e61844f27 | ||
|
|
f1017e507d | ||
|
|
bc3f4903e8 | ||
|
|
306e0b5087 | ||
|
|
24a9d0c804 | ||
|
|
70d2abaa53 | ||
|
|
6083cb3a5d | ||
|
|
f7f64f6491 | ||
|
|
780a5fbea5 | ||
|
|
ddf6927ca3 | ||
|
|
7b852d5340 | ||
|
|
7181b99a01 | ||
|
|
fe72a97bcc | ||
|
|
07c5b9c9d3 | ||
|
|
516ff49cff | ||
|
|
87384cf626 | ||
|
|
4d628e75fe | ||
|
|
44f2e1d8be | ||
|
|
a4791538de | ||
|
|
ef289fe39f | ||
|
|
5a68b6e924 | ||
|
|
48c596ba59 | ||
|
|
7e31fdd4bb | ||
|
|
babf491b69 | ||
|
|
a0c6750917 | ||
|
|
61588efa78 | ||
|
|
cef9c6594f | ||
|
|
9de4b6640f | ||
|
|
7ebb86734a | ||
|
|
5b7b50c026 | ||
|
|
148c5f72fc | ||
|
|
aafb6870c7 | ||
|
|
4d026eeef1 | ||
|
|
ea57dfa2ad | ||
|
|
85120e557e | ||
|
|
ad54f2dfe2 | ||
|
|
0ac1d696f8 | ||
|
|
fbfb2d56ad | ||
|
|
858c843971 | ||
|
|
723eb8d74d | ||
|
|
c60a948e7d | ||
|
|
ce32c4aa03 | ||
|
|
e7b3e45577 | ||
|
|
7be097d585 | ||
|
|
c47bb0507b | ||
|
|
b35d97472d | ||
|
|
2ea8312e5e | ||
|
|
f9b716fdf8 | ||
|
|
c608c60a6d | ||
|
|
7250ea7d91 | ||
|
|
e6482a8a42 | ||
|
|
dbba9ca921 | ||
|
|
225edb47b6 | ||
|
|
d14ab658df | ||
|
|
c7b5d0b6e3 | ||
|
|
21b62c5777 | ||
|
|
f06fb13014 | ||
|
|
59b517a4a4 | ||
|
|
efee81b7db | ||
|
|
bd30aa03b9 | ||
|
|
49a0ab8640 | ||
|
|
6e1ed534ce | ||
|
|
2ea66c3350 | ||
|
|
a3ba1f24f8 | ||
|
|
2e05e0f178 | ||
|
|
fbd4ce2399 | ||
|
|
6cde8347be | ||
|
|
645718cf77 | ||
|
|
a956dfd37d | ||
|
|
682e4b9685 | ||
|
|
69b0eccb15 | ||
|
|
03e14c609f | ||
|
|
782b7fc95d | ||
|
|
55817544c2 | ||
|
|
0bb27beb88 | ||
|
|
dbec07d9f5 | ||
|
|
80711ea630 | ||
|
|
c744410fe1 | ||
|
|
e706cc5b8b | ||
|
|
7ed7b06696 | ||
|
|
be9b795a16 | ||
|
|
0264736ed3 | ||
|
|
a8a1216363 | ||
|
|
fb3bd3571e | ||
|
|
d2bc41e99b | ||
|
|
0a92f2cdb2 | ||
|
|
870eb14ec2 | ||
|
|
1e905cba3d | ||
|
|
0e4e79f464 | ||
|
|
a2a1479a88 | ||
|
|
51b3f7093a | ||
|
|
249f37af52 | ||
|
|
63b3669a87 | ||
|
|
9814e81b4b | ||
|
|
c21ad49c38 | ||
|
|
d69073c329 | ||
|
|
8b5b424e8c | ||
|
|
1b745f81ed | ||
|
|
fa7eb0befb | ||
|
|
10c90309a8 | ||
|
|
062e3823c3 | ||
|
|
7b4a19da9d | ||
|
|
8c95d1044e | ||
|
|
9a1ab67df9 | ||
|
|
9921615af2 | ||
|
|
8ea0b8c6dc | ||
|
|
d9864be29e | ||
|
|
28008528b4 | ||
|
|
1ad4556268 | ||
|
|
35ba62b1a0 | ||
|
|
ec24dccc29 | ||
|
|
1fda040670 | ||
|
|
9bc3ffd98f | ||
|
|
af8944c7b6 | ||
|
|
3856ea92ce | ||
|
|
91faf24015 | ||
|
|
28ab0d11de | ||
|
|
5358cc5a36 | ||
|
|
775f2354fa | ||
|
|
9c49b73ade | ||
|
|
d2a4b51e1e | ||
|
|
e608aad744 | ||
|
|
10d2f75572 | ||
|
|
a22ed58dc4 | ||
|
|
4cb640737e | ||
|
|
86c7c7db2e | ||
|
|
21acee15fe | ||
|
|
eef47fe34c | ||
|
|
92dd81bb5d | ||
|
|
b42cfeba49 | ||
|
|
317f0522a8 | ||
|
|
b582ecada9 | ||
|
|
bae087d7eb | ||
|
|
f7067c69e9 | ||
|
|
7db28d5700 | ||
|
|
43da16bbd0 | ||
|
|
1de2627280 | ||
|
|
c183f419e7 | ||
|
|
20924d62f1 | ||
|
|
48051bc889 | ||
|
|
cb59839742 | ||
|
|
4a22178717 | ||
|
|
97bd52fb52 | ||
|
|
c61e28fe5a | ||
|
|
07e2b01a3c | ||
|
|
41454f823d | ||
|
|
1a4ccf65b7 | ||
|
|
98a1a31641 | ||
|
|
dde868d297 | ||
|
|
3b80edbd7c | ||
|
|
7be8dc32af | ||
|
|
abd9f0f365 | ||
|
|
b8ee8b99cf | ||
|
|
45cfc79fed | ||
|
|
015ac35cd1 | ||
|
|
d95f3a410f | ||
|
|
3a110bbf4d | ||
|
|
ac56a694f2 | ||
|
|
a3c3ef1572 | ||
|
|
b03769f26e | ||
|
|
1b53e54815 | ||
|
|
d22414e388 | ||
|
|
005ae90b67 | ||
|
|
39c7d33b4c | ||
|
|
61834f4fa1 | ||
|
|
d3248f0a0f | ||
|
|
7ee863c92f | ||
|
|
58a600aebf | ||
|
|
95a7b15efc | ||
|
|
ae5d163f7d | ||
|
|
8268a3f33b | ||
|
|
e4ab356031 | ||
|
|
762a4ec1f4 | ||
|
|
238d52c90f | ||
|
|
1e78a3473a | ||
|
|
3b0ec3ce63 | ||
|
|
d22f873ef2 | ||
|
|
ce201a7433 | ||
|
|
48a7e8cd02 | ||
|
|
feb71ef502 | ||
|
|
dc01d7e277 | ||
|
|
75a0c4fa2c | ||
|
|
60ffe1b0dc | ||
|
|
0b52794637 | ||
|
|
71e65516ae | ||
|
|
3f67752504 | ||
|
|
95a80d3fa9 | ||
|
|
5f72004d0d | ||
|
|
b0a8fa84e1 | ||
|
|
162f9b8f68 | ||
|
|
32e3edf229 | ||
|
|
f3a201f1e1 | ||
|
|
916a5c217d | ||
|
|
3141dfc26d | ||
|
|
14d6bcec3d | ||
|
|
6eb02be7db | ||
|
|
3da9d323fb | ||
|
|
c7324d3fa6 | ||
|
|
ae903ae468 | ||
|
|
3069260f07 | ||
|
|
1df0987271 | ||
|
|
ce9b23e8b9 | ||
|
|
3150c23b62 | ||
|
|
2d7037a945 | ||
|
|
7ed138a23e | ||
|
|
75540e118f | ||
|
|
49afe670d0 | ||
|
|
e2548f971c | ||
|
|
6983cfd1f4 | ||
|
|
2f570a0e97 | ||
|
|
edb21bef2c | ||
|
|
48e3c72dfe | ||
|
|
d7dd3c2356 | ||
|
|
61878ade62 | ||
|
|
3404ee671b | ||
|
|
21d95881ed |
@@ -0,0 +1,20 @@
|
||||
# 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,6 +1,6 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
name: 🐛 Bug Report
|
||||
about: If something isn't working as expected
|
||||
title: ''
|
||||
labels: bug, pending verification
|
||||
assignees: ''
|
||||
@@ -8,10 +8,11 @@ assignees: ''
|
||||
---
|
||||
|
||||
#### Describe the bug
|
||||
<!-- A clear and concise description of what the bug is. -->
|
||||
|
||||
A clear and concise description of what the bug is.
|
||||
#### Platform
|
||||
<!-- Check all that apply (change to `[x]`) -->
|
||||
|
||||
#### Check all that apply (change to `[x]`)
|
||||
- [ ] Windows
|
||||
- [ ] macOS
|
||||
- [ ] Linux
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
name: Compilation issue
|
||||
name: 😱 Compilation issue
|
||||
about: Report a problem when compiling the code
|
||||
title: ''
|
||||
labels: 'compilation'
|
||||
@@ -7,11 +7,20 @@ assignees: ''
|
||||
|
||||
---
|
||||
|
||||
#### Describe your question
|
||||
#### Describe your issue
|
||||
<!-- Be sure to include any log file that may help use diagnose the issue -->
|
||||
|
||||
...
|
||||
|
||||
#### Check all that apply (change to `[x]`)
|
||||
#### 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
|
||||
- [ ] macOS Intel
|
||||
- [ ] macOS Arm (e.g., M1, M2)
|
||||
- [ ] Linux
|
||||
|
||||
@@ -1 +1,8 @@
|
||||
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
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
title: ''
|
||||
labels: 'enhancement'
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
#### Describe your feature request
|
||||
|
||||
...
|
||||
|
||||
#### Check all that apply (change to `[x]`)
|
||||
- [ ] Windows
|
||||
- [ ] macOS
|
||||
- [ ] Linux
|
||||
@@ -1,17 +0,0 @@
|
||||
---
|
||||
name: Question
|
||||
about: Ask question about the tutorial or documentation
|
||||
title: ''
|
||||
labels: 'question'
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
#### Describe your question
|
||||
|
||||
...
|
||||
|
||||
#### Check all that apply (change to `[x]`)
|
||||
- [ ] Windows
|
||||
- [ ] macOS
|
||||
- [ ] Linux
|
||||
@@ -1,9 +1,11 @@
|
||||
Fixes # .
|
||||
|
||||
[Describe your changes and what you've already done to test it.]
|
||||
<!-- Describe your changes and what you've already done to test it. -->
|
||||
|
||||
|
||||
#### Check all that apply (change to `[x]`)
|
||||
#### Checklist
|
||||
<!-- 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.
|
||||
|
||||
@@ -3,11 +3,11 @@ name: Build
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
- stable
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
- stable
|
||||
|
||||
env:
|
||||
@@ -20,21 +20,16 @@ jobs:
|
||||
####################
|
||||
|
||||
Unix:
|
||||
name: ${{ matrix.name }} (${{ matrix.config }}, ${{ matrix.static }})
|
||||
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-18.04, macos-latest]
|
||||
os: [ubuntu-20.04, macos-latest]
|
||||
config: [Release]
|
||||
static: [ON, OFF]
|
||||
include:
|
||||
- os: macos-latest
|
||||
name: macOS
|
||||
- os: ubuntu-18.04
|
||||
name: Linux
|
||||
build-params: [ {static: ON, tutorials: ON, tests: ON }, {static: OFF, tutorials: OFF, tests: ON }, {static: OFF, tutorials: ON, tests: OFF }]
|
||||
env:
|
||||
LIBIGL_NUM_THREADS: 1 # See https://github.com/libigl/libigl/pull/996
|
||||
IGL_NUM_THREADS: 1 # See https://github.com/libigl/libigl/pull/996
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v1
|
||||
@@ -44,27 +39,25 @@ jobs:
|
||||
- name: Dependencies (Linux)
|
||||
if: runner.os == 'Linux'
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install \
|
||||
libblas-dev \
|
||||
libboost-filesystem-dev \
|
||||
libboost-system-dev \
|
||||
libboost-thread-dev \
|
||||
libglu1-mesa-dev \
|
||||
liblapack-dev \
|
||||
libmpfr-dev \
|
||||
xorg-dev \
|
||||
ccache
|
||||
libblas-dev \
|
||||
libglu1-mesa-dev \
|
||||
liblapack-dev \
|
||||
xorg-dev \
|
||||
ccache
|
||||
|
||||
- name: Dependencies (macOS)
|
||||
if: runner.os == 'macOS'
|
||||
run: brew install boost gmp mpfr ccache
|
||||
run: |
|
||||
HOMEBREW_NO_AUTO_UPDATE=1 brew install ccache
|
||||
|
||||
- name: Cache Build
|
||||
id: cache-build
|
||||
uses: actions/cache@v1
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ~/.ccache
|
||||
key: ${{ runner.os }}-${{ matrix.config }}-${{ matrix.static }}-cache
|
||||
key: ${{ runner.os }}-${{ matrix.config }}-${{ matrix.build-params.static }}-cache
|
||||
|
||||
- name: Prepare ccache
|
||||
run: |
|
||||
@@ -78,9 +71,11 @@ jobs:
|
||||
cmake .. \
|
||||
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
|
||||
-DCMAKE_BUILD_TYPE=${{ matrix.config }} \
|
||||
-DLIBIGL_USE_STATIC_LIBRARY=${{ matrix.static }} \
|
||||
-DLIBIGL_WITH_CGAL=ON \
|
||||
-DLIBIGL_WITH_COMISO=ON
|
||||
-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
|
||||
@@ -93,57 +88,78 @@ jobs:
|
||||
####################
|
||||
|
||||
Windows:
|
||||
runs-on: windows-2019
|
||||
env:
|
||||
CC: cl.exe
|
||||
CXX: cl.exe
|
||||
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]
|
||||
static: [ON, OFF]
|
||||
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},
|
||||
]
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v1
|
||||
with:
|
||||
fetch-depth: 10
|
||||
- uses: seanmiddleditch/gha-setup-ninja@master
|
||||
|
||||
# https://github.com/actions/cache/issues/101
|
||||
- name: Set env
|
||||
- name: Install Ninja
|
||||
uses: seanmiddleditch/gha-setup-ninja@master
|
||||
|
||||
- name: Set env variable for sccache
|
||||
run: |
|
||||
echo "::set-env name=appdata::$($env:LOCALAPPDATA)"
|
||||
echo "::set-env name=BOOST_ROOT::$env:BOOST_ROOT_1_69_0"
|
||||
echo "appdata=$env:LOCALAPPDATA" >> ${env:GITHUB_ENV}
|
||||
|
||||
- name: Cache build
|
||||
id: cache-build
|
||||
uses: actions/cache@v1
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: ${{ env.appdata }}\Mozilla\sccache
|
||||
key: ${{ runner.os }}-${{ matrix.config }}-${{ matrix.static }}-cache
|
||||
key: ${{ runner.os }}-${{ matrix.config }}-${{ matrix.build-params.static }}-cache
|
||||
|
||||
- name: Prepare sccache
|
||||
run: |
|
||||
Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh')
|
||||
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 the modified PATH global.
|
||||
echo "::set-env name=PATH::$env:PATH"
|
||||
# Scoop modifies the PATH so we make it available for the next steps of the job
|
||||
echo "${env:PATH}" >> ${env:GITHUB_PATH}
|
||||
|
||||
# We run configure + build in the same step, since they both need to call VsDevCmd
|
||||
# Also, cmd uses ^ to break commands into multiple lines (in powershell this is `)
|
||||
- name: Configure and build
|
||||
shell: cmd
|
||||
run: |
|
||||
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\Tools\VsDevCmd.bat" -arch=x64
|
||||
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\Tools\VsDevCmd.bat" -arch=x64
|
||||
cmake -G Ninja ^
|
||||
-DCMAKE_CXX_COMPILER_LAUNCHER=sccache ^
|
||||
-DCMAKE_BUILD_TYPE=${{ matrix.config }} ^
|
||||
-DLIBIGL_USE_STATIC_LIBRARY=${{ matrix.static }} ^
|
||||
-DLIBIGL_WITH_CGAL=ON ^
|
||||
-DLIBIGL_WITH_COMISO=OFF ^
|
||||
-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' }} ^
|
||||
-B build ^
|
||||
-S .
|
||||
cmake --build build
|
||||
cmake --build build -j2
|
||||
|
||||
- name: Tests
|
||||
run: cd build; ctest --verbose
|
||||
run: cd build; ctest --verbose -j2
|
||||
|
||||
|
||||
@@ -1,190 +0,0 @@
|
||||
name: Nightly
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '0 4 * * *'
|
||||
|
||||
env:
|
||||
CTEST_OUTPUT_ON_FAILURE: ON
|
||||
CTEST_PARALLEL_LEVEL: 2
|
||||
|
||||
jobs:
|
||||
####################
|
||||
# Linux / macOS
|
||||
####################
|
||||
|
||||
# Part of this file is inspired from
|
||||
# https://github.com/onqtam/doctest/blob/dev/.github/workflows/main.yml
|
||||
|
||||
Unix:
|
||||
name: ${{ matrix.name }} (${{ matrix.config }}, Static=${{ matrix.static }})
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
name: [
|
||||
ubuntu-18.04-gcc-7,
|
||||
ubuntu-18.04-gcc-8,
|
||||
ubuntu-18.04-gcc-9,
|
||||
ubuntu-18.04-clang-7,
|
||||
ubuntu-18.04-clang-8,
|
||||
ubuntu-18.04-clang-9,
|
||||
macOS-latest,
|
||||
]
|
||||
config: [Debug, Release]
|
||||
static: [ON, OFF]
|
||||
include:
|
||||
- name: ubuntu-18.04-gcc-7
|
||||
os: ubuntu-18.04
|
||||
compiler: gcc
|
||||
version: "7"
|
||||
|
||||
- name: ubuntu-18.04-gcc-8
|
||||
os: ubuntu-18.04
|
||||
compiler: gcc
|
||||
version: "8"
|
||||
|
||||
- name: ubuntu-18.04-gcc-9
|
||||
os: ubuntu-18.04
|
||||
compiler: gcc
|
||||
version: "9"
|
||||
|
||||
- name: ubuntu-18.04-clang-7
|
||||
os: ubuntu-18.04
|
||||
compiler: clang
|
||||
version: "7"
|
||||
|
||||
- name: ubuntu-18.04-clang-8
|
||||
os: ubuntu-18.04
|
||||
compiler: clang
|
||||
version: "8"
|
||||
|
||||
- name: ubuntu-18.04-clang-9
|
||||
os: ubuntu-18.04
|
||||
compiler: clang
|
||||
version: "9"
|
||||
|
||||
- name: macOS-latest
|
||||
os: macOS-latest
|
||||
|
||||
# Build tutorials for most configurations
|
||||
- tutorials: ON
|
||||
|
||||
# Except with Debug mode
|
||||
- config: Debug
|
||||
tutorials: OFF
|
||||
env:
|
||||
LIBIGL_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: |
|
||||
# LLVM 9 is not in Bionic's repositories so we add the official LLVM repository.
|
||||
if [ "${{ matrix.compiler }}" = "clang" ] && [ "${{ matrix.version }}" = "9" ]; then
|
||||
sudo add-apt-repository "deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-9 main"
|
||||
fi
|
||||
sudo apt-get update
|
||||
|
||||
if [ "${{ matrix.compiler }}" = "gcc" ]; then
|
||||
sudo apt-get install -y g++-${{ matrix.version }}
|
||||
echo "::set-env name=CC::gcc-${{ matrix.version }}"
|
||||
echo "::set-env name=CXX::g++-${{ matrix.version }}"
|
||||
else
|
||||
sudo apt-get install -y clang-${{ matrix.version }}
|
||||
echo "::set-env name=CC::clang-${{ matrix.version }}"
|
||||
echo "::set-env name=CXX::clang++-${{ matrix.version }}"
|
||||
fi
|
||||
|
||||
sudo apt-get install \
|
||||
libblas-dev \
|
||||
libboost-filesystem-dev \
|
||||
libboost-system-dev \
|
||||
libboost-thread-dev \
|
||||
libglu1-mesa-dev \
|
||||
liblapack-dev \
|
||||
libmpfr-dev \
|
||||
xorg-dev
|
||||
|
||||
- name: Dependencies (macOS)
|
||||
if: runner.os == 'macOS'
|
||||
run: brew install boost gmp mpfr
|
||||
|
||||
- name: Configure
|
||||
run: |
|
||||
mkdir -p build
|
||||
cd build
|
||||
cmake .. \
|
||||
-DCMAKE_BUILD_TYPE=${{ matrix.config }} \
|
||||
-DLIBIGL_USE_STATIC_LIBRARY=${{ matrix.static }} \
|
||||
-DLIBIGL_BUILD_TUTORIALS=${{ matrix.tutorials }} \
|
||||
-DLIBIGL_WITH_CGAL=ON \
|
||||
-DLIBIGL_WITH_COMISO=ON
|
||||
|
||||
- name: Free Disk Space
|
||||
if: runner.os == 'Linux'
|
||||
run: |
|
||||
sudo swapoff -a
|
||||
sudo apt clean
|
||||
sudo rm -rf /swapfile /usr/share/dotnet /usr/local/lib/android /opt/ghc
|
||||
df -h
|
||||
|
||||
- name: Build
|
||||
run: cd build; make -j2
|
||||
|
||||
- name: Tests
|
||||
run: cd build; ctest --verbose
|
||||
|
||||
####################
|
||||
# Windows
|
||||
####################
|
||||
|
||||
Windows:
|
||||
name: Windows (${{ matrix.config }}, Static=${{ matrix.static }})
|
||||
runs-on: windows-2019
|
||||
env:
|
||||
CC: cl.exe
|
||||
CXX: cl.exe
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
config: [Debug, Release]
|
||||
static: [ON, OFF]
|
||||
include:
|
||||
- config: Debug
|
||||
tutorials: OFF
|
||||
- config: Release
|
||||
tutorials: ON
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v1
|
||||
with:
|
||||
fetch-depth: 10
|
||||
- uses: seanmiddleditch/gha-setup-ninja@master
|
||||
|
||||
- name: Set env
|
||||
run: |
|
||||
echo "::set-env name=BOOST_ROOT::$env:BOOST_ROOT_1_69_0"
|
||||
|
||||
# We run configure + build in the same step, since they both need to call VsDevCmd
|
||||
# Also, cmd uses ^ to break commands into multiple lines (in powershell this is `)
|
||||
- name: Configure and build
|
||||
shell: cmd
|
||||
run: |
|
||||
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\Tools\VsDevCmd.bat" -arch=x64
|
||||
cmake -G Ninja ^
|
||||
-DCMAKE_BUILD_TYPE=${{ matrix.config }} ^
|
||||
-DLIBIGL_USE_STATIC_LIBRARY=${{ matrix.static }} ^
|
||||
-DLIBIGL_BUILD_TUTORIALS=${{ matrix.tutorials }} ^
|
||||
-DLIBIGL_WITH_CGAL=ON ^
|
||||
-DLIBIGL_WITH_COMISO=OFF ^
|
||||
-B build ^
|
||||
-S .
|
||||
cmake --build build -j 2
|
||||
|
||||
- name: Tests
|
||||
run: cd build; ctest --verbose
|
||||
+50
-96
@@ -1,99 +1,53 @@
|
||||
# use glob syntax.
|
||||
*.a
|
||||
*.dylib
|
||||
*.egg-info/
|
||||
*.exe
|
||||
*.ilk
|
||||
*.log
|
||||
# Prerequisites
|
||||
*.d
|
||||
|
||||
# Compiled Object files
|
||||
*.slo
|
||||
*.lo
|
||||
*.o
|
||||
*.opensdf
|
||||
*.orig
|
||||
*.pdb
|
||||
*.psess
|
||||
*.pyc
|
||||
*.sdf
|
||||
*.obj
|
||||
|
||||
# Precompiled Headers
|
||||
*.gch
|
||||
*.pch
|
||||
|
||||
# Compiled Dynamic libraries
|
||||
*.so
|
||||
*.so.[0123456789]
|
||||
*.so.[0123456789].[0123456789]
|
||||
*.suo
|
||||
*.swo
|
||||
*.swp
|
||||
*.tlog
|
||||
*.user
|
||||
*.vsp
|
||||
*CMakeFiles*
|
||||
*buildXcode*
|
||||
*tags
|
||||
*~
|
||||
*.dylib
|
||||
*.dll
|
||||
|
||||
# Fortran module files
|
||||
*.mod
|
||||
*.smod
|
||||
|
||||
# Compiled Static libraries
|
||||
*.lai
|
||||
*.la
|
||||
*.a
|
||||
*.lib
|
||||
|
||||
# Executables
|
||||
*.exe
|
||||
*.out
|
||||
*.app
|
||||
|
||||
# Build folders
|
||||
/build*
|
||||
/tests/data
|
||||
/tutorial/data
|
||||
/install
|
||||
|
||||
# Libigl specific
|
||||
LibiglOptions.cmake
|
||||
|
||||
# vim debris
|
||||
.*.un~
|
||||
.*.swo
|
||||
.*.swp
|
||||
|
||||
# macos debris
|
||||
.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
|
||||
*~
|
||||
dox/
|
||||
latex/
|
||||
scripts/
|
||||
|
||||
+167
-52
@@ -1,74 +1,189 @@
|
||||
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)
|
||||
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()
|
||||
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_EXPORT_TARGETS "Export libigl CMake 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_INSTALL "Enable installation of libigl 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" ON)
|
||||
option(LIBIGL_USE_STATIC_LIBRARY "Use libigl as static library" ${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
|
||||
# Permissive modules. These modules are available under MPL2 license, and their dependencies are available
|
||||
# under a permissive or public domain license.
|
||||
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})
|
||||
|
||||
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.")
|
||||
# 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)
|
||||
endif()
|
||||
|
||||
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
|
||||
# Defines CMake targets for selected libigl modules
|
||||
include(libigl)
|
||||
|
||||
if(LIBIGL_BUILD_TUTORIALS)
|
||||
add_subdirectory(tutorial)
|
||||
add_subdirectory(tutorial)
|
||||
endif()
|
||||
|
||||
if(LIBIGL_BUILD_TESTS)
|
||||
include(CTest)
|
||||
enable_testing()
|
||||
add_subdirectory(tests)
|
||||
################################################################################
|
||||
# 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}")
|
||||
endif()
|
||||
|
||||
if(LIBIGL_TOPLEVEL_PROJECT)
|
||||
# Set folders for Visual Studio/Xcode
|
||||
igl_set_folders()
|
||||
endif()
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
# 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,7 +1,13 @@
|
||||
# libigl - A simple C++ geometry processing library
|
||||
[](https://github.com/libigl/libigl/actions)
|
||||
|
||||
[](https://github.com/libigl/libigl/actions?query=workflow%3ABuild+branch%3Amain+event%3Apush)
|
||||
[](https://anaconda.org/conda-forge/igl)
|
||||
|
||||

|
||||
|
||||
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) |
|
||||
|
||||
@@ -1,85 +0,0 @@
|
||||
################################################################################
|
||||
|
||||
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.
|
||||
@@ -1,17 +0,0 @@
|
||||
# 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 ""
|
||||
)
|
||||
@@ -1,182 +0,0 @@
|
||||
# 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()
|
||||
@@ -1,52 +0,0 @@
|
||||
#
|
||||
# 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
@@ -1,190 +0,0 @@
|
||||
################################################################################
|
||||
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 v2.11.0
|
||||
)
|
||||
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 b5dddf45e329af685cd107e38770a28cfc18eb15
|
||||
)
|
||||
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()
|
||||
|
||||
@@ -1,116 +0,0 @@
|
||||
# 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()
|
||||
@@ -1,26 +0,0 @@
|
||||
if(MSVC)
|
||||
option(IGL_STATIC_RUNTIME "Use libigl with the static MSVC runtime." OFF)
|
||||
if(IGL_STATIC_RUNTIME)
|
||||
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()
|
||||
|
||||
# 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()
|
||||
@@ -0,0 +1,95 @@
|
||||
# Try to find the GNU Multiple Precision Arithmetic Library (GMP)
|
||||
# See http://gmplib.org/
|
||||
|
||||
if(${CMAKE_VERSION} VERSION_LESS "3.18.0")
|
||||
set(REQUIRED_FLAG "")
|
||||
else()
|
||||
set(REQUIRED_FLAG REQUIRED)
|
||||
endif()
|
||||
|
||||
# On Windows, we must use the pre-compiled versions downloaded with libigl
|
||||
if(WIN32)
|
||||
set(NO_DEFAULT_FLAG NO_DEFAULT_PATH)
|
||||
else()
|
||||
set(NO_DEFAULT_FLAG "")
|
||||
endif()
|
||||
|
||||
find_path(GMP_INCLUDES
|
||||
NAMES
|
||||
gmp.h
|
||||
PATHS
|
||||
ENV GMP_DIR
|
||||
${INCLUDE_INSTALL_DIR}
|
||||
PATH_SUFFIXES
|
||||
include
|
||||
${REQUIRED_FLAG}
|
||||
${NO_DEFAULT_FLAG}
|
||||
)
|
||||
|
||||
find_library(GMP_LIBRARIES
|
||||
NAMES
|
||||
gmp
|
||||
libgmp-10
|
||||
PATHS
|
||||
ENV GMP_DIR
|
||||
${LIB_INSTALL_DIR}
|
||||
PATH_SUFFIXES
|
||||
lib
|
||||
${REQUIRED_FLAG}
|
||||
${NO_DEFAULT_FLAG}
|
||||
)
|
||||
|
||||
set(GMP_EXTRA_VARS "")
|
||||
if(WIN32)
|
||||
# Find dll file and set IMPORTED_LOCATION to the .dll file
|
||||
find_file(GMP_RUNTIME_LIB
|
||||
NAMES
|
||||
gmp.dll
|
||||
libgmp-10.dll
|
||||
PATHS
|
||||
ENV GMP_DIR
|
||||
${LIB_INSTALL_DIR}
|
||||
PATH_SUFFIXES
|
||||
lib
|
||||
${REQUIRED_FLAG}
|
||||
${NO_DEFAULT_FLAG}
|
||||
)
|
||||
list(APPEND GMP_EXTRA_VARS GMP_RUNTIME_LIB)
|
||||
endif()
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(GMP
|
||||
REQUIRED_VARS
|
||||
GMP_INCLUDES
|
||||
GMP_LIBRARIES
|
||||
${GMP_EXTRA_VARS}
|
||||
REASON_FAILURE_MESSAGE
|
||||
"GMP is not installed on your system. Either install GMP using your preferred package manager, or disable libigl modules that depend on GMP, such as CGAL. See LibiglOptions.cmake.sample for configuration options. Do not forget to delete your <build>/CMakeCache.txt for the changes to take effect."
|
||||
)
|
||||
mark_as_advanced(GMP_INCLUDES GMP_LIBRARIES)
|
||||
|
||||
if(GMP_INCLUDES AND GMP_LIBRARIES AND NOT TARGET gmp::gmp)
|
||||
if(GMP_RUNTIME_LIB)
|
||||
add_library(gmp::gmp SHARED IMPORTED)
|
||||
else()
|
||||
add_library(gmp::gmp UNKNOWN IMPORTED)
|
||||
endif()
|
||||
|
||||
# Set public header location and link language
|
||||
set_target_properties(gmp::gmp PROPERTIES
|
||||
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${GMP_INCLUDES}"
|
||||
)
|
||||
|
||||
# Set lib location. On Windows we specify both the .lib and the .dll paths
|
||||
if(GMP_RUNTIME_LIB)
|
||||
set_target_properties(gmp::gmp PROPERTIES
|
||||
IMPORTED_IMPLIB "${GMP_LIBRARIES}"
|
||||
IMPORTED_LOCATION "${GMP_RUNTIME_LIB}"
|
||||
)
|
||||
else()
|
||||
set_target_properties(gmp::gmp PROPERTIES
|
||||
IMPORTED_LOCATION "${GMP_LIBRARIES}"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
@@ -9,8 +9,10 @@
|
||||
|
||||
# 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/
|
||||
)
|
||||
|
||||
@@ -0,0 +1,95 @@
|
||||
# Try to find the MPFR library
|
||||
# See http://www.mpfr.org/
|
||||
|
||||
if(${CMAKE_VERSION} VERSION_LESS "3.18.0")
|
||||
set(REQUIRED_FLAG "")
|
||||
else()
|
||||
set(REQUIRED_FLAG REQUIRED)
|
||||
endif()
|
||||
|
||||
# On Windows, we must use the pre-compiled versions downloaded with libigl
|
||||
if(WIN32)
|
||||
set(NO_DEFAULT_FLAG NO_DEFAULT_PATH)
|
||||
else()
|
||||
set(NO_DEFAULT_FLAG "")
|
||||
endif()
|
||||
|
||||
find_path(MPFR_INCLUDES
|
||||
NAMES
|
||||
mpfr.h
|
||||
PATHS
|
||||
ENV MPFR_DIR
|
||||
${INCLUDE_INSTALL_DIR}
|
||||
PATH_SUFFIXES
|
||||
include
|
||||
${REQUIRED_FLAG}
|
||||
${NO_DEFAULT_FLAG}
|
||||
)
|
||||
|
||||
find_library(MPFR_LIBRARIES
|
||||
NAMES
|
||||
mpfr
|
||||
libmpfr-4
|
||||
PATHS
|
||||
ENV MPFR_DIR
|
||||
${LIB_INSTALL_DIR}
|
||||
PATH_SUFFIXES
|
||||
lib
|
||||
${REQUIRED_FLAG}
|
||||
${NO_DEFAULT_FLAG}
|
||||
)
|
||||
|
||||
set(MPFR_EXTRA_VARS "")
|
||||
if(WIN32)
|
||||
# Find dll file and set IMPORTED_LOCATION to the .dll file
|
||||
find_file(MPFR_RUNTIME_LIB
|
||||
NAMES
|
||||
mpfr.dll
|
||||
libmpfr-4.dll
|
||||
PATHS
|
||||
ENV MPFR_DIR
|
||||
${LIB_INSTALL_DIR}
|
||||
PATH_SUFFIXES
|
||||
lib
|
||||
${REQUIRED_FLAG}
|
||||
${NO_DEFAULT_FLAG}
|
||||
)
|
||||
list(APPEND MPFR_EXTRA_VARS MPFR_RUNTIME_LIB)
|
||||
endif()
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(MPFR
|
||||
REQUIRED_VARS
|
||||
MPFR_INCLUDES
|
||||
MPFR_LIBRARIES
|
||||
${MPFR_EXTRA_VARS}
|
||||
REASON_FAILURE_MESSAGE
|
||||
"MPFR is not installed on your system. Either install MPFR using your preferred package manager, or disable libigl modules that depend on MPFR, such as CGAL. See LibiglOptions.cmake.sample for configuration options. Do not forget to delete your <build>/CMakeCache.txt for the changes to take effect."
|
||||
)
|
||||
mark_as_advanced(MPFR_INCLUDES MPFR_LIBRARIES)
|
||||
|
||||
if(MPFR_INCLUDES AND MPFR_LIBRARIES AND NOT TARGET mpfr::mpfr)
|
||||
if(MPFR_RUNTIME_LIB)
|
||||
add_library(mpfr::mpfr SHARED IMPORTED)
|
||||
else()
|
||||
add_library(mpfr::mpfr UNKNOWN IMPORTED)
|
||||
endif()
|
||||
|
||||
# Set public header location and link language
|
||||
set_target_properties(mpfr::mpfr PROPERTIES
|
||||
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${MPFR_INCLUDES}"
|
||||
)
|
||||
|
||||
# Set lib location. On Windows we specify both the .lib and the .dll paths
|
||||
if(MPFR_RUNTIME_LIB)
|
||||
set_target_properties(mpfr::mpfr PROPERTIES
|
||||
IMPORTED_IMPLIB "${MPFR_LIBRARIES}"
|
||||
IMPORTED_LOCATION "${MPFR_RUNTIME_LIB}"
|
||||
)
|
||||
else()
|
||||
set_target_properties(mpfr::mpfr PROPERTIES
|
||||
IMPORTED_LOCATION "${MPFR_LIBRARIES}"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
@@ -0,0 +1,80 @@
|
||||
# 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++11 features
|
||||
target_compile_features(${module_name} ${IGL_SCOPE} cxx_std_11)
|
||||
|
||||
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()
|
||||
@@ -0,0 +1,51 @@
|
||||
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()
|
||||
@@ -0,0 +1,20 @@
|
||||
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)
|
||||
endfunction()
|
||||
@@ -0,0 +1,97 @@
|
||||
# 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()
|
||||
|
||||
# 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()
|
||||
@@ -0,0 +1,56 @@
|
||||
# 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()
|
||||
@@ -0,0 +1,63 @@
|
||||
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()
|
||||
@@ -0,0 +1,8 @@
|
||||
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()
|
||||
@@ -0,0 +1,7 @@
|
||||
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()
|
||||
@@ -0,0 +1,7 @@
|
||||
@PACKAGE_INIT@
|
||||
|
||||
include(CMakeFindDependencyMacro)
|
||||
find_dependency(Eigen3 REQUIRED)
|
||||
find_dependency(Threads REQUIRED)
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/LibiglConfigTargets.cmake")
|
||||
check_required_components(Libigl)
|
||||
@@ -0,0 +1,34 @@
|
||||
# 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()
|
||||
@@ -0,0 +1,27 @@
|
||||
# 1. Define module
|
||||
igl_add_library(igl_copyleft_comiso)
|
||||
|
||||
# 2. Include headers
|
||||
include(GNUInstallDirs)
|
||||
target_include_directories(igl_copyleft_comiso ${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/comiso/*.h")
|
||||
file(GLOB SRC_FILES "${libigl_SOURCE_DIR}/include/igl/copyleft/comiso/*.cpp")
|
||||
igl_target_sources(igl_copyleft_comiso ${INC_FILES} ${SRC_FILES})
|
||||
|
||||
# 4. Dependencies
|
||||
include(comiso)
|
||||
igl_include(copyleft core)
|
||||
target_link_libraries(igl_copyleft_comiso ${IGL_SCOPE}
|
||||
igl::core
|
||||
igl_copyleft::core
|
||||
CoMISo::CoMISo
|
||||
)
|
||||
|
||||
# 5. Unit tests
|
||||
file(GLOB SRC_FILES "${libigl_SOURCE_DIR}/tests/include/igl/copyleft/comiso/*.cpp")
|
||||
igl_add_test(igl_copyleft_comiso ${SRC_FILES})
|
||||
@@ -0,0 +1,19 @@
|
||||
# 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
|
||||
)
|
||||
@@ -0,0 +1,27 @@
|
||||
# 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})
|
||||
@@ -0,0 +1,32 @@
|
||||
# 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})
|
||||
@@ -0,0 +1,25 @@
|
||||
# 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})
|
||||
@@ -0,0 +1,29 @@
|
||||
# 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()
|
||||
@@ -0,0 +1,27 @@
|
||||
# 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
|
||||
)
|
||||
@@ -0,0 +1,24 @@
|
||||
# 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>
|
||||
)
|
||||
@@ -0,0 +1,25 @@
|
||||
# 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})
|
||||
@@ -0,0 +1,25 @@
|
||||
# 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
|
||||
@@ -0,0 +1,27 @@
|
||||
# 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()
|
||||
@@ -0,0 +1,29 @@
|
||||
# 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()
|
||||
@@ -0,0 +1,25 @@
|
||||
# 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})
|
||||
@@ -0,0 +1,35 @@
|
||||
# 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()
|
||||
@@ -0,0 +1,21 @@
|
||||
# 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
|
||||
)
|
||||
@@ -1,8 +0,0 @@
|
||||
# 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
|
||||
@@ -1,31 +0,0 @@
|
||||
@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)
|
||||
|
||||
+32
-568
@@ -1,570 +1,34 @@
|
||||
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()
|
||||
# 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/")
|
||||
endif()
|
||||
|
||||
### 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)
|
||||
|
||||
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()
|
||||
|
||||
################################################################################
|
||||
|
||||
### 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()
|
||||
|
||||
# Controls whether to use the static MSVC runtime or not
|
||||
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
|
||||
)
|
||||
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()
|
||||
message("BOOST_ROOT: ${BOOST_ROOT}")
|
||||
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()
|
||||
message(FATAL_ERROR "Could not define CGAL::CGAL and CGAL::CGAL_Core.")
|
||||
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")
|
||||
|
||||
if(NOT TARGET embree)
|
||||
igl_download_embree()
|
||||
|
||||
set(EMBREE_TESTING_INTENSITY 0 CACHE STRING "")
|
||||
set(EMBREE_ISPC_SUPPORT OFF CACHE BOOL " ")
|
||||
set(EMBREE_TASKING_SYSTEM "INTERNAL" CACHE BOOL " ")
|
||||
set(EMBREE_TUTORIALS OFF CACHE BOOL " ")
|
||||
set(EMBREE_MAX_ISA "SSE2" CACHE STRING " ")
|
||||
set(EMBREE_STATIC_LIB ON CACHE BOOL " ")
|
||||
if(MSVC)
|
||||
set(EMBREE_STATIC_RUNTIME ${IGL_STATIC_RUNTIME} CACHE BOOL "Use the static version of the C/C++ runtime library.")
|
||||
endif()
|
||||
|
||||
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)
|
||||
igl_download_glfw()
|
||||
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)
|
||||
if(IGL_STATIC_RUNTIME)
|
||||
set(USE_MSVC_RUNTIME_LIBRARY_DLL OFF CACHE BOOL "Use MSVC runtime library DLL" FORCE)
|
||||
else()
|
||||
set(USE_MSVC_RUNTIME_LIBRARY_DLL ON CACHE BOOL "Use MSVC runtime library DLL" FORCE)
|
||||
endif()
|
||||
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)
|
||||
|
||||
# Global options
|
||||
include(igl_windows)
|
||||
|
||||
# Libigl permissive modules
|
||||
igl_include(core)
|
||||
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)
|
||||
|
||||
# Libigl copyleft modules
|
||||
igl_include_optional(copyleft core)
|
||||
igl_include_optional(copyleft cgal)
|
||||
igl_include_optional(copyleft comiso)
|
||||
igl_include_optional(copyleft tetgen)
|
||||
|
||||
# Libigl restricted modules
|
||||
igl_include_optional(restricted matlab)
|
||||
igl_include_optional(restricted mosek)
|
||||
igl_include_optional(restricted triangle)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2013-2018, Ruslan Baratov
|
||||
# Copyright (c) 2013-2019, Ruslan Baratov
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
@@ -59,8 +59,9 @@ 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_WIKI "https://github.com/ruslo/hunter/wiki")
|
||||
set(HUNTER_ERROR_PAGE "https://hunter.readthedocs.io/en/latest/reference/errors")
|
||||
|
||||
function(hunter_gate_status_print)
|
||||
if(HUNTER_STATUS_PRINT OR HUNTER_STATUS_DEBUG)
|
||||
@@ -79,9 +80,9 @@ function(hunter_gate_status_debug)
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
function(hunter_gate_wiki wiki_page)
|
||||
message("------------------------------ WIKI -------------------------------")
|
||||
message(" ${HUNTER_WIKI}/${wiki_page}")
|
||||
function(hunter_gate_error_page error_page)
|
||||
message("------------------------------ ERROR ------------------------------")
|
||||
message(" ${HUNTER_ERROR_PAGE}/${error_page}.html")
|
||||
message("-------------------------------------------------------------------")
|
||||
message("")
|
||||
message(FATAL_ERROR "")
|
||||
@@ -94,14 +95,13 @@ function(hunter_gate_internal_error)
|
||||
endforeach()
|
||||
message("[hunter ** INTERNAL **] [Directory:${CMAKE_CURRENT_LIST_DIR}]")
|
||||
message("")
|
||||
hunter_gate_wiki("error.internal")
|
||||
hunter_gate_error_page("error.internal")
|
||||
endfunction()
|
||||
|
||||
function(hunter_gate_fatal_error)
|
||||
cmake_parse_arguments(hunter "" "WIKI" "" "${ARGV}")
|
||||
string(COMPARE EQUAL "${hunter_WIKI}" "" have_no_wiki)
|
||||
if(have_no_wiki)
|
||||
hunter_gate_internal_error("Expected wiki")
|
||||
cmake_parse_arguments(hunter "" "ERROR_PAGE" "" "${ARGV}")
|
||||
if("${hunter_ERROR_PAGE}" STREQUAL "")
|
||||
hunter_gate_internal_error("Expected ERROR_PAGE")
|
||||
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_wiki("${hunter_WIKI}")
|
||||
hunter_gate_error_page("${hunter_ERROR_PAGE}")
|
||||
endfunction()
|
||||
|
||||
function(hunter_gate_user_error)
|
||||
hunter_gate_fatal_error(${ARGV} WIKI "error.incorrect.input.data")
|
||||
hunter_gate_fatal_error(${ARGV} ERROR_PAGE "error.incorrect.input.data")
|
||||
endfunction()
|
||||
|
||||
function(hunter_gate_self root version sha1 result)
|
||||
@@ -149,24 +149,21 @@ endfunction()
|
||||
# Set HUNTER_GATE_ROOT cmake variable to suitable value.
|
||||
function(hunter_gate_detect_root)
|
||||
# Check CMake variable
|
||||
string(COMPARE NOTEQUAL "${HUNTER_ROOT}" "" not_empty)
|
||||
if(not_empty)
|
||||
if(HUNTER_ROOT)
|
||||
set(HUNTER_GATE_ROOT "${HUNTER_ROOT}" PARENT_SCOPE)
|
||||
hunter_gate_status_debug("HUNTER_ROOT detected by cmake variable")
|
||||
return()
|
||||
endif()
|
||||
|
||||
# Check environment variable
|
||||
string(COMPARE NOTEQUAL "$ENV{HUNTER_ROOT}" "" not_empty)
|
||||
if(not_empty)
|
||||
if(DEFINED ENV{HUNTER_ROOT})
|
||||
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
|
||||
string(COMPARE NOTEQUAL "$ENV{HOME}" "" result)
|
||||
if(result)
|
||||
if(DEFINED ENV{HOME})
|
||||
set(HUNTER_GATE_ROOT "$ENV{HOME}/.hunter" PARENT_SCOPE)
|
||||
hunter_gate_status_debug("HUNTER_ROOT set using HOME environment variable")
|
||||
return()
|
||||
@@ -174,8 +171,7 @@ function(hunter_gate_detect_root)
|
||||
|
||||
# Check SYSTEMDRIVE and USERPROFILE environment variable (windows only)
|
||||
if(WIN32)
|
||||
string(COMPARE NOTEQUAL "$ENV{SYSTEMDRIVE}" "" result)
|
||||
if(result)
|
||||
if(DEFINED ENV{SYSTEMDRIVE})
|
||||
set(HUNTER_GATE_ROOT "$ENV{SYSTEMDRIVE}/.hunter" PARENT_SCOPE)
|
||||
hunter_gate_status_debug(
|
||||
"HUNTER_ROOT set using SYSTEMDRIVE environment variable"
|
||||
@@ -183,8 +179,7 @@ function(hunter_gate_detect_root)
|
||||
return()
|
||||
endif()
|
||||
|
||||
string(COMPARE NOTEQUAL "$ENV{USERPROFILE}" "" result)
|
||||
if(result)
|
||||
if(DEFINED ENV{USERPROFILE})
|
||||
set(HUNTER_GATE_ROOT "$ENV{USERPROFILE}/.hunter" PARENT_SCOPE)
|
||||
hunter_gate_status_debug(
|
||||
"HUNTER_ROOT set using USERPROFILE environment variable"
|
||||
@@ -195,7 +190,7 @@ function(hunter_gate_detect_root)
|
||||
|
||||
hunter_gate_fatal_error(
|
||||
"Can't detect HUNTER_ROOT"
|
||||
WIKI "error.detect.hunter.root"
|
||||
ERROR_PAGE "error.detect.hunter.root"
|
||||
)
|
||||
endfunction()
|
||||
|
||||
@@ -214,7 +209,7 @@ function(hunter_gate_download dir)
|
||||
"Settings:"
|
||||
" HUNTER_ROOT: ${HUNTER_GATE_ROOT}"
|
||||
" HUNTER_SHA1: ${HUNTER_GATE_SHA1}"
|
||||
WIKI "error.run.install"
|
||||
ERROR_PAGE "error.run.install"
|
||||
)
|
||||
endif()
|
||||
string(COMPARE EQUAL "${dir}" "" is_bad)
|
||||
@@ -400,7 +395,7 @@ macro(HunterGate)
|
||||
hunter_gate_fatal_error(
|
||||
"Please set HunterGate *before* 'project' command. "
|
||||
"Detected project: ${PROJECT_NAME}"
|
||||
WIKI "error.huntergate.before.project"
|
||||
ERROR_PAGE "error.huntergate.before.project"
|
||||
)
|
||||
endif()
|
||||
|
||||
@@ -470,7 +465,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!)"
|
||||
WIKI "error.spaces.in.hunter.root"
|
||||
ERROR_PAGE "error.spaces.in.hunter.root"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
@@ -518,7 +513,9 @@ macro(HunterGate)
|
||||
hunter_gate_internal_error("${_sha1_location} not found")
|
||||
endif()
|
||||
file(READ "${_sha1_location}" _sha1_value)
|
||||
string(COMPARE EQUAL "${_sha1_value}" "${HUNTER_GATE_SHA1}" _is_equal)
|
||||
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)
|
||||
if(NOT _is_equal)
|
||||
hunter_gate_internal_error(
|
||||
"Short SHA1 collision:"
|
||||
@@ -0,0 +1,151 @@
|
||||
# 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
+64
@@ -0,0 +1,64 @@
|
||||
if(TARGET Boost::boost)
|
||||
return()
|
||||
endif()
|
||||
|
||||
message(STATUS "Third-party: creating targets 'Boost::boost'...")
|
||||
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
boost-cmake
|
||||
GIT_REPOSITORY https://github.com/Orphis/boost-cmake.git
|
||||
GIT_TAG 7f97a08b64bd5d2e53e932ddf80c40544cf45edf
|
||||
)
|
||||
|
||||
set(PREVIOUS_CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
|
||||
set(OLD_CMAKE_POSITION_INDEPENDENT_CODE ${CMAKE_POSITION_INDEPENDENT_CODE})
|
||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||
|
||||
# This guy will download boost using FetchContent
|
||||
FetchContent_GetProperties(boost-cmake)
|
||||
if(NOT boost-cmake_POPULATED)
|
||||
FetchContent_Populate(boost-cmake)
|
||||
# File lcid.cpp from Boost_locale.cpp doesn't compile on MSVC, so we exclude them from the default
|
||||
# targets being built by the project (only targets explicitly used by other targets will be built).
|
||||
add_subdirectory(${boost-cmake_SOURCE_DIR} ${boost-cmake_BINARY_DIR} EXCLUDE_FROM_ALL)
|
||||
endif()
|
||||
|
||||
set(CMAKE_POSITION_INDEPENDENT_CODE ${OLD_CMAKE_POSITION_INDEPENDENT_CODE})
|
||||
set(CMAKE_CXX_FLAGS "${PREVIOUS_CMAKE_CXX_FLAGS}")
|
||||
|
||||
# Set VS target folders
|
||||
set(boost_modules
|
||||
container
|
||||
regex
|
||||
atomic
|
||||
exception
|
||||
chrono
|
||||
wave
|
||||
context
|
||||
coroutine
|
||||
date_time
|
||||
fiber
|
||||
filesystem
|
||||
graph
|
||||
iostreams
|
||||
locale
|
||||
log
|
||||
log_setup
|
||||
unit_test_framework
|
||||
math
|
||||
program_options
|
||||
timer
|
||||
random
|
||||
serialization
|
||||
system
|
||||
thread
|
||||
type_erasure
|
||||
)
|
||||
foreach(module IN ITEMS ${boost_modules})
|
||||
if(TARGET Boost_${module})
|
||||
set_target_properties(Boost_${module} PROPERTIES FOLDER ThirdParty/Boost)
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
Vendored
+14
@@ -0,0 +1,14 @@
|
||||
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
+58
@@ -0,0 +1,58 @@
|
||||
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/v5.6/CGAL-5.6-library.tar.xz
|
||||
URL_MD5 793da2d1597f3a5c0e3524f73a0b4039
|
||||
)
|
||||
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(gmp)
|
||||
include(mpfr)
|
||||
include(boost)
|
||||
|
||||
ignore_package(GMP 5.0.1)
|
||||
set(GMP_INCLUDE_DIR ${gmp_INCLUDE_DIR})
|
||||
set(GMP_LIBRARIES gmp::gmp)
|
||||
set(GMPXX_INCLUDE_DIR ${GMP_INCLUDE_DIR})
|
||||
set(GMPXX_LIBRARIES ${GMP_LIBRARIES})
|
||||
|
||||
ignore_package(MPFR 3.0.0)
|
||||
set(MPFR_INCLUDE_DIR "")
|
||||
set(MPFR_LIBRARIES mpfr::mpfr)
|
||||
|
||||
ignore_package(Boost 1.71.0)
|
||||
set(Boost_INCLUDE_DIRS "")
|
||||
set(Boost_LIBRARIES Boost::thread Boost::system)
|
||||
|
||||
# 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")
|
||||
find_package(CGAL CONFIG COMPONENTS Core PATHS ${cgal_SOURCE_DIR} NO_DEFAULT_PATH)
|
||||
endfunction()
|
||||
|
||||
cgal_import_target()
|
||||
Vendored
+31
@@ -0,0 +1,31 @@
|
||||
if(TARGET CoMISo::CoMISo)
|
||||
return()
|
||||
endif()
|
||||
|
||||
message(STATUS "Third-party: creating target 'CoMISo::CoMISo'")
|
||||
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
comiso
|
||||
GIT_REPOSITORY https://github.com/libigl/CoMISo.git
|
||||
GIT_TAG 536440e714f412e7ef6c0b96b90ba37b1531bb39
|
||||
)
|
||||
|
||||
include(eigen)
|
||||
|
||||
FetchContent_MakeAvailable(comiso)
|
||||
|
||||
add_library(CoMISo::CoMISo ALIAS CoMISo)
|
||||
|
||||
# Copy .hh headers into a subfolder `CoMISo/`
|
||||
file(GLOB_RECURSE INC_FILES "${comiso_SOURCE_DIR}/*.hh" "${comiso_SOURCE_DIR}/*.cc")
|
||||
set(output_folder "${CMAKE_CURRENT_BINARY_DIR}/CoMISo/include/CoMISo")
|
||||
message(VERBOSE "Copying CoMISo headers to '${output_folder}'")
|
||||
foreach(filepath IN ITEMS ${INC_FILES})
|
||||
file(RELATIVE_PATH filename "${comiso_SOURCE_DIR}" ${filepath})
|
||||
configure_file(${filepath} "${output_folder}/${filename}" COPYONLY)
|
||||
endforeach()
|
||||
|
||||
target_include_directories(CoMISo PUBLIC ${CMAKE_CURRENT_BINARY_DIR}/CoMISo/include)
|
||||
|
||||
set_target_properties(CoMISo PROPERTIES FOLDER ThirdParty)
|
||||
Vendored
+43
@@ -0,0 +1,43 @@
|
||||
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
@@ -0,0 +1,53 @@
|
||||
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 v3.13.3
|
||||
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
@@ -0,0 +1,17 @@
|
||||
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 ead2d21fd1d9f566d8f9a9ce99ddf85829258c7a
|
||||
)
|
||||
|
||||
FetchContent_MakeAvailable(glad)
|
||||
add_library(glad::glad ALIAS glad)
|
||||
|
||||
set_target_properties(glad PROPERTIES FOLDER ThirdParty)
|
||||
Vendored
+42
@@ -0,0 +1,42 @@
|
||||
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
+96
@@ -0,0 +1,96 @@
|
||||
if(TARGET gmp::gmp)
|
||||
return()
|
||||
endif()
|
||||
|
||||
# Download precompiled .dll on Windows
|
||||
if(WIN32)
|
||||
include(gmp_mpfr)
|
||||
# Find_package will look for our downloaded lib on Windows, and system-wide on Linux/macOS
|
||||
find_package(GMP REQUIRED)
|
||||
else()
|
||||
message(STATUS "Third-party: creating target 'gmp::gmp'")
|
||||
|
||||
# SERIOUSLY !?! CMAKE and configure use transposed definitions of "build" and
|
||||
# "host"?
|
||||
#
|
||||
# https://cmake.org/cmake/help/latest/variable/CMAKE_SYSTEM_NAME.html#variable:CMAKE_SYSTEM_NAME
|
||||
# https://gcc.gnu.org/onlinedocs/gccint/Configure-Terms.html
|
||||
#
|
||||
# Seems these aren't to be trusted much
|
||||
# https://gitlab.kitware.com/cmake/cmake/-/issues/20989
|
||||
if(APPLE)
|
||||
# https://gmplib.org/list-archives/gmp-discuss/2020-November/006607.html
|
||||
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND CMAKE_OSX_ARCHITECTURES STREQUAL "arm64")
|
||||
set(gmp_BUILD "x86_64-apple-darwin")
|
||||
set(gmp_HOST "arm64-apple-darwin")
|
||||
set(gmp_CFLAGS "--target=arm64-apple-darwin")
|
||||
set(gmp_LDFLAGS "-arch arm64")
|
||||
message(STATUS "GMP Recipe notices building on ${gmp_BUILD} for ${gmp_HOST}")
|
||||
elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64" AND CMAKE_OSX_ARCHITECTURES STREQUAL "x86_64")
|
||||
set(gmp_HOST "x86_64-apple-darwin")
|
||||
set(gmp_BUILD "arm64-apple-darwin")
|
||||
set(gmp_CFLAGS "--target=x86_64-apple-darwin13.0.0")
|
||||
set(gmp_LDFLAGS "")
|
||||
message(STATUS "GMP Recipe notices building on ${gmp_HOST} for ${gmp_BUILD}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
include(FetchContent)
|
||||
include(ProcessorCount)
|
||||
ProcessorCount(Ncpu)
|
||||
include(ExternalProject)
|
||||
set(prefix ${FETCHCONTENT_BASE_DIR}/gmp)
|
||||
set(gmp_INSTALL ${prefix}/install)
|
||||
set(gmp_LIB_DIR ${gmp_INSTALL}/lib)
|
||||
set(gmp_LIBRARY
|
||||
${gmp_LIB_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}gmp${CMAKE_STATIC_LIBRARY_SUFFIX}
|
||||
${gmp_LIB_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}gmpxx${CMAKE_STATIC_LIBRARY_SUFFIX}
|
||||
)
|
||||
set(gmp_INCLUDE_DIR ${gmp_INSTALL}/include)
|
||||
|
||||
# Try to use CONFIGURE_HANDLED_BY_BUILD ON to avoid constantly reconfiguring
|
||||
if(${CMAKE_VERSION} VERSION_LESS 3.20)
|
||||
# CMake < 3.20, do not use any extra option
|
||||
set(gmp_ExternalProject_Add_extra_options)
|
||||
else()
|
||||
# CMake >= 3.20
|
||||
set(gmp_ExternalProject_Add_extra_options "CONFIGURE_HANDLED_BY_BUILD;ON")
|
||||
endif()
|
||||
|
||||
ExternalProject_Add(gmp
|
||||
PREFIX ${prefix}
|
||||
URL https://github.com/alisw/GMP/archive/refs/tags/v6.2.1.tar.gz
|
||||
URL_MD5 f060ad4e762ae550d16f1bb477aadba5
|
||||
UPDATE_DISCONNECTED true # need this to avoid constant rebuild
|
||||
PATCH_COMMAND
|
||||
curl "https://gist.githubusercontent.com/alecjacobson/d34d9307c17d1b853571699b9786e9d1/raw/8d14fc21cb7654f51c2e8df4deb0f82f9d0e8355/gmp-patch" "|" git apply -v
|
||||
${gmp_ExternalProject_Add_extra_options}
|
||||
CONFIGURE_COMMAND
|
||||
${CMAKE_COMMAND} -E env
|
||||
CFLAGS=${gmp_CFLAGS}
|
||||
LDFLAGS=${gmp_LDFLAGS}
|
||||
${prefix}/src/gmp/configure
|
||||
--disable-debug --disable-dependency-tracking --enable-cxx --with-pic
|
||||
--prefix=${gmp_INSTALL}
|
||||
--build=${gmp_BUILD}
|
||||
--host=${gmp_HOST}
|
||||
--disable-shared
|
||||
BUILD_COMMAND make -j${Ncpu}
|
||||
INSTALL_COMMAND make -j${Ncpu} install
|
||||
INSTALL_DIR ${gmp_INSTALL}
|
||||
TEST_COMMAND ""
|
||||
BUILD_BYPRODUCTS ${gmp_LIBRARY}
|
||||
)
|
||||
ExternalProject_Get_Property(gmp SOURCE_DIR)
|
||||
set(gmp_LIBRARIES ${gmp_LIBRARY})
|
||||
add_library(gmp::gmp INTERFACE IMPORTED GLOBAL)
|
||||
file(MAKE_DIRECTORY ${gmp_INCLUDE_DIR}) # avoid race condition
|
||||
target_include_directories(gmp::gmp INTERFACE ${gmp_INCLUDE_DIR})
|
||||
target_link_libraries(gmp::gmp INTERFACE "${gmp_LIBRARIES}") # need the quotes to expand list
|
||||
add_dependencies(gmp::gmp gmp)
|
||||
|
||||
endif()
|
||||
|
||||
if(NOT TARGET gmp::gmp)
|
||||
message(FATAL_ERROR "Creation of target 'gmp::gmp' failed")
|
||||
endif()
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
if(WIN32)
|
||||
message(STATUS "Third-party: downloading gmp + mpfr")
|
||||
|
||||
include(FetchContent)
|
||||
|
||||
# CGAL 5+ ships with a single .zip combining GMP + MPFR's precompiled dlls.
|
||||
# For now we still download them separately.
|
||||
|
||||
FetchContent_Declare(
|
||||
gmp
|
||||
URL https://cgal.geometryfactory.com/CGAL/precompiled_libs/auxiliary/x64/GMP/5.0.1/gmp-all-CGAL-3.9.zip
|
||||
URL_MD5 508c1292319c832609329116a8234c9f
|
||||
)
|
||||
FetchContent_MakeAvailable(gmp)
|
||||
|
||||
FetchContent_Declare(
|
||||
mpfr
|
||||
URL https://cgal.geometryfactory.com/CGAL/precompiled_libs/auxiliary/x64/MPFR/3.0.0/mpfr-all-CGAL-3.9.zip
|
||||
URL_MD5 48840454eef0ff18730050c05028734b
|
||||
)
|
||||
FetchContent_MakeAvailable(mpfr)
|
||||
|
||||
# FetchContent_Declare(
|
||||
# gmp_mpfr
|
||||
# URL https://github.com/CGAL/cgal/releases/download/v5.2.1/CGAL-5.2.1-win64-auxiliary-libraries-gmp-mpfr.zip
|
||||
# URL_MD5 247f4dca741c6b9a9be76286414070fa
|
||||
# )
|
||||
|
||||
# For CGAL
|
||||
set(ENV{GMP_DIR} "${gmp_SOURCE_DIR}")
|
||||
set(ENV{MPFR_DIR} "${mpfr_SOURCE_DIR}")
|
||||
else()
|
||||
# On Linux/macOS, gmp+mpfr will be fetched and compiled
|
||||
endif()
|
||||
Vendored
+53
@@ -0,0 +1,53 @@
|
||||
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
@@ -0,0 +1,30 @@
|
||||
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
@@ -0,0 +1,25 @@
|
||||
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
@@ -0,0 +1,18 @@
|
||||
if(TARGET igl::tests_data)
|
||||
return()
|
||||
endif()
|
||||
|
||||
message(STATUS "Third-party: creating target 'igl::tests_data'")
|
||||
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
libigl_tests_tata
|
||||
GIT_REPOSITORY https://github.com/libigl/libigl-tests-data
|
||||
GIT_TAG 19cedf96d70702d8b3a83eb27934780c542356fe
|
||||
)
|
||||
FetchContent_MakeAvailable(libigl_tests_tata)
|
||||
|
||||
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_tata_SOURCE_DIR}\")
|
||||
@@ -0,0 +1,18 @@
|
||||
if(TARGET igl::tutorial_data)
|
||||
return()
|
||||
endif()
|
||||
|
||||
message(STATUS "Third-party: creating target 'igl::tutorial_data'")
|
||||
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
libigl_tutorial_tata
|
||||
GIT_REPOSITORY https://github.com/libigl/libigl-tutorial-data
|
||||
GIT_TAG c1f9ede366d02e3531ecbaec5e3769312f31cccd
|
||||
)
|
||||
FetchContent_MakeAvailable(libigl_tutorial_tata)
|
||||
|
||||
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_tata_SOURCE_DIR}\"")
|
||||
Vendored
+91
@@ -0,0 +1,91 @@
|
||||
# Expects
|
||||
# gmp_INCLUDE_DIR
|
||||
# gmp_LIB_DIR
|
||||
# gmp_LIBRARIES
|
||||
if(TARGET mpfr::mpfr)
|
||||
return()
|
||||
endif()
|
||||
|
||||
# Download precompiled .dll on Windows
|
||||
if(WIN32)
|
||||
include(gmp_mpfr)
|
||||
# Find_package will look for our downloaded lib on Windows, and system-wide on Linux/macOS
|
||||
find_package(MPFR REQUIRED)
|
||||
else()
|
||||
message(STATUS "Third-party: creating target 'mpfr::mpfr'")
|
||||
|
||||
# Praying this will work the same as gmp
|
||||
if(APPLE)
|
||||
# https://gmplib.org/list-archives/gmp-discuss/2020-November/006607.html
|
||||
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND CMAKE_OSX_ARCHITECTURES STREQUAL "arm64")
|
||||
set(mpfr_BUILD "x86_64-apple-darwin")
|
||||
set(mpfr_HOST "arm64-apple-darwin")
|
||||
set(mpfr_CFLAGS "--target=arm64-apple-darwin")
|
||||
set(mpfr_LDFLAGS "-arch arm64")
|
||||
elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64" AND CMAKE_OSX_ARCHITECTURES STREQUAL "x86_64")
|
||||
set(mpfr_HOST "x86_64-apple-darwin")
|
||||
set(mpfr_BUILD "arm64-apple-darwin")
|
||||
set(mpfr_CFLAGS "--target=x86_64-apple-darwin13.0.0")
|
||||
set(mpfr_LDFLAGS "")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
include(FetchContent)
|
||||
include(ProcessorCount)
|
||||
ProcessorCount(Ncpu)
|
||||
include(ExternalProject)
|
||||
set(prefix ${FETCHCONTENT_BASE_DIR}/mpfr)
|
||||
set(mpfr_INSTALL ${prefix}/install)
|
||||
set(mpfr_LIBRARY ${mpfr_INSTALL}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}mpfr${CMAKE_STATIC_LIBRARY_SUFFIX})
|
||||
set(mpfr_INCLUDE_DIR ${mpfr_INSTALL}/include)
|
||||
|
||||
# Try to use CONFIGURE_HANDLED_BY_BUILD ON to avoid constantly reconfiguring
|
||||
if(${CMAKE_VERSION} VERSION_LESS 3.20)
|
||||
# CMake < 3.20, do not use any extra option
|
||||
set(mpfr_ExternalProject_Add_extra_options)
|
||||
else()
|
||||
# CMake >= 3.20
|
||||
set(mpfr_ExternalProject_Add_extra_options "CONFIGURE_HANDLED_BY_BUILD;ON")
|
||||
endif()
|
||||
|
||||
ExternalProject_Add(mpfr
|
||||
PREFIX ${prefix}
|
||||
DEPENDS gmp
|
||||
URL https://ftp.gnu.org/gnu/mpfr/mpfr-4.2.0.tar.xz
|
||||
URL_MD5 a25091f337f25830c16d2054d74b5af7
|
||||
UPDATE_DISCONNECTED true # need this to avoid constant rebuild
|
||||
${mpfr_ExternalProject_Add_extra_options} # avoid constant reconfigure
|
||||
CONFIGURE_COMMAND
|
||||
${CMAKE_COMMAND} -E env
|
||||
CFLAGS=${gmp_CFLAGS}
|
||||
LDFLAGS=${gmp_LDFLAGS}
|
||||
${prefix}/src/mpfr/configure
|
||||
--disable-debug --disable-dependency-tracking --disable-silent-rules --enable-cxx --with-pic
|
||||
--with-gmp-include=${gmp_INCLUDE_DIR} --with-gmp-lib=${gmp_LIB_DIR}
|
||||
--disable-shared
|
||||
--prefix=${mpfr_INSTALL}
|
||||
--build=${gmp_BUILD}
|
||||
--host=${gmp_HOST}
|
||||
--disable-shared
|
||||
BUILD_COMMAND make -j${Ncpu}
|
||||
INSTALL_COMMAND make -j${Ncpu} install
|
||||
INSTALL_DIR ${mpfr_INSTALL}
|
||||
TEST_COMMAND ""
|
||||
BUILD_BYPRODUCTS ${mpfr_LIBRARY}
|
||||
)
|
||||
#PATCH_COMMAND curl "https://raw.githubusercontent.com/Homebrew/formula-patches/03cf8088210822aa2c1ab544ed58ea04c897d9c4/libtool/configure-big_sur.diff" "|" sed -e "s/configure.orig/configure/g" "|" git apply -v
|
||||
ExternalProject_Get_Property(mpfr SOURCE_DIR)
|
||||
set(mpfr_LIBRARIES ${mpfr_LIBRARY})
|
||||
add_library(mpfr::mpfr INTERFACE IMPORTED GLOBAL)
|
||||
file(MAKE_DIRECTORY ${mpfr_INCLUDE_DIR}) # avoid race condition
|
||||
target_include_directories(mpfr::mpfr INTERFACE ${mpfr_INCLUDE_DIR})
|
||||
target_link_libraries(mpfr::mpfr INTERFACE "${mpfr_LIBRARIES}") # need the quotes to expand list
|
||||
# This is necessary to ensure that mpfr appears before gmp in link order.
|
||||
# Otherwise undefined reference errors occur at link time on Linux with gcc
|
||||
target_link_libraries(mpfr::mpfr INTERFACE "${gmp_LIBRARIES}")
|
||||
add_dependencies(mpfr::mpfr mpfr)
|
||||
endif()
|
||||
|
||||
if(NOT TARGET mpfr::mpfr)
|
||||
message(FATAL_ERROR "Creation of target 'mpfr::mpfr' failed")
|
||||
endif()
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
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 488242fa2b1f98a9c5bd1441297fb4a99a6a9ae4
|
||||
)
|
||||
|
||||
FetchContent_MakeAvailable(predicates)
|
||||
add_library(predicates::predicates ALIAS predicates)
|
||||
|
||||
set_target_properties(predicates PROPERTIES FOLDER ThirdParty)
|
||||
Vendored
+16
@@ -0,0 +1,16 @@
|
||||
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
@@ -0,0 +1,32 @@
|
||||
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
@@ -0,0 +1,19 @@
|
||||
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 4f3bfba3997f20aa1f96cfaff604313a8c2c85b6
|
||||
)
|
||||
|
||||
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
@@ -0,0 +1,24 @@
|
||||
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
@@ -0,0 +1,19 @@
|
||||
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 3ee6cac2230f0fe1413879574f741c7b6da11221
|
||||
)
|
||||
|
||||
FetchContent_MakeAvailable(triangle)
|
||||
add_library(triangle::triangle ALIAS triangle)
|
||||
|
||||
target_include_directories(triangle INTERFACE "${triangle_SOURCE_DIR}")
|
||||
|
||||
set_target_properties(triangle PROPERTIES FOLDER ThirdParty)
|
||||
@@ -0,0 +1,5 @@
|
||||
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."
|
||||
)
|
||||
@@ -0,0 +1 @@
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/../external/catch2.cmake)
|
||||
@@ -0,0 +1,5 @@
|
||||
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."
|
||||
)
|
||||
@@ -0,0 +1,5 @@
|
||||
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."
|
||||
)
|
||||
@@ -0,0 +1,2 @@
|
||||
hunter_add_package(Eigen)
|
||||
find_package(Eigen3 CONFIG REQUIRED)
|
||||
@@ -0,0 +1,5 @@
|
||||
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."
|
||||
)
|
||||
@@ -0,0 +1,5 @@
|
||||
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."
|
||||
)
|
||||
@@ -0,0 +1,5 @@
|
||||
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."
|
||||
)
|
||||
@@ -0,0 +1,5 @@
|
||||
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."
|
||||
)
|
||||
@@ -0,0 +1,5 @@
|
||||
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."
|
||||
)
|
||||
@@ -0,0 +1,5 @@
|
||||
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."
|
||||
)
|
||||
@@ -0,0 +1,5 @@
|
||||
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."
|
||||
)
|
||||
@@ -0,0 +1 @@
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/../external/libigl_tests_data.cmake)
|
||||
@@ -0,0 +1 @@
|
||||
include(${CMAKE_CURRENT_LIST_DIR}/../external/libigl_tutorial_data.cmake)
|
||||
@@ -0,0 +1,5 @@
|
||||
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."
|
||||
)
|
||||
@@ -0,0 +1,5 @@
|
||||
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."
|
||||
)
|
||||
@@ -0,0 +1,5 @@
|
||||
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."
|
||||
)
|
||||
@@ -0,0 +1,5 @@
|
||||
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."
|
||||
)
|
||||
@@ -0,0 +1,5 @@
|
||||
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."
|
||||
)
|
||||
@@ -0,0 +1,5 @@
|
||||
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
@@ -0,0 +1,54 @@
|
||||
# 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/
|
||||
+227
-175
@@ -10,6 +10,7 @@
|
||||
#include "barycenter.h"
|
||||
#include "colon.h"
|
||||
#include "doublearea.h"
|
||||
#include "increment_ulp.h"
|
||||
#include "point_simplex_squared_distance.h"
|
||||
#include "project_to_line_segment.h"
|
||||
#include "sort.h"
|
||||
@@ -24,6 +25,113 @@
|
||||
#include <queue>
|
||||
#include <stack>
|
||||
|
||||
// This would be so much better with C++17 if constexpr
|
||||
namespace
|
||||
{
|
||||
template <
|
||||
typename DerivedV,
|
||||
typename DerivedEle,
|
||||
typename Derivedq,
|
||||
int DIM>
|
||||
struct AABB_all_positive_barycentric_coordinates_helper;
|
||||
|
||||
template <
|
||||
typename DerivedV,
|
||||
typename DerivedEle,
|
||||
typename Derivedq>
|
||||
struct AABB_all_positive_barycentric_coordinates_helper<
|
||||
DerivedV,
|
||||
DerivedEle,
|
||||
Derivedq,
|
||||
2>
|
||||
{
|
||||
static inline bool compute(
|
||||
const Eigen::MatrixBase<DerivedV> & V,
|
||||
const Eigen::MatrixBase<DerivedEle> & Ele,
|
||||
const int primitive,
|
||||
const Eigen::MatrixBase<Derivedq> & q)
|
||||
{
|
||||
using namespace igl;
|
||||
using Scalar = typename DerivedV::Scalar;
|
||||
const Scalar epsilon = igl::EPS<Scalar>();
|
||||
static_assert(
|
||||
DerivedV::ColsAtCompileTime == 2 ||
|
||||
DerivedV::ColsAtCompileTime == Eigen::Dynamic,
|
||||
"V should be 2D");
|
||||
static_assert(
|
||||
Derivedq::ColsAtCompileTime == 2 ||
|
||||
Derivedq::ColsAtCompileTime == Eigen::Dynamic,
|
||||
"q should be 2D");
|
||||
// Barycentric coordinates
|
||||
typedef Eigen::Matrix<Scalar,2,1> Vector2S;
|
||||
const Vector2S V1 = V.row(Ele(primitive,0));
|
||||
const Vector2S V2 = V.row(Ele(primitive,1));
|
||||
const Vector2S V3 = V.row(Ele(primitive,2));
|
||||
// Hack for now to keep templates simple. If becomes bottleneck
|
||||
// consider using std::enable_if_t
|
||||
const Vector2S q2 = q.head(2);
|
||||
Scalar a1 = doublearea_single(V1,V2,q2);
|
||||
Scalar a2 = doublearea_single(V2,V3,q2);
|
||||
Scalar a3 = doublearea_single(V3,V1,q2);
|
||||
// Normalization is important for correcting magnitude near epsilon
|
||||
Scalar sum = a1+a2+a3;
|
||||
a1 /= sum;
|
||||
a2 /= sum;
|
||||
a3 /= sum;
|
||||
return a1>=-epsilon && a2>=-epsilon && a3>=-epsilon;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
template <
|
||||
typename DerivedV,
|
||||
typename DerivedEle,
|
||||
typename Derivedq>
|
||||
struct AABB_all_positive_barycentric_coordinates_helper<
|
||||
DerivedV,
|
||||
DerivedEle,
|
||||
Derivedq,
|
||||
3>
|
||||
{
|
||||
static inline bool compute(
|
||||
const Eigen::MatrixBase<DerivedV> & V,
|
||||
const Eigen::MatrixBase<DerivedEle> & Ele,
|
||||
const int primitive,
|
||||
const Eigen::MatrixBase<Derivedq> & q)
|
||||
{
|
||||
using namespace igl;
|
||||
using Scalar = typename DerivedV::Scalar;
|
||||
const Scalar epsilon = igl::EPS<Scalar>();
|
||||
static_assert(
|
||||
DerivedV::ColsAtCompileTime == 3 ||
|
||||
DerivedV::ColsAtCompileTime == Eigen::Dynamic,
|
||||
"V should be 2D");
|
||||
static_assert(
|
||||
Derivedq::ColsAtCompileTime == 3 ||
|
||||
Derivedq::ColsAtCompileTime == Eigen::Dynamic,
|
||||
"q should be 2D");
|
||||
// Barycentric coordinates
|
||||
typedef Eigen::Matrix<Scalar,1,3> RowVector3S;
|
||||
const RowVector3S V1 = V.row(Ele(primitive,0));
|
||||
const RowVector3S V2 = V.row(Ele(primitive,1));
|
||||
const RowVector3S V3 = V.row(Ele(primitive,2));
|
||||
const RowVector3S V4 = V.row(Ele(primitive,3));
|
||||
Scalar a1 = volume_single(V2,V4,V3,(RowVector3S)q);
|
||||
Scalar a2 = volume_single(V1,V3,V4,(RowVector3S)q);
|
||||
Scalar a3 = volume_single(V1,V4,V2,(RowVector3S)q);
|
||||
Scalar a4 = volume_single(V1,V2,V3,(RowVector3S)q);
|
||||
Scalar sum = a1+a2+a3+a4;
|
||||
a1 /= sum;
|
||||
a2 /= sum;
|
||||
a3 /= sum;
|
||||
a4 /= sum;
|
||||
return a1>=-epsilon && a2>=-epsilon && a3>=-epsilon && a4>=-epsilon;
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
|
||||
template <typename DerivedV, int DIM>
|
||||
template <typename DerivedEle, typename Derivedbb_mins, typename Derivedbb_maxs, typename Derivedelements>
|
||||
IGL_INLINE void igl::AABB<DerivedV,DIM>::init(
|
||||
@@ -215,7 +323,6 @@ IGL_INLINE std::vector<int> igl::AABB<DerivedV,DIM>::find(
|
||||
"Query dimension should match aabb dimension");
|
||||
assert(Ele.cols() == V.cols()+1 &&
|
||||
"AABB::find only makes sense for (d+1)-simplices");
|
||||
const Scalar epsilon = igl::EPS<Scalar>();
|
||||
// Check if outside bounding box
|
||||
bool inside = m_box.contains(q.transpose());
|
||||
if(!inside)
|
||||
@@ -225,52 +332,8 @@ IGL_INLINE std::vector<int> igl::AABB<DerivedV,DIM>::find(
|
||||
assert(m_primitive==-1 || (m_left == NULL && m_right == NULL));
|
||||
if(is_leaf())
|
||||
{
|
||||
// Initialize to some value > -epsilon
|
||||
Scalar a1=0,a2=0,a3=0,a4=0;
|
||||
switch(DIM)
|
||||
{
|
||||
case 3:
|
||||
{
|
||||
// Barycentric coordinates
|
||||
typedef Eigen::Matrix<Scalar,1,3> RowVector3S;
|
||||
const RowVector3S V1 = V.row(Ele(m_primitive,0));
|
||||
const RowVector3S V2 = V.row(Ele(m_primitive,1));
|
||||
const RowVector3S V3 = V.row(Ele(m_primitive,2));
|
||||
const RowVector3S V4 = V.row(Ele(m_primitive,3));
|
||||
a1 = volume_single(V2,V4,V3,(RowVector3S)q);
|
||||
a2 = volume_single(V1,V3,V4,(RowVector3S)q);
|
||||
a3 = volume_single(V1,V4,V2,(RowVector3S)q);
|
||||
a4 = volume_single(V1,V2,V3,(RowVector3S)q);
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
// Barycentric coordinates
|
||||
typedef Eigen::Matrix<Scalar,2,1> Vector2S;
|
||||
const Vector2S V1 = V.row(Ele(m_primitive,0));
|
||||
const Vector2S V2 = V.row(Ele(m_primitive,1));
|
||||
const Vector2S V3 = V.row(Ele(m_primitive,2));
|
||||
// Hack for now to keep templates simple. If becomes bottleneck
|
||||
// consider using std::enable_if_t
|
||||
const Vector2S q2 = q.head(2);
|
||||
a1 = doublearea_single(V1,V2,q2);
|
||||
a2 = doublearea_single(V2,V3,q2);
|
||||
a3 = doublearea_single(V3,V1,q2);
|
||||
break;
|
||||
}
|
||||
default:assert(false);
|
||||
}
|
||||
// Normalization is important for correcting sign
|
||||
Scalar sum = a1+a2+a3+a4;
|
||||
a1 /= sum;
|
||||
a2 /= sum;
|
||||
a3 /= sum;
|
||||
a4 /= sum;
|
||||
if(
|
||||
a1>=-epsilon &&
|
||||
a2>=-epsilon &&
|
||||
a3>=-epsilon &&
|
||||
a4>=-epsilon)
|
||||
if(AABB_all_positive_barycentric_coordinates_helper<
|
||||
DerivedV,DerivedEle,Derivedq, DIM>::compute(V,Ele,m_primitive,q))
|
||||
{
|
||||
return std::vector<int>(1,m_primitive);
|
||||
}else
|
||||
@@ -486,7 +549,7 @@ IGL_INLINE void igl::AABB<DerivedV,DIM>::squared_distance(
|
||||
//for(int p = 0;p<P.rows();p++)
|
||||
igl::parallel_for(P.rows(),[&](int p)
|
||||
{
|
||||
RowVectorDIMS Pp = P.row(p), c;
|
||||
RowVectorDIMS Pp = P.row(p).template head<DIM>(), c;
|
||||
int Ip;
|
||||
sqrD(p) = squared_distance(V,Ele,Pp,Ip,c);
|
||||
I(p) = Ip;
|
||||
@@ -804,11 +867,7 @@ IGL_INLINE void igl::AABB<DerivedV,DIM>::leaf_squared_distance(
|
||||
|
||||
template <typename DerivedV, int DIM>
|
||||
IGL_INLINE void igl::AABB<DerivedV,DIM>::set_min(
|
||||
const RowVectorDIMS &
|
||||
#ifndef NDEBUG
|
||||
p
|
||||
#endif
|
||||
,
|
||||
const RowVectorDIMS & /* p */,
|
||||
const Scalar sqr_d_candidate,
|
||||
const int i_candidate,
|
||||
const RowVectorDIMS & c_candidate,
|
||||
@@ -816,13 +875,6 @@ IGL_INLINE void igl::AABB<DerivedV,DIM>::set_min(
|
||||
int & i,
|
||||
Eigen::PlainObjectBase<RowVectorDIMS> & c) const
|
||||
{
|
||||
#ifndef NDEBUG
|
||||
//std::cout<<matlab_format(c_candidate,"c_candidate")<<std::endl;
|
||||
//// This doesn't quite make sense to check with bounds
|
||||
// const Scalar pc_norm = (p-c_candidate).squaredNorm();
|
||||
// const Scalar diff = fabs(sqr_d_candidate - pc_norm);
|
||||
// assert(diff<=1e-10 && "distance should match norm of difference");
|
||||
#endif
|
||||
if(sqr_d_candidate < sqr_d)
|
||||
{
|
||||
i = i_candidate;
|
||||
@@ -842,37 +894,10 @@ igl::AABB<DerivedV,DIM>::intersect_ray(
|
||||
const RowVectorDIMS & dir,
|
||||
std::vector<igl::Hit> & hits) const
|
||||
{
|
||||
hits.clear();
|
||||
const Scalar t0 = 0;
|
||||
const Scalar t1 = std::numeric_limits<Scalar>::infinity();
|
||||
{
|
||||
Scalar _1,_2;
|
||||
if(!ray_box_intersect(origin,dir,m_box,t0,t1,_1,_2))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if(this->is_leaf())
|
||||
{
|
||||
// Actually process elements
|
||||
assert((Ele.size() == 0 || Ele.cols() == 3) && "Elements should be triangles");
|
||||
// Cheesecake way of hitting element
|
||||
bool ret = ray_mesh_intersect(origin,dir,V,Ele.row(m_primitive),hits);
|
||||
// Since we only gave ray_mesh_intersect a single face, it will have set
|
||||
// any hits to id=0. Set these to this primitive's id
|
||||
for(auto & hit : hits)
|
||||
{
|
||||
hit.id = m_primitive;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
std::vector<igl::Hit> left_hits;
|
||||
std::vector<igl::Hit> right_hits;
|
||||
const bool left_ret = m_left->intersect_ray(V,Ele,origin,dir,left_hits);
|
||||
const bool right_ret = m_right->intersect_ray(V,Ele,origin,dir,right_hits);
|
||||
hits.insert(hits.end(),left_hits.begin(),left_hits.end());
|
||||
hits.insert(hits.end(),right_hits.begin(),right_hits.end());
|
||||
return left_ret || right_ret;
|
||||
RowVectorDIMS inv_dir = dir.cwiseInverse();
|
||||
RowVectorDIMS inv_dir_pad = inv_dir;
|
||||
igl::increment_ulp(inv_dir_pad, 2);
|
||||
return intersect_ray_opt(V, Ele, origin, dir, inv_dir, inv_dir_pad, hits);
|
||||
}
|
||||
|
||||
template <typename DerivedV, int DIM>
|
||||
@@ -944,22 +969,76 @@ igl::AABB<DerivedV,DIM>::intersect_ray(
|
||||
const Scalar _min_t,
|
||||
igl::Hit & hit) const
|
||||
{
|
||||
//// Naive, slow
|
||||
//std::vector<igl::Hit> hits;
|
||||
//intersect_ray(V,Ele,origin,dir,hits);
|
||||
//if(hits.size() > 0)
|
||||
//{
|
||||
// hit = hits.front();
|
||||
// return true;
|
||||
//}else
|
||||
//{
|
||||
// return false;
|
||||
//}
|
||||
RowVectorDIMS inv_dir = dir.cwiseInverse();
|
||||
RowVectorDIMS inv_dir_pad = inv_dir;
|
||||
igl::increment_ulp(inv_dir_pad, 2);
|
||||
return intersect_ray_opt(V, Ele, origin, dir, inv_dir, inv_dir_pad, _min_t, hit);
|
||||
}
|
||||
|
||||
template <typename DerivedV, int DIM>
|
||||
template <typename DerivedEle>
|
||||
IGL_INLINE bool
|
||||
igl::AABB<DerivedV,DIM>::intersect_ray_opt(
|
||||
const Eigen::MatrixBase<DerivedV> & V,
|
||||
const Eigen::MatrixBase<DerivedEle> & Ele,
|
||||
const RowVectorDIMS & origin,
|
||||
const RowVectorDIMS & dir,
|
||||
const RowVectorDIMS & inv_dir,
|
||||
const RowVectorDIMS & inv_dir_pad,
|
||||
std::vector<igl::Hit> & hits) const
|
||||
{
|
||||
hits.clear();
|
||||
const Scalar t0 = 0;
|
||||
const Scalar t1 = std::numeric_limits<Scalar>::infinity();
|
||||
{
|
||||
Scalar _1,_2;
|
||||
|
||||
if(!ray_box_intersect(origin,inv_dir,inv_dir_pad,m_box,t0,t1,_1,_2))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if(this->is_leaf())
|
||||
{
|
||||
// Actually process elements
|
||||
assert((Ele.size() == 0 || Ele.cols() == 3) && "Elements should be triangles");
|
||||
// Cheesecake way of hitting element
|
||||
bool ret = ray_mesh_intersect(origin,dir,V,Ele.row(m_primitive),hits);
|
||||
// Since we only gave ray_mesh_intersect a single face, it will have set
|
||||
// any hits to id=0. Set these to this primitive's id
|
||||
for(auto & hit: hits)
|
||||
{
|
||||
hit.id = m_primitive;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
std::vector<igl::Hit> left_hits;
|
||||
std::vector<igl::Hit> right_hits;
|
||||
const bool left_ret = m_left->intersect_ray_opt(V,Ele,origin,dir,inv_dir,inv_dir_pad,left_hits);
|
||||
const bool right_ret = m_right->intersect_ray_opt(V,Ele,origin,dir,inv_dir,inv_dir_pad,right_hits);
|
||||
hits.insert(hits.end(),left_hits.begin(),left_hits.end());
|
||||
hits.insert(hits.end(),right_hits.begin(),right_hits.end());
|
||||
return left_ret || right_ret;
|
||||
}
|
||||
|
||||
template <typename DerivedV, int DIM>
|
||||
template <typename DerivedEle>
|
||||
IGL_INLINE bool
|
||||
igl::AABB<DerivedV,DIM>::intersect_ray_opt(
|
||||
const Eigen::MatrixBase<DerivedV> & V,
|
||||
const Eigen::MatrixBase<DerivedEle> & Ele,
|
||||
const RowVectorDIMS & origin,
|
||||
const RowVectorDIMS & dir,
|
||||
const RowVectorDIMS & inv_dir,
|
||||
const RowVectorDIMS & inv_dir_pad,
|
||||
const Scalar _min_t,
|
||||
igl::Hit & hit) const
|
||||
{
|
||||
Scalar min_t = _min_t;
|
||||
const Scalar t0 = 0;
|
||||
{
|
||||
Scalar _1,_2;
|
||||
if(!ray_box_intersect(origin,dir,m_box,t0,min_t,_1,_2))
|
||||
if(!ray_box_intersect(origin,inv_dir,inv_dir_pad,m_box,t0,min_t,_1,_2))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@@ -978,7 +1057,7 @@ igl::AABB<DerivedV,DIM>::intersect_ray(
|
||||
// differnce
|
||||
igl::Hit left_hit;
|
||||
igl::Hit right_hit;
|
||||
bool left_ret = m_left->intersect_ray(V,Ele,origin,dir,min_t,left_hit);
|
||||
bool left_ret = m_left->intersect_ray_opt(V,Ele,origin,dir,inv_dir,inv_dir_pad,min_t,left_hit);
|
||||
if(left_ret && left_hit.t<min_t)
|
||||
{
|
||||
// It's scary that this line doesn't seem to matter....
|
||||
@@ -989,7 +1068,7 @@ igl::AABB<DerivedV,DIM>::intersect_ray(
|
||||
{
|
||||
left_ret = false;
|
||||
}
|
||||
bool right_ret = m_right->intersect_ray(V,Ele,origin,dir,min_t,right_hit);
|
||||
bool right_ret = m_right->intersect_ray_opt(V,Ele,origin,dir,inv_dir,inv_dir_pad,min_t,right_hit);
|
||||
if(right_ret && right_hit.t<min_t)
|
||||
{
|
||||
min_t = right_hit.t;
|
||||
@@ -1002,89 +1081,62 @@ igl::AABB<DerivedV,DIM>::intersect_ray(
|
||||
return left_ret || right_ret;
|
||||
}
|
||||
|
||||
// This is a bullshit template because AABB annoyingly needs templates for bad
|
||||
// combinations of 3D V with DIM=2 AABB
|
||||
//
|
||||
// _Define_ as a no-op rather than monkeying around with the proper code above
|
||||
//
|
||||
// Meanwhile, GCC seems to have a bug. Let's see if GCC likes using explicit
|
||||
// namespace block instead. https://stackoverflow.com/a/25594681/148668
|
||||
namespace igl
|
||||
{
|
||||
template<> template<> IGL_INLINE float AABB<Eigen::Matrix<float, -1, 3, 1, -1, 3>, 2>::squared_distance( Eigen::MatrixBase<Eigen::Matrix<float, -1, 3, 1, -1, 3> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 3, 1, -1, 3> > const&, Eigen::Matrix<float, 1, 2, 1, 1, 2> const&, int&, Eigen::PlainObjectBase<Eigen::Matrix<float, 1, 2, 1, 1, 2> >&) const { assert(false);return -1;};
|
||||
template<> template<> IGL_INLINE float igl::AABB<Eigen::Matrix<float, -1, 3, 1, -1, 3>, 2>::squared_distance( Eigen::MatrixBase<Eigen::Matrix<float, -1, 3, 1, -1, 3> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 3, 1, -1, 3> > const&, Eigen::Matrix<float, 1, 2, 1, 1, 2> const&, float, float, int&, Eigen::PlainObjectBase<Eigen::Matrix<float, 1, 2, 1, 1, 2> >&) const { assert(false);return -1;};
|
||||
template<> template<> IGL_INLINE void igl::AABB<Eigen::Matrix<float, -1, 3, 1, -1, 3>, 2>::init (Eigen::MatrixBase<Eigen::Matrix<float, -1, 3, 1, -1, 3> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 3, 1, -1, 3> > const&) { assert(false);};
|
||||
template<> template<> IGL_INLINE double AABB<Eigen::Matrix<double, -1, 3, 1, -1, 3>, 2>::squared_distance( Eigen::MatrixBase<Eigen::Matrix<double, -1, 3, 1, -1, 3> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 3, 1, -1, 3> > const&, Eigen::Matrix<double, 1, 2, 1, 1, 2> const&, int&, Eigen::PlainObjectBase<Eigen::Matrix<double, 1, 2, 1, 1, 2> >&) const { assert(false);return -1;};
|
||||
template<> template<> IGL_INLINE double igl::AABB<Eigen::Matrix<double, -1, 3, 1, -1, 3>, 2>::squared_distance( Eigen::MatrixBase<Eigen::Matrix<double, -1, 3, 1, -1, 3> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 3, 1, -1, 3> > const&, Eigen::Matrix<double, 1, 2, 1, 1, 2> const&, double, double, int&, Eigen::PlainObjectBase<Eigen::Matrix<double, 1, 2, 1, 1, 2> >&) const { assert(false);return -1;};
|
||||
template<> template<> IGL_INLINE void igl::AABB<Eigen::Matrix<double, -1, 3, 1, -1, 3>, 2>::init (Eigen::MatrixBase<Eigen::Matrix<double, -1, 3, 1, -1, 3> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 3, 1, -1, 3> > const&) { assert(false);};
|
||||
template<> template<> IGL_INLINE void igl::AABB<Eigen::Matrix<float, -1, 3, 0, -1, 3>, 2>::init(Eigen::MatrixBase<Eigen::Matrix<float, -1, 3, 0, -1, 3> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> > const&) {assert(false);};
|
||||
template<> template<> IGL_INLINE float igl::AABB<Eigen::Matrix<float, -1, 3, 0, -1, 3>, 2>::squared_distance(Eigen::MatrixBase<Eigen::Matrix<float, -1, 3, 0, -1, 3> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> > const&, Eigen::Matrix<float, 1, 2, 1, 1, 2> const&, float, float, int&, Eigen::PlainObjectBase<Eigen::Matrix<float, 1, 2, 1, 1, 2> >&) const { assert(false);return -1;};
|
||||
}
|
||||
|
||||
|
||||
#ifdef IGL_STATIC_LIBRARY
|
||||
// Explicit template instantiation
|
||||
// generated by autoexplicit.sh
|
||||
template double igl::AABB<Eigen::Matrix<double, -1, 3, 1, -1, 3>, 3>::squared_distance<Eigen::Matrix<int, -1, 3, 1, -1, 3> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, 3, 1, -1, 3> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 3, 1, -1, 3> > const&, Eigen::Matrix<double, 1, 3, 1, 1, 3> const&, double, double, int&, Eigen::PlainObjectBase<Eigen::Matrix<double, 1, 3, 1, 1, 3> >&) const;
|
||||
template double igl::AABB<Eigen::Matrix<double, -1, 3, 0, -1, 3>, 3>::squared_distance<Eigen::Matrix<int, -1, 3, 0, -1, 3> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> > const&, Eigen::Matrix<double, 1, 3, 1, 1, 3> const&, double, double, int&, Eigen::PlainObjectBase<Eigen::Matrix<double, 1, 3, 1, 1, 3> >&) const;
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, 3, 1, -1, 3>, 3>::init<Eigen::Matrix<int, -1, 3, 1, -1, 3> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, 3, 1, -1, 3> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 3, 1, -1, 3> > const&);
|
||||
template double igl::AABB<Eigen::Matrix<double, -1, 2, 0, -1, 2>, 2>::squared_distance<Eigen::Matrix<int, -1, 2, 0, -1, 2> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, 2, 0, -1, 2> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 2, 0, -1, 2> > const&, Eigen::Matrix<double, 1, 2, 1, 1, 2> const&, double, double, int&, Eigen::PlainObjectBase<Eigen::Matrix<double, 1, 2, 1, 1, 2> >&) const;
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, 3, 0, -1, 3>, 3>::init<Eigen::Matrix<int, -1, 3, 0, -1, 3> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> > const&);
|
||||
// generated by autoexplicit.sh
|
||||
template float igl::AABB<Eigen::Matrix<float, -1, 3, 0, -1, 3>, 3>::squared_distance<Eigen::Matrix<int, -1, 3, 0, -1, 3> >(Eigen::MatrixBase<Eigen::Matrix<float, -1, 3, 0, -1, 3> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> > const&, Eigen::Matrix<float, 1, 3, 1, 1, 3> const&, float, float, int&, Eigen::PlainObjectBase<Eigen::Matrix<float, 1, 3, 1, 1, 3> >&) const;
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, 2, 0, -1, 2>, 2>::init<Eigen::Matrix<int, -1, 2, 0, -1, 2> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, 2, 0, -1, 2> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 2, 0, -1, 2> > const&);
|
||||
// generated by autoexplicit.sh
|
||||
template bool igl::AABB<Eigen::Matrix<float, -1, -1, 0, -1, -1>, 3>::intersect_ray<Eigen::Matrix<int, -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::Matrix<float, 1, 3, 1, 1, 3> const&, Eigen::Matrix<float, 1, 3, 1, 1, 3> const&, std::vector<igl::Hit, std::allocator<igl::Hit> >&) const;
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::AABB<Eigen::Matrix<float, -1, 3, 0, -1, 3>, 3>::init<Eigen::Matrix<int, -1, 3, 0, -1, 3> >(Eigen::MatrixBase<Eigen::Matrix<float, -1, 3, 0, -1, 3> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> > const&);
|
||||
template void igl::AABB<Eigen::Matrix<float, -1, -1, 0, -1, -1>, 3>::init<Eigen::Matrix<int, -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&);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 3>::serialize<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&, int) const;
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, 3, 1, -1, 3>, 3>::squared_distance<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, 3, 1, -1, 3>, Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, 3, 1, -1, 3> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, 3, 1, -1, 3> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, -1, 3, 1, -1, 3> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 1, -1, 3> >&) const;
|
||||
// generated by autoexplicit.sh
|
||||
template std::vector<int, std::allocator<int> > igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 3>::find<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, 1, -1, 1, 1, -1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, 1, -1, 1, 1, -1> > const&, bool) const;
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 2>::serialize<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&, int) const;
|
||||
// generated by autoexplicit.sh
|
||||
template std::vector<int, std::allocator<int> > igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 2>::find<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, 1, -1, 1, 1, -1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, 1, -1, 1, 1, -1> > const&, bool) const;
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 3>::init<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 2>::init<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int);
|
||||
// generated by autoexplicit.sh
|
||||
template float igl::AABB<Eigen::Matrix<float, -1, 3, 1, -1, 3>, 3>::squared_distance<Eigen::Matrix<int, -1, 3, 1, -1, 3> >(Eigen::MatrixBase<Eigen::Matrix<float, -1, 3, 1, -1, 3> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 3, 1, -1, 3> > const&, Eigen::Matrix<float, 1, 3, 1, 1, 3> const&, int&, Eigen::PlainObjectBase<Eigen::Matrix<float, 1, 3, 1, 1, 3> >&) const;
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 3>::squared_distance<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&) const;
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 3>::squared_distance<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::Matrix<long, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, 3, 0, -1, 3> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<long, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> >&) const;
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 3>::squared_distance<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&) const;
|
||||
// generated by autoexplicit.sh
|
||||
template double igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 3>::squared_distance<Eigen::Matrix<int, -1, -1, 0, -1, -1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::Matrix<double, 1, 3, 1, 1, 3> const&, int&, Eigen::PlainObjectBase<Eigen::Matrix<double, 1, 3, 1, 1, 3> >&) const;
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 2>::squared_distance<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&) const;
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 2>::squared_distance<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::Matrix<long, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, 3, 0, -1, 3> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<long, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> >&) const;
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 2>::squared_distance<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&) const;
|
||||
// generated by autoexplicit.sh
|
||||
template double igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 2>::squared_distance<Eigen::Matrix<int, -1, -1, 0, -1, -1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::Matrix<double, 1, 2, 1, 1, 2> const&, int&, Eigen::PlainObjectBase<Eigen::Matrix<double, 1, 2, 1, 1, 2> >&) const;
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::AABB<Eigen::Matrix<float, -1, 3, 1, -1, 3>, 3>::init<Eigen::Matrix<int, -1, 3, 1, -1, 3> >(Eigen::MatrixBase<Eigen::Matrix<float, -1, 3, 1, -1, 3> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 3, 1, -1, 3> > const&);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 3>::init<Eigen::Matrix<int, -1, -1, 0, -1, -1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&);
|
||||
// generated by autoexplicit.sh
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 2>::init<Eigen::Matrix<int, -1, -1, 0, -1, -1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&);
|
||||
template double igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 3>::squared_distance<Eigen::Matrix<int, -1, -1, 0, -1, -1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::Matrix<double, 1, 3, 1, 1, 3> const&, double, int&, Eigen::PlainObjectBase<Eigen::Matrix<double, 1, 3, 1, 1, 3> >&) const;
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, 3, 1, -1, 3>, 3>::init<Eigen::Matrix<int, -1, -1, 0, -1, -1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, 3, 1, -1, 3> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&);
|
||||
template bool igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 3>::intersect_ray<Eigen::Matrix<int, -1, -1, 0, -1, -1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::Matrix<double, 1, 3, 1, 1, 3> const&, Eigen::Matrix<double, 1, 3, 1, 1, 3> const&, igl::Hit&) const;
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 3>::squared_distance<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, 2, 3, 0, 2, 3>, Eigen::Matrix<double, 2, 1, 0, 2, 1>, Eigen::Matrix<int, 2, 1, 0, 2, 1>, Eigen::Matrix<double, 2, 3, 0, 2, 3> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, 2, 3, 0, 2, 3> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, 2, 1, 0, 2, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, 2, 1, 0, 2, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, 2, 3, 0, 2, 3> >&) const;
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 3>::squared_distance<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&) const;
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 2>::squared_distance<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&) const;
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 3>::squared_distance<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&) const;
|
||||
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 2>::init<Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&);
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 3>::init<Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&);
|
||||
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 2>::squared_distance<Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&) const;
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 3>::squared_distance<Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&) const;
|
||||
template double igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 2>::squared_distance<Eigen::Matrix<int, -1, -1, 0, -1, -1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::Matrix<double, 1, 2, 1, 1, 2> const&, int&, Eigen::PlainObjectBase<Eigen::Matrix<double, 1, 2, 1, 1, 2> >&) const;
|
||||
template double igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 3>::squared_distance<Eigen::Matrix<int, -1, -1, 0, -1, -1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::Matrix<double, 1, 3, 1, 1, 3> const&, double, int&, Eigen::PlainObjectBase<Eigen::Matrix<double, 1, 3, 1, 1, 3> >&) const;
|
||||
template double igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 3>::squared_distance<Eigen::Matrix<int, -1, -1, 0, -1, -1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::Matrix<double, 1, 3, 1, 1, 3> const&, int&, Eigen::PlainObjectBase<Eigen::Matrix<double, 1, 3, 1, 1, 3> >&) const;
|
||||
template double igl::AABB<Eigen::Matrix<double, -1, 3, 1, -1, 3>, 3>::squared_distance<Eigen::Matrix<int, -1, 3, 1, -1, 3> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, 3, 1, -1, 3> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 3, 1, -1, 3> > const&, Eigen::Matrix<double, 1, 3, 1, 1, 3> const&, double, double, int&, Eigen::PlainObjectBase<Eigen::Matrix<double, 1, 3, 1, 1, 3> >&) const;
|
||||
template float igl::AABB<Eigen::Matrix<float, -1, 3, 0, -1, 3>, 3>::squared_distance<Eigen::Matrix<int, -1, 3, 0, -1, 3> >(Eigen::MatrixBase<Eigen::Matrix<float, -1, 3, 0, -1, 3> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> > const&, Eigen::Matrix<float, 1, 3, 1, 1, 3> const&, float, float, int&, Eigen::PlainObjectBase<Eigen::Matrix<float, 1, 3, 1, 1, 3> >&) const;
|
||||
template float igl::AABB<Eigen::Matrix<float, -1, 3, 1, -1, 3>, 3>::squared_distance<Eigen::Matrix<int, -1, 3, 1, -1, 3> >(Eigen::MatrixBase<Eigen::Matrix<float, -1, 3, 1, -1, 3> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 3, 1, -1, 3> > const&, Eigen::Matrix<float, 1, 3, 1, 1, 3> const&, int&, Eigen::PlainObjectBase<Eigen::Matrix<float, 1, 3, 1, 1, 3> >&) const;
|
||||
template std::vector<int, std::allocator<int> > igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 2>::find<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, 1, -1, 1, 1, -1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, 1, -1, 1, 1, -1> > const&, bool) const;
|
||||
template std::vector<int, std::allocator<int> > igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 3>::find<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Block<Eigen::Matrix<double, -1, -1, 0, -1, -1> const, 1, -1, false> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Block<Eigen::Matrix<double, -1, -1, 0, -1, -1> const, 1, -1, false> > const&, bool) const;
|
||||
template std::vector<int, std::allocator<int> > igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 3>::find<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, 1, -1, 1, 1, -1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, 1, -1, 1, 1, -1> > const&, bool) const;
|
||||
template std::vector<int> igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 2>::find<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, 1, 2, 1, 1, 2>>(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1>> const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1>> const&, Eigen::MatrixBase<Eigen::Matrix<double, 1, 2, 1, 1, 2>> const&, bool) const;
|
||||
template std::vector<int> igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 3>::find<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, 1, 3, 1, 1, 3>>(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1>> const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1>> const&, Eigen::MatrixBase<Eigen::Matrix<double, 1, 3, 1, 1, 3>> const&, bool) const;
|
||||
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 2>::init<Eigen::Matrix<int, -1, -1, 0, -1, -1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&);
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 2>::init<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int);
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 2>::init<Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&);
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 2>::serialize<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&, int) const;
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 2>::squared_distance<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&) const;
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 2>::squared_distance<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&) const;
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 2>::squared_distance<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&) const;
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 2>::squared_distance<Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&) const;
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 3>::init<Eigen::Matrix<int, -1, -1, 0, -1, -1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&);
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 3>::init<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, int);
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 3>::init<Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&);
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 3>::serialize<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&, int) const;
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 3>::squared_distance<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&) const;
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 3>::squared_distance<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&) const;
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 3>::squared_distance<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&) const;
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 3>::squared_distance<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&) const;
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 3>::squared_distance<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::Matrix<long, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, 3, 0, -1, 3> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<long, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> >&) const;
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 3>::squared_distance<Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, 2, 3, 0, 2, 3>, Eigen::Matrix<double, 2, 1, 0, 2, 1>, Eigen::Matrix<int, 2, 1, 0, 2, 1>, Eigen::Matrix<double, 2, 3, 0, 2, 3> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, 2, 3, 0, 2, 3> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, 2, 1, 0, 2, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, 2, 1, 0, 2, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, 2, 3, 0, 2, 3> >&) const;
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 3>::squared_distance<Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&) const;
|
||||
template void igl::AABB<Eigen::Matrix<double, -1, 3, 1, -1, 3>, 3>::init<Eigen::Matrix<int, -1, 3, 1, -1, 3> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, 3, 1, -1, 3> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 3, 1, -1, 3> > const&);
|
||||
template void igl::AABB<Eigen::Matrix<float, -1, 3, 0, -1, 3>, 3>::init<Eigen::Matrix<int, -1, 3, 0, -1, 3> >(Eigen::MatrixBase<Eigen::Matrix<float, -1, 3, 0, -1, 3> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> > const&);
|
||||
template void igl::AABB<Eigen::Matrix<float, -1, 3, 1, -1, 3>, 3>::init<Eigen::Matrix<int, -1, 3, 1, -1, 3> >(Eigen::MatrixBase<Eigen::Matrix<float, -1, 3, 1, -1, 3> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 3, 1, -1, 3> > const&);
|
||||
template double igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 3>::squared_distance<Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, Eigen::Matrix<double, 1, 3, 1, 1, 3> const&, int&, Eigen::PlainObjectBase<Eigen::Matrix<double, 1, 3, 1, 1, 3> >&) const;
|
||||
template double igl::AABB<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 2>::squared_distance<Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::MatrixBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::MatrixBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> > const&, Eigen::Matrix<double, 1, 2, 1, 1, 2> const&, int&, Eigen::PlainObjectBase<Eigen::Matrix<double, 1, 2, 1, 1, 2> >&) const;
|
||||
#ifdef WIN32
|
||||
template void igl::AABB<class Eigen::Matrix<double,-1,-1,0,-1,-1>,2>::squared_distance<class Eigen::Matrix<int,-1,-1,0,-1,-1>,class Eigen::Matrix<double,-1,-1,0,-1,-1>,class Eigen::Matrix<double,-1,1,0,-1,1>,class Eigen::Matrix<__int64,-1,1,0,-1,1>,class Eigen::Matrix<double,-1,3,0,-1,3> >(class Eigen::MatrixBase<class Eigen::Matrix<double,-1,-1,0,-1,-1> > const &,class Eigen::MatrixBase<class Eigen::Matrix<int,-1,-1,0,-1,-1> > const &,class Eigen::MatrixBase<class Eigen::Matrix<double,-1,-1,0,-1,-1> > const &,class Eigen::PlainObjectBase<class Eigen::Matrix<double,-1,1,0,-1,1> > &,class Eigen::PlainObjectBase<class Eigen::Matrix<__int64,-1,1,0,-1,1> > &,class Eigen::PlainObjectBase<class Eigen::Matrix<double,-1,3,0,-1,3> > &)const;
|
||||
template void igl::AABB<class Eigen::Matrix<double,-1,-1,0,-1,-1>,3>::squared_distance<class Eigen::Matrix<int,-1,-1,0,-1,-1>,class Eigen::Matrix<double,-1,-1,0,-1,-1>,class Eigen::Matrix<double,-1,1,0,-1,1>,class Eigen::Matrix<__int64,-1,1,0,-1,1>,class Eigen::Matrix<double,-1,3,0,-1,3> >(class Eigen::MatrixBase<class Eigen::Matrix<double,-1,-1,0,-1,-1> > const &,class Eigen::MatrixBase<class Eigen::Matrix<int,-1,-1,0,-1,-1> > const &,class Eigen::MatrixBase<class Eigen::Matrix<double,-1,-1,0,-1,-1> > const &,class Eigen::PlainObjectBase<class Eigen::Matrix<double,-1,1,0,-1,1> > &,class Eigen::PlainObjectBase<class Eigen::Matrix<__int64,-1,1,0,-1,1> > &,class Eigen::PlainObjectBase<class Eigen::Matrix<double,-1,3,0,-1,3> > &)const;
|
||||
#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