mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-20 16:55:40 +00:00
geckodriver: Merge pull request #213 from mozilla/win32_docker
Cross-compile on win32 using Docker image from port-of-rust Source-Repo: https://github.com/mozilla/geckodriver Source-Revision: 39b2b269df496d17c8041bd579a4a409ee2e3050 --HG-- rename : testing/geckodriver/ci.sh => testing/geckodriver/build.sh extra : rebase_source : 2549ca79b2acbe17e0807d3c1a339459397fc311
This commit is contained in:
parent
390ed07f10
commit
90ef98cd1e
@ -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
|
||||
|
||||
|
148
testing/geckodriver/build.sh
Normal file
148
testing/geckodriver/build.sh
Normal file
@ -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
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user