Quellcode durchsuchen

Use our own llvm rather than ubuntu provided

There are two advantages to using our own llvm build:

 - Assertions are enabled so that issues are found during CI testing
 - LLVM_ENABLE_TERMINFO=Off so that the release binary does not depend
   on libtinfo.so.6 which makes the binary more portable.

Signed-off-by: Sean Young <sean@mess.org>
Sean Young vor 5 Jahren
Ursprung
Commit
f424d54244
4 geänderte Dateien mit 38 neuen und 14 gelöschten Zeilen
  1. 3 4
      .github/workflows/release.yml
  2. 2 4
      .github/workflows/test.yml
  3. 2 6
      Dockerfile
  4. 31 0
      scripts/ci.dockerfile

+ 3 - 4
.github/workflows/release.yml

@@ -9,11 +9,10 @@ jobs:
   linux:
     name: Build Linux
     runs-on: ubuntu-20.04
+    container: hyperledgerlabs/solang:ci
     steps:
     - name: Checkout sources
       uses: actions/checkout@v2
-    - name: Install LLVM
-      run: sudo apt-get -y install llvm-8-dev clang-8 git zlib1g-dev
     - name: Install stable toolchain
       uses: actions-rs/toolchain@v1
       with:
@@ -22,7 +21,7 @@ jobs:
         override: true
     - name: Compile stdlib
       run: clang-8 --target=wasm32 -c -emit-llvm -O3 -ffreestanding -fno-builtin -Wall stdlib.c sha3.c substrate.c ripemd160.c
-      working-directory:  ./stdlib
+      working-directory: ./stdlib
     - name: Build
       run: cargo build --verbose --release
     - name: Run tests
@@ -32,7 +31,7 @@ jobs:
       with:
         repo_token: ${{ secrets.GITHUB_TOKEN }}
         file: target/release/solang
-        asset_name: solang_ubuntu
+        asset_name: solang_linux
         tag: ${{ github.ref }}
 
   windows:

+ 2 - 4
.github/workflows/test.yml

@@ -4,6 +4,7 @@ jobs:
   lints:
     name: Lints
     runs-on: ubuntu-20.04
+    container: hyperledgerlabs/solang:ci
     steps:
       - name: Checkout sources
         uses: actions/checkout@v2
@@ -19,8 +20,6 @@ jobs:
         with:
           command: fmt
           args: --all -- --check
-      - name: Install LLVM
-        run: sudo apt-get -y install llvm-8-dev clang-8 git zlib1g-dev
       - name: Run cargo clippy
         uses: actions-rs/cargo@v1
         with:
@@ -30,11 +29,10 @@ jobs:
   test:
     name: Test
     runs-on: ubuntu-20.04
+    container: hyperledgerlabs/solang:ci
     steps:
     - name: Checkout sources
       uses: actions/checkout@v2
-    - name: Install LLVM
-      run: sudo apt-get -y install llvm-8-dev clang-8 git zlib1g-dev
     - name: Install stable toolchain
       uses: actions-rs/toolchain@v1
       with:

+ 2 - 6
Dockerfile

@@ -6,11 +6,7 @@
 # Ubuntu 18.04 produces a builder image 1.53 GiB and solang image of 84 MiB
 # Debian Buster produces a builder image 2.04 GiB
 
-FROM rust:1.42-slim-buster as builder
-MAINTAINER Sean Young <sean@mess.org>
-RUN echo 'deb http://deb.debian.org/debian buster-backports main' >> /etc/apt/sources.list
-RUN apt-get update
-RUN apt-get install -y llvm-8-dev clang-8 libz-dev pkg-config libssl-dev git
+FROM hyperledgerlabs/solang:ci as builder
 
 COPY .git src/.git/
 COPY src src/src/
@@ -22,7 +18,7 @@ RUN clang-8 --target=wasm32 -c -emit-llvm -O3 -ffreestanding -fno-builtin -Wall
 WORKDIR /src/
 RUN cargo build --release
 
-FROM debian:buster-slim
+FROM ubuntu:20.04
 COPY --from=builder /src/target/release/solang /usr/bin/solang
 
 ENTRYPOINT ["/usr/bin/solang"]

+ 31 - 0
scripts/ci.dockerfile

@@ -0,0 +1,31 @@
+FROM ubuntu:20.04 as builder
+
+ENV DEBIAN_FRONTEND=noninteractive
+RUN apt-get update
+RUN apt-get install -y libz-dev pkg-config libssl-dev git cmake ninja-build gcc g++ python
+
+RUN git clone git://github.com/llvm/llvm-project
+
+WORKDIR /llvm-project
+
+RUN git checkout -b release_8.x origin/release/8.x
+
+RUN sed -i '7 a #include <string>' llvm/include/llvm/Demangle/MicrosoftDemangleNodes.h
+
+RUN cmake -G Ninja -DLLVM_ENABLE_ASSERTIONS=On -DLLVM_ENABLE_PROJECTS=clang  \
+    -DLLVM_ENABLE_TERMINFO=Off -DCMAKE_BUILD_TYPE=MinSizeRel \
+    -DCMAKE_INSTALL_PREFIX=/llvm80 -B build llvm
+
+RUN cmake --build build --target install
+
+FROM ubuntu:20.04
+
+ENV DEBIAN_FRONTEND=noninteractive
+RUN apt-get update
+RUN apt-get install -y libz-dev pkg-config libssl-dev git cargo libffi-dev libstdc++-9-dev curl
+RUN apt-get clean
+RUN apt-get autoclean
+
+COPY --from=builder /llvm80 /llvm80/
+
+ENV PATH="/llvm80/bin:${PATH}"