Guest User

test-gmp-mac-cross-compilation repo-dump.md

a guest
Oct 30th, 2025
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.12 KB | None | 0 0
  1. # CMakeLists.txt
  2.  
  3. ```
  4. cmake_minimum_required(VERSION 3.10)
  5. project(TestGMPModule)
  6.  
  7. set(GMP_INCLUDE_DIR "$ENV{BUILD_ROOT}/deps/${CMAKE_OSX_ARCHITECTURES}/gmp-6.3.0/include")
  8. set(GMP_LIBRARY "$ENV{BUILD_ROOT}/deps/${CMAKE_OSX_ARCHITECTURES}/gmp-6.3.0/lib/libgmp.a")
  9. include_directories(${GMP_INCLUDE_DIR})
  10. add_library(hello MODULE hello_pure_gmp.cpp)
  11. target_link_libraries(hello ${GMP_LIBRARY})
  12. set_target_properties(hello PROPERTIES PREFIX "" SUFFIX ".so")
  13.  
  14. ```
  15.  
  16. # hello_pure_gmp.cpp
  17.  
  18. ```
  19. #include <stdio.h>
  20. #include <stdlib.h>
  21. #include <gmp.h>
  22.  
  23. // Adds two numbers represented as strings and returns a newly allocated string
  24. char* gmp_add(const char* a, const char* b) {
  25. mpz_t num1, num2, sum;
  26. mpz_init_set_str(num1, a, 10);
  27. mpz_init_set_str(num2, b, 10);
  28. mpz_init(sum);
  29.  
  30. mpz_add(sum, num1, num2);
  31.  
  32. // Convert result to string
  33. char* result_str = mpz_get_str(NULL, 10, sum);
  34.  
  35. // Clean up
  36. mpz_clear(num1);
  37. mpz_clear(num2);
  38. mpz_clear(sum);
  39.  
  40. return result_str; // caller must free() it
  41. }
  42.  
  43. ```
  44.  
  45. # .github\workflows\build.yml
  46.  
  47. ```
  48. name: Test GMP Cross Compilation
  49.  
  50. on:
  51. workflow_dispatch:
  52.  
  53. jobs:
  54. build:
  55. runs-on: macos-14
  56.  
  57. steps:
  58. - uses: actions/checkout@v3
  59.  
  60. - name: Setup build environment
  61. run: |
  62. export BUILD_ROOT=`pwd`
  63. echo "BUILD_ROOT=$BUILD_ROOT" >> $GITHUB_ENV
  64. mkdir -p deps/arm64 deps/x86_64
  65. export CFLAGS="-mmacosx-version-min=10.15"
  66. echo "CFLAGS=$CFLAGS" >> $GITHUB_ENV
  67.  
  68. - name: Extract GMP
  69. run: tar -xf gmp-6.3.0.tar.bz2
  70.  
  71. - name: Build GMP for arm64
  72. run: |
  73. cd gmp-6.3.0
  74. mkdir build && cd build
  75. ../configure --enable-static --disable-shared --with-pic --prefix="$BUILD_ROOT/deps/arm64/gmp-6.3.0"
  76. make -j10
  77. make install
  78.  
  79. - name: Build GMP for x86_64
  80. run: |
  81. cd gmp-6.3.0/build
  82. rm -rf ./*
  83. CC="clang -arch x86_64" ../configure --enable-static --disable-shared --with-pic --host=x86_64-apple-darwin --prefix="$BUILD_ROOT/deps/x86_64/gmp-6.3.0"
  84. make -j10
  85. make install
  86.  
  87. - name: Create build directory
  88. run: |
  89. mkdir -p build
  90.  
  91. - name: Build module for arm64 (without LDFLAGS)
  92. run: |
  93. # Works OK.
  94. cd build
  95. rm -rf ./*
  96. cmake .. -G Ninja -DCMAKE_OSX_ARCHITECTURES=arm64
  97. ninja -v
  98.  
  99. - name: Build module for arm64 (with LDFLAGS)
  100. run: |
  101. # Works OK.
  102. cd build
  103. export LDFLAGS="-Wl,-flat_namespace"
  104. rm -rf ./*
  105. cmake .. -G Ninja -DCMAKE_OSX_ARCHITECTURES=arm64
  106. ninja -v
  107.  
  108. - name: Build module for x86_64 (without LDFLAGS)
  109. run: |
  110. # Works OK.
  111. cd build
  112. unset LDFLAGS
  113. rm -rf ./*
  114. cmake .. -G Ninja -DCMAKE_OSX_ARCHITECTURES=x86_64
  115. ninja -v
  116.  
  117. - name: Build module for x86_64 (with LDFLAGS)
  118. run: |
  119. # BREAKS.
  120. cd build
  121. export LDFLAGS="-Wl,-flat_namespace"
  122. rm -rf ./*
  123. cmake .. -G Ninja -DCMAKE_OSX_ARCHITECTURES=x86_64
  124. ninja -v
  125.  
  126. ```
  127.  
  128.  
Advertisement
Add Comment
Please, Sign In to add comment