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