forked from rook/rook
Merge pull request #85 from bassamtabbara/macos-build-improvements
improve support for building on macOS
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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)
|
||||
|
||||
@@ -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} \
|
||||
|
||||
Reference in New Issue
Block a user