diff options
| author | Aiden Woodruff <woodra@rpi.edu> | 2025-10-26 19:19:24 -0500 |
|---|---|---|
| committer | Aiden Woodruff <woodra@rpi.edu> | 2025-10-26 19:19:24 -0500 |
| commit | 31c19290ffb4e4af9a9bb20ac117b838409e3459 (patch) | |
| tree | 108ff1ad03e93bd23b0a7169cd63bfebbefbd0e2 | |
| parent | d609fedfed0d3f57c1e4ff5154860643f8f7afaf (diff) | |
| download | tipping-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.cmake | 23 | ||||
| -rw-r--r-- | cmake/snap-glib-base.patch | 34 |
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 @@ | |||
| 1 | find_package(OpenMP REQUIRED) | 1 | find_package(OpenMP REQUIRED) |
| 2 | 2 | ||
| 3 | find_program(PATCH patch) | ||
| 4 | if(PATCH) | ||
| 5 | set(SNAP_PATCHCMD ${PATCH} -p1 < "${CMAKE_SOURCE_DIR}/cmake/snap-glib-base.patch") | ||
| 6 | else() | ||
| 7 | find_program(GIT git REQUIRED) | ||
| 8 | set(SNAP_PATCHCMD ${GIT} patch apply < "${CMAKE_SOURCE_DIR}/cmake/snap-glib-base.patch") | ||
| 9 | endif() | ||
| 10 | |||
| 11 | if(CMAKE_SIZEOF_VOID_P EQUAL 4) | ||
| 12 | set(SNAP_ARCH_FLAG -DGLib_32Bit) | ||
| 13 | elseif(CMAKE_SIZEOF_VOID_P EQUAL 8) | ||
| 14 | set(SNAP_ARCH_FLAG -DGLib_64Bit) | ||
| 15 | endif() | ||
| 16 | |||
| 3 | include(ExternalProject) | 17 | include(ExternalProject) |
| 4 | ExternalProject_Add( | 18 | ExternalProject_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 | ) |
| 17 | ExternalProject_Get_Property(SNAP SOURCE_DIR) | 33 | ExternalProject_Get_Property(SNAP SOURCE_DIR) |
| 18 | set(SNAP_SOURCE_DIR "${SOURCE_DIR}") | 34 | set(SNAP_SOURCE_DIR "${SOURCE_DIR}") |
| 19 | add_library(SNAP::SNAP STATIC IMPORTED) | 35 | add_library(SNAP::SNAP STATIC IMPORTED) |
| 36 | # Hacky solution to ensure IMPORTED_LOCATION does not error | ||
| 37 | file(MAKE_DIRECTORY | ||
| 38 | "${SNAP_SOURCE_DIR}/snap-core" | ||
| 39 | "${SNAP_SOURCE_DIR}/glib-core" | ||
| 40 | ) | ||
| 20 | set_property(TARGET SNAP::SNAP | 41 | set_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); | ||
