summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorW. Trevor King <wking@tremily.us>2018-06-29 14:47:53 -0700
committerAtomic Bot <atomic-devel@projectatomic.io>2018-07-06 00:48:39 +0000
commit4b54a471a49cfae617c65b2027ae1e7cc1671cfc (patch)
tree4bccbfa40db5f2c6b65862d75cd681f1a2e10206
parentcc6f0e85f994cab66fb63c4dd8b77b4332151748 (diff)
downloadpodman-4b54a471a49cfae617c65b2027ae1e7cc1671cfc.tar.gz
podman-4b54a471a49cfae617c65b2027ae1e7cc1671cfc.tar.bz2
podman-4b54a471a49cfae617c65b2027ae1e7cc1671cfc.zip
Makefile: Use a pattern rule for cross-compilation
Pattern-rule documentation is in [1]. This commit follows the basic approach from [2], with the portable build tags from [3]. Using --keep-going allows folks to see errors for multiple target platforms. For example, if the Darwin target dies, we'll still attempt to build the Linux target before erroring out. I've added an ALLOWED_TO_FAIL environment variable to mark script blocks for the the allow_failures block. Currently we're requiring builds from Linux for Linux and OS X to succeed, but allowing builds from OS X to both targets to fail. [1]: https://www.gnu.org/software/make/manual/html_node/Pattern-Intro.html#Pattern-Intro [2]: https://github.com/kubernetes-incubator/cri-o/commit/e5031fcf9af7d6c78d21e38ab9f82d2392ba05e8 [3]: https://github.com/kubernetes-incubator/cri-o/pull/1653 Signed-off-by: W. Trevor King <wking@tremily.us> Closes: #1034 Approved by: baude
-rw-r--r--.travis.yml18
-rw-r--r--Makefile17
2 files changed, 27 insertions, 8 deletions
diff --git a/.travis.yml b/.travis.yml
index ea4372f7f..b42565093 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -7,10 +7,10 @@ services:
- docker
before_install:
- - sudo apt-get -qq update
- - sudo apt-get -qq install btrfs-tools libdevmapper-dev libgpgme11-dev libapparmor-dev
- - sudo apt-get -qq install autoconf automake bison e2fslibs-dev libfuse-dev libtool liblzma-dev gettext python3-setuptools python3-dateutil
- - sudo make install.libseccomp.sudo
+ - if [ "${TRAVIS_OS_NAME}" = linux ]; then sudo apt-get -qq update; fi
+ - if [ "${TRAVIS_OS_NAME}" = linux ]; then sudo apt-get -qq install btrfs-tools libdevmapper-dev libgpgme11-dev libapparmor-dev; fi
+ - if [ "${TRAVIS_OS_NAME}" = linux ]; then sudo apt-get -qq install autoconf automake bison e2fslibs-dev libfuse-dev libtool liblzma-dev gettext python3-setuptools python3-dateutil; fi
+ - if [ "${TRAVIS_OS_NAME}" = linux ]; then sudo make install.libseccomp.sudo; fi
install:
- make install.tools
@@ -37,11 +37,21 @@ jobs:
script:
- make testunit
go: 1.10.x
+ - script:
+ - make --keep-going local-cross
+ go: 1.10.x
+ - script:
+ - make --keep-going local-cross
+ go: 1.10.x
+ os: osx
+ env: ALLOWED_TO_FAIL=true
- stage: Integration Test
script:
- make all
- make integration
go: 1.9.x
+ allow_failures:
+ - env: ALLOWED_TO_FAIL=true
notifications:
irc: "chat.freenode.net#podman"
diff --git a/Makefile b/Makefile
index b89e6b416..2ad5a3d88 100644
--- a/Makefile
+++ b/Makefile
@@ -18,7 +18,7 @@ ETCDIR_LIBPOD ?= ${ETCDIR}/crio
TMPFILESDIR ?= ${PREFIX}/lib/tmpfiles.d
SYSTEMDDIR ?= ${PREFIX}/lib/systemd/system
BUILDTAGS ?= seccomp $(shell hack/btrfs_tag.sh) $(shell hack/libdm_tag.sh) $(shell hack/btrfs_installed_tag.sh) $(shell hack/ostree_tag.sh) $(shell hack/selinux_tag.sh) varlink
-BUILDTAGS_DARWIN ?= containers_image_ostree_stub containers_image_openpgp
+BUILDTAGS_CROSS ?= containers_image_openpgp containers_image_ostree_stub exclude_graphdriver_btrfs exclude_graphdriver_devicemapper exclude_graphdriver_overlay
ifneq (,$(findstring varlink,$(BUILDTAGS)))
PODMAN_VARLINK_DEPENDENCIES = cmd/podman/varlink/ioprojectatomicpodman.go
endif
@@ -57,6 +57,10 @@ GOMD2MAN ?= $(shell command -v go-md2man || echo '$(GOBIN)/go-md2man')
BOX="fedora_atomic"
+CROSS_BUILD_TARGETS := \
+ bin/podman.cross.darwin.amd64 \
+ bin/podman.cross.linux.amd64
+
all: binaries docs
default: help
@@ -98,8 +102,13 @@ test/checkseccomp/checkseccomp: .gopathok $(wildcard test/checkseccomp/*.go)
podman: .gopathok $(PODMAN_VARLINK_DEPENDENCIES)
$(GO) build -i -ldflags '$(LDFLAGS_PODMAN)' -tags "$(BUILDTAGS)" -o bin/$@ $(PROJECT)/cmd/podman
-darwin:
- GOOS=darwin $(GO) build -ldflags '$(LDFLAGS_PODMAN)' -tags "$(BUILDTAGS_DARWIN)" -o bin/podman.$@ $(PROJECT)/cmd/podman
+local-cross: $(CROSS_BUILD_TARGETS)
+
+bin/podman.cross.%: .gopathok
+ TARGET="$*"; \
+ GOOS="$${TARGET%%.*}" \
+ GOARCH="$${TARGET##*.}" \
+ $(GO) build -i -ldflags '$(LDFLAGS_PODMAN)' -tags '$(BUILDTAGS_CROSS)' -o "$@" $(PROJECT)/cmd/podman
python-podman:
ifdef HAS_PYTHON3
@@ -110,7 +119,7 @@ clean:
rm -rf \
.gopathok \
_output \
- bin/podman \
+ bin \
build \
test/bin2img/bin2img \
test/checkseccomp/checkseccomp \