aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAiden Woodruff <woodra@rpi.edu>2025-10-26 19:19:24 -0500
committerAiden Woodruff <woodra@rpi.edu>2025-10-26 19:19:24 -0500
commit31c19290ffb4e4af9a9bb20ac117b838409e3459 (patch)
tree108ff1ad03e93bd23b0a7169cd63bfebbefbd0e2
parentd609fedfed0d3f57c1e4ff5154860643f8f7afaf (diff)
downloadtipping-points-31c19290ffb4e4af9a9bb20ac117b838409e3459.tar.gz
tipping-points-31c19290ffb4e4af9a9bb20ac117b838409e3459.tar.bz2
tipping-points-31c19290ffb4e4af9a9bb20ac117b838409e3459.zip
add patch step for SNAP on musl
- cmake/GetSNAP.cmake: run patch or git apply to add fixes to glib-core when compiling with musl (i.e. POSIX). - check wordsize with `sizeof(void*)` (from cmake) and inject into SNAP with the patch step - add BUILD_BYPRODUCT so that ninja works. - add directories to ensure include/link commands don't error - cmake/snap-glib-base.patch: add fix for the word size. - add fix for how they do environ - fix single quotes in write function Signed-off-by: Aiden Woodruff <woodra@rpi.edu>
-rw-r--r--cmake/GetSNAP.cmake23
-rw-r--r--cmake/snap-glib-base.patch34
2 files changed, 56 insertions, 1 deletions
diff --git a/cmake/GetSNAP.cmake b/cmake/GetSNAP.cmake
index 52c7b2d..ff0c968 100644
--- a/cmake/GetSNAP.cmake
+++ b/cmake/GetSNAP.cmake
@@ -1,5 +1,19 @@
1find_package(OpenMP REQUIRED) 1find_package(OpenMP REQUIRED)
2 2
3find_program(PATCH patch)
4if(PATCH)
5 set(SNAP_PATCHCMD ${PATCH} -p1 < "${CMAKE_SOURCE_DIR}/cmake/snap-glib-base.patch")
6else()
7 find_program(GIT git REQUIRED)
8 set(SNAP_PATCHCMD ${GIT} patch apply < "${CMAKE_SOURCE_DIR}/cmake/snap-glib-base.patch")
9endif()
10
11if(CMAKE_SIZEOF_VOID_P EQUAL 4)
12 set(SNAP_ARCH_FLAG -DGLib_32Bit)
13elseif(CMAKE_SIZEOF_VOID_P EQUAL 8)
14 set(SNAP_ARCH_FLAG -DGLib_64Bit)
15endif()
16
3include(ExternalProject) 17include(ExternalProject)
4ExternalProject_Add( 18ExternalProject_Add(
5 SNAP 19 SNAP
@@ -7,16 +21,23 @@ ExternalProject_Add(
7 DOWNLOAD_NO_PROGRESS TRUE 21 DOWNLOAD_NO_PROGRESS TRUE
8 URL https://snap.stanford.edu/releases/Snap-6.0.zip 22 URL https://snap.stanford.edu/releases/Snap-6.0.zip
9 URL_MD5 e32a1dbea584ba4f287c616627a71ac5 23 URL_MD5 e32a1dbea584ba4f287c616627a71ac5
24 PATCH_COMMAND ${SNAP_PATCHCMD}
10 CONFIGURE_COMMAND "" 25 CONFIGURE_COMMAND ""
11 BUILD_IN_SOURCE TRUE 26 BUILD_IN_SOURCE TRUE
12 BUILD_COMMAND make 27 BUILD_COMMAND make CXXFLAGS=${SNAP_ARCH_FLAG}
13 COMMAND make -C snap-core lib 28 COMMAND make -C snap-core lib
29 BUILD_BYPRODUCTS snap-core/libsnap.a
14 INSTALL_COMMAND "" 30 INSTALL_COMMAND ""
15 LOG_BUILD TRUE 31 LOG_BUILD TRUE
16) 32)
17ExternalProject_Get_Property(SNAP SOURCE_DIR) 33ExternalProject_Get_Property(SNAP SOURCE_DIR)
18set(SNAP_SOURCE_DIR "${SOURCE_DIR}") 34set(SNAP_SOURCE_DIR "${SOURCE_DIR}")
19add_library(SNAP::SNAP STATIC IMPORTED) 35add_library(SNAP::SNAP STATIC IMPORTED)
36# Hacky solution to ensure IMPORTED_LOCATION does not error
37file(MAKE_DIRECTORY
38 "${SNAP_SOURCE_DIR}/snap-core"
39 "${SNAP_SOURCE_DIR}/glib-core"
40)
20set_property(TARGET SNAP::SNAP 41set_property(TARGET SNAP::SNAP
21 PROPERTY IMPORTED_LOCATION 42 PROPERTY IMPORTED_LOCATION
22 "${SNAP_SOURCE_DIR}/snap-core/libsnap.a" 43 "${SNAP_SOURCE_DIR}/snap-core/libsnap.a"
diff --git a/cmake/snap-glib-base.patch b/cmake/snap-glib-base.patch
new file mode 100644
index 0000000..42fcb41
--- /dev/null
+++ b/cmake/snap-glib-base.patch
@@ -0,0 +1,34 @@
1--- a/glib-core/base.h
2+++ b/glib-core/base.h
3@@ -89,7 +89,7 @@
4 #define GLib_32Bit
5 #elif __WORDSIZE == 64 || defined(GLib_WIN64) || defined(__CYGWIN64__)
6 #define GLib_64Bit
7-#else
8+#elif !defined(GLib_32Bit) && !defined(GLib_64Bit)
9 #error "Undefined word size"
10 #endif
11
12@@ -98,10 +98,8 @@
13 #if defined(GLib_MACOSX)
14 #include <crt_externs.h>
15 #define _environ (*_NSGetEnviron())
16- #elif !defined(GLib_CYGWIN)
17- #define _environ __environ
18- extern int _daylight;
19 #else
20+ extern char **environ;
21 #define _environ environ
22 #endif
23 #endif
24--- a/glib-core/fl.cpp
25+++ a/glib-core/fl.cpp
26@@ -1210,7 +1210,7 @@
27
28 filesize = lseek(input, 0, SEEK_END);
29 lseek(output, filesize - 1, SEEK_SET);
30- write(output, '\0', 1);
31+ write(output, "\0", 1);
32
33 if((source = mmap(0, filesize, PROT_READ, MAP_SHARED, input, 0)) == (void *) -1) {
34 close(input);