diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 78929397..ba3886b6 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -111,14 +111,14 @@ jobs: name: ppc64el # Don't abort runners if a single one fails fail-fast: false - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 name: Cross-build for ${{ matrix.arch.triple }} LLVM-${{ matrix.llvm-version}} ${{ matrix.build-type }} steps: - uses: actions/checkout@v3 - name: Install cross-compile toolchain and QEMU run: | sudo apt update - sudo apt install libstdc++-9-dev-${{ matrix.arch.name }}-cross qemu-user ninja-build + sudo apt install libstdc++-14-dev-${{ matrix.arch.name }}-cross qemu-user ninja-build - name: Configure CMake run: | export LDFLAGS="-L/usr/lib/llvm-${{ matrix.llvm-version }}/lib/ -fuse-ld=lld-${{ matrix.llvm-version}} -Wl,--dynamic-linker=/usr/${{ matrix.arch.triple }}/lib/${{ matrix.arch.rtld }},-rpath,/usr/${{ matrix.arch.triple }}/lib" diff --git a/.gitignore b/.gitignore index a69c57ee..b0e3b3ca 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ [b|B]uild Debug Release +.cache \ No newline at end of file diff --git a/INSTALL b/INSTALL index ff438157..1aa14c77 100644 --- a/INSTALL +++ b/INSTALL @@ -6,6 +6,14 @@ runtime. Note that although this runtime should build with gcc, it is strongly recommended that you compile it with clang and clang++ as your [Objective-]C and [Objective-]C++ compilers. +It is recommended that you use the LLVM runtime and unwinder or a recent version +of GCC (>= 14) on GNU/Linux to avoid a +[bug](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114843) in GCC and the libgcc +unwinder. + +If CompilerRT and libunwind are installed on your machine use +`-DCMAKE_EXE_LINKER_FLAGS="-rtlib=compiler-rt -unwindlib=libunwind"`. + Basic Building -------------- diff --git a/Test/UnexpectedException.m b/Test/UnexpectedException.m index 9f2a2ba5..75afc56a 100644 --- a/Test/UnexpectedException.m +++ b/Test/UnexpectedException.m @@ -31,7 +31,6 @@ LONG WINAPI _UnhandledExceptionFilter(struct _EXCEPTION_POINTERS* exceptionInfo) int main(void) { -#if !(defined(__arm__) || defined(__ARM_ARCH_ISA_A64)) && !defined(__powerpc__) #if defined(_WIN32) && !defined(__MINGW32__) // also verify that an existing handler still gets called after we set ours SetUnhandledExceptionFilter(&_UnhandledExceptionFilter); @@ -50,7 +49,4 @@ int main(void) assert(0 && "should not be reached!"); return -1; -#endif - // FIXME: Test currently fails on ARM and AArch64 - return 77; // Skip test }