aboutsummaryrefslogtreecommitdiffstats
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile319
1 files changed, 319 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 00000000..61a36eb2
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,319 @@
+ #############################################################################
+ # Copyright (c) 2017 Cisco and/or its affiliates.
+ # 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.
+ ##############################################################################
+
+DISTILLERY_VERSION=2.0
+
+default.target: help
+
+all: init_depend install-all
+
+##############################################################
+# Variables
+#
+# Set some variables
+DISTILLERY_STAMP=.distillery.stamp
+REBUILD_DEPENDS=
+
+##############################################################
+# Load the configuration
+#
+# For more information please see config.default.mk
+#
+DISTILLERY_CONFIG_DIR ?= config
+
+##DISTILLERY_DEFAULT_CONFIG ?= ${DISTILLERY_CONFIG_DIR}/config.mk
+##DISTILLERY_LOCAL_CONFIG ?= ${DISTILLERY_CONFIG_DIR}/local/config.mk
+DISTILLERY_USER_CONFIG ?= ${DISTILLERY_CONFIG_DIR}/config.mk
+
+ifneq (,$(wildcard ${DISTILLERY_USER_CONFIG}))
+ include ${DISTILLERY_USER_CONFIG}
+ REBUILD_DEPENDS+=${DISTILLERY_USER_CONFIG}
+else
+ DISTILLERY_USER_CONFIG+="[Not Found]"
+endif
+
+ifneq (,$(wildcard ${DISTILLERY_LOCAL_CONFIG}))
+ include ${DISTILLERY_LOCAL_CONFIG}
+ REBUILD_DEPENDS+=${DISTILLERY_LOCAL_CONFIG}
+endif
+
+include ${DISTILLERY_DEFAULT_CONFIG}
+
+
+##############################################################
+# Set the paths
+#
+# PATH: add our install dir, build dependencies and system dependencies
+# LD_RUN_PATH: add our install dir
+
+export PATH := $(DISTILLERY_INSTALL_DIR)/bin:$(DISTILLERY_TOOLS_DIR)/bin:$(PATH)
+#export LD_RUN_PATH := $(DISTILLERY_INSTALL_DIR)/lib
+#export LD_LIBRARY_PATH := $(DISTILLERY_INSTALL_DIR)/lib
+export CCNX_HOME
+export FOUNDATION_HOME
+
+
+##############################################################
+# Modules
+#
+# Load the modules config. Please refer to that file for more information
+DISTILLERY_MODULES_DIR=${DISTILLERY_CONFIG_DIR}/modules
+
+# The modules variable is a list of modules. It will be populated by the
+# modules config files.
+modules=
+modules_dir=
+ include config/modules/000-distillery-update.mk
+ include config/modules/000-gitModule.mk
+ include config/modules/001-modules.mk
+ include config/modules/002-cmake-modules.mk
+ include config/modules/002-make-modules.mk
+ include config/modules/100-distillery.mk
+ include config/modules/110-longbow.mk
+ include config/modules/120-libparc.mk
+ include config/modules/210-libccnx-common.mk
+ include config/modules/220-libccnx-transport-rta.mk
+ include config/modules/230-libccnx-portal.mk
+ include config/modules/510-Metis.mk
+ include config/modules/610-libicnet.mk
+ include config/modules/610-libdash.mk
+
+# Load user defined modules
+DISTILLERY_USER_MODULES_DIR=${DISTILLERY_USER_CONFIG_DIR}/modules
+ifneq (,$(wildcard ${DISTILLERY_USER_MODULES_DIR}))
+ include ${DISTILLERY_USER_MODULES_DIR}/*.mk
+else
+ DISTILLERY_USER_MODULES_DIR+="[Not Found]"
+endif
+
+ifdef ${DISTILLERY_LOCAL_MODULES_DIR}
+ include ${DISTILLERY_LOCAL_MODULES_DIR}/*.mk
+else
+ DISTILLERY_LOCAL_MODULES_DIR="[Undefined]"
+endif
+
+
+##############################################################
+# Build variables and rules
+#
+
+# We're going to create lists of targets as convenience
+modules_clean=$(modules:=.clean)
+modules_check=$(modules:=.check)
+modules_step=$(modules:=.step)
+modules_average-coverage=$(modules:=.average-coverage)
+
+# These are the basic build rules. They will call the module specific rules
+install-all: install-directories pre-requisites ${modules}
+
+#distillery-sync: distillery-update ${DISTILLERY_ROOT_DIR}/tools/bin/syncOriginMasterWithCCNXUpstream
+# @${DISTILLERY_ROOT_DIR}/tools/bin/syncOriginMasterWithCCNXUpstream
+
+init_depend:
+ ./scripts/init.sh ${ABI} ${DISTILLERY_INSTALL_DIR};
+android_metis:
+ ./scripts/compile_androidmetis.sh
+android_metis_debug:
+ ./scripts/compile_androidmetis.sh DEBUG
+android_iget:
+ ./scripts/compile_androidiget.sh
+android_iget_debug:
+ ./scripts/compile_androidiget.sh DEBUG
+
+clobber: distclean
+ @rm -rf ${CONFIGURE_CACHE_FILE}
+ @rm -rf ${DISTILLERY_INSTALL_DIR}/bin
+ @rm -rf ${DISTILLERY_INSTALL_DIR}/lib
+ @rm -rf ${DISTILLERY_INSTALL_DIR}/include
+ @rm -rf ${DISTILLERY_INSTALL_DIR}/share
+ @rm -rf ${DISTILLERY_INSTALL_DIR}/etc
+ @rm -rf ${DISTILLERY_XCODE_DIR}
+ @rm -rf .*.stamp
+
+clean: ${modules_clean}
+ @rm -rf report.txt
+
+distclean:
+ @rm -rf ${DISTILLERY_BUILD_DIR}
+ @rm -rf report.txt
+
+#distillery-update:
+# @echo "Fetching Distillery..."
+# @git fetch --all
+# @git pull
+
+distillery-upstream:
+ git remote add ${DISTILLERY_GITHUB_UPSTREAM_NAME} ${DISTILLERY_GITHUB_UPSTREAM_REPO}
+
+check: ${modules_check}
+
+step: ${modules_step}
+
+# From Distillery, 'make coverage' actually runs the summary version of coverage
+# You can also run 'make <module>.coverage' to get the output showing each file and its coverage.
+coverage: ${modules_average-coverage}
+
+dependencies:
+ @${MAKE} -C dependencies
+
+dependencies.clean:
+ @${MAKE} -C dependencies clean
+
+dependencies.clobber:
+ @${MAKE} -C dependencies clobber
+
+pre-requisites:
+
+help:
+ @echo "Simple instructions: run \"make update step\""
+ @echo
+ @echo "---- Basic build targets ----"
+ @echo "make help - This help message"
+ @echo "make info - Show basic information"
+ @echo "make status - Show status of modules"
+ @echo "make update - git clone and pull the different modules to the head of master"
+ @echo "make sync - fetch all remotes, merge upstream master, push to origin master"
+ @echo "make step - Module by module: configure, compile and install all software"
+ @echo " in the install directory (see make info) and run tests"
+ @echo "make all - Configure, compile and install all software in DISTILLERY_INSTALL_DIR"
+ @echo "make check - Run all the tests"
+ @echo "make clobber - Clean the build, remove the install software"
+ @echo
+ @echo "make sanity - Run simple sanity checks to test that the build is functional"
+ @echo
+ @echo "make coverage - Show the average coverage of each module."
+ @echo "make <module>.coverage - Show the coverage of each file in the specified module."
+ @echo
+ @echo "---- Advanced targets ----"
+ @echo "make nuke-all-modules - DANGEROUS! Clean all the modules to git checkout (git clean -dfx)"
+ @echo " - You will lose all uncommitted changes"
+ @echo "make clean - Clean the build"
+ @echo "make distclean - Distclean the build"
+ @echo "make *-debug - make a target with DEBUG on (e.g. all-debug or check-debug)"
+ @echo "make *-release - make a target with RELEASE on (optimized)"
+ @echo "make *-nopants - make a target with NOPANTS on (no validation - use at your own risk)"
+ @echo
+ @echo "---- IDE support targets ----"
+ @echo "make xcode - Create xcode projects [only works on Mac]"
+ @echo "make MasterIDE.xcode - Makes an xcode uber-project (based on all-debug) that contains"
+ @echo " - the various sub-mdules"
+ @echo "make MasterIDE.xcodeopen - Makes MasterIDE.xcode and the starts xcode"
+ @echo "make MasterIDE.clionopen - Creates an uber CMakeLists.txt and starts CLion with the necessary"
+ @echo " - environment for development"
+ @echo
+ @echo "---- Basic module targets ----"
+ @echo "Module Directory = ${MODULES_DIRECTORY_DEFAULT}"
+ @echo "Modules Loaded = ${modules}"
+ @echo "GitModules Loaded = ${gitmodules}"
+ @echo "Per-module targets: \"Module\" \"Module.distclean\" \"Module.nuke\" \"Module-debug\""
+
+
+${DISTILLERY_STAMP}: ${REBUILD_DEPENDS}
+ touch $@
+
+debug-%: export CMAKE_BUILD_TYPE_FLAG = -DCMAKE_BUILD_TYPE=DEBUG
+debug-%: export DISTILLERY_BUILD_NAME = -debug
+debug-%:
+ @${MAKE} $*
+
+%-debug: debug-% ;
+
+release-%: export CMAKE_BUILD_TYPE_FLAG = "-DCMAKE_BUILD_TYPE=RELEASE"
+release-%: export DISTILLERY_BUILD_NAME = -release
+release-%:
+ @${MAKE} $*
+
+%-release: release-% ;
+
+nopants-%: export CMAKE_BUILD_TYPE_FLAG = "-DCMAKE_BUILD_TYPE=NOPANTS"
+nopants-%: export DISTILLERY_BUILD_NAME = -nopants
+nopants-%:
+ @${MAKE} $*
+
+%-nopants: nopants-% ;
+
+releasedebug-%: export CMAKE_BUILD_TYPE_FLAG = "-DCMAKE_BUILD_TYPE=RELWITHDEBINFO"
+releasedebug-%: export DISTILLERY_BUILD_NAME = -releasedebug
+releasedebug-%:
+ @${MAKE} $*
+
+%-releasedebug: releasedebug-% ;
+
+install-directories:
+ @mkdir -p ${DISTILLERY_INSTALL_DIR}/include
+ @mkdir -p ${DISTILLERY_INSTALL_DIR}/lib
+ @mkdir -p ${DISTILLERY_INSTALL_DIR}/bin
+
+Distillery.report:
+ @echo '###################################'
+ @echo 'Distillery report'
+ @echo "#" `date "+%Y-%m-%d %H:%M:%S"`
+ @echo "#" `uname -sr` "-" `uname -pm`
+ @echo "#" `uname -n`
+ @echo "#" PATH=${PATH}
+
+ @git status
+ @git log -1
+ @git diff -U1
+
+report.txt:
+ $(MAKE) report > report.txt
+ @cat report.txt
+
+distillery.checkout.error:
+ @echo
+ @echo ===========================================================
+ @echo
+ @echo DISTILLERY ERROR: You have not checked out a repository!
+ @echo Please make sure to run \"make update\" at least once
+ @echo
+ @echo Otherwise there is a misconfigured module,
+ @echo please check the module config files at .distillery/modules
+ @echo
+ @echo ===========================================================
+ @echo
+
+
+info:
+ @echo "############ Distillery Info ##################"
+ @${MAKE} env
+
+
+# env produces shell interpretable output. It is read by some scripts.
+# DO NOT ALTER THE FORMAT
+env:
+ @echo DISTILLERY_ROOT_DIR=${DISTILLERY_ROOT_DIR}
+ @echo DISTILLERY_SOURCE_DIR=${DISTILLERY_SOURCE_DIR}
+ @echo DISTILLERY_BUILD_DIR=${DISTILLERY_BUILD_DIR}
+ @echo DISTILLERY_DEFAULT_CONFIG=${DISTILLERY_DEFAULT_CONFIG}
+ @echo DISTILLERY_LOCAL_CONFIG=${DISTILLERY_LOCAL_CONFIG}
+ @echo DISTILLERY_USER_CONFIG=${DISTILLERY_USER_CONFIG}
+ @echo DISTILLERY_MODULES_DIR=${DISTILLERY_MODULES_DIR}
+ @echo DISTILLERY_LOCAL_MODULES_DIR=${DISTILLERY_LOCAL_MODULES_DIR}
+ @echo DISTILLERY_USER_MODULES_DIR=${DISTILLERY_USER_MODULES_DIR}
+ @echo DISTILLERY_INSTALL_DIR=${DISTILLERY_INSTALL_DIR}
+ @echo DISTILLERY_DEPENDENCIES_DIR=${DISTILLERY_DEPENDENCIES_DIR}
+ @echo DISTILLERY_EXTERN_DIR=${DISTILLERY_EXTERN_DIR}
+ @echo DISTILLERY_TOOLS_DIR=${DISTILLERY_TOOLS_DIR}
+ @echo DISTILLERY_GITHUB_URL=${DISTILLERY_GITHUB_URL}
+ @echo DISTILLERY_GITHUB_URL_USER=${DISTILLERY_GITHUB_URL_USER}
+ @echo DISTILLERY_GITHUB_UPSTREAM_URL=${DISTILLERY_GITHUB_UPSTREAM_URL}
+ @echo CCNX_DEPENDENCIES=${CCNX_DEPENDENCIES}
+ @echo LD_LIBRARY_PATH=${LD_LIBRARY_PATH}
+ @echo LD_RUN_PATH=${LD_RUN_PATH}
+ @echo CCNX_HOME=${CCNX_HOME}
+ @echo PATH=${PATH}
+
+.PHONY: dependencies