Files
my-rook-config/external/Makefile
T
Bassam Tabbara cbacbe957d build: cleanup working directories and mac build
centralized all working directories at .work in the root of the tree.  also centralize all download directories to .download at the root of the tree.

cleaned up the rsync behavior between host and docker cross build when running on non-linux host.
2017-04-04 17:02:25 -07:00

140 lines
4.5 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.
.PHONY: all build
all: build
# ====================================================================================
# Options
# Set the memory allocator used for ceph
ALLOCATOR ?= tcmalloc_minimal
# The release of ceph to build
CEPH_BRANCH ?= kraken
# Whether to build ceph everytime and ignore the timestamps
ALWAYS_BUILD ?= 1
# The platforms supported for cross building
PLATFORMS ?= x86_64-linux-gnu aarch64-linux-gnu
# The build type. Debug produces non-optimized builds. Release
# produces fully optimized builds. RelWithDebInfo produces
# optimized builds with debug information.
BUILD_TYPE ?= RelWithDebInfo
# Verbose build
V ?= 0
ifeq ($(V),1)
EXTERNAL_LOGGING=OFF
MAKEFLAGS += VERBOSE=1 V=1
else
EXTERNAL_LOGGING=ON
MAKEFLAGS += --no-print-directory
endif
# Whether to use ccache
CCACHE ?= 1
ifeq ($(CCACHE),1)
EXTERNAL_CCACHE=ON
endif
# The working directory where build generated files are stored
WORKDIR ?= .work
BUILDDIR= $(WORKDIR)/build
# A directory to hold files that are downloaded
# as part of the build process but are immutable and do not
# vary across build runs. These are can be cleaned with
# "make distclean"
DOWNLOADDIR ?= .download
# The host platform
HOST = $(shell gcc -dumpmachine)
# ====================================================================================
# Targets
define build-platform
build.$(1):
@mkdir -p $(DOWNLOADDIR)
@cmake \
-H$(CURDIR) \
-B$(BUILDDIR)/$(1) \
-DALLOCATOR=$(ALLOCATOR) \
-DCEPH_BRANCH=$(CEPH_BRANCH) \
-DEXTERNAL_ALWAYS_BUILD=$(ALWAYS_BUILD) \
-DEXTERNAL_DOWNLOAD_DIR=$(DOWNLOADDIR)/$(1) \
-DCMAKE_TOOLCHAIN_FILE=$(CURDIR)/toolchain/$(1).cmake \
-DEXTERNAL_LOGGING=$(EXTERNAL_LOGGING) \
-DEXTERNAL_CCACHE=$(EXTERNAL_CCACHE) \
-DCMAKE_BUILD_TYPE=$(BUILD_TYPE) \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON
@+$(MAKE) -C $(BUILDDIR)/$(1)
endef
$(foreach p,$(PLATFORMS),$(eval $(call build-platform,$(p))))
build: build.$(HOST)
cross: $(foreach p,$(PLATFORMS), build.$(p) )
clean:
@rm -fr $(BUILDDIR)
distclean: clean
@rm -fr $(DOWNLOADDIR)
.PHONY: build cross clean distclean
# ====================================================================================
# Help
.PHONY: help
help:
@echo 'Usage: make <OPTIONS> ... <TARGETS>'
@echo ''
@echo 'Targets:'
@echo ' build Build project for host platform.'
@echo ' cross Build project for all platforms.'
@echo ' clean Remove all files that are created '
@echo ' by building.'
@echo ' distclean Remove all files that are created '
@echo ' by building or configuring.'
@echo ' help Show this help info.'
@echo ''
@echo 'Options:'
@echo ' ALLOCATOR The memory allocator to use.'
@echo ' Options are libc, jemalloc, tcmalloc, and'
@echo ' tcmalloc_minimal (default).'
@echo ' ALWAYS_BUILD Set to 1 to always build ceph. The'
@echo ' default is 1.'
@echo ' BUILD_TYPE The build type. Debug produces non-'
@echo ' optimized builds. Release produces fully'
@echo ' optimized builds. RelWithDebInfo produces'
@echo ' optimized builds with debug information.'
@echo ' The default is RelWithDebInfo.'
@echo ' CCACHE Set to 1 to use ccache. The default is 1.'
@echo ' CEPH_BRANCH The ceph branch to build from. Can be set'
@echo ' to kraken, or luminous.'
@echo ' DOWNLOADDIR A directory where downloaded files and other'
@echo ' files used during the build are cached. These'
@echo ' files help speedup the build by avoding network'
@echo ' transfers. Its safe to use these files across builds.'
@echo ' V Set to 1 enable verbose build. Default is 0.'
@echo ' WORKDIR The working directory where most build files'
@echo ' are stored. The default is .work'