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