From 3d87d86c2825437780167ae6ff8f5b203f15ee7f Mon Sep 17 00:00:00 2001 From: Han Gao Date: Wed, 16 Mar 2022 22:30:20 +0800 Subject: [PATCH] github action: add riscv64/aarch64/powerpc64 cross compile (#5897) * github action: add riscv64/aarch64/powerpc64 cross compile Signed-off-by: Han Gao * fix: build on non-x86 platform Signed-off-by: Revy --- .github/workflows/cross-build.yml | 30 ++++++++++++++++++++++++++++++ CMakeLists.txt | 5 +++++ cmake/check_link_atomic.cmake | 23 +++++++++++++++++++++++ 3 files changed, 58 insertions(+) create mode 100644 .github/workflows/cross-build.yml create mode 100644 cmake/check_link_atomic.cmake diff --git a/.github/workflows/cross-build.yml b/.github/workflows/cross-build.yml new file mode 100644 index 000000000..40932aac2 --- /dev/null +++ b/.github/workflows/cross-build.yml @@ -0,0 +1,30 @@ +name: build + +on: + push: + pull_request: + +jobs: + build: + runs-on: ubuntu-latest + container: ubuntu:jammy + + strategy: + fail-fast: false + matrix: + arch: [ aarch64, riscv64, powerpc64 ] + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Install cross build tools + run: apt update && apt install -y ninja-build cmake python3 g++-11-${{ matrix.arch }}-linux-gnu + env: + DEBIAN_FRONTEND: noninteractive + + - name: Configure CMake and build + run: | + mkdir build && cd build + cmake -DCMAKE_CXX_COMPILER=${{ matrix.arch }}-linux-gnu-g++-11 ../ + make -j$(nproc) diff --git a/CMakeLists.txt b/CMakeLists.txt index be300607d..477410ba8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -431,6 +431,11 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") string(APPEND CMAKE_SHARED_LINKER_FLAGS " /RELEASE") endif() +################################################################################ +# Check atomic linking as needed +################################################################################ +include(${PROJECT_SOURCE_DIR}/cmake/check_link_atomic.cmake) + ################################################################################ # Report default CMake flags ################################################################################ diff --git a/cmake/check_link_atomic.cmake b/cmake/check_link_atomic.cmake new file mode 100644 index 000000000..d462191a0 --- /dev/null +++ b/cmake/check_link_atomic.cmake @@ -0,0 +1,23 @@ +set(ATOMIC_TEST_SOURCE " +#include +std::atomic x; +std::atomic y; +std::atomic z; +std::atomic w; +int main() { + ++z; + ++y; + ++w; + return ++x; +}") +CHECK_CXX_SOURCE_COMPILES("${ATOMIC_TEST_SOURCE}" BUILTIN_ATOMIC) +if (NOT BUILTIN_ATOMIC) + set(CMAKE_REQUIRED_LIBRARIES atomic) + CHECK_CXX_SOURCE_COMPILES("${ATOMIC_TEST_SOURCE}" ATOMICS_REQUIRE_LIBATOMIC) + unset(CMAKE_REQUIRED_LIBRARIES) + if (ATOMICS_REQUIRE_LIBATOMIC) + list(APPEND Z3_DEPENDENT_LIBS atomic) + else() + message(FATAL_ERROR "Host compiler must support std::atomic!") + endif() +endif()