Unverified Commit 228a1188 authored by Pier Angelo Vendrame's avatar Pier Angelo Vendrame 🎃 Committed by boklm
Browse files

Bug 40653: Do not build compiler-rt with Clang

Specifying compiler-rt as a project in LLVM is going to be deprecated.
It should be compiled with runtimes, instead, or alone, if it will be
still allowed.

The only platform in which we were compiling compiler-rt with LLVM was
Linux. But Firefox seems not to actually use it, and just use GCC's
runtime, instead.

However, we were also compiling compiler-rt for Android in the same
project, which prevents to share the artifact with Windows and macOS.
So, I have moved it to another project on its own.
parent 5d387c8f
Loading
Loading
Loading
Loading
+6 −52
Original line number Original line Diff line number Diff line
@@ -3,16 +3,12 @@
distdir=/var/tmp/dist/[% project %]
distdir=/var/tmp/dist/[% project %]
mkdir -p /var/tmp/dist
mkdir -p /var/tmp/dist
tar -C /var/tmp/dist -xf [% c('input_files_by_name/cmake') %]
tar -C /var/tmp/dist -xf [% c('input_files_by_name/cmake') %]
export PATH="/var/tmp/dist/cmake/bin:$PATH"
tar -C /var/tmp/dist -xf [% c('input_files_by_name/ninja') %]
export PATH="/var/tmp/dist/ninja:/var/tmp/dist/cmake/bin:$PATH"
[% IF c("var/linux") %]
[% IF c("var/linux") %]
  [% pc('gcc', 'var/setup', { compiler_tarfile => c('input_files_by_name/gcc'),
  [% pc('gcc', 'var/setup', { compiler_tarfile => c('input_files_by_name/gcc'),
                              hardened_gcc => 0 }) %]
                              hardened_gcc => 0 }) %]
  [% pc('python', 'var/setup', { python_tarfile => c('input_files_by_name/python') }) %]
  [% pc('python', 'var/setup', { python_tarfile => c('input_files_by_name/python') }) %]
[% END -%]
[% IF c("var/android") %]
  [% pc(c('var/compiler'), 'var/setup', { compiler_tarfile => c('input_files_by_name/' _ c('var/compiler')) }) %]
[% END -%]
[% IF c("var/linux") || c("var/android") -%]
  tar -C /var/tmp/dist -xf [% c('input_files_by_name/binutils') %]
  tar -C /var/tmp/dist -xf [% c('input_files_by_name/binutils') %]
  export PATH="/var/tmp/dist/binutils/bin:$PATH"
  export PATH="/var/tmp/dist/binutils/bin:$PATH"
[% END -%]
[% END -%]
@@ -25,57 +21,15 @@ mkdir build
cd build
cd build
# LLVM_ENABLE_ZLIB solves the "contains a compressed section, but zlib is not available" on lld
# LLVM_ENABLE_ZLIB solves the "contains a compressed section, but zlib is not available" on lld
# LLVM_INSTALL_UTILS allows this LLVM to be used to compile Rust
# LLVM_INSTALL_UTILS allows this LLVM to be used to compile Rust
cmake ../llvm -G "Unix Makefiles" \
cmake ../llvm -GNinja \
              -DCMAKE_INSTALL_PREFIX=$distdir \
              -DCMAKE_INSTALL_PREFIX=$distdir \
              -DCMAKE_BUILD_TYPE=Release \
              -DCMAKE_BUILD_TYPE=Release \
            [% IF c("var/android") || c("var/macos") -%]
              -DLLVM_TARGETS_TO_BUILD="X86;ARM;AArch64[% IF c("var/rlbox") -%];WebAssembly[% END %]" \
              -DLLVM_TARGETS_TO_BUILD="X86;ARM;AArch64" \
              -DLLVM_ENABLE_PROJECTS="clang;lld" \
            [% END -%]
            [% IF c("var/rlbox") -%]-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly[% END %] \
              -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;compiler-rt;lld" \
              -DLLVM_ENABLE_ZLIB=ON \
              -DLLVM_ENABLE_ZLIB=ON \
              -DLLVM_INSTALL_UTILS=ON \
              -DLLVM_INSTALL_UTILS=ON \


make -j[% c("num_procs") %]
ninja -j[% c("num_procs") %] -v install
make install
cd ..

