Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # CMakeLists.txt
- ```
- cmake_minimum_required(VERSION 3.10)
- project(TestGMPModule)
- set(GMP_INCLUDE_DIR "$ENV{BUILD_ROOT}/deps/${CMAKE_OSX_ARCHITECTURES}/gmp-6.3.0/include")
- set(GMP_LIBRARY "$ENV{BUILD_ROOT}/deps/${CMAKE_OSX_ARCHITECTURES}/gmp-6.3.0/lib/libgmp.a")
- include_directories(${GMP_INCLUDE_DIR})
- add_library(hello MODULE hello_pure_gmp.cpp)
- target_link_libraries(hello ${GMP_LIBRARY})
- set_target_properties(hello PROPERTIES PREFIX "" SUFFIX ".so")
- ```
- # hello_pure_gmp.cpp
- ```
- #include <stdio.h>
- #include <stdlib.h>
- #include <gmp.h>
- // Adds two numbers represented as strings and returns a newly allocated string
- char* gmp_add(const char* a, const char* b) {
- mpz_t num1, num2, sum;
- mpz_init_set_str(num1, a, 10);
- mpz_init_set_str(num2, b, 10);
- mpz_init(sum);
- mpz_add(sum, num1, num2);
- // Convert result to string
- char* result_str = mpz_get_str(NULL, 10, sum);
- // Clean up
- mpz_clear(num1);
- mpz_clear(num2);
- mpz_clear(sum);
- return result_str; // caller must free() it
- }
- ```
- # .github\workflows\build.yml
- ```
- name: Test GMP Cross Compilation
- on:
- workflow_dispatch:
- jobs:
- build:
- runs-on: macos-14
- steps:
- - uses: actions/checkout@v3
- - name: Setup build environment
- run: |
- export BUILD_ROOT=`pwd`
- echo "BUILD_ROOT=$BUILD_ROOT" >> $GITHUB_ENV
- mkdir -p deps/arm64 deps/x86_64
- export CFLAGS="-mmacosx-version-min=10.15"
- echo "CFLAGS=$CFLAGS" >> $GITHUB_ENV
- - name: Extract GMP
- run: tar -xf gmp-6.3.0.tar.bz2
- - name: Build GMP for arm64
- run: |
- cd gmp-6.3.0
- mkdir build && cd build
- ../configure --enable-static --disable-shared --with-pic --prefix="$BUILD_ROOT/deps/arm64/gmp-6.3.0"
- make -j10
- make install
- - name: Build GMP for x86_64
- run: |
- cd gmp-6.3.0/build
- rm -rf ./*
- 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"
- make -j10
- make install
- - name: Create build directory
- run: |
- mkdir -p build
- - name: Build module for arm64 (without LDFLAGS)
- run: |
- # Works OK.
- cd build
- rm -rf ./*
- cmake .. -G Ninja -DCMAKE_OSX_ARCHITECTURES=arm64
- ninja -v
- - name: Build module for arm64 (with LDFLAGS)
- run: |
- # Works OK.
- cd build
- export LDFLAGS="-Wl,-flat_namespace"
- rm -rf ./*
- cmake .. -G Ninja -DCMAKE_OSX_ARCHITECTURES=arm64
- ninja -v
- - name: Build module for x86_64 (without LDFLAGS)
- run: |
- # Works OK.
- cd build
- unset LDFLAGS
- rm -rf ./*
- cmake .. -G Ninja -DCMAKE_OSX_ARCHITECTURES=x86_64
- ninja -v
- - name: Build module for x86_64 (with LDFLAGS)
- run: |
- # BREAKS.
- cd build
- export LDFLAGS="-Wl,-flat_namespace"
- rm -rf ./*
- cmake .. -G Ninja -DCMAKE_OSX_ARCHITECTURES=x86_64
- ninja -v
- ```
Advertisement
Add Comment
Please, Sign In to add comment