forked from rook/rook
93 lines
2.9 KiB
Makefile
93 lines
2.9 KiB
Makefile
# Copyright 2016 The Rook Authors. All rights reserved.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
include ../image.mk
|
|
|
|
# the git repo and branch to build from
|
|
CEPH_GIT_REPO ?= https://github.com/rook/ceph
|
|
|
|
# the git commit hash to build
|
|
ifeq ($(origin CEPH_GIT_COMMIT), undefined)
|
|
CEPH_GIT_COMMIT := $(shell cat commit_hash)
|
|
endif
|
|
|
|
# set to release or relwithdebinfo (make sure its lower case)
|
|
CEPH_BUILD_TYPE ?= release
|
|
|
|
# set to tcmalloc, tcmalloc_minimal, jemalloc or libc
|
|
ifeq ($(GOARCH),amd64)
|
|
CEPH_ALLOCATOR ?= tcmalloc
|
|
else
|
|
CEPH_ALLOCATOR ?= libc
|
|
endif
|
|
|
|
ifeq ($(filter libc tcmalloc tcmalloc_minimal jemalloc, $(CEPH_ALLOCATOR)),)
|
|
$(error unsupported memory allocator $(CEPH_ALLOCATOR))
|
|
endif
|
|
|
|
CEPH_CONFIG ?= $(GOARCH)-$(CEPH_ALLOCATOR)-$(CEPH_BUILD_TYPE)
|
|
|
|
CEPH_TARBALL = ceph-install.tar
|
|
|
|
CCACHE_DIR_HOST ?= $(HOME)/.ccache
|
|
|
|
CEPH_BUILDER_IMAGE := $(BUILD_REGISTRY)/ceph-builder-$(CEPH_CONFIG)
|
|
CEPH_BUILDER_BASEIMAGE := $(BUILD_REGISTRY)/cross-gnu-$(GOHOSTARCH)
|
|
|
|
CEPH_IMAGE := $(BUILD_REGISTRY)/ceph-$(CEPH_CONFIG)-$$(docker images -q $(CEPH_BUILDER_IMAGE))
|
|
|
|
IMAGES = $(CEPH_BUILDER_IMAGE) $(CEPH_IMAGE)
|
|
CACHE_IMAGES = $(IMAGES)
|
|
|
|
TEMP := $(shell mktemp -d)
|
|
|
|
# ====================================================================================
|
|
# Targets
|
|
|
|
do.build:
|
|
@echo === docker build $(CEPH_BUILDER_IMAGE)
|
|
@cp -a . $(TEMP)
|
|
@cd $(TEMP) && $(SED_CMD) 's|BASEIMAGE|$(CEPH_BUILDER_BASEIMAGE)|g' Dockerfile
|
|
@docker build $(BUILD_ARGS) \
|
|
--build-arg ARCH=$(DEBIAN_ARCH) \
|
|
--build-arg CEPH_GIT_COMMIT=$(CEPH_GIT_COMMIT) \
|
|
--build-arg CEPH_GIT_REPO=$(CEPH_GIT_REPO) \
|
|
--build-arg CEPH_ALLOCATOR=$(CEPH_ALLOCATOR) \
|
|
--build-arg CEPH_BUILD_TYPE=$(CEPH_BUILD_TYPE) \
|
|
--build-arg CROSS_TRIPLE=$(CROSS_TRIPLE) \
|
|
-t $(CEPH_BUILDER_IMAGE) \
|
|
$(TEMP)
|
|
# lookup the rootfs image from the cache or make it if its not there
|
|
@$(MAKE) cache.lookup LOOKUP_IMAGE=$(CEPH_IMAGE) MISS_TARGET=ceph
|
|
|
|
ceph:
|
|
@echo === building ceph from $(CEPH_BUILDER_IMAGE)
|
|
@docker run \
|
|
-i \
|
|
--cidfile $(TEMP)/cid \
|
|
-v $(CCACHE_DIR_HOST):/root/.ccache \
|
|
$(CEPH_BUILDER_IMAGE)
|
|
@docker cp `cat $(TEMP)/cid`:/build/$(CEPH_TARBALL) $(TEMP)/$(CEPH_TARBALL)
|
|
@docker rm -f `cat $(TEMP)/cid`
|
|
@rm -fr $(TEMP)/cid
|
|
# now cache the ceph tarball in a docker image
|
|
@cp Dockerfile.ceph $(TEMP)/Dockerfile
|
|
@docker build $(BUILD_ARGS) -t $(CEPH_IMAGE) $(TEMP)
|
|
@rm -fr $(TEMP)
|
|
|
|
%/$(CEPH_TARBALL): build
|
|
@CID=`docker create $(CEPH_IMAGE) /dev/null` &&\
|
|
docker cp $$CID:$(CEPH_TARBALL) $@ &&\
|
|
docker rm -f $$CID
|