summaryrefslogtreecommitdiff
path: root/src/vendorcode/amd/opensil/Makefile.mk
blob: 3e8661d804cf8da30bb49a4f1f2ae906fc6ce4de (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
## SPDX-License-Identifier: GPL-2.0-only

ifeq ($(CONFIG_SOC_AMD_OPENSIL),y)

ifeq ($(CONFIG_SOC_AMD_OPENSIL_STUB),y)

subdirs-y += stub

else # CONFIG_SOC_AMD_OPENSIL_STUB

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_POC) += 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 # CONFIG_SOC_AMD_OPENSIL_STUB

endif # CONFIG_SOC_AMD_OPENSIL