| Achin Gupta | 4f6ad66 | 2013-10-25 09:08:21 +0100 | [diff] [blame] | 1 | # | 
| Dan Handley | c04d260 | 2015-03-27 17:44:35 +0000 | [diff] [blame] | 2 | # Copyright (c) 2013-2015, ARM Limited and Contributors. All rights reserved. | 
| Achin Gupta | 4f6ad66 | 2013-10-25 09:08:21 +0100 | [diff] [blame] | 3 | # | 
|  | 4 | # Redistribution and use in source and binary forms, with or without | 
|  | 5 | # modification, are permitted provided that the following conditions are met: | 
|  | 6 | # | 
|  | 7 | # Redistributions of source code must retain the above copyright notice, this | 
|  | 8 | # list of conditions and the following disclaimer. | 
|  | 9 | # | 
|  | 10 | # Redistributions in binary form must reproduce the above copyright notice, | 
|  | 11 | # this list of conditions and the following disclaimer in the documentation | 
|  | 12 | # and/or other materials provided with the distribution. | 
|  | 13 | # | 
|  | 14 | # Neither the name of ARM nor the names of its contributors may be used | 
|  | 15 | # to endorse or promote products derived from this software without specific | 
|  | 16 | # prior written permission. | 
|  | 17 | # | 
|  | 18 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | 
|  | 19 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 
|  | 20 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 
|  | 21 | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE | 
|  | 22 | # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | 
|  | 23 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | 
|  | 24 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | 
|  | 25 | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | 
|  | 26 | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | 
|  | 27 | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | 
|  | 28 | # POSSIBILITY OF SUCH DAMAGE. | 
|  | 29 | # | 
|  | 30 |  | 
| Jeenu Viswambharan | e35c404 | 2014-05-15 14:40:58 +0100 | [diff] [blame] | 31 | # | 
| Juan Castillo | aaa3e72 | 2014-06-30 11:41:46 +0100 | [diff] [blame] | 32 | # Trusted Firmware Version | 
|  | 33 | # | 
| Dan Handley | c6249aa | 2014-08-26 19:18:55 +0100 | [diff] [blame] | 34 | VERSION_MAJOR		:= 1 | 
| Achin Gupta | 130ed88 | 2015-02-02 17:31:42 +0000 | [diff] [blame] | 35 | VERSION_MINOR		:= 1 | 
| Juan Castillo | aaa3e72 | 2014-06-30 11:41:46 +0100 | [diff] [blame] | 36 |  | 
|  | 37 | # | 
| Jeenu Viswambharan | e35c404 | 2014-05-15 14:40:58 +0100 | [diff] [blame] | 38 | # Default values for build configurations | 
|  | 39 | # | 
|  | 40 |  | 
|  | 41 | # Build verbosity | 
|  | 42 | V			:= 0 | 
|  | 43 | # Debug build | 
|  | 44 | DEBUG			:= 0 | 
| Jeenu Viswambharan | e35c404 | 2014-05-15 14:40:58 +0100 | [diff] [blame] | 45 | # Build platform | 
|  | 46 | DEFAULT_PLAT		:= fvp | 
|  | 47 | PLAT			:= ${DEFAULT_PLAT} | 
|  | 48 | # SPD choice | 
|  | 49 | SPD			:= none | 
|  | 50 | # Base commit to perform code check on | 
|  | 51 | BASE_COMMIT		:= origin/master | 
| Jeenu Viswambharan | 2da8d8b | 2014-05-12 15:28:47 +0100 | [diff] [blame] | 52 | # NS timer register save and restore | 
|  | 53 | NS_TIMER_SWITCH		:= 0 | 
| Vikram Kanigiri | dbad1ba | 2014-04-24 11:02:16 +0100 | [diff] [blame] | 54 | # By default, Bl1 acts as the reset handler, not BL31 | 
|  | 55 | RESET_TO_BL31		:= 0 | 
| Juan Castillo | 0f21c54 | 2014-06-25 17:26:36 +0100 | [diff] [blame] | 56 | # Include FP registers in cpu context | 
|  | 57 | CTX_INCLUDE_FPREGS		:= 0 | 
| Sandrine Bailleux | 2b98e78 | 2014-07-17 17:23:14 +0100 | [diff] [blame] | 58 | # Determine the version of ARM GIC architecture to use for interrupt management | 
|  | 59 | # in EL3. The platform port can change this value if needed. | 
|  | 60 | ARM_GIC_ARCH		:=	2 | 
| Vikram Kanigiri | 23e47ed | 2014-12-23 01:00:22 +0000 | [diff] [blame] | 61 | # Determine the version of ARM CCI product used in the platform. The platform | 
|  | 62 | # port can change this value if needed. | 
|  | 63 | ARM_CCI_PRODUCT_ID	:=	400 | 
| Soby Mathew | bc92012 | 2014-07-14 16:58:03 +0100 | [diff] [blame] | 64 | # Flag used to indicate if ASM_ASSERTION should be enabled for the build. | 
|  | 65 | # This defaults to being present in DEBUG builds only. | 
|  | 66 | ASM_ASSERTION		:=	${DEBUG} | 
| Soby Mathew | 8c5fe0b | 2015-01-08 18:02:19 +0000 | [diff] [blame] | 67 | # Build option to choose whether Trusted firmware uses Coherent memory or not. | 
|  | 68 | USE_COHERENT_MEM	:=	1 | 
| Juan Castillo | 7f48fab | 2014-11-24 11:45:12 +0000 | [diff] [blame] | 69 | # Default FIP file name | 
|  | 70 | FIP_NAME		:= fip.bin | 
| Juan Castillo | db6071c | 2015-01-13 12:21:04 +0000 | [diff] [blame] | 71 | # By default, use the -pedantic option in the gcc command line | 
|  | 72 | DISABLE_PEDANTIC	:= 0 | 
| Juan Castillo | 6f97162 | 2014-10-21 11:30:42 +0100 | [diff] [blame] | 73 | # Flags to generate the Chain of Trust | 
|  | 74 | GENERATE_COT		:= 0 | 
|  | 75 | CREATE_KEYS		:= 1 | 
| Juan Castillo | fd34e7b | 2015-02-25 12:43:12 +0000 | [diff] [blame] | 76 | SAVE_KEYS		:= 0 | 
| Juan Castillo | 6eadf76 | 2015-01-07 10:39:25 +0000 | [diff] [blame] | 77 | # Flags to build TF with Trusted Boot support | 
|  | 78 | TRUSTED_BOARD_BOOT	:= 0 | 
| Juan Castillo | 40febc3 | 2015-01-13 10:37:27 +0000 | [diff] [blame] | 79 | AUTH_MOD		:= none | 
| Sandrine Bailleux | bf031bb | 2015-06-02 17:19:43 +0100 | [diff] [blame] | 80 | # By default, consider that the platform's reset address is not programmable. | 
|  | 81 | # The platform Makefile is free to override this value. | 
|  | 82 | PROGRAMMABLE_RESET_ADDRESS	:= 0 | 
| Achin Gupta | 4f6ad66 | 2013-10-25 09:08:21 +0100 | [diff] [blame] | 83 |  | 
| Achin Gupta | 7421b46 | 2014-02-01 18:53:26 +0000 | [diff] [blame] | 84 | # Checkpatch ignores | 
| Juan Castillo | 9b4ee6b | 2015-03-11 14:21:53 +0000 | [diff] [blame] | 85 | CHECK_IGNORE		=	--ignore COMPLEX_MACRO \ | 
|  | 86 | --ignore GERRIT_CHANGE_ID \ | 
|  | 87 | --ignore GIT_COMMIT_ID | 
| Achin Gupta | 7421b46 | 2014-02-01 18:53:26 +0000 | [diff] [blame] | 88 |  | 
|  | 89 | CHECKPATCH_ARGS		=	--no-tree --no-signoff ${CHECK_IGNORE} | 
|  | 90 | CHECKCODE_ARGS		=	--no-patch --no-tree --no-signoff ${CHECK_IGNORE} | 
| Sandrine Bailleux | 95d5353 | 2015-02-26 11:22:40 +0000 | [diff] [blame] | 91 | # Do not check the coding style on C library files | 
| Sandrine Bailleux | 662109a | 2015-03-26 15:07:47 +0000 | [diff] [blame] | 92 | CHECK_PATHS		=	$(shell ls -I include -I lib) \ | 
|  | 93 | $(addprefix include/,$(shell ls -I stdlib include)) \ | 
|  | 94 | $(addprefix lib/,$(shell ls -I stdlib lib)) | 
| Ian Spray | 36eaaf3 | 2014-01-30 17:25:28 +0000 | [diff] [blame] | 95 |  | 
| Jeenu Viswambharan | e35c404 | 2014-05-15 14:40:58 +0100 | [diff] [blame] | 96 | ifeq (${V},0) | 
| Achin Gupta | 4f6ad66 | 2013-10-25 09:08:21 +0100 | [diff] [blame] | 97 | Q=@ | 
| Ian Spray | 36eaaf3 | 2014-01-30 17:25:28 +0000 | [diff] [blame] | 98 | CHECKCODE_ARGS	+=	--no-summary --terse | 
| Achin Gupta | 4f6ad66 | 2013-10-25 09:08:21 +0100 | [diff] [blame] | 99 | else | 
|  | 100 | Q= | 
|  | 101 | endif | 
| Jeenu Viswambharan | 2f2cef4 | 2014-02-19 09:38:18 +0000 | [diff] [blame] | 102 | export Q | 
|  | 103 |  | 
| James Morrissey | eaaeece | 2013-11-01 13:56:59 +0000 | [diff] [blame] | 104 | ifneq (${DEBUG}, 0) | 
|  | 105 | BUILD_TYPE	:=	debug | 
| Dan Handley | 289c28a | 2014-08-08 14:36:42 +0100 | [diff] [blame] | 106 | # Use LOG_LEVEL_INFO by default for debug builds | 
|  | 107 | LOG_LEVEL	:=	40 | 
| James Morrissey | eaaeece | 2013-11-01 13:56:59 +0000 | [diff] [blame] | 108 | else | 
|  | 109 | BUILD_TYPE	:=	release | 
| Dan Handley | 289c28a | 2014-08-08 14:36:42 +0100 | [diff] [blame] | 110 | # Use LOG_LEVEL_NOTICE by default for release builds | 
|  | 111 | LOG_LEVEL	:=	20 | 
| James Morrissey | eaaeece | 2013-11-01 13:56:59 +0000 | [diff] [blame] | 112 | endif | 
|  | 113 |  | 
| Juan Castillo | aaa3e72 | 2014-06-30 11:41:46 +0100 | [diff] [blame] | 114 | # Default build string (git branch and commit) | 
|  | 115 | ifeq (${BUILD_STRING},) | 
|  | 116 | BUILD_STRING	:=	$(shell git log -n 1 --pretty=format:"%h") | 
|  | 117 | endif | 
|  | 118 |  | 
|  | 119 | VERSION_STRING		:=	v${VERSION_MAJOR}.${VERSION_MINOR}(${BUILD_TYPE}):${BUILD_STRING} | 
|  | 120 |  | 
| Dan Handley | bee8241 | 2014-04-15 18:20:09 +0100 | [diff] [blame] | 121 | BL_COMMON_SOURCES	:=	common/bl_common.c			\ | 
| Soby Mathew | b79af93 | 2014-06-12 17:23:58 +0100 | [diff] [blame] | 122 | common/tf_printf.c			\ | 
| Soby Mathew | 626ed51 | 2014-06-25 10:07:40 +0100 | [diff] [blame] | 123 | common/aarch64/debug.S			\ | 
| Dan Handley | bee8241 | 2014-04-15 18:20:09 +0100 | [diff] [blame] | 124 | lib/aarch64/cache_helpers.S		\ | 
|  | 125 | lib/aarch64/misc_helpers.S		\ | 
| Dan Handley | bee8241 | 2014-04-15 18:20:09 +0100 | [diff] [blame] | 126 | lib/aarch64/xlat_helpers.c		\ | 
|  | 127 | lib/stdlib/std.c			\ | 
| Dan Handley | bee8241 | 2014-04-15 18:20:09 +0100 | [diff] [blame] | 128 | plat/common/aarch64/platform_helpers.S | 
| Ryan Harkin | d7a6b0f | 2014-01-13 14:40:13 +0000 | [diff] [blame] | 129 |  | 
| Ryan Harkin | 25cff83 | 2014-01-13 12:37:03 +0000 | [diff] [blame] | 130 | BUILD_BASE		:=	./build | 
|  | 131 | BUILD_PLAT		:=	${BUILD_BASE}/${PLAT}/${BUILD_TYPE} | 
| Achin Gupta | 4f6ad66 | 2013-10-25 09:08:21 +0100 | [diff] [blame] | 132 |  | 
| Dan Handley | c04d260 | 2015-03-27 17:44:35 +0000 | [diff] [blame] | 133 | PLAT_MAKEFILE		:=	platform.mk | 
|  | 134 | # Generate the platforms list by recursively searching for all directories | 
|  | 135 | # under /plat containing a PLAT_MAKEFILE. Append each platform with a `|` | 
|  | 136 | # char and strip out the final '|'. | 
|  | 137 | PLATFORMS		:=	$(shell find plat/ -name '${PLAT_MAKEFILE}' -print0 |			\ | 
|  | 138 | sed -r 's%[^\x00]*\/([^/]*)\/${PLAT_MAKEFILE}\x00%\1|%g' |	\ | 
|  | 139 | sed -r 's/\|$$//') | 
| Achin Gupta | 375f538 | 2014-02-18 18:12:48 +0000 | [diff] [blame] | 140 | SPDS			:=	$(shell ls -I none services/spd) | 
| Ryan Harkin | 72ee331 | 2014-01-15 16:55:07 +0000 | [diff] [blame] | 141 |  | 
| Jeenu Viswambharan | 289e0da | 2014-05-16 11:38:10 +0100 | [diff] [blame] | 142 | # Convenience function for adding build definitions | 
|  | 143 | # $(eval $(call add_define,FOO)) will have: | 
|  | 144 | # -DFOO if $(FOO) is empty; -DFOO=$(FOO) otherwise | 
|  | 145 | define add_define | 
|  | 146 | DEFINES			+=	-D$(1)$(if $(value $(1)),=$(value $(1)),) | 
|  | 147 | endef | 
|  | 148 |  | 
|  | 149 | # Convenience function for verifying option has a boolean value | 
|  | 150 | # $(eval $(call assert_boolean,FOO)) will assert FOO is 0 or 1 | 
|  | 151 | define assert_boolean | 
|  | 152 | $(and $(patsubst 0,,$(value $(1))),$(patsubst 1,,$(value $(1))),$(error $(1) must be boolean)) | 
|  | 153 | endef | 
|  | 154 |  | 
| Ryan Harkin | 25cff83 | 2014-01-13 12:37:03 +0000 | [diff] [blame] | 155 | ifeq (${PLAT},) | 
| Dan Handley | c04d260 | 2015-03-27 17:44:35 +0000 | [diff] [blame] | 156 | $(error "Error: Unknown platform. Please use PLAT=<platform name> to specify the platform") | 
| Ryan Harkin | 25cff83 | 2014-01-13 12:37:03 +0000 | [diff] [blame] | 157 | endif | 
| Dan Handley | c04d260 | 2015-03-27 17:44:35 +0000 | [diff] [blame] | 158 | PLAT_MAKEFILE_FULL	:=	$(shell find plat/ -wholename '*/${PLAT}/${PLAT_MAKEFILE}') | 
|  | 159 | ifeq ($(PLAT_MAKEFILE_FULL),) | 
| Ryan Harkin | 25cff83 | 2014-01-13 12:37:03 +0000 | [diff] [blame] | 160 | $(error "Error: Invalid platform. The following platforms are available: ${PLATFORMS}") | 
|  | 161 | endif | 
| Achin Gupta | 4f6ad66 | 2013-10-25 09:08:21 +0100 | [diff] [blame] | 162 |  | 
| Jon Medhurst | 4bfc2d2 | 2014-02-13 15:19:28 +0000 | [diff] [blame] | 163 | all: msg_start | 
| Achin Gupta | 4f6ad66 | 2013-10-25 09:08:21 +0100 | [diff] [blame] | 164 |  | 
| Ryan Harkin | 25cff83 | 2014-01-13 12:37:03 +0000 | [diff] [blame] | 165 | msg_start: | 
|  | 166 | @echo "Building ${PLAT}" | 
| Achin Gupta | 4f6ad66 | 2013-10-25 09:08:21 +0100 | [diff] [blame] | 167 |  | 
| Dan Handley | c04d260 | 2015-03-27 17:44:35 +0000 | [diff] [blame] | 168 | include ${PLAT_MAKEFILE_FULL} | 
| Achin Gupta | 4f6ad66 | 2013-10-25 09:08:21 +0100 | [diff] [blame] | 169 |  | 
| Soby Mathew | 5541bb3 | 2014-09-22 14:13:34 +0100 | [diff] [blame] | 170 | # Include the CPU specific operations makefile. By default all CPU errata | 
|  | 171 | # workarounds and CPU specifc optimisations are disabled. This can be | 
| Soby Mathew | d9bdaf2 | 2014-08-14 16:19:29 +0100 | [diff] [blame] | 172 | # overridden by the platform. | 
| Soby Mathew | 5541bb3 | 2014-09-22 14:13:34 +0100 | [diff] [blame] | 173 | include lib/cpus/cpu-ops.mk | 
| Soby Mathew | d9bdaf2 | 2014-08-14 16:19:29 +0100 | [diff] [blame] | 174 |  | 
| Jon Medhurst | 4bfc2d2 | 2014-02-13 15:19:28 +0000 | [diff] [blame] | 175 | ifdef BL1_SOURCES | 
|  | 176 | NEED_BL1 := yes | 
|  | 177 | include bl1/bl1.mk | 
|  | 178 | endif | 
|  | 179 |  | 
|  | 180 | ifdef BL2_SOURCES | 
|  | 181 | NEED_BL2 := yes | 
|  | 182 | include bl2/bl2.mk | 
| Soby Mathew | 27713fb | 2014-09-08 17:51:01 +0100 | [diff] [blame] | 183 | # Using the ARM Trusted Firmware BL2 implies that a BL3-3 image also need to be supplied for the FIP. | 
|  | 184 | # This flag can be overridden by the platform. | 
|  | 185 | NEED_BL33 ?= yes | 
| Jon Medhurst | 4bfc2d2 | 2014-02-13 15:19:28 +0000 | [diff] [blame] | 186 | endif | 
|  | 187 |  | 
|  | 188 | ifdef BL31_SOURCES | 
|  | 189 | NEED_BL31 := yes | 
|  | 190 | include bl31/bl31.mk | 
| Ryan Harkin | 25cff83 | 2014-01-13 12:37:03 +0000 | [diff] [blame] | 191 | endif | 
|  | 192 |  | 
| Achin Gupta | 375f538 | 2014-02-18 18:12:48 +0000 | [diff] [blame] | 193 | # Include SPD Makefile if one has been specified | 
|  | 194 | ifneq (${SPD},none) | 
|  | 195 | # We expect to locate an spd.mk under the specified SPD directory | 
|  | 196 | SPD_MAKE		:=	$(shell m="services/spd/${SPD}/${SPD}.mk"; [ -f "$$m" ] && echo "$$m") | 
|  | 197 |  | 
|  | 198 | ifeq (${SPD_MAKE},) | 
|  | 199 | $(error Error: No services/spd/${SPD}/${SPD}.mk located) | 
|  | 200 | endif | 
|  | 201 | $(info Including ${SPD_MAKE}) | 
|  | 202 | include ${SPD_MAKE} | 
|  | 203 |  | 
| Soby Mathew | 27713fb | 2014-09-08 17:51:01 +0100 | [diff] [blame] | 204 | # If there's BL3-2 companion for the chosen SPD, and the SPD wants to build the | 
|  | 205 | # BL3-2 from source, we expect that the SPD's Makefile would set NEED_BL32 | 
|  | 206 | # variable to "yes". In case the BL3-2 is a binary which needs to be included in | 
|  | 207 | # fip, then the NEED_BL32 needs to be set and BL3-2 would need to point to the bin. | 
| Achin Gupta | 375f538 | 2014-02-18 18:12:48 +0000 | [diff] [blame] | 208 | endif | 
|  | 209 |  | 
| Juan Castillo | 6f97162 | 2014-10-21 11:30:42 +0100 | [diff] [blame] | 210 | .PHONY:			all msg_start clean realclean distclean cscope locate-checkpatch checkcodebase checkpatch fiptool fip certtool | 
| James Morrissey | eaaeece | 2013-11-01 13:56:59 +0000 | [diff] [blame] | 211 | .SUFFIXES: | 
|  | 212 |  | 
| Sandrine Bailleux | a0df63e | 2014-06-23 13:37:53 +0100 | [diff] [blame] | 213 | INCLUDES		+=	-Iinclude/bl31			\ | 
| Dan Handley | 4ecca33 | 2014-04-09 12:48:25 +0100 | [diff] [blame] | 214 | -Iinclude/bl31/services		\ | 
| Dan Handley | 4ecca33 | 2014-04-09 12:48:25 +0100 | [diff] [blame] | 215 | -Iinclude/common		\ | 
|  | 216 | -Iinclude/drivers		\ | 
|  | 217 | -Iinclude/drivers/arm		\ | 
| Dan Handley | 935db69 | 2014-08-12 14:20:28 +0100 | [diff] [blame] | 218 | -Iinclude/drivers/io		\ | 
| Varun Wadekar | c13b2e3 | 2015-05-19 16:44:17 +0530 | [diff] [blame] | 219 | -Iinclude/drivers/ti/uart	\ | 
| Dan Handley | 4ecca33 | 2014-04-09 12:48:25 +0100 | [diff] [blame] | 220 | -Iinclude/lib			\ | 
|  | 221 | -Iinclude/lib/aarch64		\ | 
| Soby Mathew | add4035 | 2014-08-14 12:49:05 +0100 | [diff] [blame] | 222 | -Iinclude/lib/cpus/aarch64	\ | 
| Dan Handley | 5f0cdb0 | 2014-05-14 17:44:19 +0100 | [diff] [blame] | 223 | -Iinclude/plat/common		\ | 
| Ryan Harkin | d7a6b0f | 2014-01-13 14:40:13 +0000 | [diff] [blame] | 224 | -Iinclude/stdlib		\ | 
|  | 225 | -Iinclude/stdlib/sys		\ | 
| Achin Gupta | 375f538 | 2014-02-18 18:12:48 +0000 | [diff] [blame] | 226 | ${PLAT_INCLUDES}		\ | 
|  | 227 | ${SPD_INCLUDES} | 
| Achin Gupta | 4f6ad66 | 2013-10-25 09:08:21 +0100 | [diff] [blame] | 228 |  | 
| Jeenu Viswambharan | e35c404 | 2014-05-15 14:40:58 +0100 | [diff] [blame] | 229 | # Process DEBUG flag | 
|  | 230 | $(eval $(call assert_boolean,DEBUG)) | 
|  | 231 | $(eval $(call add_define,DEBUG)) | 
|  | 232 | ifeq (${DEBUG},0) | 
|  | 233 | $(eval $(call add_define,NDEBUG)) | 
|  | 234 | else | 
|  | 235 | CFLAGS			+= 	-g | 
|  | 236 | ASFLAGS			+= 	-g -Wa,--gdwarf-2 | 
|  | 237 | endif | 
|  | 238 |  | 
| Dan Handley | c04d260 | 2015-03-27 17:44:35 +0000 | [diff] [blame] | 239 | # Process PLAT flag | 
|  | 240 | $(eval $(call add_define,PLAT_${PLAT})) | 
|  | 241 |  | 
| Jeenu Viswambharan | 2da8d8b | 2014-05-12 15:28:47 +0100 | [diff] [blame] | 242 | # Process NS_TIMER_SWITCH flag | 
|  | 243 | $(eval $(call assert_boolean,NS_TIMER_SWITCH)) | 
|  | 244 | $(eval $(call add_define,NS_TIMER_SWITCH)) | 
|  | 245 |  | 
| Vikram Kanigiri | dbad1ba | 2014-04-24 11:02:16 +0100 | [diff] [blame] | 246 | # Process RESET_TO_BL31 flag | 
|  | 247 | $(eval $(call assert_boolean,RESET_TO_BL31)) | 
|  | 248 | $(eval $(call add_define,RESET_TO_BL31)) | 
|  | 249 |  | 
| Juan Castillo | 0f21c54 | 2014-06-25 17:26:36 +0100 | [diff] [blame] | 250 | # Process CTX_INCLUDE_FPREGS flag | 
|  | 251 | $(eval $(call assert_boolean,CTX_INCLUDE_FPREGS)) | 
|  | 252 | $(eval $(call add_define,CTX_INCLUDE_FPREGS)) | 
|  | 253 |  | 
| Sandrine Bailleux | 2b98e78 | 2014-07-17 17:23:14 +0100 | [diff] [blame] | 254 | # Process ARM_GIC_ARCH flag | 
|  | 255 | $(eval $(call add_define,ARM_GIC_ARCH)) | 
|  | 256 |  | 
| Vikram Kanigiri | 23e47ed | 2014-12-23 01:00:22 +0000 | [diff] [blame] | 257 | # Process ARM_CCI_PRODUCT_ID flag | 
|  | 258 | $(eval $(call add_define,ARM_CCI_PRODUCT_ID)) | 
|  | 259 |  | 
| Soby Mathew | bc92012 | 2014-07-14 16:58:03 +0100 | [diff] [blame] | 260 | # Process ASM_ASSERTION flag | 
|  | 261 | $(eval $(call assert_boolean,ASM_ASSERTION)) | 
|  | 262 | $(eval $(call add_define,ASM_ASSERTION)) | 
| Sandrine Bailleux | 2b98e78 | 2014-07-17 17:23:14 +0100 | [diff] [blame] | 263 |  | 
| Dan Handley | 289c28a | 2014-08-08 14:36:42 +0100 | [diff] [blame] | 264 | # Process LOG_LEVEL flag | 
|  | 265 | $(eval $(call add_define,LOG_LEVEL)) | 
|  | 266 |  | 
| Soby Mathew | 8c5fe0b | 2015-01-08 18:02:19 +0000 | [diff] [blame] | 267 | # Process USE_COHERENT_MEM flag | 
|  | 268 | $(eval $(call assert_boolean,USE_COHERENT_MEM)) | 
|  | 269 | $(eval $(call add_define,USE_COHERENT_MEM)) | 
|  | 270 |  | 
| Juan Castillo | 6f97162 | 2014-10-21 11:30:42 +0100 | [diff] [blame] | 271 | # Process Generate CoT flags | 
|  | 272 | $(eval $(call assert_boolean,GENERATE_COT)) | 
|  | 273 | $(eval $(call assert_boolean,CREATE_KEYS)) | 
| Juan Castillo | fd34e7b | 2015-02-25 12:43:12 +0000 | [diff] [blame] | 274 | $(eval $(call assert_boolean,SAVE_KEYS)) | 
| Juan Castillo | 6f97162 | 2014-10-21 11:30:42 +0100 | [diff] [blame] | 275 |  | 
| Juan Castillo | 6eadf76 | 2015-01-07 10:39:25 +0000 | [diff] [blame] | 276 | # Process TRUSTED_BOARD_BOOT flag | 
|  | 277 | $(eval $(call assert_boolean,TRUSTED_BOARD_BOOT)) | 
|  | 278 | $(eval $(call add_define,TRUSTED_BOARD_BOOT)) | 
|  | 279 |  | 
| Sandrine Bailleux | bf031bb | 2015-06-02 17:19:43 +0100 | [diff] [blame] | 280 | # Process PROGRAMMABLE_RESET_ADDRESS flag | 
|  | 281 | $(eval $(call assert_boolean,PROGRAMMABLE_RESET_ADDRESS)) | 
|  | 282 | $(eval $(call add_define,PROGRAMMABLE_RESET_ADDRESS)) | 
|  | 283 |  | 
| Harry Liebel | 0af6d64 | 2013-12-20 18:51:12 +0000 | [diff] [blame] | 284 | ASFLAGS			+= 	-nostdinc -ffreestanding -Wa,--fatal-warnings	\ | 
| Sandrine Bailleux | a0df63e | 2014-06-23 13:37:53 +0100 | [diff] [blame] | 285 | -Werror -Wmissing-include-dirs			\ | 
| Jeenu Viswambharan | e35c404 | 2014-05-15 14:40:58 +0100 | [diff] [blame] | 286 | -mgeneral-regs-only -D__ASSEMBLY__		\ | 
|  | 287 | ${DEFINES} ${INCLUDES} | 
| Juan Castillo | db6071c | 2015-01-13 12:21:04 +0000 | [diff] [blame] | 288 | CFLAGS			+= 	-nostdinc -ffreestanding -Wall			\ | 
| Sandrine Bailleux | a0df63e | 2014-06-23 13:37:53 +0100 | [diff] [blame] | 289 | -Werror -Wmissing-include-dirs			\ | 
|  | 290 | -mgeneral-regs-only -std=c99 -c -Os		\ | 
| Jeenu Viswambharan | e35c404 | 2014-05-15 14:40:58 +0100 | [diff] [blame] | 291 | ${DEFINES} ${INCLUDES} | 
| Andrew Thoelke | dccc537 | 2014-03-18 07:13:52 +0000 | [diff] [blame] | 292 | CFLAGS			+=	-ffunction-sections -fdata-sections | 
| Achin Gupta | 4f6ad66 | 2013-10-25 09:08:21 +0100 | [diff] [blame] | 293 |  | 
| Sandrine Bailleux | 3e850a8 | 2013-11-20 11:50:48 +0000 | [diff] [blame] | 294 | LDFLAGS			+=	--fatal-warnings -O1 | 
| Andrew Thoelke | dccc537 | 2014-03-18 07:13:52 +0000 | [diff] [blame] | 295 | LDFLAGS			+=	--gc-sections | 
| Achin Gupta | 4f6ad66 | 2013-10-25 09:08:21 +0100 | [diff] [blame] | 296 |  | 
|  | 297 |  | 
| James Morrissey | eaaeece | 2013-11-01 13:56:59 +0000 | [diff] [blame] | 298 | CC			:=	${CROSS_COMPILE}gcc | 
|  | 299 | CPP			:=	${CROSS_COMPILE}cpp | 
|  | 300 | AS			:=	${CROSS_COMPILE}gcc | 
|  | 301 | AR			:=	${CROSS_COMPILE}ar | 
|  | 302 | LD			:=	${CROSS_COMPILE}ld | 
|  | 303 | OC			:=	${CROSS_COMPILE}objcopy | 
|  | 304 | OD			:=	${CROSS_COMPILE}objdump | 
|  | 305 | NM			:=	${CROSS_COMPILE}nm | 
|  | 306 | PP			:=	${CROSS_COMPILE}gcc -E ${CFLAGS} | 
| Achin Gupta | 4f6ad66 | 2013-10-25 09:08:21 +0100 | [diff] [blame] | 307 |  | 
| Harry Liebel | f58ad36 | 2014-01-10 18:00:33 +0000 | [diff] [blame] | 308 | # Variables for use with Firmware Image Package | 
|  | 309 | FIPTOOLPATH		?=	tools/fip_create | 
| Achin Gupta | 375f538 | 2014-02-18 18:12:48 +0000 | [diff] [blame] | 310 | FIPTOOL			?=	${FIPTOOLPATH}/fip_create | 
| Harry Liebel | f58ad36 | 2014-01-10 18:00:33 +0000 | [diff] [blame] | 311 | fiptool:		${FIPTOOL} | 
| Juan Castillo | 7f48fab | 2014-11-24 11:45:12 +0000 | [diff] [blame] | 312 | fip:			${BUILD_PLAT}/${FIP_NAME} | 
| Harry Liebel | f58ad36 | 2014-01-10 18:00:33 +0000 | [diff] [blame] | 313 |  | 
| Juan Castillo | 6f97162 | 2014-10-21 11:30:42 +0100 | [diff] [blame] | 314 | # Variables for use with Certificate Generation Tool | 
|  | 315 | CRTTOOLPATH		?=	tools/cert_create | 
|  | 316 | CRTTOOL			?=	${CRTTOOLPATH}/cert_create | 
|  | 317 | certtool:		${CRTTOOL} | 
|  | 318 |  | 
|  | 319 | # CoT generation tool default parameters | 
|  | 320 | TRUSTED_KEY_CERT	:=	${BUILD_PLAT}/trusted_key.crt | 
|  | 321 |  | 
|  | 322 | # Pass the private keys to the CoT generation tool in the command line | 
|  | 323 | # If CREATE_KEYS is set, the '-n' option will be added, indicating the tool to create new keys | 
|  | 324 | ifneq (${GENERATE_COT},0) | 
|  | 325 | $(eval CERTS := yes) | 
|  | 326 |  | 
| Juan Castillo | b7124ea | 2014-11-04 17:36:40 +0000 | [diff] [blame] | 327 | $(eval FIP_DEPS += certificates) | 
|  | 328 | $(eval FIP_ARGS += --trusted-key-cert ${TRUSTED_KEY_CERT}) | 
|  | 329 |  | 
| Juan Castillo | 6f97162 | 2014-10-21 11:30:42 +0100 | [diff] [blame] | 330 | ifneq (${CREATE_KEYS},0) | 
|  | 331 | $(eval CRT_ARGS += -n) | 
| Juan Castillo | fd34e7b | 2015-02-25 12:43:12 +0000 | [diff] [blame] | 332 | ifneq (${SAVE_KEYS},0) | 
|  | 333 | $(eval CRT_ARGS += -k) | 
|  | 334 | endif | 
| Juan Castillo | 6f97162 | 2014-10-21 11:30:42 +0100 | [diff] [blame] | 335 | endif | 
|  | 336 | $(eval CRT_ARGS += $(if ${ROT_KEY}, --rot-key ${ROT_KEY})) | 
|  | 337 | $(eval CRT_ARGS += $(if ${TRUSTED_WORLD_KEY}, --trusted-world-key ${TRUSTED_WORLD_KEY})) | 
|  | 338 | $(eval CRT_ARGS += $(if ${NON_TRUSTED_WORLD_KEY}, --non-trusted-world-key ${NON_TRUSTED_WORLD_KEY})) | 
|  | 339 | $(eval CRT_ARGS += --trusted-key-cert ${TRUSTED_KEY_CERT}) | 
|  | 340 | endif | 
|  | 341 |  | 
| Juan Castillo | 40febc3 | 2015-01-13 10:37:27 +0000 | [diff] [blame] | 342 | # Check Trusted Board Boot options | 
|  | 343 | ifneq (${TRUSTED_BOARD_BOOT},0) | 
|  | 344 | ifeq (${AUTH_MOD},none) | 
|  | 345 | $(error Error: When TRUSTED_BOARD_BOOT=1, AUTH_MOD has to be the name of a valid authentication module) | 
|  | 346 | else | 
|  | 347 | # We expect to locate an *.mk file under the specified AUTH_MOD directory | 
|  | 348 | AUTH_MAKE := $(shell m="common/auth/${AUTH_MOD}/${AUTH_MOD}.mk"; [ -f "$$m" ] && echo "$$m") | 
|  | 349 | ifeq (${AUTH_MAKE},) | 
|  | 350 | $(error Error: No common/auth/${AUTH_MOD}/${AUTH_MOD}.mk located) | 
|  | 351 | endif | 
|  | 352 | $(info Including ${AUTH_MAKE}) | 
|  | 353 | include ${AUTH_MAKE} | 
|  | 354 | endif | 
|  | 355 |  | 
|  | 356 | BL_COMMON_SOURCES	+=	common/auth.c | 
|  | 357 | endif | 
|  | 358 |  | 
| Juan Castillo | db6071c | 2015-01-13 12:21:04 +0000 | [diff] [blame] | 359 | # Check if -pedantic option should be used | 
|  | 360 | ifeq (${DISABLE_PEDANTIC},0) | 
|  | 361 | CFLAGS		+= 	-pedantic | 
|  | 362 | endif | 
|  | 363 |  | 
| Ian Spray | 36eaaf3 | 2014-01-30 17:25:28 +0000 | [diff] [blame] | 364 | locate-checkpatch: | 
|  | 365 | ifndef CHECKPATCH | 
|  | 366 | $(error "Please set CHECKPATCH to point to the Linux checkpatch.pl file, eg: CHECKPATCH=../linux/script/checkpatch.pl") | 
|  | 367 | else | 
|  | 368 | ifeq (,$(wildcard ${CHECKPATCH})) | 
|  | 369 | $(error "The file CHECKPATCH points to cannot be found, use eg: CHECKPATCH=../linux/script/checkpatch.pl") | 
|  | 370 | endif | 
|  | 371 | endif | 
|  | 372 |  | 
| Achin Gupta | 4f6ad66 | 2013-10-25 09:08:21 +0100 | [diff] [blame] | 373 | clean: | 
|  | 374 | @echo "  CLEAN" | 
| Ryan Harkin | 25cff83 | 2014-01-13 12:37:03 +0000 | [diff] [blame] | 375 | ${Q}rm -rf ${BUILD_PLAT} | 
| Jeenu Viswambharan | 2f2cef4 | 2014-02-19 09:38:18 +0000 | [diff] [blame] | 376 | ${Q}${MAKE} --no-print-directory -C ${FIPTOOLPATH} clean | 
| Juan Castillo | 6f97162 | 2014-10-21 11:30:42 +0100 | [diff] [blame] | 377 | ${Q}${MAKE} PLAT=${PLAT} --no-print-directory -C ${CRTTOOLPATH} clean | 
| Achin Gupta | 4f6ad66 | 2013-10-25 09:08:21 +0100 | [diff] [blame] | 378 |  | 
| James Morrissey | eaaeece | 2013-11-01 13:56:59 +0000 | [diff] [blame] | 379 | realclean distclean: | 
|  | 380 | @echo "  REALCLEAN" | 
|  | 381 | ${Q}rm -rf ${BUILD_BASE} | 
| Joakim Bech | 35fab8c | 2014-01-23 14:51:49 +0100 | [diff] [blame] | 382 | ${Q}rm -f ${CURDIR}/cscope.* | 
| Jeenu Viswambharan | 2f2cef4 | 2014-02-19 09:38:18 +0000 | [diff] [blame] | 383 | ${Q}${MAKE} --no-print-directory -C ${FIPTOOLPATH} clean | 
| Juan Castillo | 6f97162 | 2014-10-21 11:30:42 +0100 | [diff] [blame] | 384 | ${Q}${MAKE} PLAT=${PLAT} --no-print-directory -C ${CRTTOOLPATH} clean | 
| Achin Gupta | 4f6ad66 | 2013-10-25 09:08:21 +0100 | [diff] [blame] | 385 |  | 
| Ian Spray | 36eaaf3 | 2014-01-30 17:25:28 +0000 | [diff] [blame] | 386 | checkcodebase:		locate-checkpatch | 
|  | 387 | @echo "  CHECKING STYLE" | 
|  | 388 | @if test -d .git ; then	\ | 
| Juan Castillo | 4f2104f | 2014-06-13 17:05:10 +0100 | [diff] [blame] | 389 | git ls-files | grep -v stdlib | while read GIT_FILE ; do ${CHECKPATCH} ${CHECKCODE_ARGS} -f $$GIT_FILE ; done ;	\ | 
| Ian Spray | 36eaaf3 | 2014-01-30 17:25:28 +0000 | [diff] [blame] | 390 | else			\ | 
| Juan Castillo | 4f2104f | 2014-06-13 17:05:10 +0100 | [diff] [blame] | 391 | find . -type f -not -iwholename "*.git*" -not -iwholename "*build*" -not -iwholename "*stdlib*" -exec ${CHECKPATCH} ${CHECKCODE_ARGS} -f {} \; ;	\ | 
| Ian Spray | 36eaaf3 | 2014-01-30 17:25:28 +0000 | [diff] [blame] | 392 | fi | 
|  | 393 |  | 
|  | 394 | checkpatch:		locate-checkpatch | 
|  | 395 | @echo "  CHECKING STYLE" | 
| Sandrine Bailleux | 662109a | 2015-03-26 15:07:47 +0000 | [diff] [blame] | 396 | ${Q}git log -p ${BASE_COMMIT}..HEAD -- ${CHECK_PATHS} | ${CHECKPATCH} ${CHECKPATCH_ARGS} - || true | 
| Ian Spray | 36eaaf3 | 2014-01-30 17:25:28 +0000 | [diff] [blame] | 397 |  | 
| Juan Castillo | 6f97162 | 2014-10-21 11:30:42 +0100 | [diff] [blame] | 398 | .PHONY: ${CRTTOOL} | 
|  | 399 | ${CRTTOOL}: | 
|  | 400 | ${Q}${MAKE} PLAT=${PLAT} --no-print-directory -C ${CRTTOOLPATH} | 
|  | 401 | @echo | 
|  | 402 | @echo "Built $@ successfully" | 
|  | 403 | @echo | 
|  | 404 |  | 
| Sandrine Bailleux | 07deed4 | 2014-10-27 17:10:46 +0000 | [diff] [blame] | 405 | .PHONY: ${FIPTOOL} | 
| Harry Liebel | f58ad36 | 2014-01-10 18:00:33 +0000 | [diff] [blame] | 406 | ${FIPTOOL}: | 
| Jeenu Viswambharan | 2f2cef4 | 2014-02-19 09:38:18 +0000 | [diff] [blame] | 407 | ${Q}${MAKE} --no-print-directory -C ${FIPTOOLPATH} | 
| Harry Liebel | f58ad36 | 2014-01-10 18:00:33 +0000 | [diff] [blame] | 408 |  | 
| Jon Medhurst | 6d55d10 | 2014-02-12 15:54:48 +0000 | [diff] [blame] | 409 | define match_goals | 
|  | 410 | $(strip $(foreach goal,$(1),$(filter $(goal),$(MAKECMDGOALS)))) | 
|  | 411 | endef | 
| James Morrissey | eaaeece | 2013-11-01 13:56:59 +0000 | [diff] [blame] | 412 |  | 
| Sandrine Bailleux | 8d2296f | 2014-03-21 14:17:51 +0000 | [diff] [blame] | 413 | # List of rules that involve building things | 
|  | 414 | BUILD_TARGETS := all bl1 bl2 bl31 bl32 fip | 
| James Morrissey | eaaeece | 2013-11-01 13:56:59 +0000 | [diff] [blame] | 415 |  | 
| Sandrine Bailleux | 8d2296f | 2014-03-21 14:17:51 +0000 | [diff] [blame] | 416 | # Does the list of goals specified on the command line include a build target? | 
|  | 417 | ifneq ($(call match_goals,${BUILD_TARGETS}),) | 
|  | 418 | IS_ANYTHING_TO_BUILD := 1 | 
|  | 419 | endif | 
| Achin Gupta | 4f6ad66 | 2013-10-25 09:08:21 +0100 | [diff] [blame] | 420 |  | 
| Jon Medhurst | 6d55d10 | 2014-02-12 15:54:48 +0000 | [diff] [blame] | 421 | define MAKE_C | 
| James Morrissey | eaaeece | 2013-11-01 13:56:59 +0000 | [diff] [blame] | 422 |  | 
| Jon Medhurst | 6d55d10 | 2014-02-12 15:54:48 +0000 | [diff] [blame] | 423 | $(eval OBJ := $(1)/$(patsubst %.c,%.o,$(notdir $(2)))) | 
|  | 424 | $(eval PREREQUISITES := $(patsubst %.o,%.d,$(OBJ))) | 
| James Morrissey | eaaeece | 2013-11-01 13:56:59 +0000 | [diff] [blame] | 425 |  | 
| Jon Medhurst | 6d55d10 | 2014-02-12 15:54:48 +0000 | [diff] [blame] | 426 | $(OBJ) : $(2) | 
|  | 427 | @echo "  CC      $$<" | 
| Soby Mathew | 27905d0 | 2014-07-16 15:12:21 +0100 | [diff] [blame] | 428 | $$(Q)$$(CC) $$(CFLAGS) -DIMAGE_BL$(3) -c $$< -o $$@ | 
| James Morrissey | eaaeece | 2013-11-01 13:56:59 +0000 | [diff] [blame] | 429 |  | 
| Achin Gupta | 4f6ad66 | 2013-10-25 09:08:21 +0100 | [diff] [blame] | 430 |  | 
| Jon Medhurst | 6d55d10 | 2014-02-12 15:54:48 +0000 | [diff] [blame] | 431 | $(PREREQUISITES) : $(2) | 
|  | 432 | @echo "  DEPS    $$@" | 
|  | 433 | @mkdir -p $(1) | 
|  | 434 | $$(Q)$$(CC) $$(CFLAGS) -M -MT $(OBJ) -MF $$@ $$< | 
| Achin Gupta | 4f6ad66 | 2013-10-25 09:08:21 +0100 | [diff] [blame] | 435 |  | 
| Sandrine Bailleux | 8d2296f | 2014-03-21 14:17:51 +0000 | [diff] [blame] | 436 | ifdef IS_ANYTHING_TO_BUILD | 
| Jon Medhurst | 6d55d10 | 2014-02-12 15:54:48 +0000 | [diff] [blame] | 437 | -include $(PREREQUISITES) | 
|  | 438 | endif | 
|  | 439 |  | 
|  | 440 | endef | 
|  | 441 |  | 
|  | 442 |  | 
|  | 443 | define MAKE_S | 
|  | 444 |  | 
|  | 445 | $(eval OBJ := $(1)/$(patsubst %.S,%.o,$(notdir $(2)))) | 
|  | 446 | $(eval PREREQUISITES := $(patsubst %.o,%.d,$(OBJ))) | 
|  | 447 |  | 
|  | 448 | $(OBJ) : $(2) | 
|  | 449 | @echo "  AS      $$<" | 
| Soby Mathew | 27905d0 | 2014-07-16 15:12:21 +0100 | [diff] [blame] | 450 | $$(Q)$$(AS) $$(ASFLAGS) -DIMAGE_BL$(3) -c $$< -o $$@ | 
| Jon Medhurst | 6d55d10 | 2014-02-12 15:54:48 +0000 | [diff] [blame] | 451 |  | 
|  | 452 | $(PREREQUISITES) : $(2) | 
|  | 453 | @echo "  DEPS    $$@" | 
|  | 454 | @mkdir -p $(1) | 
|  | 455 | $$(Q)$$(AS) $$(ASFLAGS) -M -MT $(OBJ) -MF $$@ $$< | 
|  | 456 |  | 
| Sandrine Bailleux | 8d2296f | 2014-03-21 14:17:51 +0000 | [diff] [blame] | 457 | ifdef IS_ANYTHING_TO_BUILD | 
| Jon Medhurst | 6d55d10 | 2014-02-12 15:54:48 +0000 | [diff] [blame] | 458 | -include $(PREREQUISITES) | 
|  | 459 | endif | 
|  | 460 |  | 
|  | 461 | endef | 
|  | 462 |  | 
|  | 463 |  | 
|  | 464 | define MAKE_LD | 
|  | 465 |  | 
|  | 466 | $(eval PREREQUISITES := $(1).d) | 
|  | 467 |  | 
|  | 468 | $(1) : $(2) | 
|  | 469 | @echo "  PP      $$<" | 
| Juan Castillo | 513dd3a | 2014-12-19 09:51:00 +0000 | [diff] [blame] | 470 | $$(Q)$$(AS) $$(ASFLAGS) -P -E -D__LINKER__ -o $$@ $$< | 
| Jon Medhurst | 6d55d10 | 2014-02-12 15:54:48 +0000 | [diff] [blame] | 471 |  | 
|  | 472 | $(PREREQUISITES) : $(2) | 
|  | 473 | @echo "  DEPS    $$@" | 
|  | 474 | @mkdir -p $$(dir $$@) | 
|  | 475 | $$(Q)$$(AS) $$(ASFLAGS) -M -MT $(1) -MF $$@ $$< | 
|  | 476 |  | 
| Sandrine Bailleux | 8d2296f | 2014-03-21 14:17:51 +0000 | [diff] [blame] | 477 | ifdef IS_ANYTHING_TO_BUILD | 
| Jon Medhurst | 6d55d10 | 2014-02-12 15:54:48 +0000 | [diff] [blame] | 478 | -include $(PREREQUISITES) | 
|  | 479 | endif | 
|  | 480 |  | 
|  | 481 | endef | 
|  | 482 |  | 
|  | 483 |  | 
|  | 484 | define MAKE_OBJS | 
|  | 485 | $(eval C_OBJS := $(filter %.c,$(2))) | 
|  | 486 | $(eval REMAIN := $(filter-out %.c,$(2))) | 
| Soby Mathew | 27905d0 | 2014-07-16 15:12:21 +0100 | [diff] [blame] | 487 | $(eval $(foreach obj,$(C_OBJS),$(call MAKE_C,$(1),$(obj),$(3)))) | 
| Jon Medhurst | 6d55d10 | 2014-02-12 15:54:48 +0000 | [diff] [blame] | 488 |  | 
|  | 489 | $(eval S_OBJS := $(filter %.S,$(REMAIN))) | 
|  | 490 | $(eval REMAIN := $(filter-out %.S,$(REMAIN))) | 
| Soby Mathew | 27905d0 | 2014-07-16 15:12:21 +0100 | [diff] [blame] | 491 | $(eval $(foreach obj,$(S_OBJS),$(call MAKE_S,$(1),$(obj),$(3)))) | 
| Jon Medhurst | 6d55d10 | 2014-02-12 15:54:48 +0000 | [diff] [blame] | 492 |  | 
|  | 493 | $(and $(REMAIN),$(error Unexpected source files present: $(REMAIN))) | 
|  | 494 | endef | 
|  | 495 |  | 
|  | 496 |  | 
|  | 497 | # NOTE: The line continuation '\' is required in the next define otherwise we | 
|  | 498 | # end up with a line-feed characer at the end of the last c filename. | 
|  | 499 | # Also bare this issue in mind if extending the list of supported filetypes. | 
|  | 500 | define SOURCES_TO_OBJS | 
|  | 501 | $(notdir $(patsubst %.c,%.o,$(filter %.c,$(1)))) \ | 
|  | 502 | $(notdir $(patsubst %.S,%.o,$(filter %.S,$(1)))) | 
|  | 503 | endef | 
|  | 504 |  | 
| Juan Castillo | 6f97162 | 2014-10-21 11:30:42 +0100 | [diff] [blame] | 505 |  | 
|  | 506 | # MAKE_TOOL_ARGS macro defines the command line arguments for the FIP and CRT | 
|  | 507 | # tools at each BL stage. Arguments: | 
|  | 508 | #   $(1) = BL stage (2, 30, 31, 32, 33) | 
|  | 509 | #   $(2) = Binary file | 
|  | 510 | #   $(3) = In FIP (false if empty) | 
|  | 511 | #   $(4) = Create certificates (false if empty) | 
|  | 512 | #   $(5) = Create key certificate (false if empty) | 
|  | 513 | #   $(6) = Private key (optional) | 
|  | 514 | define MAKE_TOOL_ARGS | 
|  | 515 |  | 
|  | 516 | $(eval FIP_DEPS += $(if $3,$(2),)) | 
|  | 517 | $(eval FIP_ARGS += $(if $3,--bl$(1) $(2),)) | 
| Juan Castillo | b7124ea | 2014-11-04 17:36:40 +0000 | [diff] [blame] | 518 | $(eval FIP_ARGS += $(if $4,--bl$(1)-cert $(BUILD_PLAT)/bl$(1).crt)) | 
|  | 519 | $(eval FIP_ARGS += $(if $4,$(if $5,--bl$(1)-key-cert $(BUILD_PLAT)/bl$(1)_key.crt))) | 
| Juan Castillo | 6f97162 | 2014-10-21 11:30:42 +0100 | [diff] [blame] | 520 |  | 
|  | 521 | $(eval CRT_DEPS += $(if $4,$(2),)) | 
| Juan Castillo | 6f97162 | 2014-10-21 11:30:42 +0100 | [diff] [blame] | 522 | $(eval CRT_ARGS += $(if $4,--bl$(1) $(2))) | 
|  | 523 | $(eval CRT_ARGS += $(if $4,$(if $6,--bl$(1)-key $(6)))) | 
|  | 524 | $(eval CRT_ARGS += $(if $4,--bl$(1)-cert $(BUILD_PLAT)/bl$(1).crt)) | 
|  | 525 | $(eval CRT_ARGS += $(if $4,$(if $5,--bl$(1)-key-cert $(BUILD_PLAT)/bl$(1)_key.crt))) | 
|  | 526 |  | 
|  | 527 | endef | 
|  | 528 |  | 
|  | 529 |  | 
|  | 530 | # MAKE_BL macro defines the targets and options to build each BL image. | 
|  | 531 | # Arguments: | 
|  | 532 | #   $(1) = BL stage (2, 30, 31, 32, 33) | 
|  | 533 | #   $(2) = In FIP (false if empty) | 
|  | 534 | #   $(3) = Create certificates (false if empty) | 
|  | 535 | #   $(4) = Create key certificate (false if empty) | 
|  | 536 | #   $(5) = Private key (optional) | 
| Jon Medhurst | 6d55d10 | 2014-02-12 15:54:48 +0000 | [diff] [blame] | 537 | define MAKE_BL | 
|  | 538 | $(eval BUILD_DIR  := ${BUILD_PLAT}/bl$(1)) | 
|  | 539 | $(eval SOURCES    := $(BL$(1)_SOURCES) $(BL_COMMON_SOURCES) $(PLAT_BL_COMMON_SOURCES)) | 
|  | 540 | $(eval OBJS       := $(addprefix $(BUILD_DIR)/,$(call SOURCES_TO_OBJS,$(SOURCES)))) | 
|  | 541 | $(eval LINKERFILE := $(BUILD_DIR)/bl$(1).ld) | 
|  | 542 | $(eval MAPFILE    := $(BUILD_DIR)/bl$(1).map) | 
|  | 543 | $(eval ELF        := $(BUILD_DIR)/bl$(1).elf) | 
|  | 544 | $(eval DUMP       := $(BUILD_DIR)/bl$(1).dump) | 
|  | 545 | $(eval BIN        := $(BUILD_PLAT)/bl$(1).bin) | 
|  | 546 |  | 
| Soby Mathew | 27905d0 | 2014-07-16 15:12:21 +0100 | [diff] [blame] | 547 | $(eval $(call MAKE_OBJS,$(BUILD_DIR),$(SOURCES),$(1))) | 
| Jon Medhurst | 6d55d10 | 2014-02-12 15:54:48 +0000 | [diff] [blame] | 548 | $(eval $(call MAKE_LD,$(LINKERFILE),$(BL$(1)_LINKERFILE))) | 
|  | 549 |  | 
|  | 550 | $(BUILD_DIR) : | 
|  | 551 | $$(Q)mkdir -p "$$@" | 
|  | 552 |  | 
|  | 553 | $(ELF) : $(OBJS) $(LINKERFILE) | 
|  | 554 | @echo "  LD      $$@" | 
| Juan Castillo | aaa3e72 | 2014-06-30 11:41:46 +0100 | [diff] [blame] | 555 | @echo 'const char build_message[] = "Built : "__TIME__", "__DATE__; \ | 
|  | 556 | const char version_string[] = "${VERSION_STRING}";' | \ | 
| Jon Medhurst | fb05246 | 2014-02-17 12:18:24 +0000 | [diff] [blame] | 557 | $$(CC) $$(CFLAGS) -xc - -o $(BUILD_DIR)/build_message.o | 
| Jon Medhurst | 6d55d10 | 2014-02-12 15:54:48 +0000 | [diff] [blame] | 558 | $$(Q)$$(LD) -o $$@ $$(LDFLAGS) -Map=$(MAPFILE) --script $(LINKERFILE) \ | 
| Jeenu Viswambharan | 9f98aa1 | 2014-03-11 11:06:45 +0000 | [diff] [blame] | 559 | $(BUILD_DIR)/build_message.o $(OBJS) | 
| Jon Medhurst | 6d55d10 | 2014-02-12 15:54:48 +0000 | [diff] [blame] | 560 |  | 
|  | 561 | $(DUMP) : $(ELF) | 
|  | 562 | @echo "  OD      $$@" | 
|  | 563 | $${Q}$${OD} -dx $$< > $$@ | 
|  | 564 |  | 
|  | 565 | $(BIN) : $(ELF) | 
|  | 566 | @echo "  BIN     $$@" | 
|  | 567 | $$(Q)$$(OC) -O binary $$< $$@ | 
|  | 568 | @echo | 
|  | 569 | @echo "Built $$@ successfully" | 
|  | 570 | @echo | 
|  | 571 |  | 
|  | 572 | .PHONY : bl$(1) | 
|  | 573 | bl$(1) : $(BUILD_DIR) $(BIN) $(DUMP) | 
|  | 574 |  | 
|  | 575 | all : bl$(1) | 
|  | 576 |  | 
| Juan Castillo | 6f97162 | 2014-10-21 11:30:42 +0100 | [diff] [blame] | 577 | $(eval $(call MAKE_TOOL_ARGS,$(1),$(BIN),$(2),$(3),$(4),$(5))) | 
| Jon Medhurst | 6d55d10 | 2014-02-12 15:54:48 +0000 | [diff] [blame] | 578 |  | 
|  | 579 | endef | 
|  | 580 |  | 
|  | 581 |  | 
| Jon Medhurst | 4bfc2d2 | 2014-02-13 15:19:28 +0000 | [diff] [blame] | 582 | ifeq (${NEED_BL1},yes) | 
| Jon Medhurst | 6d55d10 | 2014-02-12 15:54:48 +0000 | [diff] [blame] | 583 | $(eval $(call MAKE_BL,1)) | 
| Jon Medhurst | 4bfc2d2 | 2014-02-13 15:19:28 +0000 | [diff] [blame] | 584 | endif | 
| Jon Medhurst | 6d55d10 | 2014-02-12 15:54:48 +0000 | [diff] [blame] | 585 |  | 
| Jon Medhurst | 4bfc2d2 | 2014-02-13 15:19:28 +0000 | [diff] [blame] | 586 | ifeq (${NEED_BL2},yes) | 
| Juan Castillo | 6f97162 | 2014-10-21 11:30:42 +0100 | [diff] [blame] | 587 | $(if ${BL2}, $(eval $(call MAKE_TOOL_ARGS,2,${BL2},in_fip,${CERTS})),\ | 
|  | 588 | $(eval $(call MAKE_BL,2,in_fip,${CERTS}))) | 
| Jon Medhurst | 4bfc2d2 | 2014-02-13 15:19:28 +0000 | [diff] [blame] | 589 | endif | 
| Jon Medhurst | 6d55d10 | 2014-02-12 15:54:48 +0000 | [diff] [blame] | 590 |  | 
| Jon Medhurst | 4bfc2d2 | 2014-02-13 15:19:28 +0000 | [diff] [blame] | 591 | ifeq (${NEED_BL31},yes) | 
| Jon Medhurst | 6d55d10 | 2014-02-12 15:54:48 +0000 | [diff] [blame] | 592 | BL31_SOURCES += ${SPD_SOURCES} | 
| Juan Castillo | 6f97162 | 2014-10-21 11:30:42 +0100 | [diff] [blame] | 593 | $(if ${BL31}, $(eval $(call MAKE_TOOL_ARGS,31,${BL31},in_fip,${CERTS},${CERTS},${BL31_KEY})),\ | 
|  | 594 | $(eval $(call MAKE_BL,31,in_fip,${CERTS},${CERTS},${BL31_KEY}))) | 
| Jon Medhurst | 4bfc2d2 | 2014-02-13 15:19:28 +0000 | [diff] [blame] | 595 | endif | 
| Jon Medhurst | 6d55d10 | 2014-02-12 15:54:48 +0000 | [diff] [blame] | 596 |  | 
|  | 597 | ifeq (${NEED_BL32},yes) | 
| Juan Castillo | 6f97162 | 2014-10-21 11:30:42 +0100 | [diff] [blame] | 598 | $(if ${BL32}, $(eval $(call MAKE_TOOL_ARGS,32,${BL32},in_fip,${CERTS},${CERTS},${BL32_KEY})),\ | 
|  | 599 | $(eval $(call MAKE_BL,32,in_fip,${CERTS},${CERTS},${BL32_KEY}))) | 
| Jon Medhurst | 6d55d10 | 2014-02-12 15:54:48 +0000 | [diff] [blame] | 600 | endif | 
| Ryan Harkin | 72ee331 | 2014-01-15 16:55:07 +0000 | [diff] [blame] | 601 |  | 
| Sandrine Bailleux | 93d81d6 | 2014-06-24 14:19:36 +0100 | [diff] [blame] | 602 | ifeq (${NEED_BL30},yes) | 
| Juan Castillo | 6f97162 | 2014-10-21 11:30:42 +0100 | [diff] [blame] | 603 | $(if ${BL30}, $(eval $(call MAKE_TOOL_ARGS,30,${BL30},in_fip,${CERTS},${CERTS},${BL30_KEY}))) | 
| Sandrine Bailleux | 93d81d6 | 2014-06-24 14:19:36 +0100 | [diff] [blame] | 604 |  | 
| Sandrine Bailleux | 93d81d6 | 2014-06-24 14:19:36 +0100 | [diff] [blame] | 605 | # If BL3-0 is needed by the platform then 'BL30' variable must be defined. | 
|  | 606 | check_bl30: | 
|  | 607 | $(if ${BL30},,$(error "To build a FIP for platform ${PLAT}, please set BL30 to point to the SCP firmware")) | 
|  | 608 | else | 
| Soby Mathew | 27713fb | 2014-09-08 17:51:01 +0100 | [diff] [blame] | 609 |  | 
| Sandrine Bailleux | 93d81d6 | 2014-06-24 14:19:36 +0100 | [diff] [blame] | 610 | # If BL3-0 is not needed by the platform but the user still specified the path | 
|  | 611 | # to a BL3-0 image then warn him that it will be ignored. | 
|  | 612 | check_bl30: | 
|  | 613 | $(if ${BL30},$(warning "BL3-0 is not supported on platform ${PLAT}, it will just be ignored"),) | 
|  | 614 | endif | 
|  | 615 |  | 
| Soby Mathew | 27713fb | 2014-09-08 17:51:01 +0100 | [diff] [blame] | 616 | ifeq (${NEED_BL33},yes) | 
| Juan Castillo | 6f97162 | 2014-10-21 11:30:42 +0100 | [diff] [blame] | 617 | $(if ${BL33}, $(eval $(call MAKE_TOOL_ARGS,33,${BL33},in_fip,${CERTS},${CERTS},${BL33_KEY}))) | 
| Soby Mathew | 27713fb | 2014-09-08 17:51:01 +0100 | [diff] [blame] | 618 |  | 
|  | 619 | # If BL3-3 is needed by the platform then 'BL33' variable must be defined. | 
|  | 620 | check_bl33: | 
|  | 621 | $(if ${BL33},,$(error "To build a FIP, please set BL33 to point to the Normal World binary, eg: BL33=../uefi/FVP_AARCH64_EFI.fd")) | 
|  | 622 | else | 
|  | 623 |  | 
|  | 624 | # If BL3-3 is not needed by the platform but the user still specified the path | 
|  | 625 | # to a BL3-3 image then warn him that it will be ignored. | 
|  | 626 | check_bl33: | 
|  | 627 | $(if ${BL33},$(warning "BL3-3 is not supported on platform ${PLAT}, it will just be ignored"),) | 
|  | 628 | endif | 
|  | 629 |  | 
| Juan Castillo | 6f97162 | 2014-10-21 11:30:42 +0100 | [diff] [blame] | 630 | # Add the dependency on the certificates | 
|  | 631 | ifneq (${GENERATE_COT},0) | 
| Juan Castillo | 85cdfdb | 2015-03-02 16:16:13 +0000 | [diff] [blame] | 632 | fip: certificates | 
| Juan Castillo | 6f97162 | 2014-10-21 11:30:42 +0100 | [diff] [blame] | 633 | endif | 
|  | 634 |  | 
|  | 635 | certificates: ${CRT_DEPS} ${CRTTOOL} check_bl30 check_bl33 | 
|  | 636 | ${Q}${CRTTOOL} ${CRT_ARGS} | 
|  | 637 | @echo | 
|  | 638 | @echo "Built $@ successfully" | 
|  | 639 | @echo "Certificates can be found in ${BUILD_PLAT}" | 
|  | 640 | @echo | 
| Soby Mathew | 27713fb | 2014-09-08 17:51:01 +0100 | [diff] [blame] | 641 |  | 
| Juan Castillo | 7f48fab | 2014-11-24 11:45:12 +0000 | [diff] [blame] | 642 | ${BUILD_PLAT}/${FIP_NAME}: ${FIP_DEPS} ${FIPTOOL} check_bl30 check_bl33 | 
| Harry Liebel | f58ad36 | 2014-01-10 18:00:33 +0000 | [diff] [blame] | 643 | ${Q}${FIPTOOL} --dump \ | 
| Achin Gupta | 375f538 | 2014-02-18 18:12:48 +0000 | [diff] [blame] | 644 | ${FIP_ARGS} \ | 
| Harry Liebel | f58ad36 | 2014-01-10 18:00:33 +0000 | [diff] [blame] | 645 | $@ | 
|  | 646 | @echo | 
| Jeenu Viswambharan | 2f2cef4 | 2014-02-19 09:38:18 +0000 | [diff] [blame] | 647 | @echo "Built $@ successfully" | 
|  | 648 | @echo | 
| Harry Liebel | f58ad36 | 2014-01-10 18:00:33 +0000 | [diff] [blame] | 649 |  | 
|  | 650 |  | 
| Joakim Bech | 35fab8c | 2014-01-23 14:51:49 +0100 | [diff] [blame] | 651 | cscope: | 
|  | 652 | @echo "  CSCOPE" | 
|  | 653 | ${Q}find ${CURDIR} -name "*.[chsS]" > cscope.files | 
|  | 654 | ${Q}cscope -b -q -k | 
|  | 655 |  | 
| Ryan Harkin | 72ee331 | 2014-01-15 16:55:07 +0000 | [diff] [blame] | 656 | help: | 
| Dan Handley | c04d260 | 2015-03-27 17:44:35 +0000 | [diff] [blame] | 657 | @echo "usage: ${MAKE} PLAT=<${PLATFORMS}> [OPTIONS] [TARGET]" | 
| Ryan Harkin | 72ee331 | 2014-01-15 16:55:07 +0000 | [diff] [blame] | 658 | @echo "" | 
|  | 659 | @echo "PLAT is used to specify which platform you wish to build." | 
| Sandrine Bailleux | 08c7ed0 | 2014-03-21 13:16:35 +0000 | [diff] [blame] | 660 | @echo "If no platform is specified, PLAT defaults to: ${DEFAULT_PLAT}" | 
| Ryan Harkin | 72ee331 | 2014-01-15 16:55:07 +0000 | [diff] [blame] | 661 | @echo "" | 
| Sandrine Bailleux | 1b57859 | 2015-02-18 16:18:00 +0000 | [diff] [blame] | 662 | @echo "Please refer to the User Guide for a list of all supported options." | 
|  | 663 | @echo "Note that the build system doesn't track dependencies for build " | 
|  | 664 | @echo "options. Therefore, if any of the build options are changed " | 
|  | 665 | @echo "from a previous build, a clean build must be performed." | 
|  | 666 | @echo "" | 
| Ryan Harkin | 72ee331 | 2014-01-15 16:55:07 +0000 | [diff] [blame] | 667 | @echo "Supported Targets:" | 
| Sandrine Bailleux | 1b57859 | 2015-02-18 16:18:00 +0000 | [diff] [blame] | 668 | @echo "  all            Build all individual bootloader binaries" | 
| Ian Spray | 36eaaf3 | 2014-01-30 17:25:28 +0000 | [diff] [blame] | 669 | @echo "  bl1            Build the BL1 binary" | 
| Jeenu Viswambharan | 8aa559c | 2014-02-21 11:42:08 +0000 | [diff] [blame] | 670 | @echo "  bl2            Build the BL2 binary" | 
| Sandrine Bailleux | 1b57859 | 2015-02-18 16:18:00 +0000 | [diff] [blame] | 671 | @echo "  bl31           Build the BL3-1 binary" | 
|  | 672 | @echo "  bl32           Build the BL3-2 binary" | 
|  | 673 | @echo "  fip            Build the Firmware Image Package (FIP)" | 
| Ian Spray | 36eaaf3 | 2014-01-30 17:25:28 +0000 | [diff] [blame] | 674 | @echo "  checkcodebase  Check the coding style of the entire source tree" | 
|  | 675 | @echo "  checkpatch     Check the coding style on changes in the current" | 
|  | 676 | @echo "                 branch against BASE_COMMIT (default origin/master)" | 
|  | 677 | @echo "  clean          Clean the build for the selected platform" | 
| Harry Liebel | f58ad36 | 2014-01-10 18:00:33 +0000 | [diff] [blame] | 678 | @echo "  cscope         Generate cscope index" | 
| Ian Spray | 36eaaf3 | 2014-01-30 17:25:28 +0000 | [diff] [blame] | 679 | @echo "  distclean      Remove all build artifacts for all platforms" | 
| Juan Castillo | 6f97162 | 2014-10-21 11:30:42 +0100 | [diff] [blame] | 680 | @echo "  certtool       Build the Certificate generation tool" | 
| Harry Liebel | f58ad36 | 2014-01-10 18:00:33 +0000 | [diff] [blame] | 681 | @echo "  fiptool        Build the Firmware Image Package(FIP) creation tool" | 
| Ryan Harkin | 72ee331 | 2014-01-15 16:55:07 +0000 | [diff] [blame] | 682 | @echo "" | 
| Sandrine Bailleux | 1b57859 | 2015-02-18 16:18:00 +0000 | [diff] [blame] | 683 | @echo "Note: most build targets require PLAT to be set to a specific platform." | 
| Ryan Harkin | 72ee331 | 2014-01-15 16:55:07 +0000 | [diff] [blame] | 684 | @echo "" | 
|  | 685 | @echo "example: build all targets for the FVP platform:" | 
|  | 686 | @echo "  CROSS_COMPILE=aarch64-none-elf- make PLAT=fvp all" |