Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mozilla/geckodriver.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Tolfsen <ato@mozilla.com>2016-09-06 13:07:10 +0300
committerGitHub <noreply@github.com>2016-09-06 13:07:10 +0300
commit39b2b269df496d17c8041bd579a4a409ee2e3050 (patch)
tree663bbb74af473adbc74f4046ede2362e032b595e
parentc0c134fe611d77fdd6dfc4a85fa3a40e8caa9119 (diff)
parent994cb3177414e51ac7bef8bdeb143beef2fda4d6 (diff)
Merge pull request #213 from mozilla/win32_docker
Cross-compile on win32 using Docker image from port-of-rust
-rw-r--r--.travis.yml20
-rw-r--r--build.sh148
-rw-r--r--ci.sh136
3 files changed, 181 insertions, 123 deletions
diff --git a/.travis.yml b/.travis.yml
index 7437898..7d0c623 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,4 +1,9 @@
language: generic
+cache:
+ directories:
+ - $HOME/.cargo
+ - $TRAVIS_BUILD_DIR/target
+ - $HOME/docker/
matrix:
include:
@@ -38,18 +43,21 @@ matrix:
- gcc-mingw-w64-x86-64
- binutils-mingw-w64-x86-64
- libbz2-dev
+ - os: linux
+ env:
+ - TARGET=i686-pc-windows-gnu
+ - NAME=win32
+ - EXT=zip
+ - USE_DOCKER=1
+ dist: trusty
+ services:
+ - docker
- os: osx
env:
- TARGET=x86_64-apple-darwin
- NAME=macos
- EXT=tar.gz
-install:
- - export PATH="$PATH:$HOME/.cargo/bin"
- - curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain=beta
- - rustc -V
- - cargo -V
-
script:
- bash ci.sh
diff --git a/build.sh b/build.sh
new file mode 100644
index 0000000..186363e
--- /dev/null
+++ b/build.sh
@@ -0,0 +1,148 @@
+set -ex
+
+print_versions() {
+ rustc -V
+ cargo -V
+}
+
+rustup_install() {
+ export PATH="$PATH:$HOME/.cargo/bin"
+ curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain=beta
+}
+
+# Add provided target to current Rust toolchain if it is not already
+# the default or installed.
+rustup_target_add() {
+ if ! rustup target list | grep -E "$1 \((default|installed)\)"
+ then
+ rustup target add $1
+ fi
+}
+
+setup_docker() {
+ apt-get -qq -y install zip
+ cd /mnt/host
+}
+
+# Configure rustc target for cross compilation. Provided with a build
+# target, this will determine which linker to use for cross compilation.
+cargo_config() {
+ local prefix
+
+ case "$TARGET" in
+ aarch64-unknown-linux-gnu)
+ prefix=aarch64-linux-gnu
+ ;;
+ arm*-unknown-linux-gnueabihf)
+ prefix=arm-linux-gnueabihf
+ ;;
+ arm-unknown-linux-gnueabi)
+ prefix=arm-linux-gnueabi
+ ;;
+ mipsel-unknown-linux-musl)
+ prefix=mipsel-openwrt-linux
+ ;;
+ x86_64-pc-windows-gnu)
+ prefix=x86_64-w64-mingw32
+ ;;
+ *)
+ return
+ ;;
+ esac
+
+ mkdir -p ~/.cargo
+ cat >~/.cargo/config <<EOF
+[target.$TARGET]
+linker = "$prefix-gcc"
+EOF
+}
+
+# Build current crate for given target and print file type information.
+# If the second argument is set, a release build will be made.
+cargo_build() {
+ local mode
+ if [ -z "$2" ]
+ then
+ mode=debug
+ else
+ mode=release
+ fi
+
+ local modeflag
+ if [ "$mode" == "release" ]
+ then
+ modeflag=--release
+ fi
+
+ cargo build --target $1 $modeflag
+
+ file $(get_binary $1 $mode)
+}
+
+# Run current crate's tests if the current system supports it.
+cargo_test() {
+ if echo "$1" | grep -E "(i686|x86_64)-unknown-linux-(gnu|musl)|darwin"
+ then
+ cargo test --target $1
+ fi
+}
+
+# Returns relative path to binary
+# based on build target and type ("release"/"debug").
+get_binary() {
+ local ext
+ if [[ "$1" =~ "windows" ]]
+ then
+ ext=".exe"
+ fi
+ echo "target/$1/$2/geckodriver$ext"
+}
+
+# Create a compressed archive of the binary
+# for the given given git tag, build target, and build type.
+package_binary() {
+ local bin
+ bin=$(get_binary $2 $4)
+ cp $bin .
+
+ if [[ "$2" =~ "windows" ]]
+ then
+ filename="geckodriver-$1-$3.zip"
+ zip "$filename" geckodriver.exe
+ file "$filename"
+ else
+ filename="geckodriver-$1-$3.tar.gz"
+ tar zcvf "$filename" geckodriver
+ file "$filename"
+ fi
+ if [ ! -z "$USE_DOCKER" ]
+ then
+ chown "$USER_ID:$GROUP_ID" "$filename"
+ fi
+}
+
+main() {
+ if [ ! -z "$USE_DOCKER" ]
+ then
+ setup_docker
+ print_versions
+ else
+ rustup_install
+ print_versions
+ rustup_target_add $TARGET
+ fi
+
+ cargo_config $TARGET
+ cargo_build $TARGET
+ cargo_test $TARGET
+
+ # when something is tagged,
+ # also create a release build and package it
+ if [ ! -z "$TRAVIS_TAG" ]
+ then
+ cargo_build $TARGET 1
+ package_binary $TRAVIS_TAG $TARGET $NAME "release"
+ fi
+}
+
+main
diff --git a/ci.sh b/ci.sh
index 5ea11f0..2adb849 100644
--- a/ci.sh
+++ b/ci.sh
@@ -1,119 +1,21 @@
set -ex
-# Add provided target to current Rust toolchain if it is not already
-# the default or installed.
-rustup_target_add() {
- if ! rustup target list | grep -E "$1 \((default|installed)\)"
- then
- rustup target add $1
- fi
-}
-
-# Configure rustc target for cross compilation. Provided with a build
-# target, this will determine which linker to use for cross compilation.
-cargo_config() {
- local prefix
-
- case "$TARGET" in
- aarch64-unknown-linux-gnu)
- prefix=aarch64-linux-gnu
- ;;
- arm*-unknown-linux-gnueabihf)
- prefix=arm-linux-gnueabihf
- ;;
- arm-unknown-linux-gnueabi)
- prefix=arm-linux-gnueabi
- ;;
- mipsel-unknown-linux-musl)
- prefix=mipsel-openwrt-linux
- ;;
- x86_64-pc-windows-gnu)
- prefix=x86_64-w64-mingw32
- ;;
- *)
- return
- ;;
- esac
-
- mkdir -p ~/.cargo
- cat >>~/.cargo/config <<EOF
-[target.$TARGET]
-linker = "$prefix-gcc"
-EOF
-}
-
-# Build current crate for given target and print file type information.
-# If the second argument is set, a release build will be made.
-cargo_build() {
- local mode
- if [ -z "$2" ]
- then
- mode=debug
- else
- mode=release
- fi
-
- local modeflag
- if [ "$mode" == "release" ]
- then
- modeflag=--release
- fi
-
- cargo build --target $1 $modeflag
-
- file $(get_binary $1 $mode)
-}
-
-# Run current crate's tests if the current system supports it.
-cargo_test() {
- if echo "$1" | grep -E "(i686|x86_64)-unknown-linux-(gnu|musl)|darwin"
- then
- cargo test --target $1
- fi
-}
-
-# Returns relative path to binary
-# based on build target and type ("release"/"debug").
-get_binary() {
- local ext
- if [[ "$1" =~ "windows" ]]
- then
- ext=".exe"
- fi
- echo "target/$1/$2/geckodriver$ext"
-}
-
-# Create a compressed archive of the binary
-# for the given given git tag, build target, and build type.
-package_binary() {
- local bin
- bin=$(get_binary $2 $4)
- cp $bin .
-
- if [[ "$2" =~ "windows" ]]
- then
- zip geckodriver-$1-$3.zip geckodriver.exe
- file geckodriver-$1-$3.zip
- else
- tar zcvf geckodriver-$1-$3.tar.gz geckodriver
- file geckodriver-$1-$3.tar.gz
- fi
-}
-
-main() {
- rustup_target_add $TARGET
-
- cargo_config $TARGET
- cargo_build $TARGET
- cargo_test $TARGET
-
- # when something is tagged,
- # also create a release build and package it
- if [ ! -z "$TRAVIS_TAG" ]
- then
- cargo_build $TARGET 1
- package_binary $TRAVIS_TAG $TARGET $NAME "release"
- fi
-}
-
-main
+if [ ! -z "$USE_DOCKER" ]
+then
+ ls .
+ tag="port-of-rust/$TARGET/latest"
+ docker build https://github.com/alexcrichton/port-of-rust.git -f "$TARGET/Dockerfile" -t $tag
+ docker run\
+ -e USER="$USER"\
+ -e TARGET="$TARGET"\
+ -e USE_DOCKER=1\
+ -e NAME="$NAME"\
+ -e TRAVIS_TAG="$TRAVIS_TAG"\
+ -e USER_ID=$(id -u)\
+ -e GROUP_ID=$(id -g)\
+ -v $PWD:/mnt/host\
+ -i $tag\
+ bash -s -- < build.sh
+else
+ bash build.sh
+fi