[% IF c("var/android") -%]
  echo "Compiling compiler-rt (Android only)"
  rtdistdir=/var/tmp/build/rtdist
  mkdir $rtdistdir

  make_compilerrt () {
    mkdir "build-compilerrt-$1"
    cd "build-compilerrt-$1"
    cmake ../compiler-rt/ -G "Unix Makefiles" \
      -DCMAKE_INSTALL_PREFIX=$rtdistdir \
      -DCMAKE_BUILD_TYPE=Release \
      -DCMAKE_SYSTEM_NAME=Android \
      -DCMAKE_ANDROID_ARCH_ABI=$1 \
      -DCMAKE_ANDROID_NDK="$ANDROID_NDK_HOME" \
      -DCMAKE_C_FLAGS="$3 -fuse-ld=lld --rtlib=compiler-rt" \
      -DCMAKE_CXX_FLAGS="$3 -fuse-ld=lld --rtlib=compiler-rt" \
      -DCMAKE_EXE_LINKER_FLAGS="-L$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/$2" \
      -DCOMPILER_RT_BUILD_BUILTINS=ON \
      -DCOMPILER_RT_BUILD_LIBFUZZER=OFF \
      -DCOMPILER_RT_BUILD_MEMPROF=OFF \
      -DCOMPILER_RT_BUILD_ORC=OFF \
      -DCOMPILER_RT_BUILD_PROFILE=OFF \
      -DCOMPILER_RT_BUILD_SANITIZERS=OFF \
      -DCOMPILER_RT_BUILD_XRAY=OFF
    make -j[% c("num_procs") %]
    make install
    cd ..
  }

  make_compilerrt "armeabi-v7a" "arm-linux-androideabi/lib" "-DARMEABI_V7A"
  make_compilerrt "arm64-v8a" "aarch64-linux-android/lib64"
  make_compilerrt "x86" "i686-linux-android/lib"
  make_compilerrt "x86_64" "x86_64-linux-android/lib64"

  mv $rtdistdir/lib/linux/libclang_rt.builtins-*-android.a $distdir/lib/clang/[% c("var/llvm_version") %]/lib/linux/
[% END -%]


