From 6bce2c58bfd77846b8fb9b415cba849b88a82081 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20P=C3=A9ron?= Date: Sun, 30 Jun 2024 18:24:22 +0200 Subject: [PATCH 1/2] Add a simple Github CI --- .github/workflows/ci.yml | 81 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..9c85137 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,81 @@ +name: CI Build and Test + +on: + push: + branches: [master] + pull_request: + branches: [master] + +env: + BUILD_DIR: obj + +jobs: + native: + runs-on: ${{ matrix.os }} + name: "Native build and test on ${{ matrix.os }}" + strategy: + matrix: + # MacOS-13 is x86_64, MacOS-14 is ARM64 + os: [ubuntu-20.04, ubuntu-22.04, windows-latest, macos-13, macos-14] + fail-fast: false + + steps: + - name: Checkout code + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + + - name: Build + run: | + cmake -S . -B "${{ env.BUILD_DIR }}" + cmake --build "${{ env.BUILD_DIR }}" + + - name: Run Native Test + run: | + ctest --test-dir "${{ env.BUILD_DIR }}" --output-on-failure -C "Debug" + + cross: + runs-on: ubuntu-22.04 + name: "Cross build and test for ${{ matrix.platform.arch }}" + strategy: + matrix: + # Arch: arch for QEmu + # Libs: path to cross-libs + # Triplet: triplet of the compiler + platform: [ + { + arch: alpha, + libs: /usr/alpha-linux-gnu, + triplet: alpha-linux-gnu + }, + { + arch: mips, + libs: /usr/mips-linux-gnu, + triplet: mips-linux-gnu + }, + { + arch: riscv64, + libs: /usr/riscv64-linux-gnu, + triplet: riscv64-linux-gnu + } + ] + fail-fast: false + + env: + QEMU_LD_PREFIX: ${{ matrix.platform.libs }} + + steps: + - name: Checkout code + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + + - name: Setup cross-compilation toolchain and QEMU + run: | + sudo apt-get update + sudo apt-get install -y g++-${{ matrix.platform.triplet }} qemu-user-static + + - name: Cross Compilation for ${{ matrix.platform.arch }} + run: | + CC=${{ matrix.platform.triplet }}-gcc CXX=${{ matrix.platform.triplet }}-g++ cmake -S . -B "${{ env.BUILD_DIR }}" -DCMAKE_CROSSCOMPILING_EMULATOR="qemu-${{ matrix.platform.arch }}-static" + cmake --build "${{ env.BUILD_DIR }}" -j4 + + - name: Test w/ Qemu for ${{ matrix.platform.arch }} + run: | + ctest --test-dir "${{ env.BUILD_DIR }}" --output-on-failure From d2483b488d64c3f696303030627010f0b6e9bb42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20P=C3=A9ron?= Date: Tue, 2 Jul 2024 19:47:02 +0200 Subject: [PATCH 2/2] testing: cv_wait_example: relax max waiting time --- testing/cv_wait_example_test.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/testing/cv_wait_example_test.c b/testing/cv_wait_example_test.c index ab34cb5..fa522de 100644 --- a/testing/cv_wait_example_test.c +++ b/testing/cv_wait_example_test.c @@ -140,29 +140,29 @@ static void example_cv_wait (testing t) { "one\n" "three\n" "two\n" - "timeout 0.1s\n" + "timeout 0.2s\n" "four\n" - "timeout 0.1s\n" + "timeout 0.2s\n" "five\n" - "timeout 1s\n"; + "timeout 2s\n"; memset ((void *) &q, 0, sizeof (q)); memset (&output, 0, sizeof (output)); closure_fork (closure_add_and_wait_cv (&add_and_wait_cv, &q, - nsync_time_ms (500), NELEM (input), input)); + nsync_time_ms (1000), NELEM (input), input)); /* delay: "one", "two", "three" are queued; not "four" */ - nsync_time_sleep (nsync_time_ms (1200)); - - remove_and_print_cv (&q, nsync_time_ms (1000), &output); /* "one" */ - remove_and_print_cv (&q, nsync_time_ms (1000), &output); /* "three" (less than "two") */ - remove_and_print_cv (&q, nsync_time_ms (1000), &output); /* "two" */ - remove_and_print_cv (&q, nsync_time_ms (100), &output); /* time out because 1.3 < 0.5*3 */ - remove_and_print_cv (&q, nsync_time_ms (1000), &output); /* "four" */ - remove_and_print_cv (&q, nsync_time_ms (100), &output); /* time out because 0.1 < 0.5 */ - remove_and_print_cv (&q, nsync_time_ms (1000), &output); /* "five" */ - remove_and_print_cv (&q, nsync_time_ms (1000), &output); /* time out: no more to fetch */ + nsync_time_sleep (nsync_time_ms (2400)); + + remove_and_print_cv (&q, nsync_time_ms (2000), &output); /* "one" */ + remove_and_print_cv (&q, nsync_time_ms (2000), &output); /* "three" (less than "two") */ + remove_and_print_cv (&q, nsync_time_ms (2000), &output); /* "two" */ + remove_and_print_cv (&q, nsync_time_ms (200), &output); /* time out because 1.3 < 0.5*3 */ + remove_and_print_cv (&q, nsync_time_ms (2000), &output); /* "four" */ + remove_and_print_cv (&q, nsync_time_ms (200), &output); /* time out because 0.1 < 0.5 */ + remove_and_print_cv (&q, nsync_time_ms (2000), &output); /* "five" */ + remove_and_print_cv (&q, nsync_time_ms (2000), &output); /* time out: no more to fetch */ A_PUSH (&output) = 0; if (strcmp (&A (&output, 0), expected) != 0) {