Merge "submodule: Kill fuel-astute"
[armband.git] / Makefile
1 ##############################################################################
2 # Copyright (c) 2016 Cavium
3 # Copyright (c) 2016 Enea AB and others.
4 # All rights reserved. This program and the accompanying materials
5 # are made available under the terms of the Apache License, Version 2.0
6 # which accompanies this distribution, and is available at
7 # http://www.apache.org/licenses/LICENSE-2.0
8 ##############################################################################
9
10 # NOTE: Armband patching consists of:
11 # - clone upstream repositories to git submodules;
12 # - checkout submodule commits where set in Fuel@OPNFV's config.mk
13 #   (e.g. FUEL_ASTUTE_COMMIT=...);
14 # - tag each submodule (before patching) with "armband-workbench-root";
15 # - apply Armband patches for each submodule;
16 # - tag each submodule (after patching) with "armband-workbench";
17 # - pass updated repository info to Fuel@OPNFV build system
18 #   (e.g. FUEL_ASTUTE_COMMIT=HEAD) via armband.mk;
19
20 # NOTE: Long-term goals (Armband repo should merge with Fuel@OPNFV):
21 # - all build related changes should affect Fuel@OPNFV, NOT Armband;
22 # - Armband make/build system should only handle patching,
23 #   including eventual build related patching of Fuel@OPNFV,
24 #   and then invoke Fuel@OPNFV's build system;
25 # - Fuel@OPNFV is made aware of an Armband type build by passing
26 #   the "ARMBAND_BASE" env var;
27
28 # Fist, inherit Fuel submodule commit references from Fuel@OPNFV
29 # using "config.mk" as a make target that links to Fuel's config.mk.
30 # Some values will be overriden at Fuel ISO build time by armband.mk.
31 include config.mk
32
33 export ARMBAND_BASE  := $(shell pwd)
34 export OPNFV_GIT_SHA := $(shell git rev-parse HEAD)
35 export REVSTATE
36
37 # Prepare for future directory re-layout when merging with Fuel@OPNFV
38 PATCH_DIR  := ${ARMBAND_BASE}/patches
39 SUBMOD_DIR := ${ARMBAND_BASE}/upstream
40 FUEL_BASE  := ${SUBMOD_DIR}/fuel
41
42 all: release
43
44 # Use config.mk & clean_cache.sh from Fuel@OPNFV
45 config.mk: submodules-init
46         @ln -sf ${FUEL_BASE}/build/config.mk ${ARMBAND_BASE}/config.mk
47         @ln -sf ${FUEL_BASE}/ci/clean_cache.sh ${ARMBAND_BASE}/ci/clean_cache.sh
48
49 # Fetch & update git submodules, checkout remote HEAD
50 .PHONY: submodules-init
51 submodules-init:
52         @if [ ! -d ${FUEL_BASE}/build ]; then \
53                 git submodule -q init; \
54                 git submodule -q sync; \
55                 git submodule update --remote; \
56         fi
57
58 # Clean any changes made to submodules, checkout Armband root commit
59 .PHONY: submodules-clean
60 submodules-clean: submodules-init
61         @git submodule -q foreach ' \
62                 git am -q --abort 2>/dev/null; \
63                 git checkout -q armband-workbench-root 2>/dev/null; \
64                 git branch -q -D armband-workbench 2>/dev/null; \
65                 git tag -d armband-workbench-root 2>/dev/null; \
66                 git reset -q --hard HEAD; \
67                 git clean -xdff'
68
69 # Generate patches from submodules
70 .PHONY: patches-export
71 patches-export: submodules-init
72         @git submodule -q foreach ' \
73                 mkdir -p ${PATCH_DIR}/$$name; \
74                 git format-patch --no-signature \
75                         -o ${PATCH_DIR}/$$name -N armband-workbench-root'
76         @find ${PATCH_DIR} -name '*.patch' -exec sed -i -e '1d' {} \;
77
78 # Apply patches from patches/* to respective submodules
79 # For repos pinned in Fuel@OPNFV's config.mk, checkout pinned commit first
80 .PHONY: patches-import
81 patches-import: submodules-init
82         @cd ${SUBMOD_DIR}/fuel-agent && git checkout -q ${FUEL_AGENT_COMMIT}
83         @cd ${SUBMOD_DIR}/fuel-library && git checkout -q ${FUELLIB_COMMIT}
84         @cd ${SUBMOD_DIR}/fuel-mirror && git checkout -q ${FUEL_MIRROR_COMMIT}
85         @cd ${SUBMOD_DIR}/fuel-nailgun-agent && \
86                 git checkout -q ${FUEL_NAILGUN_AGENT_COMMIT}
87         @cd ${SUBMOD_DIR}/fuel-web && git checkout -q ${NAILGUN_COMMIT}
88         @git submodule -q foreach ' \
89                 mkdir -p ${PATCH_DIR}/$$name; \
90                 git tag armband-workbench-root; \
91                 git checkout -q -b armband-workbench; \
92                 if [ ! -z "$$(ls ${PATCH_DIR}/$$name/)" ]; then \
93                         echo "-- patching $$name"; \
94                         git am --whitespace=nowarn \
95                                 --committer-date-is-author-date \
96                                 ${PATCH_DIR}/$$name/*.patch; \
97                 fi'
98
99 # Pass down clean/deepclean/build to Fuel@OPNFV
100 .PHONY: clean
101 clean: submodules-init
102         $(MAKE) -e --no-print-directory -C ${FUEL_BASE}/build clean
103
104 .PHONY: deepclean
105 deepclean: submodules-init
106         $(MAKE) -e --no-print-directory -C ${FUEL_BASE}/build deepclean
107
108 .PHONY: build
109 build:
110         $(MAKE) -e --no-print-directory -C ${FUEL_BASE}/build all
111
112 .PHONY: release
113 release: export LC_ALL=en_US.UTF-8
114 release: submodules-clean patches-import build