Skip to content

Commit

Permalink
Actually use MinGW on CI
Browse files Browse the repository at this point in the history
The MinGW job was also using MSVC compiler by mistake
  • Loading branch information
Luthaf committed Jul 3, 2024
1 parent ef1383c commit 73a9bc8
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 3 deletions.
40 changes: 38 additions & 2 deletions .github/workflows/rust-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,16 @@ concurrency:

jobs:
rust-tests:
runs-on: ${{ matrix.os }}
name: ${{ matrix.os }} / Rust ${{ matrix.rust-version }}${{ matrix.extra-name }}
runs-on: ${{ matrix.os }}
container: ${{ matrix.container }}
defaults:
run:
shell: "bash"
env:
CMAKE_CXX_COMPILER: ${{ matrix.cxx }}
CMAKE_C_COMPILER: ${{ matrix.cc }}
CMAKE_GENERATOR: ${{ matrix.cmake_generator }}
strategy:
matrix:
include:
Expand All @@ -23,6 +30,9 @@ jobs:
rust-version: stable
rust-target: x86_64-unknown-linux-gnu
extra-name: ", no features"
cxx: g++
cc: gcc
cmake_generator: Unix Makefiles

# test with all features (i.e static build + ndarray)
- os: ubuntu-20.04
Expand All @@ -31,6 +41,9 @@ jobs:
cargo-test-flags: --release --all-features
do-valgrind: true
extra-name: ", all features, release"
cxx: g++
cc: gcc
cmake_generator: Unix Makefiles

# check the build on a stock Ubuntu 20.04, which uses cmake 3.16, and
# with our minimal supported rust version
Expand All @@ -40,24 +53,36 @@ jobs:
rust-target: x86_64-unknown-linux-gnu
cargo-build-flags: --features=rayon
extra-name: ", cmake 3.16"
cxx: g++
cc: gcc
cmake_generator: Unix Makefiles

- os: macos-14
rust-version: stable
rust-target: aarch64-apple-darwin
cargo-test-flags: --features=rayon
extra-name: ""
cxx: clang++
cc: clang
cmake_generator: Unix Makefiles

- os: windows-2019
rust-version: stable
rust-target: x86_64-pc-windows-msvc
cargo-build-flags: --features=rayon
extra-name: " / MSVC"
cxx: cl.exe
cc: cl.exe
cmake_generator: Visual Studio 16 2019

- os: windows-2019
rust-version: stable
rust-target: x86_64-pc-windows-gnu
cargo-build-flags: --features=rayon
extra-name: " / MinGW"
cxx: g++.exe
cc: gcc.exe
cmake_generator: MinGW Makefiles
steps:
- name: install dependencies in container
if: matrix.container == 'ubuntu:20.04'
Expand Down Expand Up @@ -99,7 +124,18 @@ jobs:
echo "CMAKE_CXX_COMPILER_LAUNCHER=sccache" >> $GITHUB_ENV
- name: run tests
run: cargo test --package metatensor --package metatensor-core --target ${{ matrix.rust-target }} ${{ matrix.cargo-build-flags }}
run: |
echo $CMAKE_CXX_COMPILER
echo $CMAKE_C_COMPILER
echo $CMAKE_GENERATOR
cargo test --package metatensor --package metatensor-core --target ${{ matrix.rust-target }} ${{ matrix.cargo-build-flags }}
- name: debug
if: always()
run: |
ls target/*/tmp/cxx-install/cmake-subdirectory/metatensor/metatensor-core/
ls target/*/tmp/cxx-install/cmake-subdirectory/metatensor/metatensor-core/target
ls target/*/tmp/cxx-install/cmake-subdirectory/metatensor/metatensor-core/target/debug/
- name: check the code can be compiled as a standalone crate
if: matrix.os != 'windows-2019'
Expand Down
27 changes: 27 additions & 0 deletions metatensor-core/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,33 @@ else()
set(CARGO_OUTPUT_DIR "${CARGO_TARGET_DIR}/${RUST_BUILD_TARGET}/${CARGO_BUILD_TYPE}")
endif()

if (WIN32)
# on Windows, we need to use the same ABI in both CMake and cargo
if ("${RUST_BUILD_TARGET}" MATCHES "-pc-windows-msvc")
set(RUST_BUILD_TARGET_IS_MSVC ON)
else()
set(RUST_BUILD_TARGET_IS_MSVC OFF)
endif()

if ("${RUST_BUILD_TARGET}" MATCHES "-pc-windows-gnu")
set(RUST_BUILD_TARGET_IS_MINGW ON)
else()
set(RUST_BUILD_TARGET_IS_MINGW OFF)
endif()

if (MSVC)
if (NOT RUST_BUILD_TARGET_IS_MSVC)
message(FATAL_ERROR "CMake is building with MSVC but the Rust target is ${RUST_BUILD_TARGET}")
endif()
endif()

if (MINGW)
if (NOT RUST_BUILD_TARGET_IS_MINGW)
message(FATAL_ERROR "CMake is building with MinGW but the Rust target is ${RUST_BUILD_TARGET}")
endif()
endif()
endif()


# Get the list of libraries linked by default by cargo/rustc to add when linking
# to metatensor::static
Expand Down
1 change: 0 additions & 1 deletion metatensor-core/tests/check-cxx-install.rs
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,6 @@ fn check_cxx_install() {
fn check_cmake_subdirectory() {
let _guard = LOCK.lock().expect("mutex was poisoned");


// Same test as above, but building metatensor in the same CMake project as
// the test executable
const CARGO_TARGET_TMPDIR: &str = env!("CARGO_TARGET_TMPDIR");
Expand Down

0 comments on commit 73a9bc8

Please sign in to comment.