cd /var/tmp/dist
cd /var/tmp/dist
[% c('tar', {
[% c('tar', {
+4 −2
Original line number Original line Diff line number Diff line
@@ -11,14 +11,16 @@ input_files:
  - project: container-image
  - project: container-image
  - name: '[% c("var/compiler") %]'
  - name: '[% c("var/compiler") %]'
    project: '[% c("var/compiler") %]'
    project: '[% c("var/compiler") %]'
    enable: '[% c("var/linux") || c("var/android") %]'
    enable: '[% c("var/linux") %]'
  - name: binutils
  - name: binutils
    project: binutils
    project: binutils
    enable: '[% c("var/linux") || c("var/android") %]'
    enable: '[% c("var/linux") %]'
  - project: cmake
  - project: cmake
    name: cmake
    name: cmake
  - project: llvm-project
  - project: llvm-project
    name: clang-source
    name: clang-source
  - project: ninja
    name: ninja
  - project: python
  - project: python
    name: python
    name: python
    enable: '[% c("var/linux") %]'
    enable: '[% c("var/linux") %]'
+51 −0
Original line number Original line Diff line number Diff line
#!/bin/bash
[% c("var/set_default_env") -%]
distdir=/var/tmp/dist/[% project %]
mkdir -p /var/tmp/dist
tar -C /var/tmp/dist -xf [% c('input_files_by_name/cmake') %]
tar -C /var/tmp/dist -xf [% c('input_files_by_name/ninja') %]
export PATH="/var/tmp/dist/ninja:/var/tmp/dist/cmake/bin:$PATH"

[% pc(c('var/compiler'), 'var/setup', { compiler_tarfile => c('input_files_by_name/' _ c('var/compiler')) }) %]

tar -C /var/tmp/dist -xf [% c('input_files_by_name/binutils') %]
export PATH="/var/tmp/dist/binutils/bin:$PATH"

mkdir -p /var/tmp/build
cd /var/tmp/build
tar -xf $rootdir/[% c('input_files_by_name/clang-source') %]
cd clang-source
export LLVM_HOME=$(pwd)
mkdir build
cd build

installdir=/var/tmp/build/install
mkdir -p $installdir

cmake ../compiler-rt/ -GNinja \
  -DCMAKE_INSTALL_PREFIX=$installdir \
  -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_SYSTEM_NAME=Android \
  -DCMAKE_ANDROID_ARCH_ABI="[% c('var/abi') %]" \
  -DCMAKE_ANDROID_NDK="$ANDROID_NDK_HOME" \
  -DCMAKE_C_FLAGS="-fuse-ld=lld --rtlib=compiler-rt $defines" \
  -DCMAKE_CXX_FLAGS="-fuse-ld=lld --rtlib=compiler-rt $defines" \
  -DCMAKE_EXE_LINKER_FLAGS="-L$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/[% c('var/libdir') %]" \
  -DCOMPILER_RT_BUILD_BUILTINS=ON \
  -DCOMPILER_RT_BUILD_LIBFUZZER=OFF \
  -DCOMPILER_RT_BUILD_MEMPROF=OFF \
  -DCOMPILER_RT_BUILD_ORC=OFF \
  -DCOMPILER_RT_BUILD_PROFILE=OFF \
  -DCOMPILER_RT_BUILD_SANITIZERS=OFF \
  -DCOMPILER_RT_BUILD_XRAY=OFF

ninja -j[% c("num_procs") %] -v install

mkdir -p $distdir/lib/clang/[% c("var/llvm_version") %]/lib/linux/
mv $installdir/lib/linux/libclang_rt.builtins-*-android.a $distdir/lib/clang/[% c("var/llvm_version") %]/lib/linux/

cd /var/tmp/dist
[% c('tar', {
    tar_src => [ project ],
    tar_args => '-czf ' _ dest_dir _ '/' _ c('filename'),
  }) %]
+38 −0
Original line number Original line Diff line number Diff line
# vim: filetype=yaml sw=2
version: '[% c("var/llvm_version") %]'
filename: '[% project %]-[% c("version") %]-[% c("var/build_id") %].tar.gz'
container:
  use_container: 1

var:
  llvm_version: '[% pc("llvm-project", "version") %]'

targets:
  android-armv7:
    var:
      libdir: 'arm-linux-androideabi/lib'
  android-aarch64:
    var:
      libdir: 'aarch64-linux-android/lib64'
  android-x86:
    var:
      libdir: 'i686-linux-android/lib'
  android-x86_64:
    var:
      libdir: 'x86_64-linux-android/lib64'

input_files:
  - project: container-image
  - name: '[% c("var/compiler") %]'
    project: '[% c("var/compiler") %]'
  - name: binutils
    project: binutils
  - project: cmake
    name: cmake
  - project: llvm-project
    name: clang-source
  - project: ninja
    name: ninja
  - project: python
    name: python
    enable: '[% c("var/linux") %]'
+2 −0
Original line number Original line Diff line number Diff line
@@ -21,6 +21,8 @@ tar -C /var/tmp/dist -xf [% c('input_files_by_name/nasm') %]
tar -C /var/tmp/dist -xf [% c('input_files_by_name/node') %]
tar -C /var/tmp/dist -xf [% c('input_files_by_name/node') %]
tar -C /var/tmp/dist -xf [% c('input_files_by_name/clang') %]
tar -C /var/tmp/dist -xf [% c('input_files_by_name/clang') %]
export LLVM_CONFIG="/var/tmp/dist/clang/bin/llvm-config"
export LLVM_CONFIG="/var/tmp/dist/clang/bin/llvm-config"
tar -C /var/tmp/dist -xf [% c('input_files_by_name/compiler-rt') %]
cp -r /var/tmp/dist/compiler-rt/* /var/tmp/dist/clang/
tar -C /var/tmp/dist -xf [% c('input_files_by_name/binutils') %]
tar -C /var/tmp/dist -xf [% c('input_files_by_name/binutils') %]
export PATH="/var/tmp/dist/rust/bin:/var/tmp/dist/cbindgen:/var/tmp/dist/nasm/bin:/var/tmp/dist/node/bin:/var/tmp/dist/clang/bin:/var/tmp/dist/binutils/bin:$PATH"
export PATH="/var/tmp/dist/rust/bin:/var/tmp/dist/cbindgen:/var/tmp/dist/nasm/bin:/var/tmp/dist/node/bin:/var/tmp/dist/clang/bin:/var/tmp/dist/binutils/bin:$PATH"


Loading