Skip to content

Commit 3948f11

Browse files
committed
Add patch for geogram FreeBSD building
Based on patches from https://cgit.freebsd.org/ports/tree/math/geogram Needs testing. OpenBSD (and possibly other BSDs) will probably need their own set of patches along these lines.
1 parent 306f402 commit 3948f11

File tree

2 files changed

+299
-0
lines changed

2 files changed

+299
-0
lines changed

geogram/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ if (ENABLE_GEOGRAM)
1616
BUILD_ALWAYS ${EXT_BUILD_ALWAYS} ${LOG_OPTS}
1717
PATCH_COMMAND ${PATCH_EXECUTABLE};-E;-p1;${PATCH_OPTIONS};-i;${CMAKE_CURRENT_SOURCE_DIR}/geogram_cmake.patch
1818
COMMAND ${PATCH_EXECUTABLE};-E;-p1;${PATCH_OPTIONS};-i;${CMAKE_CURRENT_SOURCE_DIR}/geogram_win32.patch
19+
COMMAND ${PATCH_EXECUTABLE};-E;-p1;${PATCH_OPTIONS};-i;${CMAKE_CURRENT_SOURCE_DIR}/geogram_freebsd.patch
1920
CMAKE_ARGS
2021
${BUILD_TYPE_SPECIFIER}
2122
-DBIN_DIR=${BIN_DIR}

geogram/geogram_freebsd.patch

