diff --git a/programs/bpf/c/sdk/.gitignore b/programs/bpf/c/sdk/.gitignore index 74eadd225e..467934945d 100644 --- a/programs/bpf/c/sdk/.gitignore +++ b/programs/bpf/c/sdk/.gitignore @@ -1 +1,2 @@ /criterion-* +/llvm/native-* diff --git a/programs/bpf/c/sdk/bpf.mk b/programs/bpf/c/sdk/bpf.mk index ea4b7cf847..91c64fb41f 100644 --- a/programs/bpf/c/sdk/bpf.mk +++ b/programs/bpf/c/sdk/bpf.mk @@ -13,12 +13,9 @@ TEST_DIR ?= ./test OUT_DIR ?= ./out ifeq ($(DOCKER),1) -LLVM_DIR = $(LOCAL_PATH)llvm/llvm-docker +LLVM_DIR = $(LOCAL_PATH)llvm/docker else -OS=$(shell uname) -ifeq ($(OS),Darwin) -LLVM_DIR ?= $(shell brew --prefix llvm) -endif +LLVM_DIR = $(LOCAL_PATH)llvm/native-v0.0.1 endif ifdef LLVM_DIR @@ -26,14 +23,11 @@ CC := $(LLVM_DIR)/bin/clang CXX := $(LLVM_DIR)/bin/clang++ LLC := $(LLVM_DIR)/bin/llc OBJ_DUMP := $(LLVM_DIR)/bin/llvm-objdump -else -CC := clang-7 -CXX := clang++-7 -LLC := llc-7 -OBJ_DUMP := llvm-objdump-7 endif -SYSTEM_INC_DIRS := $(LOCAL_PATH)inc +SYSTEM_INC_DIRS := \ + $(LOCAL_PATH)inc \ + $(LLVM_DIR)lib/clang/8.0.0/include \ C_FLAGS := \ -Werror \ @@ -110,7 +104,6 @@ help: @echo ' - Show commands while building: V=1' @echo ' V=$(V)' @echo ' - Use LLVM from docker: DOCKER=1' - @echo ' Docker image must be pulled first: docker pull solanalabs/llvm' @echo ' DOCKER=$(DOCKER)' @echo ' - List of include directories:' @echo ' INC_DIRS=$(INC_DIRS)' diff --git a/programs/bpf/c/sdk/llvm/llvm-docker/bin/clang b/programs/bpf/c/sdk/llvm/docker/bin/clang similarity index 100% rename from programs/bpf/c/sdk/llvm/llvm-docker/bin/clang rename to programs/bpf/c/sdk/llvm/docker/bin/clang diff --git a/programs/bpf/c/sdk/llvm/llvm-docker/bin/clang++ b/programs/bpf/c/sdk/llvm/docker/bin/clang++ similarity index 100% rename from programs/bpf/c/sdk/llvm/llvm-docker/bin/clang++ rename to programs/bpf/c/sdk/llvm/docker/bin/clang++ diff --git a/programs/bpf/c/sdk/llvm/llvm-docker/bin/llc b/programs/bpf/c/sdk/llvm/docker/bin/llc similarity index 100% rename from programs/bpf/c/sdk/llvm/llvm-docker/bin/llc rename to programs/bpf/c/sdk/llvm/docker/bin/llc diff --git a/programs/bpf/c/sdk/llvm/llvm-docker/bin/llvm-objdump b/programs/bpf/c/sdk/llvm/docker/bin/llvm-objdump similarity index 100% rename from programs/bpf/c/sdk/llvm/llvm-docker/bin/llvm-objdump rename to programs/bpf/c/sdk/llvm/docker/bin/llvm-objdump diff --git a/programs/bpf/c/sdk/llvm/llvm-docker/generate.sh b/programs/bpf/c/sdk/llvm/docker/generate.sh similarity index 100% rename from programs/bpf/c/sdk/llvm/llvm-docker/generate.sh rename to programs/bpf/c/sdk/llvm/docker/generate.sh diff --git a/programs/bpf/c/sdk/scripts/install.sh b/programs/bpf/c/sdk/scripts/install.sh index 3cde7f11cb..c9fc5b5b25 100755 --- a/programs/bpf/c/sdk/scripts/install.sh +++ b/programs/bpf/c/sdk/scripts/install.sh @@ -3,21 +3,52 @@ cd "$(dirname "$0")"/.. # Install Criterion for all supported platforms +# if changing version here must also change in bpf.mk version=v2.3.2 -( - [[ ! -d criterion-$version ]] || exit 0 - set -ex - wget https://github.com/Snaipe/Criterion/releases/download/$version/criterion-$version-osx-x86_64.tar.bz2 - wget https://github.com/Snaipe/Criterion/releases/download/$version/criterion-$version-linux-x86_64.tar.bz2 - tar jxf criterion-$version-osx-x86_64.tar.bz2 - tar jxf criterion-$version-linux-x86_64.tar.bz2 - rm -rf criterion-$version-osx-x86_64.tar.bz2 criterion-$version-linux-x86_64.tar.bz2 +if [[ ! -d criterion-$version ]]; then + ( + [[ ! -d criterion-$version ]] || exit 0 + set -ex + wget https://github.com/Snaipe/Criterion/releases/download/$version/criterion-$version-osx-x86_64.tar.bz2 + wget https://github.com/Snaipe/Criterion/releases/download/$version/criterion-$version-linux-x86_64.tar.bz2 + tar jxf criterion-$version-osx-x86_64.tar.bz2 + tar jxf criterion-$version-linux-x86_64.tar.bz2 + rm -rf criterion-$version-osx-x86_64.tar.bz2 criterion-$version-linux-x86_64.tar.bz2 - [[ ! -f criterion-$version/README.md ]] - echo "https://github.com/Snaipe/Criterion/releases/tag/$version" > criterion-$version/README.md -) + [[ ! -f criterion-$version/README.md ]] + echo "https://github.com/Snaipe/Criterion/releases/tag/$version" > criterion-$version/README.md + ) + # shellcheck disable=SC2181 + if [[ $? -ne 0 ]]; then + rm -rf criterion-$version* + exit 1 + fi +fi + +# Install LLVM +# if changing version here must also change in bpf.mk +version=v0.0.1 +if [ "$(uname)" == "Darwin" ]; then + machine=macos +else + machine=linux +fi +if [[ ! -d llvm/native-$version ]]; then + ( + set -ex + mkdir -p llvm/native-$version + cd llvm/native-$version + wget https://github.com/solana-labs/llvm-builder/releases/download/$version/solana-llvm-$machine.tgz + tar xzf solana-llvm-$machine.tgz + rm -rf solana-llvm-$machine.tgz + + [[ ! -f llvm/native-$version/README.md ]] + echo "https://github.com/solana-labs/solana-web3.js/releases/tag/$version" > README.md + ) +fi # shellcheck disable=SC2181 if [[ $? -ne 0 ]]; then - rm -rf criterion-$version* + rm -rf llvm/native-$version exit 1 fi + diff --git a/programs/bpf/c/sdk/scripts/package.sh b/programs/bpf/c/sdk/scripts/package.sh index 4e6e3fa1a7..ca1e5b2535 100755 --- a/programs/bpf/c/sdk/scripts/package.sh +++ b/programs/bpf/c/sdk/scripts/package.sh @@ -12,8 +12,7 @@ mkdir bpf-sdk/ git rev-parse HEAD ) > bpf-sdk/version.txt -"$SOLANA_ROOT"/programs/bpf/c/sdk/scripts/install.sh cp -ra "$SOLANA_ROOT"/programs/bpf/c/sdk/* bpf-sdk/ -rm -rf bpf-sdk/scripts/ +rm -rf bpf-sdk/scripts/package.sh tar jvcf bpf-sdk.tar.bz2 bpf-sdk/ diff --git a/sdk/docker-llvm/Dockerfile b/sdk/docker-llvm/Dockerfile deleted file mode 100644 index 152aa1bbc9..0000000000 --- a/sdk/docker-llvm/Dockerfile +++ /dev/null @@ -1,68 +0,0 @@ -# This docker file is based on the llvm docker file example located here: -# https://github.com/llvm-mirror/llvm/blob/master/utils/docker/debian8/Dockerfile - -FROM launcher.gcr.io/google/debian8:latest as builder -LABEL maintainer "Solana Maintainers" - -# Install build dependencies of llvm. -# First, Update the apt's source list and include the sources of the packages. -RUN grep deb /etc/apt/sources.list | \ - sed 's/^deb/deb-src /g' >> /etc/apt/sources.list - -# Install compiler, python and subversion. -RUN apt-get update && \ - apt-get install -y \ - --no-install-recommends \ - ca-certificates gnupg \ - build-essential \ - python \ - wget \ - unzip \ - git \ - ssh && \ - rm -rf /var/lib/apt/lists/* - -# Install a newer ninja release. It seems the older version in the debian repos -# randomly crashes when compiling llvm. -RUN wget "https://github.com/ninja-build/ninja/releases/download/v1.8.2/ninja-linux.zip" && \ - echo "d2fea9ff33b3ef353161ed906f260d565ca55b8ca0568fa07b1d2cab90a84a07 ninja-linux.zip" \ - | sha256sum -c && \ - unzip ninja-linux.zip -d /usr/local/bin && \ - rm ninja-linux.zip - -# Import public key required for verifying signature of cmake download. -RUN gpg --no-tty --keyserver hkp://pgp.mit.edu --recv 0x2D2CEF1034921684 - -# Download, verify and install cmake version that can compile clang into /usr/local. -# (Version in debian8 repos is too old) -RUN mkdir /tmp/cmake-install && cd /tmp/cmake-install && \ - wget "https://cmake.org/files/v3.7/cmake-3.7.2-SHA-256.txt.asc" && \ - wget "https://cmake.org/files/v3.7/cmake-3.7.2-SHA-256.txt" && \ - gpg --verify cmake-3.7.2-SHA-256.txt.asc cmake-3.7.2-SHA-256.txt && \ - wget "https://cmake.org/files/v3.7/cmake-3.7.2-Linux-x86_64.tar.gz" && \ - ( grep "cmake-3.7.2-Linux-x86_64.tar.gz" cmake-3.7.2-SHA-256.txt | \ - sha256sum -c - ) && \ - tar xzf cmake-3.7.2-Linux-x86_64.tar.gz -C /usr/local --strip-components=1 && \ - cd / && \ - rm -rf /tmp/cmake-install - -# ADD checksums /tmp/checksums -# ADD scripts /tmp/scripts - -# Checkout the source code -RUN git clone https://github.com/solana-labs/llvm.git && \ - git clone https://github.com/solana-labs/clang.git llvm/tools/clang && \ - git clone https://github.com/solana-labs/clang-tools-extra.git llvm/tools/clang/tools/extra && \ - git clone https://github.com/solana-labs/lld.git llvm/tools/lld && \ - git clone https://github.com/solana-labs/compiler-rt.git llvm/projects/compiler-rt - -RUN mkdir /llvm/build && \ - cd /llvm/build && \ - cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_INSTALL_PREFIX=$HOME/local -G "Ninja" .. && \ - ninja -j6 && \ - ninja install - -# Produce stage 2 docker with just the peices needed -FROM launcher.gcr.io/google/debian8:latest -LABEL maintainer "Solana Maintainers" -COPY --from=builder root/local/bin /usr/local/bin diff --git a/sdk/docker-llvm/README.md b/sdk/docker-llvm/README.md deleted file mode 100644 index e607e02d93..0000000000 --- a/sdk/docker-llvm/README.md +++ /dev/null @@ -1,16 +0,0 @@ -## Solana Customized LLVM - -This Docker contains LLVM binaries that incorporate customizations and fixes required -by Solana but not yet upstreamed into the LLVM mainline. - -https://hub.docker.com/r/solanalabs/llvm/ - -### Usage: - -This Docker is optionally used by the SDK BPF build system. - -For more information: - -```bash -$ make help -``` diff --git a/sdk/docker-llvm/build.sh b/sdk/docker-llvm/build.sh deleted file mode 100755 index abc953acc0..0000000000 --- a/sdk/docker-llvm/build.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env bash -set -ex - -cd "$(dirname "$0")" - -docker build -t solanalabs/llvm . -docker push solanalabs/llvm