Merge pull request #85 from bassamtabbara/macos-build-improvements

improve support for building on macOS
This commit is contained in:
Bassam Tabbara
2016-10-17 12:32:49 -07:00
committed by GitHub
5 changed files with 37 additions and 28 deletions
+1 -1
View File
@@ -104,7 +104,7 @@ CEPHD_PLATFORM = $(GOOS)_$(GOARCH)
CEPHD_TOUCH_ON_BUILD = pkg/cephmgr/cephd/dummy.cc
GO_CGO_PACKAGES=cmd/castled
CGO_LDFLAGS = -L$(CURDIR)/$(CEPHD_BUILD_DIR)/$(CEPHD_PLATFORM)/lib
CGO_LDFLAGS = -L$(abspath $(CEPHD_BUILD_DIR)/$(CEPHD_PLATFORM)/lib)
CGO_PREREQS = cephd.build
include build/makelib/cephd.mk
+7 -7
View File
@@ -1,12 +1,10 @@
FROM ubuntu:xenial
MAINTAINER Bassam Tabbara <bassam.tabbara@quantum.com>
RUN echo \
"deb [arch=amd64] http://archive.ubuntu.com/ubuntu xenial main universe restricted\n\
deb [arch=amd64] http://archive.ubuntu.com/ubuntu xenial-updates main universe restricted\n\
deb [arch=arm64] http://ports.ubuntu.com/ xenial main universe restricted\n\
deb [arch=arm64] http://ports.ubuntu.com/ xenial-updates main universe restricted\n\
" > /etc/apt/sources.list && \
RUN echo "deb [arch=amd64] http://archive.ubuntu.com/ubuntu xenial main universe restricted" > /etc/apt/sources.list &&\
echo "deb [arch=amd64] http://archive.ubuntu.com/ubuntu xenial-updates main universe restricted" >> /etc/apt/sources.list &&\
echo "deb [arch=arm64] http://ports.ubuntu.com/ xenial main universe restricted" >> /etc/apt/sources.list &&\
echo "deb [arch=arm64] http://ports.ubuntu.com/ xenial-updates main universe restricted" >> /etc/apt/sources.list &&\
dpkg --add-architecture arm64 && \
apt-get update
@@ -53,9 +51,11 @@ ENV PATH /usr/local/osxcross/bin:$PATH
RUN ACBUILD_VERSION=0.4.0 && \
curl -fsSLO https://github.com/containers/build/releases/download/v${ACBUILD_VERSION}/acbuild-v${ACBUILD_VERSION}.tar.gz && \
tar -C /usr/local/bin --strip-components=1 -xzf acbuild-v${ACBUILD_VERSION}.tar.gz && \
rm -f acbuild-v${ACBUILD_VERSION}.tar.gz && \
DOCKER2ACI_VERSION=0.12.3 && \
curl -fsSLO https://github.com/appc/docker2aci/releases/download/v${DOCKER2ACI_VERSION}/docker2aci-v${DOCKER2ACI_VERSION}.tar.gz && \
tar -C /usr/local/bin --strip-components=1 -xzf docker2aci-v${DOCKER2ACI_VERSION}.tar.gz
tar -C /usr/local/bin --strip-components=1 -xzf docker2aci-v${DOCKER2ACI_VERSION}.tar.gz && \
rm -f docker2aci-v${DOCKER2ACI_VERSION}.tar.gz
#
# install multi-arch packages needed to build ceph
+1 -1
View File
@@ -49,7 +49,7 @@ cephd.config:
@mkdir -p $(CEPHD_BUILD_DIR)/$(CEPHD_PLATFORM)
@echo "$(CEPHD_CMAKE)" > $(CEPHD_BUILD_DIR)/$(CEPHD_PLATFORM)/cephd.cmake.new
@if test ! -f $(CEPHD_BUILD_DIR)/$(CEPHD_PLATFORM)/cephd.cmake || ! diff $(CEPHD_BUILD_DIR)/$(CEPHD_PLATFORM)/cephd.cmake.new $(CEPHD_BUILD_DIR)/$(CEPHD_PLATFORM)/cephd.cmake > /dev/null; then \
cd $(CEPHD_BUILD_DIR)/$(CEPHD_PLATFORM) && cmake $(CEPHD_CMAKE) -DCMAKE_TOOLCHAIN_FILE=$(CURDIR)/build/makelib/toolchain.$(CEPHD_PLATFORM).cmake $(CURDIR)/ceph; \
cd $(CEPHD_BUILD_DIR)/$(CEPHD_PLATFORM) && cmake $(CEPHD_CMAKE) -DCMAKE_TOOLCHAIN_FILE=$(abspath build/makelib/toolchain.$(CEPHD_PLATFORM).cmake) $(abspath ceph); \
echo "$(CEPHD_CMAKE)" > cephd.cmake; \
fi
@rm $(CEPHD_BUILD_DIR)/$(CEPHD_PLATFORM)/cephd.cmake.new
+5 -11
View File
@@ -63,21 +63,17 @@ unexport CGO_ENABLED
export CGO_CFLAGS CGO_CPPFLAGS CGO_LDFLAGS GLIDE_HOME
# setup glide
GLIDE_HOME := $(CURDIR)/.glide
GLIDE_HOME := $(abspath .glide)
GLIDE := $(GO_TOOLS_DIR)/glide
GO := go
GOHOST := GOOS=$(GOHOSTOS) GOARCH=$(GOHOSTARCH) go
ifeq ($(GOOS)_$(GOARCH),$(GOHOSTOS)_$(GOHOSTARCH))
GO_OUT_DIR := $(CURDIR)/$(GO_BIN_DIR)
else
GO_OUT_DIR := $(CURDIR)/$(GO_BIN_DIR)/$(GOOS)_$(GOARCH)
endif
GO_OUT_DIR := $(abspath $(GO_BIN_DIR)/$(GOOS)_$(GOARCH))
ifneq ($(GO_PKG_DIR),)
GO_PKG_FLAGS := -pkgdir $(CURDIR)/$(GO_PKG_DIR)/$(GOOS)_$(GOARCH)
GO_PKG_STATIC_FLAGS := -pkgdir $(CURDIR)/$(GO_PKG_DIR)/$(GOOS)_$(GOARCH)_static -installsuffix static
GO_PKG_FLAGS := -pkgdir $(abspath $(GO_PKG_DIR)/$(GOOS)_$(GOARCH))
GO_PKG_STATIC_FLAGS := -pkgdir $(abspath $(GO_PKG_DIR)/$(GOOS)_$(GOARCH)_static) -installsuffix static
else
GO_PKG_STATIC_FLAGS := -installsuffix static
endif
@@ -85,8 +81,7 @@ endif
# ====================================================================================
# Targets
ifneq ($(MAKECMDGOALS), help)
ifneq ($(MAKECMDGOALS), clean)
ifeq ($(filter help clean distclean, $(MAKECMDGOALS)),)
.PHONY: go.check
go.check:
ifneq ($(shell $(GO) version | grep -q -E '\bgo($(GO_SUPPORTED_VERSIONS))\b' && echo 0 || echo 1), 0)
@@ -103,7 +98,6 @@ go.init: $(GO_VENDOR_DIR)/vendor.stamp
-include go.init
endif
endif
.PHONY: go.build
go.build: go.vet go.fmt $(CGO_PREREQS)
+23 -8
View File
@@ -1,10 +1,10 @@
#!/bin/bash -e
scriptdir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
friendly_name=cross-build
version=$(cat ${scriptdir}/cross-image/version)
container=quantum/castle-${friendly_name}:${version}
volume=cross-build
function ver() {
printf "%d%03d%03d%03d" $(echo "$1" | tr '.' ' ')
@@ -28,40 +28,55 @@ if [ ! -z $DOCKER_HOST ]; then
return 1
fi
# if our volume does not exist create one.
# NOTE: osxfs is really slow so we avoid using it
if [[ ! $(docker volume ls | grep $volume) ]]; then
echo ==== Creating docker volume ${volume}
docker volume create --name ${volume}
fi
# if the container does not exist the pull or build it
if [[ ! $(docker images -q ${container}) ]]; then
echo ==== Pulling ${container}
docker pull ${container}
fi
USER_ARGS="-e BUILDER_UID=$( id -u ) -e BUILDER_GID=$( id -g ) -e BUILDER_USER=$( id -un ) -e BUILDER_GROUP=$( id -gn )"
BUILDER_HOME=/home/$( id -un )
# on Linux we run the container with the same uid and gid of the user to avoid
# permissions issues. For docker on macOS this is not needed since we rely on osxfs
if [ "`uname -s`" == "Linux" ]; then
USER_ARGS="-e BUILDER_UID=$( id -u ) -e BUILDER_GID=$( id -g ) -e BUILDER_USER=$( id -un ) -e BUILDER_GROUP=$( id -gn )"
BUILDER_HOME=/home/$( id -un )
else
BUILDER_HOME=/root
fi
if [ -n ${CCACHE_DIR+x} ]; then
if [[ `which ccache` && -n "${CCACHE_DIR}" ]]; then
CCACHE_ARGS="-e CCACHE_DIR=${BUILDER_HOME}/.ccache -e CCACHE_LOG -v ${CCACHE_DIR}:${BUILDER_HOME}/.ccache"
fi
# we copy credential files for github access
[[ -f ${HOME}/.netrc ]] && NETRC_ARGS="-v ${HOME}/.netrc:${BUILDER_HOME}/.netrc"
tty -s && TTY_ARGS=-ti || TTY_ARGS=
# docker seems more reliable when running with net=host.
if [ -z "${DISABLE_HOST_NETWORK}" ]; then
NET_ARGS="--net=host"
fi
# sometimes we run docker inside docker. bind the docker config and socket
if [ -z "${DISABLE_NESTED_DOCKER}" ]; then
DOCKER_NESTED_ARGS="\
-v ${HOME}/.docker/config.json:${BUILDER_HOME}/.docker/config.json \
-v /var/run/docker.sock:/var/run/docker.sock"
fi
# NOTE: docker seems more reliable when running with net=host.
docker run \
--rm \
--name "${friendly_name}" \
--hostname "${friendly_name}" \
-e GOPATH="${BUILDER_HOME}/go" \
-e WORKDIR=".work/cross" \
-e WORKDIR="${BUILDER_HOME}/go/.cross" \
-e GO_PKG_DIR="" \
-e GITHUB_TOKEN \
-e VERSION \
@@ -71,8 +86,8 @@ docker run \
${USER_ARGS} \
${DOCKER_NESTED_ARGS} \
${NET_ARGS} \
-v cross-build:${BUILDER_HOME}/go \
-v ${scriptdir}/../bin:${BUILDER_HOME}/go/bin \
-v ${scriptdir}/../.work/cross/pkg:${BUILDER_HOME}/go/pkg \
-v ${scriptdir}/..:${BUILDER_HOME}/go/src/github.com/quantum/castle \
-w ${BUILDER_HOME}/go/src/github.com/quantum/castle \
${container} \