+298
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,298 @@
1+
diff -Naur GEOGRAM_BLD/cmake/platforms/FreeBSD/config.cmake GEOGRAM_BLD_bsd/cmake/platforms/FreeBSD/config.cmake
2+
--- GEOGRAM_BLD/cmake/platforms/FreeBSD/config.cmake 1969-12-31 19:00:00.000000000 -0500
3+
+++ GEOGRAM_BLD_bsd/cmake/platforms/FreeBSD/config.cmake 2025-01-10 12:46:26.972144880 -0500
4+
@@ -0,0 +1,5 @@
5+
+set(VORPALINE_ARCH_64 true)
6+
+include(${GEOGRAM_SOURCE_DIR}/cmake/platforms/FreeBSD-clang.cmake)
7+
+#add_flags(CMAKE_CXX_FLAGS -m64)
8+
+#add_flags(CMAKE_C_FLAGS -m64)
9+
+
10+
diff -Naur GEOGRAM_BLD/cmake/platforms/FreeBSD/setvars.sh GEOGRAM_BLD_bsd/cmake/platforms/FreeBSD/setvars.sh
11+
--- GEOGRAM_BLD/cmake/platforms/FreeBSD/setvars.sh 1969-12-31 19:00:00.000000000 -0500
12+
+++ GEOGRAM_BLD_bsd/cmake/platforms/FreeBSD/setvars.sh 2025-01-10 12:46:26.972144880 -0500
13+
@@ -0,0 +1,2 @@
14+
+#export CC=clang
15+
+#export CXX=clang++
16+
diff -Naur GEOGRAM_BLD/cmake/platforms/FreeBSD-clang.cmake GEOGRAM_BLD_bsd/cmake/platforms/FreeBSD-clang.cmake
17+
--- GEOGRAM_BLD/cmake/platforms/FreeBSD-clang.cmake 1969-12-31 19:00:00.000000000 -0500
18+
+++ GEOGRAM_BLD_bsd/cmake/platforms/FreeBSD-clang.cmake 2025-01-10 12:46:26.972144880 -0500
19+
@@ -0,0 +1,153 @@
20+
+###
21+
+### Adopted from cmake/platforms/Linux-clang.cmake
22+
+###
23+
+
24+
+#-------------------------------------------------------------------
25+
+# Flags common to all FreeBSD based platforms with Clang compiler
26+
+#-------------------------------------------------------------------
27+
+
28+
+include(${GEOGRAM_SOURCE_DIR}/cmake/platforms/FreeBSD.cmake)
29+
+
30+
+# Warning flags
31+
+set(NORMAL_WARNINGS -Wall -Wextra)
32+
+
33+
+set(FULL_WARNINGS
34+
+ -Weverything
35+
+ -Wno-padded # Disable generating a message each time padding is used
36+
+ -Wno-float-equal # Sometimes we compare floats (against 0.0 or 1.0 mainly)
37+
+ -Wno-global-constructors
38+
+ -Wno-exit-time-destructors
39+
+ -Wno-old-style-cast # Yes, old-style cast is sometime more legible...
40+
+ -Wno-format-nonliteral # Todo: use Laurent Alonso's trick
41+
+ -Wno-disabled-macro-expansion # Else it complains with stderr
42+
+)
43+
+
44+
+# Compile with full warnings by default
45+
+add_definitions(${FULL_WARNINGS})
46+
+
47+
+# Run the static analyzer
48+
+if(VORPALINE_WITH_CLANGSA)
49+
+ add_definitions(--analyze)
50+
+endif()
51+
+
52+
+# I do not know where this -Wno-maybe-uninitialized comes from
53+
+# (but clang does not understand it), silence the warning for
54+
+# now...
55+
+add_flags(CMAKE_CXX_FLAGS -Wno-unknown-warning-option)
56+
+add_flags(CMAKE_C_FLAGS -Wno-unknown-warning-option)
57+
+
58+
+# Add static and dynamic bounds checks (optimization required)
59+
+#add_flags(CMAKE_CXX_FLAGS_RELEASE -D_FORTIFY_SOURCE=2)
60+
+#add_flags(CMAKE_C_FLAGS_RELEASE -D_FORTIFY_SOURCE=2)
61+
+
62+
+# Enable SSE3 instruction set
63+
+add_flags(CMAKE_CXX_FLAGS -msse3)
64+
+add_flags(CMAKE_C_FLAGS -msse3)
65+
+
66+
+# C++11 standard
67+
+add_flags(CMAKE_CXX_FLAGS -Qunused-arguments -std=c++11 -Wno-c++98-compat)
68+
+
69+
+# Enable glibc parallel mode
70+
+#add_flags(CMAKE_CXX_FLAGS -D_GLIBCXX_PARALLEL)
71+
+
72+
+
73+
+# Generate debug information even in release mode
74+
+#add_flags(CMAKE_CXX_FLAGS_RELEASE -g)
75+
+#add_flags(CMAKE_C_FLAGS_RELEASE -g)
76+
+
77+
+
78+
+# Additional debug flags
79+
+# deactivated for now: I added bound checking in VOR::vector<>.
80+
+#add_flags(CMAKE_CXX_FLAGS_DEBUG -D_GLIBCXX_DEBUG)
81+
+
82+
+
83+
+# Compile and link with OpenMP ** NOT YET SUPPORTED in clang 3 **
84+
+#add_flags(CMAKE_CXX_FLAGS -fopenmp)
85+
+#add_flags(CMAKE_C_FLAGS -fopenmp)
86+
+
87+
+
88+
+# Profiler compilation flags
89+
+if(VORPALINE_WITH_GPROF)
90+
+ message(FATAL_ERROR "Profiling is not (yet) available with clang")
91+
+ message(STATUS "Building for code profiling")
92+
+ #add_flags(CMAKE_CXX_FLAGS -pg -DPROFILER)
93+
+ #add_flags(CMAKE_C_FLAGS -pg -DPROFILER)
94+
+endif()
95+
+
96+
+
97+
+# Code coverage compilation flags
98+
+if(VORPALINE_WITH_GCOV)
99+
+ message(STATUS "Building for coverage analysis")
100+
+ add_flags(CMAKE_CXX_FLAGS --coverage)
101+
+ add_flags(CMAKE_C_FLAGS --coverage)
102+
+endif()
103+
+
104+
+
105+
+# Compilation flags for Google's AddressSanitizer
106+
+# These flags can only be specified for dynamic builds
107+
+if(VORPALINE_WITH_ASAN)
108+
+ if(VORPALINE_BUILD_DYNAMIC)
109+
+ message(STATUS "Building with AddressSanitizer (debug only)")
110+
+ add_flags(CMAKE_CXX_FLAGS_DEBUG -fsanitize=address -fno-omit-frame-pointer)
111+
+ add_flags(CMAKE_C_FLAGS_DEBUG -fsanitize=address -fno-omit-frame-pointer)
112+
+ else()
113+
+ message(WARNING "AddressSanitizer can be used with dynamic builds only")
114+
+ set(VORPALINE_WITH_ASAN false)
115+
+ endif()
116+
+endif()
117+
+if(NOT VORPALINE_WITH_ASAN)
118+
+ # Use native GCC stack smash Protection and buffer overflow detection (debug only)
119+
+ add_flags(CMAKE_CXX_FLAGS_DEBUG -fstack-protector-all)
120+
+ add_flags(CMAKE_C_FLAGS_DEBUG -fstack-protector-all)
121+
+endif()
122+
+
123+
+
124+
+# Compilation flags for Google's ThreadSanitizer
125+
+# Does not work for the moment: cannot figure out how to link with library libtsan
126+
+if(VORPALINE_WITH_TSAN)
127+
+ message(STATUS "Building with ThreadSanitizer (debug only)")
128+
+ message(FATAL_ERROR "ThreadSanitizer is not available: cannot figure out how to link with library libtsan")
129+
+ add_flags(CMAKE_CXX_FLAGS_DEBUG -fsanitize=thread)
130+
+ add_flags(CMAKE_C_FLAGS_DEBUG -fsanitize=thread)
131+
+ if(NOT VORPALINE_BUILD_DYNAMIC)
132+
+ add_flags(CMAKE_EXE_LINKER_FLAGS -static-libtsan)
133+
+ endif()
134+
+endif()
135+
+
136+
+
137+
+# Reset the warning level for third parties
138+
+function(vor_reset_warning_level)
139+
+ remove_definitions(${FULL_WARNINGS})
140+
+ add_definitions(${NORMAL_WARNINGS})
141+
+endfunction()
142+
+
143+
+macro(vor_add_executable)
144+
+ if(NOT VORPALINE_BUILD_DYNAMIC)
145+
+ # Create a statically linked executable
146+
+ # Link with static libraries
147+
+ add_flags(CMAKE_CXX_FLAGS -static)
148+
+ add_flags(CMAKE_C_FLAGS -static)
149+
+ endif()
150+
+
151+
+ add_executable(${ARGN})
152+
+
153+
+ if(NOT VORPALINE_BUILD_DYNAMIC AND DEFINED VORPALINE_WITH_DDT)
154+
+ # Static builds running with Allinea's DDT must be linked with a
155+
+ # special malloc library which replaces the malloc primitives of
156+
+ # the Glibc (We must allow multiple definitions)
157+
+ add_flags(CMAKE_EXE_LINKER_FLAGS -Wl,--allow-multiple-definition)
158+
+
159+
+ if(VORPALINE_ARCH_64)
160+
+ link_directories(${VORPALINE_WITH_DDT}/lib/64)
161+
+ else()
162+
+ link_directories(${VORPALINE_WITH_DDT}/lib/32)
163+
+ endif()
164+
+ target_link_libraries(${ARGV0} dmallocthcxx)
165+
+ endif()
166+
+
167+
+ if(UNIX)
168+
+ target_link_libraries(${ARGV0} m pthread)
169+
+ endif()
170+
+
171+
+endmacro()
172+
+
173+
diff -Naur GEOGRAM_BLD/cmake/platforms/FreeBSD.cmake GEOGRAM_BLD_bsd/cmake/platforms/FreeBSD.cmake
174+
--- GEOGRAM_BLD/cmake/platforms/FreeBSD.cmake 1969-12-31 19:00:00.000000000 -0500
175+
+++ GEOGRAM_BLD_bsd/cmake/platforms/FreeBSD.cmake 2025-01-10 12:46:26.972144880 -0500
176+
@@ -0,0 +1,23 @@
177+
+###
178+
+### Adopted from cmake/platforms/Linux.cmake
179+
+###
180+
+
181+
+#-------------------------------------------------------------------
182+
+# Flags common to all Linux based platforms
183+
+#-------------------------------------------------------------------
184+
+
185+
+# Shell script extension
186+
+set(SHELL_SUFFIX "sh")
187+
+
188+
+# This flag MUST be added to solve a bug related to shared lib dynamic loading
189+
+# (std::type_infos representing the same template type do not compare equal,
190+
+# introducing subtle bugs)
191+
+# IMPORTANT: DO NOT ADD THIS FLAG WITH STATIC LINKING
192+
+#add_flags(CMAKE_EXE_LINKER_FLAGS "-Wl,-E")
193+
+
194+
+# Forbid undefined symbols at link time (shared libraries and executables)
195+
+add_flags(CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-undefined")
196+
+add_flags(CMAKE_EXE_LINKER_FLAGS "-Wl,--no-undefined")
197+
+
198+
+# Link with the loader library
199+
+list(APPEND SYSLIBS ${CMAKE_DL_LIBS})
200+
diff -Naur GEOGRAM_BLD/CMakeLists.txt GEOGRAM_BLD_bsd/CMakeLists.txt
201+
--- GEOGRAM_BLD/CMakeLists.txt 2025-01-10 12:45:04.545610329 -0500
202+
+++ GEOGRAM_BLD_bsd/CMakeLists.txt 2025-01-10 12:46:50.785730894 -0500
203+
@@ -129,7 +129,7 @@
204+
add_subdirectory(tests)
205+
endif()
206+
207+
-add_subdirectory(doc)
208+
+#add_subdirectory(doc)
209+
210+
##############################################################################
211+
# Cleanup from previous builds
212+
diff -Naur GEOGRAM_BLD/src/lib/geogram/basic/algorithm.h GEOGRAM_BLD_bsd/src/lib/geogram/basic/algorithm.h
213+
--- GEOGRAM_BLD/src/lib/geogram/basic/algorithm.h 2025-01-10 12:45:04.472611652 -0500
214+
+++ GEOGRAM_BLD_bsd/src/lib/geogram/basic/algorithm.h 2025-01-10 12:46:26.972144880 -0500
215+
@@ -42,7 +42,7 @@
216+
217+
#include <geogram/basic/common.h>
218+
219+
-#if defined(GEO_OS_LINUX) && defined(GEO_OPENMP)
220+
+#if (defined(GEO_OS_LINUX) || defined(GEO_OS_FREEBSD)) && defined(GEO_OPENMP)
221+
#if (__GNUC__ >= 4) && (__GNUC_MINOR__ >= 4) && !defined(GEO_OS_ANDROID)
222+
#include <parallel/algorithm>
223+
#define GEO_USE_GCC_PARALLEL_STL
224+
diff -Naur GEOGRAM_BLD/src/lib/geogram/basic/command_line.cpp GEOGRAM_BLD_bsd/src/lib/geogram/basic/command_line.cpp
225+
--- GEOGRAM_BLD/src/lib/geogram/basic/command_line.cpp 2025-01-10 12:45:04.473611634 -0500
226+
+++ GEOGRAM_BLD_bsd/src/lib/geogram/basic/command_line.cpp 2025-01-10 12:46:26.973144862 -0500
227+
@@ -49,7 +49,7 @@
228+
#include <iostream>
229+
#include <iomanip>
230+
231+
-#if defined(GEO_OS_LINUX) || defined(GEO_OS_APPLE)
232+
+#if defined(GEO_OS_LINUX) || defined(GEO_OS_FREEBSD) || defined(GEO_OS_APPLE)
233+
#include <sys/ioctl.h>
234+
#include <stdio.h>
235+
#include <unistd.h>
236+
diff -Naur GEOGRAM_BLD/src/lib/geogram/basic/common.h GEOGRAM_BLD_bsd/src/lib/geogram/basic/common.h
237+
--- GEOGRAM_BLD/src/lib/geogram/basic/common.h 2025-01-10 12:45:04.473611634 -0500
238+
+++ GEOGRAM_BLD_bsd/src/lib/geogram/basic/common.h 2025-01-10 12:46:26.973144862 -0500
239+
@@ -216,6 +216,35 @@
240+
# define GEO_ARCH_32
241+
#endif
242+
243+
+// =============================== FreeBSD defines =========================
244+
+
245+
+#elif defined(__FreeBSD__)
246+
+
247+
+#define GEO_OS_FREEBSD
248+
+#define GEO_OS_UNIX
249+
+
250+
+#if defined(_OPENMP)
251+
+# define GEO_OPENMP
252+
+#endif
253+
+
254+
+#if defined(__INTEL_COMPILER)
255+
+# define GEO_COMPILER_INTEL
256+
+#elif defined(__clang__)
257+
+# define GEO_COMPILER_CLANG
258+
+#elif defined(__GNUC__)
259+
+# define GEO_COMPILER_GCC
260+
+#else
261+
+# error "Unsupported compiler"
262+
+#endif
263+
+
264+
+// The following works on GCC and ICC
265+
+#if defined(__x86_64)
266+
+# define GEO_ARCH_64
267+
+#else
268+
+# define GEO_ARCH_32
269+
+#endif
270+
+
271+
+
272+
// =============================== WINDOWS defines =========================
273+
274+
#elif defined(_WIN32) || defined(_WIN64)
275+
diff -Naur GEOGRAM_BLD/src/lib/geogram/lua/lua_io.cpp GEOGRAM_BLD_bsd/src/lib/geogram/lua/lua_io.cpp
276+
--- GEOGRAM_BLD/src/lib/geogram/lua/lua_io.cpp 2025-01-10 12:45:04.497611199 -0500
277+
+++ GEOGRAM_BLD_bsd/src/lib/geogram/lua/lua_io.cpp 2025-01-10 12:46:26.973144862 -0500
278+
@@ -237,6 +237,8 @@
279+
const char* result = "unknown";
280+
#if defined(GEO_OS_LINUX)
281+
result = "Linux";
282+
+#elif defined(GEO_OS_FREEBSD)
283+
+ result = "FreeBSD";
284+
#elif defined(GEO_OS_APPLE)
285+
result = "Apple";
286+
#elif defined(GEO_OS_WINDOWS)
287+
diff -Naur GEOGRAM_BLD/src/lib/geogram/NL/nl_private.h GEOGRAM_BLD_bsd/src/lib/geogram/NL/nl_private.h
288+
--- GEOGRAM_BLD/src/lib/geogram/NL/nl_private.h 2025-01-10 12:45:04.501611127 -0500
289+
+++ GEOGRAM_BLD_bsd/src/lib/geogram/NL/nl_private.h 2025-01-10 12:46:26.973144862 -0500
290+
@@ -62,7 +62,7 @@
291+
#define NL_OS_APPLE
292+
#endif
293+
294+
-#if defined(__linux__) || defined(__ANDROID__) || defined(NL_OS_APPLE)
295+
+#if defined(__linux__) || defined(__FreeBSD__) || defined(__ANDROID__) || defined(NL_OS_APPLE)
296+
/**
297+
* \brief Defined if compiled on a Unix-like platform.
298+
*/

0 commit comments

Comments
 (0)