blob: ca206aa9bf2d9c74f067262e151eefd8cc6e9211 [file] [log] [blame]
Arthur Heymans791ce582023-07-13 16:58:55 +02001## SPDX-License-Identifier: GPL-2.0-only
2
3ifeq ($(CONFIG_SOC_AMD_OPENSIL),y)
4
5ifneq ($(CONFIG_ARCH_RAMSTAGE_X86_32)$(CONFIG_ARCH_RAMSTAGE_X86_64),y)
6 $(error OpenSIL can only be built for either x86 or x86_64)
7endif
8
9opensil_dir := $(call strip_quotes,$(CONFIG_AMD_OPENSIL_PATH))
10
Arthur Heymans0832e672023-07-13 17:16:37 +020011subdirs-$(CONFIG_SOC_AMD_OPENSIL_GENOA) += genoa_poc
12
Arthur Heymans791ce582023-07-13 16:58:55 +020013ifeq ($(CONFIG_ARCH_RAMSTAGE_X86_32),y)
14cpu_family_string="x86"
15cpu_string="i686"
16opensil_target_name=AMDopensil32
17is_32bit="true"
18ifeq ($(CONFIG_COMPILER_LLVM_CLANG),y)
19clang_args=\'-m32\'\, \'-fno-pic\'\,
20endif
21endif
22
23ifeq ($(CONFIG_ARCH_RAMSTAGE_X86_64),y)
24cpu_family_string="x86_64"
25cpu_string="x86_64"
26opensil_target_name=AMDopensil64
27is_32bit="false"
28ifeq ($(CONFIG_COMPILER_LLVM_CLANG),y)
29clang_args=\'-fno-pic\'\,
30endif
31endif
32
33ifeq ($(CONFIG_OPENSIL_DEBUG_OUTPUT),y)
34sil_debug_enable="true"
35else
36sil_debug_enable="false"
37endif
38
39# check if $(obj) is an absolute or a relative path
40ifeq ($(shell printf %.1s "$(obj)"),/)
41OBJPATH = $(obj)
42else
43OBJPATH = $(top)/$(obj)
44endif
45
46PYTHON?=python
47
48OPENSIL_CONFIG=opensil_config
49
50bios_base=$(shell printf "%x" $(call int-subtract, $(CONFIG_ROMSTAGE_ADDR) $(CONFIG_C_ENV_BOOTBLOCK_SIZE)))
51bios_size=$(CONFIG_C_ENV_BOOTBLOCK_SIZE)
52
53$(OBJPATH)/$(OPENSIL_CONFIG): $(opensil_dir)/../opensil_config.template
54 sed -e "s,##APOB_BASE##,$(CONFIG_PSP_APOB_DRAM_ADDRESS)," \
55 -e "s,##BIOS_ENTRY_BASE##,$(bios_base)," \
56 -e "s,##BIOS_ENTRY_SIZE##,$(bios_size) ," \
57 $< > $@
58
59$(OBJPATH)/$(OPENSIL_CONFIG).h: $(OBJPATH)/$(OPENSIL_CONFIG) $(obj)/config.h $(objutil)/kconfig/conf
60 cd $(opensil_dir); KCONFIG_CONFIG=$(OBJPATH)/$(OPENSIL_CONFIG) KCONFIG_AUTOHEADER=$@ $(PYTHON) util/kconfig/lib/genconfig.py Kconfig
61
62# meson handles ccache on its own
63OPENSIL_COMPILER=$(filter-out $(CCACHE), $(CC_ramstage))
64
65$(OBJPATH)/meson_crosscompile: $(opensil_dir)/../meson_cross.template $(obj)/config.h $(OBJPATH)/$(OPENSIL_CONFIG).h
66 sed -e "s,##COMPILER##,$(OPENSIL_COMPILER)," \
67 -e "s,##AR##,$(AR_ramstage)," \
68 -e "s,##NASM##,$(NASM)," \
69 -e "s,##COREBOOT_DIR##,$(top)," \
70 -e "s,##OPENSIL_DIR##,$(opensil_dir)," \
71 -e "s,##OBJPATH##,$(OBJPATH)," \
72 -e "s,##CPU_FAMILY##,$(cpu_family_string)," \
73 -e "s,##CPU##,$(cpu_string)," \
74 -e "s,##IS32BIT##,$(is_32bit)," \
75 -e "s,##SIL_DEBUG_ENABLE##,$(sil_debug_enable)," \
76 -e "s,##CLANG_ARGS##,$(clang_args)," \
77 $< > $@
78
79# Don't set a meson buildtype as opensil is broken when compiler optimizations are enabled
80$(OBJPATH)/opensil: $(OBJPATH)/meson_crosscompile $(obj)/config.h
81 cd $(opensil_dir); meson setup --cross-file $< $(OBJPATH)/opensil -Db_staticpic=false \
82 -DPlatKcfgDir=$(OBJPATH) -DPlatKcfg=$(OPENSIL_CONFIG)
83
84$(OBJPATH)/opensil/lib$(opensil_target_name).a: $(OBJPATH)/opensil
85 meson compile -C $(OBJPATH)/opensil $(opensil_target_name)
86
87$(OBJPATH)/opensil.a: $(OBJPATH)/opensil/lib$(opensil_target_name).a
88 cp $(OBJPATH)/opensil/lib$(opensil_target_name).a $@
89
90romstage-libs += $(OBJPATH)/opensil.a
91ramstage-libs += $(OBJPATH)/opensil.a
92
93endif