docs: Copy OPNFV docs dir as documentation base
[armband.git] / Makefile
index 619d0b7..d3bc979 100644 (file)
--- a/Makefile
+++ b/Makefile
-root:=$(shell pwd)
+##############################################################################
+# Copyright (c) 2016 Cavium
+# Copyright (c) 2016 Enea AB and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
 
-all: build
+# NOTE: Armband patching consists of:
+# - clone upstream repositories to git submodules;
+# - checkout submodule commits where set in Fuel@OPNFV's config.mk
+#   (e.g. FUEL_ASTUTE_COMMIT=...);
+# - tag each submodule (before patching) with "armband-workbench-root";
+# - apply Armband patches for each submodule;
+# - tag each submodule (after patching) with "armband-workbench";
+# - pass updated repository info to Fuel@OPNFV build system
+#   (e.g. FUEL_ASTUTE_COMMIT=HEAD) via armband.mk;
 
-.PHONY: submodules-init submodules-clean
+# NOTE: Long-term goals (Armband repo should merge with Fuel@OPNFV):
+# - all build related changes should affect Fuel@OPNFV, NOT Armband;
+# - Armband make/build system should only handle patching,
+#   including eventual build related patching of Fuel@OPNFV,
+#   and then invoke Fuel@OPNFV's build system;
+# - Fuel@OPNFV is made aware of an Armband type build by passing
+#   the "ARMBAND_BASE" env var;
+
+# Fist, inherit Fuel submodule commit references from Fuel@OPNFV
+# using "config.mk" as a make target that links to Fuel's config.mk.
+# Some values will be overriden at Fuel ISO build time by armband.mk.
+include config.mk
+
+export ARMBAND_BASE  := $(shell pwd)
+export OPNFV_GIT_SHA := $(shell git rev-parse HEAD)
+export REVSTATE
+
+# Prepare for future directory re-layout when merging with Fuel@OPNFV
+PATCH_DIR  := ${ARMBAND_BASE}/patches
+SUBMOD_DIR := ${ARMBAND_BASE}/upstream
+FUEL_BASE  := ${SUBMOD_DIR}/fuel
+
+all: release
+
+# Use config.mk & clean_cache.sh from Fuel@OPNFV
+config.mk: submodules-init
+       @ln -sf ${FUEL_BASE}/build/config.mk ${ARMBAND_BASE}/config.mk
+       @ln -sf ${FUEL_BASE}/ci/clean_cache.sh ${ARMBAND_BASE}/ci/clean_cache.sh
+
+# Fetch & update git submodules, checkout remote HEAD
+.PHONY: submodules-init
 submodules-init:
-       @git submodule -q init
-       @git submodule -q sync
-       @git submodule update
+       @if [ ! -d ${FUEL_BASE}/build ]; then \
+               git submodule -q init; \
+               git submodule -q sync; \
+               git submodule update --remote; \
+       fi
 
-# Cleans any changes made to submodules
-submodules-clean:
-       @git submodule -q foreach \
-               'git am --abort; \
-                git checkout -q armband-workbench-root; \
-               git branch -q -D armband-workbench; \
-               git tag -d armband-workbench-root; \
-               git reset -q --hard HEAD; git clean -xdff'
+# Clean any changes made to submodules, checkout Armband root commit
+.PHONY: submodules-clean
+submodules-clean: submodules-init
+       @git submodule -q foreach ' \
+               git am -q --abort 2>/dev/null; \
+               git checkout -q armband-workbench-root 2>/dev/null; \
+               git branch -q -D armband-workbench 2>/dev/null; \
+               git tag -d armband-workbench-root 2>/dev/null; \
+               git reset -q --hard HEAD; \
+               git clean -xdff'
 
-.PHONY: patches-export patches-import
 # Generate patches from submodules
-patches-export:
-       @git submodule -q foreach 'mkdir -p ${root}/patches/$$name'
-       @git submodule -q foreach 'git format-patch \
-               -o ${root}/patches/$$name -N armband-workbench-root \
-           --no-signature'
-       @find ${root}/patches -name '*.patch' -exec sed -i -e '1d' {} \;
+.PHONY: patches-export
+patches-export: submodules-init
+       @git submodule -q foreach ' \
+               mkdir -p ${PATCH_DIR}/$$name; \
+               git format-patch --no-signature \
+                       -o ${PATCH_DIR}/$$name -N armband-workbench-root'
+       @find ${PATCH_DIR} -name '*.patch' -exec sed -i -e '1d' {} \;
 
