From df8eb48ae69711cdab880e5ab5f278025ec7ab79 Mon Sep 17 00:00:00 2001 From: Mike Dalessio Date: Sun, 5 Dec 2021 12:11:37 -0500 Subject: [PATCH 1/3] ci: a new build cancels builds-in-progress Because the RCD builds are expensive, let's cancel builds in progress when a new build is kicked off for the PR branch (or when a new commit lands on master). --- .github/workflows/ci.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a6bd8eaf..b7949c5e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,4 +1,7 @@ name: Build docker images +concurrency: + group: "${{github.workflow}}-${{github.ref}}" + cancel-in-progress: true on: [push, pull_request] jobs: From 1b00fdb7133b077180ab3593494c78866736e4bc Mon Sep 17 00:00:00 2001 From: Mike Dalessio Date: Sun, 5 Dec 2021 11:51:37 -0500 Subject: [PATCH 2/3] test: reproduce issues with missing compiler-rt symbols --- test/rcd_test/ext/mri/rcd_test_ext.c | 19 +++++++++++++++++++ test/rcd_test/test/test_basic.rb | 10 ++++++++++ 2 files changed, 29 insertions(+) diff --git a/test/rcd_test/ext/mri/rcd_test_ext.c b/test/rcd_test/ext/mri/rcd_test_ext.c index ad657403..5265cebd 100644 --- a/test/rcd_test/ext/mri/rcd_test_ext.c +++ b/test/rcd_test/ext/mri/rcd_test_ext.c @@ -1,5 +1,9 @@ #include "rcd_test_ext.h" +#ifndef __has_builtin + #define __has_builtin(x) 0 +#endif + VALUE rb_mRcdTest; static VALUE @@ -8,9 +12,24 @@ rcdt_do_something(VALUE self) return rb_str_new_cstr("something has been done"); } +static VALUE +rcdt_darwin_builtin_available_eh(VALUE self) +{ +#if __has_builtin(__builtin_available) + // This version must be higher than MACOSX_DEPLOYMENT_TARGET to prevent clang from optimizing it away + if (__builtin_available(macOS 10.14, *)) { + return Qtrue; + } + return Qfalse; +#else + rb_raise(rb_eRuntimeError, "__builtin_available is not defined"); +#endif +} + void Init_rcd_test_ext(void) { rb_mRcdTest = rb_define_module("RcdTest"); rb_define_singleton_method(rb_mRcdTest, "do_something", rcdt_do_something, 0); + rb_define_singleton_method(rb_mRcdTest, "darwin_builtin_available?", rcdt_darwin_builtin_available_eh, 0); } diff --git a/test/rcd_test/test/test_basic.rb b/test/rcd_test/test/test_basic.rb index f0d29d76..c89681da 100644 --- a/test/rcd_test/test/test_basic.rb +++ b/test/rcd_test/test/test_basic.rb @@ -9,4 +9,14 @@ def test_do_something assert_equal "something has been done", RcdTest.do_something end + def test_check_darwin_compiler_rt_symbol_resolution + skip("jruby should not run libc-specific tests") if RUBY_ENGINE == "jruby" + + if RUBY_PLATFORM.include?("darwin") + assert(RcdTest.darwin_builtin_available?) + else + e = assert_raises(RuntimeError) { RcdTest.darwin_builtin_available? } + assert_equal("__builtin_available is not defined", e.message) + end + end end From 655f8acae058ac7a17b6b550f7b1bb15f1da0c9d Mon Sep 17 00:00:00 2001 From: Mike Dalessio Date: Sun, 5 Dec 2021 11:59:53 -0500 Subject: [PATCH 3/3] fix(darwin): provide compiler-rt libraries for darwin builds --- Dockerfile.mri.erb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Dockerfile.mri.erb b/Dockerfile.mri.erb index aec763e2..969c86f9 100644 --- a/Dockerfile.mri.erb +++ b/Dockerfile.mri.erb @@ -107,6 +107,8 @@ RUN git clone -q --depth=1 https://github.com/tpoechtrager/osxcross.git /opt/osx tar -cJf MacOSX11.1.sdk.tar.xz MacOSX11.1.sdk && \ cd /opt/osxcross && \ UNATTENDED=1 SDK_VERSION=11.1 OSX_VERSION_MIN=10.13 USE_CLANG_AS=1 ./build.sh && \ + ln -s /usr/bin/llvm-config-10 /usr/bin/llvm-config && \ + ENABLE_COMPILER_RT_INSTALL=1 SDK_VERSION=11.1 ./build_compiler_rt.sh && \ rm -rf *~ build tarballs/* RUN echo "export PATH=/opt/osxcross/target/bin:\$PATH" >> /etc/rubybashrc && \