blob: ca206aa9bf2d9c74f067262e151eefd8cc6e9211 [file] [log] [blame]
## SPDX-License-Identifier: GPL-2.0-only
ifeq ($(CONFIG_SOC_AMD_OPENSIL),y)
ifneq ($(CONFIG_ARCH_RAMSTAGE_X86_32)$(CONFIG_ARCH_RAMSTAGE_X86_64),y)
$(error OpenSIL can only be built for either x86 or x86_64)
endif
opensil_dir := $(call strip_quotes,$(CONFIG_AMD_OPENSIL_PATH))
subdirs-$(CONFIG_SOC_AMD_OPENSIL_GENOA) += genoa_poc
ifeq ($(CONFIG_ARCH_RAMSTAGE_X86_32),y)
cpu_family_string="x86"
cpu_string="i686"
opensil_target_name=AMDopensil32
is_32bit="true"
ifeq ($(CONFIG_COMPILER_LLVM_CLANG),y)
clang_args=\'-m32\'\, \'-fno-pic\'\,
endif
endif
ifeq ($(CONFIG_ARCH_RAMSTAGE_X86_64),y)
cpu_family_string="x86_64"
cpu_string="x86_64"
opensil_target_name=AMDopensil64
is_32bit="false"
ifeq ($(CONFIG_COMPILER_LLVM_CLANG),y)
clang_args=\'-fno-pic\'\,
endif
endif
ifeq ($(CONFIG_OPENSIL_DEBUG_OUTPUT),y)
sil_debug_enable="true"
else
sil_debug_enable="false"
endif
# check if $(obj) is an absolute or a relative path
ifeq ($(shell printf %.1s "$(obj)"),/)
OBJPATH = $(obj)
else
OBJPATH = $(top)/$(obj)
endif
PYTHON?=python
OPENSIL_CONFIG=opensil_config
bios_base=$(shell printf "%x" $(call int-subtract, $(CONFIG_ROMSTAGE_ADDR) $(CONFIG_C_ENV_BOOTBLOCK_SIZE)))
bios_size=$(CONFIG_C_ENV_BOOTBLOCK_SIZE)
$(OBJPATH)/$(OPENSIL_CONFIG): $(opensil_dir)/../opensil_config.template
sed -e "s,##APOB_BASE##,$(CONFIG_PSP_APOB_DRAM_ADDRESS)," \
-e "s,##BIOS_ENTRY_BASE##,$(bios_base)," \
-e "s,##BIOS_ENTRY_SIZE##,$(bios_size) ," \
$< > $@
$(OBJPATH)/$(OPENSIL_CONFIG).h: $(OBJPATH)/$(OPENSIL_CONFIG) $(obj)/config.h $(objutil)/kconfig/conf
cd $(opensil_dir); KCONFIG_CONFIG=$(OBJPATH)/$(OPENSIL_CONFIG) KCONFIG_AUTOHEADER=$@ $(PYTHON) util/kconfig/lib/genconfig.py Kconfig
# meson handles ccache on its own
OPENSIL_COMPILER=$(filter-out $(CCACHE), $(CC_ramstage))
$(OBJPATH)/meson_crosscompile: $(opensil_dir)/../meson_cross.template $(obj)/config.h $(OBJPATH)/$(OPENSIL_CONFIG).h
sed -e "s,##COMPILER##,$(OPENSIL_COMPILER)," \
-e "s,##AR##,$(AR_ramstage)," \
-e "s,##NASM##,$(NASM)," \
-e "s,##COREBOOT_DIR##,$(top)," \
-e "s,##OPENSIL_DIR##,$(opensil_dir)," \
-e "s,##OBJPATH##,$(OBJPATH)," \
-e "s,##CPU_FAMILY##,$(cpu_family_string)," \
-e "s,##CPU##,$(cpu_string)," \
-e "s,##IS32BIT##,$(is_32bit)," \
-e "s,##SIL_DEBUG_ENABLE##,$(sil_debug_enable)," \
-e "s,##CLANG_ARGS##,$(clang_args)," \
$< > $@
# Don't set a meson buildtype as opensil is broken when compiler optimizations are enabled
$(OBJPATH)/opensil: $(OBJPATH)/meson_crosscompile $(obj)/config.h
cd $(opensil_dir); meson setup --cross-file $< $(OBJPATH)/opensil -Db_staticpic=false \
-DPlatKcfgDir=$(OBJPATH) -DPlatKcfg=$(OPENSIL_CONFIG)
$(OBJPATH)/opensil/lib$(opensil_target_name).a: $(OBJPATH)/opensil
meson compile -C $(OBJPATH)/opensil $(opensil_target_name)
$(OBJPATH)/opensil.a: $(OBJPATH)/opensil/lib$(opensil_target_name).a
cp $(OBJPATH)/opensil/lib$(opensil_target_name).a $@
romstage-libs += $(OBJPATH)/opensil.a
ramstage-libs += $(OBJPATH)/opensil.a
endif