about summary refs log tree commit diff
path: root/src/ci
diff options
context:
space:
mode:
authorVardhan Thigle <vardhan.thigle@fortanix.com>2018-12-26 12:32:45 +0530
committerVardhan Thigle <vardhan.thigle@fortanix.com>2019-01-13 13:07:45 +0530
commit4a957b320dce39a044a05d3ad33ce4b20134c263 (patch)
treef8494c86ce3fffdc7a98b3980be2f30a2bbd7341 /src/ci
parent75a369c5b11459baa6bf7734eeb6135998a0a7de (diff)
downloadrust-4a957b320dce39a044a05d3ad33ce4b20134c263.tar.gz
rust-4a957b320dce39a044a05d3ad33ce4b20134c263.zip
Adding Build automation for x86_64-fortanix-unknown-sgx
Diffstat (limited to 'src/ci')
-rw-r--r--src/ci/docker/dist-various-2/Dockerfile7
-rwxr-xr-xsrc/ci/docker/dist-various-2/build-x86_64-fortanix-unknown-sgx-toolchain.sh57
-rw-r--r--src/ci/docker/dist-various-2/shared.sh18
3 files changed, 82 insertions, 0 deletions
diff --git a/src/ci/docker/dist-various-2/Dockerfile b/src/ci/docker/dist-various-2/Dockerfile
index 944c2a51b8d..906255533ad 100644
--- a/src/ci/docker/dist-various-2/Dockerfile
+++ b/src/ci/docker/dist-various-2/Dockerfile
@@ -29,6 +29,10 @@ RUN /tmp/build-fuchsia-toolchain.sh
 COPY dist-various-2/build-solaris-toolchain.sh /tmp/
 RUN /tmp/build-solaris-toolchain.sh x86_64  amd64   solaris-i386
 RUN /tmp/build-solaris-toolchain.sh sparcv9 sparcv9 solaris-sparc
+COPY dist-various-2/build-x86_64-fortanix-unknown-sgx-toolchain.sh /tmp/
+# We pass the commit id of the port of LLVM's libunwind to the build script.
+# Any update to the commit id here, should cause the container image to be re-built from this point on.
+RUN /tmp/build-x86_64-fortanix-unknown-sgx-toolchain.sh "bbe23902411be88d7388f381becefadd6e3ef819"
 
 COPY scripts/sccache.sh /scripts/
 RUN sh /scripts/sccache.sh
@@ -65,6 +69,9 @@ ENV TARGETS=$TARGETS,wasm32-unknown-unknown
 ENV TARGETS=$TARGETS,x86_64-sun-solaris
 ENV TARGETS=$TARGETS,x86_64-unknown-linux-gnux32
 ENV TARGETS=$TARGETS,x86_64-unknown-cloudabi
+ENV TARGETS=$TARGETS,x86_64-fortanix-unknown-sgx
+
+ENV X86_FORTANIX_SGX_LIBS="/x86_64-fortanix-unknown-sgx/lib/"
 
 ENV RUST_CONFIGURE_ARGS --enable-extended --enable-lld --disable-docs
 ENV SCRIPT python2.7 ../x.py dist --target $TARGETS
diff --git a/src/ci/docker/dist-various-2/build-x86_64-fortanix-unknown-sgx-toolchain.sh b/src/ci/docker/dist-various-2/build-x86_64-fortanix-unknown-sgx-toolchain.sh
new file mode 100755
index 00000000000..76921316df2
--- /dev/null
+++ b/src/ci/docker/dist-various-2/build-x86_64-fortanix-unknown-sgx-toolchain.sh
@@ -0,0 +1,57 @@
+#!/bin/bash
+
+set -eu
+source shared.sh
+
+if [ -z "$1" ]; then
+    echo "Usage: ${0} <commit_id>"
+    exit -1
+fi
+
+target="x86_64-fortanix-unknown-sgx"
+url="https://github.com/fortanix/llvm-project/archive/${1}.tar.gz"
+repo_name="llvm-project"
+
+install_prereq()
+{
+    apt-get update
+    apt-get install -y --no-install-recommends \
+            build-essential \
+            ca-certificates \
+            cmake \
+            git
+}
+
+# Clone Fortanix's port of llvm-project to build libunwind that would link with this target.
+# The below method to download a single commit from llvm-project is based on fetch_submodule
+# from init_repo.sh
+fetch_llvm_commit()
+{
+    cached="download-${repo_name}.tar.gz"
+    curl -f -sSL -o ${cached} ${url}
+    tar -xvzf ${cached}
+    mkdir "./${repo_name}" && tar -xf ${cached} -C ${repo_name} --strip-components 1
+}
+
+build_unwind()
+{
+    dir_name="${target}_temp"
+    rm -rf "./${dir_name}"
+    mkdir -p ${dir_name}
+    cd ${dir_name}
+
+    retry fetch_llvm_commit
+    cd "${repo_name}/libunwind"
+
+    # Build libunwind
+    mkdir -p build
+    cd build
+    cmake -DCMAKE_BUILD_TYPE="RELEASE" -DRUST_SGX=1 -G "Unix Makefiles" -DLLVM_PATH=../../llvm/ ../
+    make unwind_static
+    install -D "lib/libunwind.a" "/${target}/lib/libunwind.a"
+    rm -rf ${dir_name}
+}
+
+set -x
+hide_output install_prereq
+hide_output build_unwind
diff --git a/src/ci/docker/dist-various-2/shared.sh b/src/ci/docker/dist-various-2/shared.sh
index 2b5eccb3189..fb917b0510e 100644
--- a/src/ci/docker/dist-various-2/shared.sh
+++ b/src/ci/docker/dist-various-2/shared.sh
@@ -13,3 +13,21 @@ exit 1
   kill $PING_LOOP_PID
   set -x
 }
+
+function retry {
+  echo "Attempting with retry:" "$@"
+  local n=1
+  local max=5
+  while true; do
+    "$@" && break || {
+      if [[ $n -lt $max ]]; then
+        sleep $n  # don't retry immediately
+        ((n++))
+        echo "Command failed. Attempt $n/$max:"
+      else
+        echo "The command has failed after $n attempts."
+        return 1
+      fi
+    }
+  done
+}