Browse Source

Move to llvm16 (#1608)

Signed-off-by: Sean Young <sean@mess.org>
Sean Young 1 year ago
parent
commit
a9605519ad
7 changed files with 50 additions and 45 deletions
  1. 10 10
      .github/workflows/release.yml
  2. 13 13
      .github/workflows/test.yml
  3. 2 2
      Cargo.toml
  4. 1 1
      Dockerfile
  5. 11 11
      docs/installing.rst
  6. 1 1
      solang-parser/Cargo.toml
  7. 12 7
      src/linker/bpf.rs

+ 10 - 10
.github/workflows/release.yml

@@ -9,7 +9,7 @@ jobs:
   linux-x86-64:
     name: Linux x86-64
     runs-on: solang-ubuntu-latest
-    container: ghcr.io/hyperledger/solang-llvm:ci-6
+    container: ghcr.io/hyperledger/solang-llvm:ci-7
     steps:
     - name: Checkout sources
       uses: actions/checkout@v3.1.0
@@ -33,7 +33,7 @@ jobs:
     name: Linux arm64
     runs-on: linux-arm64
     if: ${{ github.repository_owner == 'hyperledger' }}
-    container: ghcr.io/hyperledger/solang-llvm:ci-6
+    container: ghcr.io/hyperledger/solang-llvm:ci-7
     steps:
     - name: Checkout sources
       uses: actions/checkout@v3.1.0
@@ -62,11 +62,11 @@ jobs:
       with:
         submodules: recursive
     - name: Download LLVM
-      run: curl -sSL -o c:\llvm.zip https://github.com/hyperledger/solang-llvm/releases/download/llvm15-1/llvm15.0-win.zip
+      run: curl -sSL -o c:\llvm.zip https://github.com/hyperledger/solang-llvm/releases/download/llvm16-0/llvm16.0-win.zip
     - name: Extract LLVM
       run: unzip c:\llvm.zip -d c:/
     - name: Add LLVM to Path
-      run: echo "c:\llvm15.0\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8
+      run: echo "c:\llvm16.0\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8
     - uses: dtolnay/rust-toolchain@1.72.0
       with:
         components: clippy
@@ -92,11 +92,11 @@ jobs:
         submodules: recursive
     - uses: dtolnay/rust-toolchain@1.72.0
     - name: Get LLVM
-      run: curl -sSL --output llvm15.0-mac-arm.tar.xz https://github.com/hyperledger/solang-llvm/releases/download/llvm15-1/llvm15.0-mac-arm.tar.xz
+      run: curl -sSL --output llvm16.0-mac-arm.tar.xz https://github.com/hyperledger/solang-llvm/releases/download/llvm16-0/llvm16.0-mac-arm.tar.xz
     - name: Extract LLVM
-      run: tar Jxf llvm15.0-mac-arm.tar.xz
+      run: tar Jxf llvm16.0-mac-arm.tar.xz
     - name: Add LLVM to Path
-      run: echo "$(pwd)/llvm15.0/bin" >> $GITHUB_PATH
+      run: echo "$(pwd)/llvm16.0/bin" >> $GITHUB_PATH
     - name: Build
       run: cargo build --release --verbose
     - name: Run tests
@@ -122,11 +122,11 @@ jobs:
         submodules: recursive
     - uses: dtolnay/rust-toolchain@1.72.0
     - name: Get LLVM
-      run: wget -q -O llvm15.0-mac-intel.tar.xz https://github.com/hyperledger/solang-llvm/releases/download/llvm15-1/llvm15.0-mac-intel.tar.xz
+      run: wget -q -O llvm16.0-mac-intel.tar.xz https://github.com/hyperledger/solang-llvm/releases/download/llvm16-0/llvm16.0-mac-intel.tar.xz
     - name: Extract LLVM
-      run: tar Jxf llvm15.0-mac-intel.tar.xz
+      run: tar Jxf llvm16.0-mac-intel.tar.xz
     - name: Add LLVM to Path
-      run: echo "$(pwd)/llvm15.0/bin" >> $GITHUB_PATH
+      run: echo "$(pwd)/llvm16.0/bin" >> $GITHUB_PATH
     - name: Build
       run: cargo build --release --verbose
     - name: Run tests

+ 13 - 13
.github/workflows/test.yml

@@ -49,7 +49,7 @@ jobs:
   linux-x86-64:
     name: Linux x86-64
     runs-on: solang-ubuntu-latest
-    container: ghcr.io/hyperledger/solang-llvm:ci-6
+    container: ghcr.io/hyperledger/solang-llvm:ci-7
     env:
       RUSTFLAGS: -C instrument-coverage -C llvm-args=--instrprof-atomic-counter-update-all --cfg=coverage --cfg=trybuild_no_target
       CARGO_INCREMENTAL: 0
@@ -111,7 +111,7 @@ jobs:
     name: Linux Arm
     runs-on: linux-arm64
     if: ${{ github.repository_owner == 'hyperledger' }}
-    container: ghcr.io/hyperledger/solang-llvm:ci-6
+    container: ghcr.io/hyperledger/solang-llvm:ci-7
     steps:
     - name: Checkout sources
       uses: actions/checkout@v3
@@ -137,11 +137,11 @@ jobs:
       with:
         submodules: recursive
     - name: Download LLVM
-      run: curl -sSL -o c:\llvm.zip https://github.com/hyperledger/solang-llvm/releases/download/llvm15-1/llvm15.0-win.zip
+      run: curl -sSL -o c:\llvm.zip https://github.com/hyperledger/solang-llvm/releases/download/llvm16-0/llvm16.0-win.zip
     - name: Extract LLVM
       run: unzip c:\llvm.zip -d c:/
     - name: Add LLVM to Path
-      run: echo "c:\llvm15.0\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8
+      run: echo "c:\llvm16.0\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8
     # Use C:\ as D:\ might run out of space
     - name: "Use C: for rust temporary files"
       run: echo "CARGO_TARGET_DIR=C:\target" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
@@ -173,11 +173,11 @@ jobs:
         submodules: recursive
     - uses: dtolnay/rust-toolchain@1.72.0
     - name: Get LLVM
-      run: curl -sSL --output llvm15.0-mac-arm.tar.xz https://github.com/hyperledger/solang-llvm/releases/download/llvm15-1/llvm15.0-mac-arm.tar.xz
+      run: curl -sSL --output llvm16.0-mac-arm.tar.xz https://github.com/hyperledger/solang-llvm/releases/download/llvm16-0/llvm16.0-mac-arm.tar.xz
     - name: Extract LLVM
-      run: tar Jxf llvm15.0-mac-arm.tar.xz
+      run: tar Jxf llvm16.0-mac-arm.tar.xz
     - name: Add LLVM to Path
-      run: echo "$(pwd)/llvm15.0/bin" >> $GITHUB_PATH
+      run: echo "$(pwd)/llvm16.0/bin" >> $GITHUB_PATH
     - name: Build
       run: cargo build --verbose
     - name: Run tests
@@ -199,11 +199,11 @@ jobs:
         submodules: recursive
     - uses: dtolnay/rust-toolchain@1.72.0
     - name: Get LLVM
-      run: wget -q -O llvm15.0-mac-intel.tar.xz https://github.com/hyperledger/solang-llvm/releases/download/llvm15-1/llvm15.0-mac-intel.tar.xz
+      run: wget -q -O llvm16.0-mac-intel.tar.xz https://github.com/hyperledger/solang-llvm/releases/download/llvm16-0/llvm16.0-mac-intel.tar.xz
     - name: Extract LLVM
-      run: tar Jxf llvm15.0-mac-intel.tar.xz
+      run: tar Jxf llvm16.0-mac-intel.tar.xz
     - name: Add LLVM to Path
-      run: echo "$(pwd)/llvm15.0/bin" >> $GITHUB_PATH
+      run: echo "$(pwd)/llvm16.0/bin" >> $GITHUB_PATH
     - name: Build
       run: cargo build --verbose
     - name: Run tests
@@ -254,7 +254,7 @@ jobs:
   anchor:
     name: Anchor Integration test
     runs-on: solang-ubuntu-latest
-    container: ghcr.io/hyperledger/solang-llvm:ci-6
+    container: ghcr.io/hyperledger/solang-llvm:ci-7
     needs: linux-x86-64
     steps:
     - name: Checkout sources
@@ -306,7 +306,7 @@ jobs:
   solana:
     name: Solana Integration test
     runs-on: solang-ubuntu-latest
-    container: ghcr.io/hyperledger/solang-llvm:ci-6
+    container: ghcr.io/hyperledger/solang-llvm:ci-7
     needs: linux-x86-64
     steps:
     - name: Checkout sources
@@ -477,7 +477,7 @@ jobs:
   coverage:
     runs-on: ubuntu-latest
     name: Coverage report
-    container: ghcr.io/hyperledger/solang-llvm:ci-6
+    container: ghcr.io/hyperledger/solang-llvm:ci-7
     needs: [linux-x86-64, solana, anchor, polkadot, polkadot-subxt, vscode]
     env:
       RUSTFLAGS: -C instrument-coverage -C llvm-args=--instrprof-atomic-counter-update-all --cfg=coverage --cfg=trybuild_no_target

+ 2 - 2
Cargo.toml

@@ -28,7 +28,7 @@ tiny-keccak = { version = "2.0", features = ["keccak"] }
 serde_json = "1.0"
 serde = "1.0"
 serde_derive = { version = "1.0" }
-inkwell = { version = "0.2.0", features = ["target-webassembly", "no-libffi-linking", "llvm15-0"], optional = true }
+inkwell = { version = "0.2.0", features = ["target-webassembly", "no-libffi-linking", "llvm16-0"], optional = true }
 blake2-rfc = "0.2.18"
 handlebars = "4.4"
 contract-metadata = "3.2"
@@ -42,7 +42,7 @@ sha2 = "0.10"
 ripemd = "0.1"
 bitvec = "1"
 funty = "2.0"
-itertools = "0.11"
+itertools = "0.12"
 num-rational = "0.4"
 indexmap = "2.0"
 once_cell = "1.18"

+ 1 - 1
Dockerfile

@@ -1,4 +1,4 @@
-FROM ghcr.io/hyperledger/solang-llvm:ci-6 as builder
+FROM ghcr.io/hyperledger/solang-llvm:ci-7 as builder
 
 COPY . src
 WORKDIR /src/stdlib/

+ 11 - 11
docs/installing.rst

@@ -126,40 +126,40 @@ Linux
 ~~~~~
 
 A pre-built version of LLVM, specifically configured for Solang, is available at
-`<https://github.com/hyperledger/solang-llvm/releases/download/llvm15-2/llvm15.0-linux-x86-64.tar.xz>`_ for x86 processors
-and at `<https://github.com/hyperledger/solang-llvm/releases/download/llvm15-2/llvm15.0-linux-arm64.tar.xz>`_ for ARM.
+`<https://github.com/hyperledger/solang-llvm/releases/download/llvm16-0/llvm16.0-linux-x86-64.tar.xz>`_ for x86 processors
+and at `<https://github.com/hyperledger/solang-llvm/releases/download/llvm16-0/llvm16.0-linux-arm64.tar.xz>`_ for ARM.
 After downloading, untar the file in a terminal and add it to your path.
 
 .. code-block:: bash
 
-	tar Jxf llvm15.0-linux-x86-64.tar.xz
-	export PATH=$(pwd)/llvm15.0/bin:$PATH
+	tar Jxf llvm16.0-linux-x86-64.tar.xz
+	export PATH=$(pwd)/llvm16.0/bin:$PATH
 
 Windows
 ~~~~~~~
 
 A pre-built version of LLVM, specifically configured for Solang, is available at
-`<https://github.com/hyperledger/solang-llvm/releases/download/llvm15-2/llvm15.0-win.zip>`_.
+`<https://github.com/hyperledger/solang-llvm/releases/download/llvm16-0/llvm16.0-win.zip>`_.
 
 After unzipping the file, add the bin directory to your path.
 
 .. code-block:: batch
 
-	set PATH=%PATH%;C:\llvm15.0\bin
+	set PATH=%PATH%;C:\llvm16.0\bin
 
 Mac
 ~~~
 
 A pre-built version of LLVM for intel macs, is available at
-`<https://github.com/hyperledger/solang-llvm/releases/download/llvm15-2/llvm15.0-mac-intel.tar.xz>`_ and for arm macs there is
-`<https://github.com/hyperledger/solang-llvm/releases/download/llvm15-2/llvm15.0-mac-arm.tar.xz>`_. After downloading,
+`<https://github.com/hyperledger/solang-llvm/releases/download/llvm16-0/llvm16.0-mac-intel.tar.xz>`_ and for arm macs there is
+`<https://github.com/hyperledger/solang-llvm/releases/download/llvm16-0/llvm16.0-mac-arm.tar.xz>`_. After downloading,
 untar the file in a terminal and add it to your path like so:
 
 .. code-block:: bash
 
-	tar Jxf llvm15.0-mac-arm.tar.xz
-	xattr -rd com.apple.quarantine llvm15.0
-	export PATH=$(pwd)/llvm15.0/bin:$PATH
+	tar Jxf llvm16.0-mac-arm.tar.xz
+	xattr -rd com.apple.quarantine llvm16.0
+	export PATH=$(pwd)/llvm16.0/bin:$PATH
 
 .. _llvm-from-source:
 

+ 1 - 1
solang-parser/Cargo.toml

@@ -17,7 +17,7 @@ lalrpop = { version = "0.20.0", default-features = false }
 lalrpop-util = "0.20.0"
 phf = { version = "0.11", features = ["macros"] }
 unicode-xid = "0.2"
-itertools = "0.11"
+itertools = "0.12"
 thiserror = "1.0"
 serde = { version = "1.0", features = ["derive"], optional = true }
 

+ 12 - 7
src/linker/bpf.rs

@@ -41,6 +41,7 @@ PHDRS
 {
     text PT_LOAD  ;
     rodata PT_LOAD ;
+    data PT_LOAD ;
     dynamic PT_DYNAMIC ;
 }
 
@@ -49,14 +50,18 @@ SECTIONS
     . = SIZEOF_HEADERS;
     .text : { *(.text*) } :text
     .rodata : { *(.rodata*) } :rodata
+    .data.rel.ro : { *(.data.rel.ro*) } :rodata
     .dynamic : { *(.dynamic) } :dynamic
-    .data.rel.ro : { *(.data.rel.ro*) } :dynamic
-    .dynsym : { *(.dynsym) } :dynamic
-    .dynstr : { *(.dynstr) } :dynamic
-    .gnu.hash : { *(.gnu.hash) } :dynamic
-    .rel.dyn : { *(.rel.dyn) } :dynamic
-    .hash : { *(.hash) } :dynamic
-}"##,
+    .dynsym : { *(.dynsym) } :data
+    .dynstr : { *(.dynstr) } :data
+    .rel.dyn : { *(.rel.dyn) } :data
+    /DISCARD/ : {
+        *(.eh_frame*)
+        *(.gnu.hash*)
+        *(.hash*)
+    }
+}
+"##,
         )
         .expect("failed to write linker script to temp file");