blob: 534f2ce20dda8f016bbf29d8b9baeaec292119f6 [file] [log] [blame]
Stefan Reinauer30584912010-08-14 20:38:17 +00001##
2## This file is part of the coreboot project.
3##
Stefan Reinauer30584912010-08-14 20:38:17 +00004## This program is free software; you can redistribute it and/or modify
5## it under the terms of the GNU General Public License as published by
6## the Free Software Foundation; version 2 of the License.
7##
8## This program is distributed in the hope that it will be useful,
9## but WITHOUT ANY WARRANTY; without even the implied warranty of
10## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11## GNU General Public License for more details.
12##
Patrick Georgi0588d192009-08-12 15:00:51 +000013
Patrick Georgi29eeece2018-10-31 14:24:47 +010014ifeq ($(CONFIG_POSTCAR_STAGE),y)
15$(eval $(call init_standard_toolchain,postcar))
16endif
17
Patrick Georgi70a6b4f2015-03-27 14:14:58 +010018################################################################################
19# i386 specific tools
20NVRAMTOOL:=$(objutil)/nvramtool/nvramtool
21
Patrick Georgi8463dd92010-09-30 16:55:02 +000022OPTION_TABLE_H:=
23ifeq ($(CONFIG_HAVE_OPTION_TABLE),y)
Patrick Georgi70a6b4f2015-03-27 14:14:58 +010024
Patrick Georgi5c0bca22011-01-30 16:31:15 +000025cbfs-files-y += cmos_layout.bin
26cmos_layout.bin-file = $(obj)/cmos_layout.bin
Martin Roth8ea06512016-09-19 13:58:01 -060027cmos_layout.bin-type = cmos_layout
Patrick Georgi24479372011-01-18 13:56:36 +000028
Patrick Georgi70a6b4f2015-03-27 14:14:58 +010029$(obj)/cmos_layout.bin: $(NVRAMTOOL) $(top)/src/mainboard/$(MAINBOARDDIR)/cmos.layout
30 @printf " OPTION $(subst $(obj)/,,$(@))\n"
31 $(NVRAMTOOL) -y $(top)/src/mainboard/$(MAINBOARDDIR)/cmos.layout -L $@
32
Patrick Georgi8463dd92010-09-30 16:55:02 +000033OPTION_TABLE_H:=$(obj)/option_table.h
Patrick Georgi70a6b4f2015-03-27 14:14:58 +010034
35$(OPTION_TABLE_H): $(NVRAMTOOL) $(top)/src/mainboard/$(MAINBOARDDIR)/cmos.layout
36 @printf " OPTION $(subst $(obj)/,,$(@))\n"
37 $(NVRAMTOOL) -y $(top)/src/mainboard/$(MAINBOARDDIR)/cmos.layout -H $@
38endif # CONFIG_HAVE_OPTION_TABLE
Patrick Georgi0588d192009-08-12 15:00:51 +000039
Patrick Georgiff9d78c2011-01-30 16:37:39 +000040stripped_vgabios_id = $(call strip_quotes,$(CONFIG_VGA_BIOS_ID))
41cbfs-files-$(CONFIG_VGA_BIOS) += pci$(stripped_vgabios_id).rom
42pci$(stripped_vgabios_id).rom-file := $(call strip_quotes,$(CONFIG_VGA_BIOS_FILE))
43pci$(stripped_vgabios_id).rom-type := optionrom
44
Mike Banon0f8547e2019-02-17 19:51:53 +030045stripped_vgabios_dgpu_id = $(call strip_quotes,$(CONFIG_VGA_BIOS_DGPU_ID))
46cbfs-files-$(CONFIG_VGA_BIOS_DGPU) += pci$(stripped_vgabios_dgpu_id).rom
47pci$(stripped_vgabios_dgpu_id).rom-file := $(call strip_quotes,$(CONFIG_VGA_BIOS_DGPU_FILE))
48pci$(stripped_vgabios_dgpu_id).rom-type := optionrom
49
Furquan Shaikh88ca81a2014-04-22 16:33:22 -070050###############################################################################
Aaron Durbineb907b32016-01-21 00:08:17 -060051# common support for early assembly includes
52###############################################################################
53
54# Chipset specific assembly stubs in the romstage program flow. Certain
55# boards have more than one assembly stub so collect those and put them
56# into a single generated file.
57crt0s = $(cpu_incs-y)
58
59$(objgenerated)/assembly.inc: $$(crt0s)
60 @printf " GEN $(subst $(obj)/,,$(@))\n"
61 printf '$(foreach crt0,$(crt0s),#include "$(crt0)"\n)' > $@
62
63
64define early_x86_assembly_entry_rule
65# $1 stage name
66# Add the assembly file that pulls in the rest of the dependencies in
67# the right order. Make sure the auto generated assembly.inc is a proper
68# dependency.
69$(1)-y += assembly_entry.S
Nico Huber81b09f42016-01-23 00:50:00 +010070$(call src-to-obj,$(1),$(dir)/assembly_entry.S): $(objgenerated)/assembly.inc
Aaron Durbineb907b32016-01-21 00:08:17 -060071endef
72
73define early_x86_stage
74# $1 stage name
75# $2 oformat
76$(1)-y += memlayout.ld
77
78# The '.' include path is needed for the generated assembly.inc file.
79$(1)-S-ccopts += -I.
80
81$$(objcbfs)/$(1).debug: $$$$($(1)-libs) $$$$($(1)-objs)
82 @printf " LINK $$(subst $$(obj)/,,$$(@))\n"
Nico Huber81b09f42016-01-23 00:50:00 +010083 $$(LD_$(1)) $$(LDFLAGS_$(1)) -o $$@ -L$$(obj) $$(COMPILER_RT_FLAGS_$(1)) --whole-archive --start-group $$(filter-out %.ld,$$($(1)-objs)) $$($(1)-libs) --no-whole-archive $$(COMPILER_RT_$(1)) --end-group -T $(call src-to-obj,$(1),$(dir)/memlayout.ld) --oformat $(2)
Aaron Durbineb907b32016-01-21 00:08:17 -060084 -LANG=C LC_ALL= $$(OBJCOPY_$(1)) --only-section .illegal_globals $$(@) $$(objcbfs)/$(1)_null.offenders >/dev/null 2>&1
85 if [ -z "$$$$($$(NM_$(1)) $$(objcbfs)/$(1)_null.offenders 2>&1 | grep 'no symbols')" ];then \
86 echo "Forbidden global variables in $(1):"; \
87 $$(NM_$(1)) $$(objcbfs)/$(1)_null.offenders; false; \
88 fi
89endef
90
91###############################################################################
Arthur Heymansa1dbcb92019-10-13 22:20:12 +020092# all (bootblock,verstage,romstage,postcar,ramstage)
93###############################################################################
94
95ifeq ($(CONFIG_ARCH_X86),y)
96
97all-$(CONFIG_HAVE_CF9_RESET) += cf9_reset.c
98all-y += boot.c
99all-y += memcpy.c
100all-y += memset.c
101all-y += cpu_common.c
Kyösti Mälkki10bc8062020-01-04 11:58:50 +0200102all-y += post.c
Arthur Heymansa1dbcb92019-10-13 22:20:12 +0200103
104endif
105
106###############################################################################
Furquan Shaikh88ca81a2014-04-22 16:33:22 -0700107# bootblock
108###############################################################################
Patrick Georgi641dd712011-11-01 18:55:59 +0100109
Stefan Reinauer181b7732015-03-15 19:23:50 +0100110ifeq ($(CONFIG_ARCH_BOOTBLOCK_X86_32)$(CONFIG_ARCH_BOOTBLOCK_X86_64),y)
Furquan Shaikh99ac98f2014-04-23 10:18:48 -0700111
Aaron Durbin4b032e42018-04-20 01:39:30 -0600112bootblock-$(CONFIG_IDT_IN_EVERY_STAGE) += exception.c
113bootblock-$(CONFIG_IDT_IN_EVERY_STAGE) += idt.S
Aaron Durbinf49ddb62018-01-24 17:35:58 -0700114bootblock-$(CONFIG_COLLECT_TIMESTAMPS_TSC) += timestamp.c
Alexandru Gagniuc6a622312015-10-27 10:27:30 -0700115bootblock-$(CONFIG_X86_TOP4G_BOOTMEDIA_MAP) += mmap_boot.c
Kyösti Mälkkib8d575c2019-12-16 16:00:49 +0200116bootblock-$(CONFIG_BOOTBLOCK_NORMAL) += bootblock_normal.c
Alexandru Gagniucee2740b2015-10-04 17:47:36 -0700117bootblock-y += id.S
Nico Huber81b09f42016-01-23 00:50:00 +0100118$(call src-to-obj,bootblock,$(dir)/id.S): $(obj)/build.h
Patrick Georgiab355752015-10-15 11:07:07 +0200119
Alexandru Gagniuc6be6c8f2016-01-26 18:22:43 -0800120bootblock-y += bootblock_crt0.S
Aaron Durbineb907b32016-01-21 00:08:17 -0600121
122ifeq ($(CONFIG_ARCH_BOOTBLOCK_X86_32),y)
123$(eval $(call early_x86_stage,bootblock,elf32-i386))
124else
125$(eval $(call early_x86_stage,bootblock,elf64-x86-64))
126endif
127
Kyösti Mälkkid60e9ab2019-12-21 10:14:15 +0200128bootblock-$(CONFIG_MICROCODE_UPDATE_PRE_RAM) += walkcbfs.S
Arthur Heymans0eb9c572019-01-05 18:21:47 +0100129
Stefan Reinauer181b7732015-03-15 19:23:50 +0100130endif # CONFIG_ARCH_BOOTBLOCK_X86_32 / CONFIG_ARCH_BOOTBLOCK_X86_64
Furquan Shaikh99ac98f2014-04-23 10:18:48 -0700131
Furquan Shaikh88ca81a2014-04-22 16:33:22 -0700132###############################################################################
Aaron Durbin75c51d92015-09-29 16:31:20 -0500133# verstage
134###############################################################################
135
136ifeq ($(CONFIG_ARCH_VERSTAGE_X86_32)$(CONFIG_ARCH_VERSTAGE_X86_64),y)
137
Hannah Williamsd3c0c0c2018-04-27 09:09:04 -0700138verstage-$(CONFIG_VBOOT_SEPARATE_VERSTAGE) += gdt_init.S
Aaron Durbin4b032e42018-04-20 01:39:30 -0600139verstage-$(CONFIG_IDT_IN_EVERY_STAGE) += exception.c
140verstage-$(CONFIG_IDT_IN_EVERY_STAGE) += idt.S
Aaron Durbin75c51d92015-09-29 16:31:20 -0500141
Aaron Durbin75c51d92015-09-29 16:31:20 -0500142verstage-y += memmove.c
Aaron Durbin57dbbbb2016-03-18 13:12:41 -0500143verstage-$(CONFIG_X86_TOP4G_BOOTMEDIA_MAP) += mmap_boot.c
Arthur Heymans7bea0842018-06-06 18:19:56 +0200144# If verstage is a separate stage it means there's no need
Aaron Durbin10221a02016-05-26 10:55:48 -0500145# for a chipset-specific car_stage_entry() so use the generic one
146# which just calls verstage().
Arthur Heymans7bea0842018-06-06 18:19:56 +0200147verstage-$(CONFIG_VBOOT_SEPARATE_VERSTAGE) += verstage.c
Aaron Durbin75c51d92015-09-29 16:31:20 -0500148
Aaron Durbinf49ddb62018-01-24 17:35:58 -0700149verstage-$(CONFIG_COLLECT_TIMESTAMPS_TSC) += timestamp.c
Aaron Durbin75c51d92015-09-29 16:31:20 -0500150
Julius Wernere91d1702017-03-20 15:32:15 -0700151verstage-libs ?=
Aaron Durbin75c51d92015-09-29 16:31:20 -0500152
Aaron Durbineb907b32016-01-21 00:08:17 -0600153$(eval $(call early_x86_assembly_entry_rule,verstage))
154
Aaron Durbin75c51d92015-09-29 16:31:20 -0500155ifeq ($(CONFIG_ARCH_VERSTAGE_X86_32),y)
156$(eval $(call early_x86_stage,verstage,elf32-i386))
157else
158$(eval $(call early_x86_stage,verstage,elf64-x86-64))
159endif
160
Aaron Durbin75c51d92015-09-29 16:31:20 -0500161endif # CONFIG_ARCH_VERSTAGE_X86_32 / CONFIG_ARCH_VERSTAGE_X86_64
162
163###############################################################################
Aaron Durbin1bc6a792015-09-29 14:54:25 -0500164# romstage
165###############################################################################
166
167ifeq ($(CONFIG_ARCH_ROMSTAGE_X86_32)$(CONFIG_ARCH_ROMSTAGE_X86_64),y)
Furquan Shaikh88ca81a2014-04-22 16:33:22 -0700168
Lee Leahye82b5052016-07-25 17:07:53 -0700169romstage-$(CONFIG_HAVE_ACPI_RESUME) += acpi_s3.c
Hannah Williamsd3c0c0c2018-04-27 09:09:04 -0700170# gdt_init.S is included by entry32.inc when romstage is the first C
171# environment.
Arthur Heymansc05b1a62019-11-22 21:01:30 +0100172romstage-y += gdt_init.S
Lee Leahye82b5052016-07-25 17:07:53 -0700173romstage-y += cbmem.c
Aaron Durbin4b032e42018-04-20 01:39:30 -0600174romstage-$(CONFIG_IDT_IN_EVERY_STAGE) += exception.c
175romstage-$(CONFIG_IDT_IN_EVERY_STAGE) += idt.S
Lee Leahye82b5052016-07-25 17:07:53 -0700176romstage-y += memmove.c
Lee Leahye82b5052016-07-25 17:07:53 -0700177romstage-$(CONFIG_X86_TOP4G_BOOTMEDIA_MAP) += mmap_boot.c
Rizwan Qureshib1b44d32016-08-26 21:08:50 +0530178romstage-y += postcar_loader.c
Aaron Durbinf49ddb62018-01-24 17:35:58 -0700179romstage-$(CONFIG_COLLECT_TIMESTAMPS_TSC) += timestamp.c
Lee Leahye82b5052016-07-25 17:07:53 -0700180
Rizwan Qureshi8e8ca5c2018-10-01 14:35:25 +0530181romstage-srcs += $(wildcard $(src)/mainboard/$(MAINBOARDDIR)/romstage.c)
Alexandru Gagniuceb3c9912014-03-29 13:01:11 -0500182romstage-libs ?=
183
Aaron Durbineb907b32016-01-21 00:08:17 -0600184$(eval $(call early_x86_assembly_entry_rule,romstage))
185
Stefan Reinauer98749332015-06-23 12:57:06 -0700186ifeq ($(CONFIG_ARCH_ROMSTAGE_X86_32),y)
Aaron Durbin1bc6a792015-09-29 14:54:25 -0500187$(eval $(call early_x86_stage,romstage,elf32-i386))
Stefan Reinauer98749332015-06-23 12:57:06 -0700188else
Aaron Durbin1bc6a792015-09-29 14:54:25 -0500189$(eval $(call early_x86_stage,romstage,elf64-x86-64))
Stefan Reinauer98749332015-06-23 12:57:06 -0700190endif
191
Patrick Georgid69839b2015-04-03 10:32:17 +0200192# Compiling crt0 with -g seems to trigger https://sourceware.org/bugzilla/show_bug.cgi?id=6428
Aaron Durbin75c51d92015-09-29 16:31:20 -0500193romstage-S-ccopts += -g0
Furquan Shaikh99ac98f2014-04-23 10:18:48 -0700194
Stefan Reinauer181b7732015-03-15 19:23:50 +0100195endif # CONFIG_ARCH_ROMSTAGE_X86_32 / CONFIG_ARCH_ROMSTAGE_X86_64
Stefan Reinauerf1939bb2010-12-30 17:39:50 +0000196
Furquan Shaikh88ca81a2014-04-22 16:33:22 -0700197###############################################################################
Lee Leahya7491502016-07-24 07:43:23 -0700198# postcar
199###############################################################################
200
201$(eval $(call create_class_compiler,postcar,x86_32))
202postcar-generic-ccopts += -D__POSTCAR__
203
Subrata Banik5d2928c2017-09-21 19:17:33 +0530204postcar-$(CONFIG_HAVE_ACPI_RESUME) += acpi_s3.c
Hannah Williamsd3c0c0c2018-04-27 09:09:04 -0700205postcar-y += gdt_init.S
Aaron Durbin4b032e42018-04-20 01:39:30 -0600206postcar-$(CONFIG_IDT_IN_EVERY_STAGE) += exception.c
207postcar-$(CONFIG_IDT_IN_EVERY_STAGE) += idt.S
Lee Leahya7491502016-07-24 07:43:23 -0700208postcar-y += exit_car.S
Lee Leahya7491502016-07-24 07:43:23 -0700209postcar-y += memmove.c
Lee Leahya7491502016-07-24 07:43:23 -0700210postcar-y += memlayout.ld
211postcar-$(CONFIG_X86_TOP4G_BOOTMEDIA_MAP) += mmap_boot.c
Aaron Durbin6b0cebc2016-09-16 16:15:14 -0500212postcar-y += postcar.c
Aaron Durbinf49ddb62018-01-24 17:35:58 -0700213postcar-$(CONFIG_COLLECT_TIMESTAMPS_TSC) += timestamp.c
Lee Leahya7491502016-07-24 07:43:23 -0700214
Lee Leahy4cfde2a2016-07-24 07:51:24 -0700215LDFLAGS_postcar += -Map $(objcbfs)/postcar.map
216
Lee Leahya7491502016-07-24 07:43:23 -0700217$(objcbfs)/postcar.debug: $$(postcar-objs)
218 @printf " LINK $(subst $(obj)/,,$(@))\n"
219 $(LD_postcar) $(LDFLAGS_postcar) -o $@ -L$(obj) $(COMPILER_RT_FLAGS_postcar) --whole-archive --start-group $(filter-out %.ld,$^) --no-whole-archive $(COMPILER_RT_postcar) --end-group -T $(call src-to-obj,postcar,src/arch/x86/memlayout.ld)
220
221$(objcbfs)/postcar.elf: $(objcbfs)/postcar.debug.rmod
222 cp $< $@
223
224# Add postcar to CBFS
225cbfs-files-$(CONFIG_POSTCAR_STAGE) += $(CONFIG_CBFS_PREFIX)/postcar
226$(CONFIG_CBFS_PREFIX)/postcar-file := $(objcbfs)/postcar.elf
227$(CONFIG_CBFS_PREFIX)/postcar-type := stage
228$(CONFIG_CBFS_PREFIX)/postcar-compression := none
229
230###############################################################################
Furquan Shaikh88ca81a2014-04-22 16:33:22 -0700231# ramstage
232###############################################################################
233
Stefan Reinauer181b7732015-03-15 19:23:50 +0100234ifeq ($(CONFIG_ARCH_RAMSTAGE_X86_32)$(CONFIG_ARCH_RAMSTAGE_X86_64),y)
Furquan Shaikh99ac98f2014-04-23 10:18:48 -0700235
Lee Leahy99f1b2f2016-07-25 17:18:50 -0700236ramstage-$(CONFIG_HAVE_ACPI_TABLES) += acpi.c
237ramstage-$(CONFIG_HAVE_ACPI_TABLES) += acpigen.c
Furquan Shaikh4a2cfad2016-10-21 16:40:17 -0700238ramstage-$(CONFIG_HAVE_ACPI_TABLES) += acpigen_dsm.c
Lee Leahy99f1b2f2016-07-25 17:18:50 -0700239ramstage-$(CONFIG_HAVE_ACPI_TABLES) += acpi_device.c
Duncan Laurie3e7197a2018-05-07 14:18:13 -0700240ramstage-$(CONFIG_HAVE_ACPI_TABLES) += acpi_pld.c
Lee Leahy99f1b2f2016-07-25 17:18:50 -0700241ramstage-$(CONFIG_HAVE_ACPI_RESUME) += acpi_s3.c
Marshall Dawson991467d2018-09-04 12:32:56 -0600242ramstage-$(CONFIG_ACPI_BERT) += acpi_bert_storage.c
Lee Leahy99f1b2f2016-07-25 17:18:50 -0700243ramstage-y += c_start.S
Lee Leahy99f1b2f2016-07-25 17:18:50 -0700244ramstage-y += cpu.c
Lee Leahy99f1b2f2016-07-25 17:18:50 -0700245ramstage-y += ebda.c
246ramstage-y += exception.c
Aaron Durbin7a7c70b2018-04-20 00:56:57 -0600247ramstage-y += idt.S
Lee Leahy99f1b2f2016-07-25 17:18:50 -0700248ramstage-y += gdt.c
249ramstage-$(CONFIG_IOAPIC) += ioapic.c
Lee Leahy99f1b2f2016-07-25 17:18:50 -0700250ramstage-y += memlayout.ld
251ramstage-y += memmove.c
Lee Leahy99f1b2f2016-07-25 17:18:50 -0700252ramstage-$(CONFIG_X86_TOP4G_BOOTMEDIA_MAP) += mmap_boot.c
253ramstage-$(CONFIG_GENERATE_MP_TABLE) += mpspec.c
Lee Leahy99f1b2f2016-07-25 17:18:50 -0700254ramstage-$(CONFIG_GENERATE_PIRQ_TABLE) += pirq_routing.c
Robbie Zhang18792312017-02-13 13:44:14 -0800255ramstage-y += rdrand.c
Lee Leahy99f1b2f2016-07-25 17:18:50 -0700256ramstage-$(CONFIG_GENERATE_SMBIOS_TABLES) += smbios.c
257ramstage-y += tables.c
258ramstage-$(CONFIG_COOP_MULTITASKING) += thread.c
259ramstage-$(CONFIG_COOP_MULTITASKING) += thread_switch.S
Aaron Durbinf49ddb62018-01-24 17:35:58 -0700260ramstage-$(CONFIG_COLLECT_TIMESTAMPS_TSC) += timestamp.c
Lee Leahy99f1b2f2016-07-25 17:18:50 -0700261ramstage-$(CONFIG_HAVE_ACPI_RESUME) += wakeup.S
262
Lee Leahy99f1b2f2016-07-25 17:18:50 -0700263ifeq ($(CONFIG_ARCH_RAMSTAGE_X86_32),y)
264rmodules_x86_32-y += memcpy.c
265rmodules_x86_32-y += memmove.c
266rmodules_x86_32-y += memset.c
267else
268rmodules_x86_64-y += memcpy.c
269rmodules_x86_64-y += memmove.c
270rmodules_x86_64-y += memset.c
271endif
272
Patrick Georgic32a52c2015-06-22 21:10:34 +0200273ifeq ($(CONFIG_ARCH_RAMSTAGE_X86_32),y)
274target-objcopy=-O elf32-i386 -B i386
275endif
276ifeq ($(CONFIG_ARCH_RAMSTAGE_X86_64),y)
Stefan Reinauer593f5c82015-07-30 18:03:18 -0700277target-objcopy=-O elf64-x86-64 -B i386:x86-64
Patrick Georgic32a52c2015-06-22 21:10:34 +0200278endif
279
Furquan Shaikh88ca81a2014-04-22 16:33:22 -0700280ramstage-srcs += $(wildcard src/mainboard/$(MAINBOARDDIR)/mainboard.c)
281ifeq ($(CONFIG_GENERATE_MP_TABLE),y)
282ifneq ($(wildcard src/mainboard/$(MAINBOARDDIR)/mptable.c),)
283ramstage-srcs += src/mainboard/$(MAINBOARDDIR)/mptable.c
284endif
285endif
286ifeq ($(CONFIG_GENERATE_PIRQ_TABLE),y)
287ramstage-srcs += src/mainboard/$(MAINBOARDDIR)/irq_tables.c
288endif
289ifneq ($(wildcard src/mainboard/$(MAINBOARDDIR)/reset.c),)
290ramstage-srcs += src/mainboard/$(MAINBOARDDIR)/reset.c
291endif
Vladimir Serbinenko822bc652014-01-03 15:55:40 +0100292ifeq ($(CONFIG_HAVE_ACPI_TABLES),y)
Karthikeyan Ramasubramanian1e83e5c2019-12-16 13:26:35 -0700293ifneq ($(wildcard src/mainboard/$(MAINBOARDDIR)/acpi_tables.c),)
Furquan Shaikh88ca81a2014-04-22 16:33:22 -0700294ramstage-srcs += src/mainboard/$(MAINBOARDDIR)/acpi_tables.c
Karthikeyan Ramasubramanian1e83e5c2019-12-16 13:26:35 -0700295endif
Vladimir Serbinenko36f8d272015-05-31 12:31:59 +0200296$(eval $(call asl_template,dsdt))
Furquan Shaikh88ca81a2014-04-22 16:33:22 -0700297ifneq ($(wildcard src/mainboard/$(MAINBOARDDIR)/fadt.c),)
298ramstage-srcs += src/mainboard/$(MAINBOARDDIR)/fadt.c
299endif
Patrick Georgi990e7c92015-04-03 10:47:15 +0200300endif # CONFIG_GENERATE_ACPI_TABLES
Furquan Shaikh88ca81a2014-04-22 16:33:22 -0700301
302ramstage-libs ?=
303
304ifeq ($(CONFIG_RELOCATABLE_RAMSTAGE),y)
305
Elyes HAOUAS2f79eb32018-08-07 12:24:42 +0200306# The rmodule_link definition creates an elf file with .rmod extension.
Furquan Shaikh88ca81a2014-04-22 16:33:22 -0700307$(objcbfs)/ramstage.elf: $(objcbfs)/ramstage.debug.rmod
308 cp $< $@
309
Aaron Durbin83bc0db2015-09-06 10:45:18 -0500310endif
Furquan Shaikh88ca81a2014-04-22 16:33:22 -0700311
Nico Huber81b09f42016-01-23 00:50:00 +0100312$(objcbfs)/ramstage.debug: $(objgenerated)/ramstage.o $(call src-to-obj,ramstage,src/arch/x86/memlayout.ld)
Furquan Shaikh88ca81a2014-04-22 16:33:22 -0700313 @printf " CC $(subst $(obj)/,,$(@))\n"
Nico Huber81b09f42016-01-23 00:50:00 +0100314 $(LD_ramstage) $(CPPFLAGS) $(LDFLAGS_ramstage) -o $@ -L$(obj) $< -T $(call src-to-obj,ramstage,src/arch/x86/memlayout.ld)
Furquan Shaikh88ca81a2014-04-22 16:33:22 -0700315
Patrick Georgi3ce96bd2014-11-22 17:42:58 +0100316$(objgenerated)/ramstage.o: $$(ramstage-objs) $(COMPILER_RT_ramstage) $$(ramstage-libs)
Furquan Shaikh88ca81a2014-04-22 16:33:22 -0700317 @printf " CC $(subst $(obj)/,,$(@))\n"
Patrick Rudolph5407e892018-11-28 07:36:55 +0100318ifeq ($(CONFIG_ARCH_RAMSTAGE_X86_32),y)
Patrick Georgieec8dfb2015-05-07 22:24:41 +0200319 $(LD_ramstage) -m elf_i386 -r -o $@ $(COMPILER_RT_FLAGS_ramstage) --whole-archive --start-group $(filter-out %.ld,$(ramstage-objs)) $(ramstage-libs) --no-whole-archive $(COMPILER_RT_ramstage) --end-group
Stefan Reinauer181b7732015-03-15 19:23:50 +0100320else
321 $(LD_ramstage) -m elf_x86_64 -r -o $@ $(COMPILER_RT_FLAGS_ramstage) --whole-archive --start-group $(filter-out %.ld,$(ramstage-objs)) $(ramstage-libs) --no-whole-archive $(COMPILER_RT_ramstage) --end-group
322endif
Furquan Shaikh88ca81a2014-04-22 16:33:22 -0700323
Stefan Reinauer181b7732015-03-15 19:23:50 +0100324endif # CONFIG_ARCH_RAMSTAGE_X86_32 / CONFIG_ARCH_RAMSTAGE_X86_64
Subrata Banikeb5b0d02019-06-04 16:46:41 +0530325
326smm-$(CONFIG_IDT_IN_EVERY_STAGE) += exception.c
327smm-$(CONFIG_IDT_IN_EVERY_STAGE) += idt.S
328smm-y += memcpy.c
329smm-y += memmove.c
330smm-y += memset.c
331smm-$(CONFIG_X86_TOP4G_BOOTMEDIA_MAP) += mmap_boot.c
332
Subrata Banikeb5b0d02019-06-04 16:46:41 +0530333ifneq ($(wildcard src/mainboard/$(MAINBOARDDIR)/smihandler.c),)
334smm-srcs += src/mainboard/$(MAINBOARDDIR)/smihandler.c
335endif