1# SPDX-License-Identifier: LGPL-2.1-only 2# 3# Copyright (c) 2004, Intel Corporation. 4 5XEN_ROOT = $(CURDIR)/../.. 6include $(XEN_ROOT)/tools/Rules.mk 7 8ifeq ($(ACPI_BUILD_DIR),) 9$(error ACPI_BUILD_DIR not set) 10endif 11 12MK_DSDT = $(ACPI_BUILD_DIR)/mk_dsdt 13 14C_SRC-$(CONFIG_X86) = dsdt_anycpu.c dsdt_15cpu.c dsdt_anycpu_qemu_xen.c dsdt_pvh.c 15C_SRC-$(CONFIG_ARM_64) = dsdt_anycpu_arm.c 16DSDT_FILES ?= $(C_SRC-y) 17C_SRC = $(addprefix $(ACPI_BUILD_DIR)/, $(DSDT_FILES)) 18H_SRC = $(addprefix $(ACPI_BUILD_DIR)/, ssdt_s3.h ssdt_s4.h ssdt_pm.h) 19H_SRC += $(addprefix $(ACPI_BUILD_DIR)/, ssdt_tpm.h ssdt_tpm2.h ssdt_laptop_slate.h) 20 21MKDSDT_CFLAGS-$(CONFIG_ARM_64) = -DCONFIG_ARM_64 22MKDSDT_CFLAGS-$(CONFIG_X86) = -DCONFIG_X86 23 24# Suffix for temporary files. 25# 26# We will also use this suffix to workaround a bug in older iasl 27# versions where the tool will ignore everything after last '.' in the 28# path ('-p' argument). By adding ".<suffix>" we force iasl to use 29# complete $(ACPI_BUILD_DIR) as path, even if it has '.' symbols. 30TMP_SUFFIX = tmp 31 32all: $(C_SRC) $(H_SRC) 33 34$(H_SRC): $(ACPI_BUILD_DIR)/%.h: %.asl 35 $(IASL) -vs -p $(ACPI_BUILD_DIR)/$*.$(TMP_SUFFIX) -tc $< 36 sed -e 's/AmlCode/$*/g' -e 's/_aml_code//g' $(ACPI_BUILD_DIR)/$*.hex >$@ 37 rm -f $(addprefix $(ACPI_BUILD_DIR)/, $*.aml $*.hex) 38 39$(MK_DSDT): mk_dsdt.c 40 $(HOSTCC) $(HOSTCFLAGS) $(MKDSDT_CFLAGS-y) $(CFLAGS_xeninclude) -D__XEN_TOOLS__ -o $@ mk_dsdt.c 41 42$(ACPI_BUILD_DIR)/dsdt_anycpu_qemu_xen.asl: dsdt.asl dsdt_acpi_info.asl $(MK_DSDT) 43 # Remove last bracket 44 awk 'NR > 1 {print s} {s=$$0}' $< > $@.$(TMP_SUFFIX) 45 cat dsdt_acpi_info.asl >> $@.$(TMP_SUFFIX) 46 $(MK_DSDT) --debug=$(debug) --dm-version qemu-xen >> $@.$(TMP_SUFFIX) 47 mv -f $@.$(TMP_SUFFIX) $@ 48 49# NB. awk invocation is a portable alternative to 'head -n -1' 50$(ACPI_BUILD_DIR)/dsdt_%cpu.asl: dsdt.asl dsdt_acpi_info.asl $(MK_DSDT) 51 # Remove last bracket 52 awk 'NR > 1 {print s} {s=$$0}' $< > $@.$(TMP_SUFFIX) 53 cat dsdt_acpi_info.asl >> $@.$(TMP_SUFFIX) 54 $(MK_DSDT) --debug=$(debug) --maxcpu $* >> $@.$(TMP_SUFFIX) 55 mv -f $@.$(TMP_SUFFIX) $@ 56 57$(ACPI_BUILD_DIR)/dsdt_pvh.asl: dsdt_acpi_info.asl $(MK_DSDT) 58 printf "DefinitionBlock (\"DSDT.aml\", \"DSDT\", 5, \"Xen\", \"HVM\", 0)\n{" > $@ 59 cat dsdt_acpi_info.asl >> $@ 60 $(MK_DSDT) --debug=$(debug) --maxcpu any --dm-version none >> $@ 61 62$(ACPI_BUILD_DIR)/dsdt_anycpu_arm.asl: $(MK_DSDT) 63 printf "DefinitionBlock (\"DSDT.aml\", \"DSDT\", 3, \"Xen\", \"ARM\", 1)\n{" > $@.$(TMP_SUFFIX) 64 $(MK_DSDT) --debug=$(debug) >> $@.$(TMP_SUFFIX) 65 mv -f $@.$(TMP_SUFFIX) $@ 66 67$(C_SRC): $(ACPI_BUILD_DIR)/%.c: $(ACPI_BUILD_DIR)/%.asl 68 $(IASL) -vs -p $(ACPI_BUILD_DIR)/$*.$(TMP_SUFFIX) -tc $< 69 sed -e 's/AmlCode/$*/g' -e 's/_aml_code//g' $(ACPI_BUILD_DIR)/$*.hex > $@.$(TMP_SUFFIX) 70 echo "int $*_len=sizeof($*);" >> $@.$(TMP_SUFFIX) 71 mv -f $@.$(TMP_SUFFIX) $@ 72 rm -f $(addprefix $(ACPI_BUILD_DIR)/, $*.aml $*.hex) 73 74clean: 75 rm -f $(C_SRC) $(H_SRC) $(MK_DSDT) $(C_SRC:=.$(TMP_SUFFIX)) 76 rm -f $(patsubst %.c,%.hex,$(C_SRC)) $(patsubst %.c,%.aml,$(C_SRC)) $(patsubst %.c,%.asl,$(C_SRC)) 77 78distclean: clean 79 80install: all 81 82-include $(DEPS_INCLUDE) 83