Furquan Shaikh | 2af76f4 | 2014-04-28 16:39:40 -0700 | [diff] [blame] | 1 | ################################################################################ |
| 2 | ## |
| 3 | ## This file is part of the coreboot project. |
| 4 | ## |
| 5 | ## Copyright (C) 2014 Google Inc. |
| 6 | ## Copyright (C) 2012-2013 The ChromiumOS Authors |
| 7 | ## Copyright (C) 2012 Alexandru Gagniuc <mr.nuke.me@gmail.com> |
| 8 | ## Copyright (C) 2009-2010 coresystems GmbH |
| 9 | ## Copyright (C) 2009 Ronald G. Minnich |
| 10 | ## |
| 11 | ## This program is free software; you can redistribute it and/or modify |
| 12 | ## it under the terms of the GNU General Public License as published by |
| 13 | ## the Free Software Foundation; version 2 of the License. |
| 14 | ## |
| 15 | ## This program is distributed in the hope that it will be useful, |
| 16 | ## but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 17 | ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 18 | ## GNU General Public License for more details. |
| 19 | ## |
Furquan Shaikh | 2af76f4 | 2014-04-28 16:39:40 -0700 | [diff] [blame] | 20 | ################################################################################ |
| 21 | |
| 22 | ################################################################################ |
| 23 | # Take care of subdirectories |
| 24 | ################################################################################ |
| 25 | |
Julius Werner | 7dcf9d5 | 2015-10-16 13:10:02 -0700 | [diff] [blame] | 26 | subdirs-y += armv8/ |
Furquan Shaikh | 2af76f4 | 2014-04-28 16:39:40 -0700 | [diff] [blame] | 27 | |
| 28 | ################################################################################ |
| 29 | # ARM specific options |
| 30 | ################################################################################ |
| 31 | |
Julius Werner | fffee87 | 2016-03-07 17:55:43 -0800 | [diff] [blame] | 32 | ifeq ($(CONFIG_ARCH_RAMSTAGE_ARM64),y) |
| 33 | check-ramstage-overlap-regions += postram_cbfs_cache stack ttb |
| 34 | endif |
| 35 | |
Furquan Shaikh | 2af76f4 | 2014-04-28 16:39:40 -0700 | [diff] [blame] | 36 | ################################################################################ |
| 37 | # bootblock |
| 38 | ################################################################################ |
| 39 | |
| 40 | ifeq ($(CONFIG_ARCH_BOOTBLOCK_ARM64),y) |
| 41 | |
| 42 | bootblock-y += div0.c |
Furquan Shaikh | 2af76f4 | 2014-04-28 16:39:40 -0700 | [diff] [blame] | 43 | bootblock-y += id.S |
Nico Huber | 81b09f4 | 2016-01-23 00:50:00 +0100 | [diff] [blame] | 44 | $(call src-to-obj,bootblock,$(dir)/id.S): $(obj)/build.h |
Furquan Shaikh | 2af76f4 | 2014-04-28 16:39:40 -0700 | [diff] [blame] | 45 | |
Aaron Durbin | b3847e6 | 2015-03-20 15:55:08 -0500 | [diff] [blame] | 46 | bootblock-y += boot.c |
Furquan Shaikh | 2af76f4 | 2014-04-28 16:39:40 -0700 | [diff] [blame] | 47 | bootblock-y += eabi_compat.c |
T Michael Turney | 3775f1c | 2018-04-24 10:15:46 -0700 | [diff] [blame] | 48 | bootblock-$(CONFIG_ARM64_USE_ARCH_TIMER) += arch_timer.c |
Furquan Shaikh | 668316b | 2014-08-30 21:59:11 -0700 | [diff] [blame] | 49 | bootblock-y += transition.c transition_asm.S |
| 50 | |
Furquan Shaikh | 464f5ca | 2015-06-08 10:31:55 -0700 | [diff] [blame] | 51 | bootblock-y += memset.S |
| 52 | bootblock-y += memcpy.S |
| 53 | bootblock-y += memmove.S |
Furquan Shaikh | 2af76f4 | 2014-04-28 16:39:40 -0700 | [diff] [blame] | 54 | |
| 55 | # Build the bootblock |
| 56 | |
Julius Werner | ec5e5e0 | 2014-08-20 15:29:56 -0700 | [diff] [blame] | 57 | $(objcbfs)/bootblock.debug: $$(bootblock-objs) $(obj)/config.h |
Furquan Shaikh | 2af76f4 | 2014-04-28 16:39:40 -0700 | [diff] [blame] | 58 | @printf " LINK $(subst $(obj)/,,$(@))\n" |
Nico Huber | 81b09f4 | 2016-01-23 00:50:00 +0100 | [diff] [blame] | 59 | $(LD_bootblock) $(LDFLAGS_bootblock) -o $@ -L$(obj) --whole-archive --start-group $(filter-out %.ld,$(bootblock-objs)) --end-group -T $(call src-to-obj,bootblock,src/mainboard/$(MAINBOARDDIR)/memlayout.ld) |
Furquan Shaikh | 2af76f4 | 2014-04-28 16:39:40 -0700 | [diff] [blame] | 60 | |
| 61 | endif # CONFIG_ARCH_BOOTBLOCK_ARM64 |
| 62 | |
Furquan Shaikh | 6f33f0a | 2014-10-02 16:43:19 -0700 | [diff] [blame] | 63 | ############################################################################### |
| 64 | # verification stage |
| 65 | ############################################################################### |
| 66 | |
| 67 | ifeq ($(CONFIG_ARCH_VERSTAGE_ARM64),y) |
| 68 | |
Julius Werner | e91d170 | 2017-03-20 15:32:15 -0700 | [diff] [blame] | 69 | $(objcbfs)/verstage.debug: $$(verstage-objs) |
Furquan Shaikh | 6f33f0a | 2014-10-02 16:43:19 -0700 | [diff] [blame] | 70 | @printf " LINK $(subst $(obj)/,,$(@))\n" |
Julius Werner | e91d170 | 2017-03-20 15:32:15 -0700 | [diff] [blame] | 71 | $(LD_verstage) $(LDFLAGS_verstage) -o $@ -L$(obj) --whole-archive --start-group $(filter-out %.ld,$(verstage-objs)) --end-group -T $(call src-to-obj,verstage,src/mainboard/$(MAINBOARDDIR)/memlayout.ld) |
Furquan Shaikh | 6f33f0a | 2014-10-02 16:43:19 -0700 | [diff] [blame] | 72 | |
Aaron Durbin | bc40933 | 2015-05-08 15:52:52 -0500 | [diff] [blame] | 73 | verstage-y += boot.c |
Furquan Shaikh | 6f33f0a | 2014-10-02 16:43:19 -0700 | [diff] [blame] | 74 | verstage-y += div0.c |
| 75 | verstage-y += eabi_compat.c |
T Michael Turney | 3775f1c | 2018-04-24 10:15:46 -0700 | [diff] [blame] | 76 | verstage-$(CONFIG_ARM64_USE_ARCH_TIMER) += arch_timer.c |
Julius Werner | 2f891a0 | 2017-03-20 15:38:02 -0700 | [diff] [blame] | 77 | verstage-y += memset.S |
| 78 | verstage-y += memcpy.S |
| 79 | verstage-y += memmove.S |
Furquan Shaikh | 6f33f0a | 2014-10-02 16:43:19 -0700 | [diff] [blame] | 80 | |
Itamar | ab0df6d | 2015-07-31 17:10:46 +0800 | [diff] [blame] | 81 | verstage-y += transition.c transition_asm.S |
| 82 | |
Furquan Shaikh | 6f33f0a | 2014-10-02 16:43:19 -0700 | [diff] [blame] | 83 | endif # CONFIG_ARCH_VERSTAGE_ARM64 |
| 84 | |
Furquan Shaikh | 2af76f4 | 2014-04-28 16:39:40 -0700 | [diff] [blame] | 85 | ################################################################################ |
| 86 | # romstage |
| 87 | ################################################################################ |
| 88 | |
| 89 | ifeq ($(CONFIG_ARCH_ROMSTAGE_ARM64),y) |
| 90 | |
Aaron Durbin | b3847e6 | 2015-03-20 15:55:08 -0500 | [diff] [blame] | 91 | romstage-y += boot.c |
Furquan Shaikh | 2af76f4 | 2014-04-28 16:39:40 -0700 | [diff] [blame] | 92 | romstage-y += div0.c |
Furquan Shaikh | 2af76f4 | 2014-04-28 16:39:40 -0700 | [diff] [blame] | 93 | romstage-y += eabi_compat.c |
T Michael Turney | 3775f1c | 2018-04-24 10:15:46 -0700 | [diff] [blame] | 94 | romstage-$(CONFIG_ARM64_USE_ARCH_TIMER) += arch_timer.c |
Furquan Shaikh | 464f5ca | 2015-06-08 10:31:55 -0700 | [diff] [blame] | 95 | romstage-y += memset.S |
| 96 | romstage-y += memcpy.S |
| 97 | romstage-y += memmove.S |
Furquan Shaikh | 668316b | 2014-08-30 21:59:11 -0700 | [diff] [blame] | 98 | romstage-y += transition.c transition_asm.S |
Furquan Shaikh | 2af76f4 | 2014-04-28 16:39:40 -0700 | [diff] [blame] | 99 | |
Furquan Shaikh | 464f5ca | 2015-06-08 10:31:55 -0700 | [diff] [blame] | 100 | rmodules_arm64-y += memset.S |
| 101 | rmodules_arm64-y += memcpy.S |
| 102 | rmodules_arm64-y += memmove.S |
Furquan Shaikh | a742ef1 | 2014-07-23 11:41:59 -0700 | [diff] [blame] | 103 | rmodules_arm64-y += eabi_compat.c |
| 104 | |
Julius Werner | ec5e5e0 | 2014-08-20 15:29:56 -0700 | [diff] [blame] | 105 | $(objcbfs)/romstage.debug: $$(romstage-objs) |
Furquan Shaikh | 2af76f4 | 2014-04-28 16:39:40 -0700 | [diff] [blame] | 106 | @printf " LINK $(subst $(obj)/,,$(@))\n" |
Nico Huber | 81b09f4 | 2016-01-23 00:50:00 +0100 | [diff] [blame] | 107 | $(LD_romstage) $(LDFLAGS_romstage) -o $@ -L$(obj) --whole-archive --start-group $(filter-out %.ld,$(romstage-objs)) --end-group -T $(call src-to-obj,romstage,src/mainboard/$(MAINBOARDDIR)/memlayout.ld) |
Furquan Shaikh | 2af76f4 | 2014-04-28 16:39:40 -0700 | [diff] [blame] | 108 | |
| 109 | endif # CONFIG_ARCH_ROMSTAGE_ARM64 |
| 110 | |
| 111 | ################################################################################ |
| 112 | # ramstage |
| 113 | ################################################################################ |
| 114 | |
| 115 | ifeq ($(CONFIG_ARCH_RAMSTAGE_ARM64),y) |
| 116 | |
Furquan Shaikh | 2af76f4 | 2014-04-28 16:39:40 -0700 | [diff] [blame] | 117 | ramstage-y += div0.c |
Furquan Shaikh | 2af76f4 | 2014-04-28 16:39:40 -0700 | [diff] [blame] | 118 | ramstage-y += eabi_compat.c |
| 119 | ramstage-y += boot.c |
| 120 | ramstage-y += tables.c |
T Michael Turney | 3775f1c | 2018-04-24 10:15:46 -0700 | [diff] [blame] | 121 | ramstage-$(CONFIG_ARM64_USE_ARCH_TIMER) += arch_timer.c |
Furquan Shaikh | 464f5ca | 2015-06-08 10:31:55 -0700 | [diff] [blame] | 122 | ramstage-y += memset.S |
| 123 | ramstage-y += memcpy.S |
| 124 | ramstage-y += memmove.S |
Julius Werner | 745a75f | 2015-05-11 16:45:56 -0700 | [diff] [blame] | 125 | ramstage-$(CONFIG_ARM64_USE_ARM_TRUSTED_FIRMWARE) += arm_tf.c |
Furquan Shaikh | 668316b | 2014-08-30 21:59:11 -0700 | [diff] [blame] | 126 | ramstage-y += transition.c transition_asm.S |
| 127 | |
Furquan Shaikh | 464f5ca | 2015-06-08 10:31:55 -0700 | [diff] [blame] | 128 | rmodules_arm64-y += memset.S |
| 129 | rmodules_arm64-y += memcpy.S |
| 130 | rmodules_arm64-y += memmove.S |
Furquan Shaikh | fbff908 | 2014-07-22 15:59:16 -0700 | [diff] [blame] | 131 | rmodules_arm64-y += eabi_compat.c |
T Michael Turney | 3775f1c | 2018-04-24 10:15:46 -0700 | [diff] [blame] | 132 | rmodules_arm64-$(CONFIG_ARM64_USE_ARCH_TIMER) += arch_timer.c |
Furquan Shaikh | abde3b5 | 2014-08-26 15:39:51 -0700 | [diff] [blame] | 133 | |
Marc Jones | 17b9c19 | 2015-01-16 13:45:23 -0700 | [diff] [blame] | 134 | ramstage-srcs += $(wildcard src/mainboard/$(MAINBOARDDIR)/mainboard.c) |
Furquan Shaikh | 2af76f4 | 2014-04-28 16:39:40 -0700 | [diff] [blame] | 135 | |
| 136 | # Build the ramstage |
| 137 | |
Julius Werner | ec5e5e0 | 2014-08-20 15:29:56 -0700 | [diff] [blame] | 138 | $(objcbfs)/ramstage.debug: $$(ramstage-objs) |
Furquan Shaikh | 2af76f4 | 2014-04-28 16:39:40 -0700 | [diff] [blame] | 139 | @printf " CC $(subst $(obj)/,,$(@))\n" |
Nico Huber | 81b09f4 | 2016-01-23 00:50:00 +0100 | [diff] [blame] | 140 | $(LD_ramstage) $(LDFLAGS_ramstage) -o $@ -L$(obj) --whole-archive --start-group $(filter-out %.ld,$(ramstage-objs)) --end-group -T $(call src-to-obj,ramstage,src/mainboard/$(MAINBOARDDIR)/memlayout.ld) |
Furquan Shaikh | 2af76f4 | 2014-04-28 16:39:40 -0700 | [diff] [blame] | 141 | |
Julius Werner | 745a75f | 2015-05-11 16:45:56 -0700 | [diff] [blame] | 142 | # Build ARM Trusted Firmware (BL31) |
| 143 | |
| 144 | ifeq ($(CONFIG_ARM64_USE_ARM_TRUSTED_FIRMWARE),y) |
| 145 | |
| 146 | BL31_SOURCE := $(top)/3rdparty/arm-trusted-firmware |
Julius Werner | 50e7670 | 2016-10-29 00:10:53 -0700 | [diff] [blame] | 147 | BL31_BUILD := $(abspath $(obj)/3rdparty/arm-trusted-firmware) |
| 148 | BL31_TARGET := $(BL31_BUILD)/bl31/bl31.elf |
Julius Werner | 745a75f | 2015-05-11 16:45:56 -0700 | [diff] [blame] | 149 | |
Julius Werner | 745a75f | 2015-05-11 16:45:56 -0700 | [diff] [blame] | 150 | ifeq ($(V),1) |
| 151 | BL31_MAKEARGS += V=1 |
| 152 | endif |
| 153 | |
Julius Werner | 91ebbfd | 2017-07-25 13:55:43 -0700 | [diff] [blame] | 154 | # Build ARM TF in debug mode (with assertions) if coreboot has hard assertions |
| 155 | ifeq ($(CONFIG_FATAL_ASSERTS),y) |
Julius Werner | 745a75f | 2015-05-11 16:45:56 -0700 | [diff] [blame] | 156 | BL31_MAKEARGS += DEBUG=1 |
| 157 | endif # CONFIG_CONSOLE_SERIAL |
| 158 | |
Julius Werner | 91ebbfd | 2017-07-25 13:55:43 -0700 | [diff] [blame] | 159 | # ARM TF's VERBOSE (50) is *very* spammy, so default to INFO (40) |
| 160 | BL31_MAKEARGS += LOG_LEVEL=40 |
| 161 | |
| 162 | # Always enable crash reporting, even on a release build |
| 163 | BL31_MAKEARGS += CRASH_REPORTING=1 |
| 164 | |
| 165 | # Enable coreboot-specific features like CBMEM console support |
| 166 | BL31_MAKEARGS += COREBOOT=1 |
| 167 | |
Julius Werner | 745a75f | 2015-05-11 16:45:56 -0700 | [diff] [blame] | 168 | # Avoid build/release|build/debug distinction by overriding BUILD_PLAT directly |
Julius Werner | 50e7670 | 2016-10-29 00:10:53 -0700 | [diff] [blame] | 169 | BL31_MAKEARGS += BUILD_PLAT="$(BL31_BUILD)" |
| 170 | |
| 171 | # Force making .d files and output directories even though target is not 'bl31' |
| 172 | BL31_MAKEARGS += IS_ANYTHING_TO_BUILD=1 |
Julius Werner | 745a75f | 2015-05-11 16:45:56 -0700 | [diff] [blame] | 173 | |
Patrick Georgi | dcc3ecc | 2016-01-28 15:00:54 +0100 | [diff] [blame] | 174 | # Set a consistent build timestamp: the same coreboot has |
| 175 | # The \# \" complications exist to satisfy both gnu make's parser and editors |
| 176 | # with non-semantic quote-handling (that would assume that this line starts a |
| 177 | # multi line string. |
Patrick Georgi | 800e964 | 2016-01-28 15:25:49 +0100 | [diff] [blame] | 178 | BL31_MAKEARGS += BUILD_MESSAGE_TIMESTAMP='"$(shell grep "\#define COREBOOT_BUILD\>" $(obj)/build.h |cut -d\" -f2 \# \")"' |
Patrick Georgi | dcc3ecc | 2016-01-28 15:00:54 +0100 | [diff] [blame] | 179 | |
Martin Roth | 76b8c0e | 2017-03-23 09:37:01 -0600 | [diff] [blame] | 180 | BL31_CFLAGS := -fno-pic -fno-stack-protector -Wno-deprecated-declarations -Wno-unused-function |
Julius Werner | 745a75f | 2015-05-11 16:45:56 -0700 | [diff] [blame] | 181 | BL31_LDFLAGS := --emit-relocs |
| 182 | |
Patrick Georgi | 2268b3b | 2015-06-29 22:13:53 +0200 | [diff] [blame] | 183 | BL31 := $(obj)/bl31.elf |
Julius Werner | 745a75f | 2015-05-11 16:45:56 -0700 | [diff] [blame] | 184 | |
Patrick Georgi | dcc3ecc | 2016-01-28 15:00:54 +0100 | [diff] [blame] | 185 | $(BL31): $(obj)/build.h |
Patrick Georgi | 78a5f22 | 2017-01-30 15:29:34 +0100 | [diff] [blame] | 186 | printf " MAKE $(subst $(obj)/,,$(@))\n" |
| 187 | +CROSS_COMPILE="$(CROSS_COMPILE_arm64)" \ |
Julius Werner | 745a75f | 2015-05-11 16:45:56 -0700 | [diff] [blame] | 188 | CFLAGS="$(BL31_CFLAGS)" \ |
| 189 | LDFLAGS="$(BL31_LDFLAGS)" \ |
Martin Roth | 80c314d | 2016-12-29 19:55:28 -0700 | [diff] [blame] | 190 | $(MAKE) -C $(BL31_SOURCE) $(BL31_MAKEARGS) $(BL31_TARGET) DISABLE_PEDANTIC=1 |
Julius Werner | 50e7670 | 2016-10-29 00:10:53 -0700 | [diff] [blame] | 191 | mv $(BL31_TARGET) $@ |
Julius Werner | 745a75f | 2015-05-11 16:45:56 -0700 | [diff] [blame] | 192 | |
| 193 | .PHONY: $(BL31) |
| 194 | |
Patrick Georgi | 6dc8570 | 2015-11-30 22:44:53 +0100 | [diff] [blame] | 195 | BL31_CBFS := $(CONFIG_CBFS_PREFIX)/bl31 |
Julius Werner | 745a75f | 2015-05-11 16:45:56 -0700 | [diff] [blame] | 196 | $(BL31_CBFS)-file := $(BL31) |
Simon Glass | 7ae73fc | 2016-08-27 12:18:38 -0600 | [diff] [blame] | 197 | $(BL31_CBFS)-type := payload |
Julius Werner | 745a75f | 2015-05-11 16:45:56 -0700 | [diff] [blame] | 198 | $(BL31_CBFS)-compression := $(CBFS_COMPRESS_FLAG) |
| 199 | cbfs-files-y += $(BL31_CBFS) |
| 200 | |
Julius Werner | fffee87 | 2016-03-07 17:55:43 -0800 | [diff] [blame] | 201 | check-ramstage-overlap-files += $(BL31_CBFS) |
| 202 | |
Furquan Shaikh | a384c28 | 2015-05-28 12:13:51 -0700 | [diff] [blame] | 203 | ifeq ($(CONFIG_ARM64_USE_SECURE_OS),y) |
| 204 | |
| 205 | SECURE_OS_FILE := $(CONFIG_ARM64_SECURE_OS_FILE) |
Patrick Georgi | 6dc8570 | 2015-11-30 22:44:53 +0100 | [diff] [blame] | 206 | SECURE_OS_FILE_CBFS := $(CONFIG_CBFS_PREFIX)/secure_os |
Furquan Shaikh | a384c28 | 2015-05-28 12:13:51 -0700 | [diff] [blame] | 207 | $(SECURE_OS_FILE_CBFS)-file := $(SECURE_OS_FILE) |
| 208 | $(SECURE_OS_FILE_CBFS)-type := stage |
| 209 | cbfs-files-y += $(SECURE_OS_FILE_CBFS) |
| 210 | |
Julius Werner | fffee87 | 2016-03-07 17:55:43 -0800 | [diff] [blame] | 211 | check-ramstage-overlap-files += $(SECURE_OS_FILE_CBFS) |
| 212 | |
Furquan Shaikh | a384c28 | 2015-05-28 12:13:51 -0700 | [diff] [blame] | 213 | endif # CONFIG_ARM64_USE_SECURE_OS |
| 214 | |
Julius Werner | 745a75f | 2015-05-11 16:45:56 -0700 | [diff] [blame] | 215 | endif # CONFIG_ARM64_USE_ARM_TRUSTED_FIRMWARE |
| 216 | |
Furquan Shaikh | 2af76f4 | 2014-04-28 16:39:40 -0700 | [diff] [blame] | 217 | endif # CONFIG_ARCH_RAMSTAGE_ARM64 |