Kaynağa Gözat

Add new "cross" bundle to cross-compile the Docker client for other platforms (currently just 32-bit and 64-bit OS X)

Tianon Gravi 11 yıl önce
ebeveyn
işleme
62a81370ff
5 değiştirilmiş dosya ile 36 ekleme ve 2 silme
  1. 6 1
      Dockerfile
  2. 4 1
      Makefile
  3. 1 0
      hack/make.sh
  4. 13 0
      hack/make/cross
  5. 12 0
      hack/release.sh

+ 6 - 1
Dockerfile

@@ -39,7 +39,12 @@ RUN	apt-get install -y -q build-essential libsqlite3-dev
 RUN	curl -s https://go.googlecode.com/files/go1.2.src.tar.gz | tar -v -C /usr/local -xz
 ENV	PATH	/usr/local/go/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin
 ENV	GOPATH	/go:/go/src/github.com/dotcloud/docker/vendor
-RUN	cd /usr/local/go/src && ./make.bash
+RUN	cd /usr/local/go/src && ./make.bash --no-clean 2>&1
+
+# Cross compilation
+ENV	DOCKER_CROSSPLATFORMS	darwin/amd64 darwin/386
+# TODO add linux/386 and linux/arm
+RUN	cd /usr/local/go/src && bash -xc 'for platform in $DOCKER_CROSSPLATFORMS; do GOOS=${platform%/*} GOARCH=${platform##*/} ./make.bash --no-clean 2>&1; done'
 
 # Ubuntu stuff
 RUN	apt-get install -y -q ruby1.9.3 rubygems libffi-dev

+ 4 - 1
Makefile

@@ -1,4 +1,4 @@
-.PHONY: all binary build default docs shell test
+.PHONY: all binary build cross default docs shell test
 
 DOCKER_RUN_DOCKER := docker run -rm -i -t -privileged -e TESTFLAGS -v $(CURDIR)/bundles:/go/src/github.com/dotcloud/docker/bundles docker
 
@@ -10,6 +10,9 @@ all: build
 binary: build
 	$(DOCKER_RUN_DOCKER) hack/make.sh binary
 
+cross: build
+	$(DOCKER_RUN_DOCKER) hack/make.sh cross
+
 docs:
 	docker build -t docker-docs docs && docker run -p 8000:8000 docker-docs
 

+ 1 - 0
hack/make.sh

@@ -40,6 +40,7 @@ DEFAULT_BUNDLES=(
 	dyntest
 	dyntest-integration
 	cover
+	cross
 	tgz
 	ubuntu
 )

+ 13 - 0
hack/make/cross

@@ -0,0 +1,13 @@
+#!/bin/bash
+
+DEST=$1
+
+for platform in $DOCKER_CROSSPLATFORMS; do
+	(
+		export GOOS=${platform%/*}
+		export GOARCH=${platform##*/}
+		export VERSION="$GOOS-$GOARCH-$VERSION" # for a nice filename
+		export LDFLAGS_STATIC="" # we just need a simple client for these platforms (TODO this might change someday)
+		source "$(dirname "$BASH_SOURCE")/binary"
+	)
+done

+ 12 - 0
hack/release.sh

@@ -47,6 +47,7 @@ cd /go/src/github.com/dotcloud/docker
 
 RELEASE_BUNDLES=(
 	binary
+	cross
 	tgz
 	ubuntu
 )
@@ -233,6 +234,16 @@ EOF
 	fi
 }
 
+# Upload a cross-compiled client binaries to S3
+release_cross() {
+	[ -e bundles/$VERSION/cross ] || {
+		echo >&2 './hack/make.sh must be run before release_binary'
+		exit 1
+	}
+	
+	# TODO find out from @shykes what URLs he'd like to use here
+}
+
 # Upload the index script
 release_index() {
 	sed "s,https://get.docker.io/,$(s3_url)/," hack/install.sh | write_to_s3 s3://$BUCKET/index
@@ -247,6 +258,7 @@ release_test() {
 main() {
 	setup_s3
 	release_binary
+	release_cross
 	release_tgz
 	release_ubuntu
 	release_index