-# apply patches from patches/* to respective submodules
-patches-import:
-       @git submodule -q foreach 'mkdir -p ${root}/patches/$$name'
-       @git submodule -q foreach 'git tag armband-workbench-root'
-       @git submodule -q foreach 'git checkout -q -b armband-workbench'
-       @git submodule -q foreach \
-               'if [ ! -z "$$(ls ${root}/patches/$$name/)" ]; then \
-                       git am ${root}/patches/$$name/*.patch; \
+# Apply patches from patches/* to respective submodules
+# For repos pinned in Fuel@OPNFV's config.mk, checkout pinned commit first
+.PHONY: patches-import
+patches-import: submodules-init
+       @cd ${SUBMOD_DIR}/fuel-agent && git checkout -q ${FUEL_AGENT_COMMIT}
+       @cd ${SUBMOD_DIR}/fuel-astute && git checkout -q ${ASTUTE_COMMIT}
+       @cd ${SUBMOD_DIR}/fuel-library && git checkout -q ${FUELLIB_COMMIT}
+       @cd ${SUBMOD_DIR}/fuel-mirror && git checkout -q ${FUEL_MIRROR_COMMIT}
+       @cd ${SUBMOD_DIR}/fuel-nailgun-agent && \
+               git checkout -q ${FUEL_NAILGUN_AGENT_COMMIT}
+       @cd ${SUBMOD_DIR}/fuel-web && git checkout -q ${NAILGUN_COMMIT}
+       @git submodule -q foreach ' \
+               mkdir -p ${PATCH_DIR}/$$name; \
+               git tag armband-workbench-root; \
+               git checkout -q -b armband-workbench; \
+               if [ ! -z "$$(ls ${PATCH_DIR}/$$name/)" ]; then \
+                       echo "-- patching $$name"; \
+                       git am --whitespace=nowarn \
+                               --committer-date-is-author-date \
+                               ${PATCH_DIR}/$$name/*.patch; \
                fi'
-clean-docker:
-       docker stop FUEL_CENTOS_8.0 || true
-       docker rm $(shell docker ps -a -q) || true
-       docker rmi -f $(shell docker images -q) || true
-
-clean-build:
-       sudo rm -rf /tmp/fuel-main
-       git -C ${root}/upstream/fuel reset --hard HEAD
-       git -C ${root}/upstream/fuel clean -xdff
 
-release: export LC_ALL=en_US.UTF-8
-release: submodules-clean clean-docker clean-build submodules-init patches-import build
+# Pass down clean/deepclean/build to Fuel@OPNFV
+.PHONY: clean
+clean: submodules-init
+       $(MAKE) -e --no-print-directory -C ${FUEL_BASE}/build clean
 
-ifneq ($(REVSTATE),)
-    EXTRA_PARAMS="REVSTATE=$(REVSTATE)"
-endif
+.PHONY: deepclean
+deepclean: submodules-init
+       $(MAKE) -e --no-print-directory -C ${FUEL_BASE}/build deepclean
 
+.PHONY: build
 build:
-       cd ${root}/upstream/fuel/build && \
-               make \
-                       BUILD_FUEL_PLUGINS=f_odlpluginbuild \
-                       FUEL_MAIN_REPO=${root}/upstream/fuel-main \
-                       FUEL_MAIN_TAG= \
-                       UBUNTU_ARCH="amd64 arm64" \
-                       FUELLIB_REPO=${root}/upstream/fuel-library \
-                       NAILGUN_REPO=${root}/upstream/fuel-web \
-                       ASTUTE_REPO=${root}/upstream/fuel-astute \
-                       FUEL_AGENT_REPO=${root}/upstream/fuel-agent \
-                       FUEL_NAILGUN_AGENT_REPO=${root}/upstream/fuel-nailgun-agent \
-                       FUEL_MIRROR_REPO=${root}/upstream/fuel-mirror \
-                       ODL_REPO=${root}/upstream/fuel-plugin-opendaylight \
-                       ODL_CHANGE= \
-                       FUELLIB_COMMIT=HEAD \
-                       NAILGUN_COMMIT=HEAD \
-                       ASTUTE_COMMIT=HEAD \
-                       FUEL_AGENT_COMMIT=HEAD \
-                       FUEL_NAILGUN_AGENT_COMMIT=HEAD \
-                       FUEL_MIRROR_COMMIT=HEAD \
-                       ODL_BRANCH=armband-workbench \
-                       PRODUCT_VERSION=8.0 \
-                       PRODUCT_NAME=mos \
-                       CENTOS_MAJOR=7 \
-                       EXTRA_RPM_REPOS="armband,http://linux.enea.com/mos-repos/centos/mos8.0-centos7-fuel/armband/x86_64,10" \
-                       MIRROR_MOS_UBUNTU=linux.enea.com \
-                       JAVA8_URL=https://launchpad.net/~openjdk-r/+archive/ubuntu/ppa/+files/openjdk-8-jre-headless_8u72-b15-1~trusty1_arm64.deb \
-                       $(EXTRA_PARAMS) \
-                       iso 2>&1 | tee ${root}/build.log
+       $(MAKE) -e --no-print-directory -C ${FUEL_BASE}/build all
 
+.PHONY: release
+release: export LC_ALL=en_US.UTF-8
+release: submodules-clean patches-import build