mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
Currently __XEN_TOOLS__ is defined in the global CFLAGS used for tools builds, exposing them all to the various unstable hypercall interfaces. However there are places where we do not want this (in particular all the stable libraries now under tools/libs), and there is a risk of such uses slipping in unnoticed (currently there are none, but I tripped over the mixed nature of the HVMOPs just now in some new code I was putting together). Instead only define __XEN_TOOLS__ for things which explicitly want the unstable APIs. The vast majority of these are consumers of libxenctrl, which have opted into unstable interfaces by using libxenctrl already, so adding -D__XEN_TOOLS__ to CFLAGS_libxenctrl covers these without needing to patch the dozen or so tools manually. The libxc build itself, which doesn't use CFLAGS_libxenctrl, now needs the define too. As does gdbsx's own low level hypercall binding library xg. hvmloader no longer needs to undefine the symbol. The ocaml evtchn bindings don't actually need sysctl.h and therefore don't actually need __XEN_TOOLS__ either. qemu-xen-traditional doesn't use CFLAGS_libxenctrl and so we pass the define there (via --extra-cflags) too. Having removed __XEN_TOOLS__ replace it with __XEN_INTERFACE_VERSION__=__XEN_LATEST_INTERFACE_VERSION__ so that in tree code is always using the latest APIs. Signed-off-by: Ian Campbell <ian.campbell@citrix.com> Acked-by: Ian Jackson <ian.jackson@eu.citrix.com> Acked-by: Andrew Cooper <andrew.cooper3@citrix.com>
151 lines
3.8 KiB
Makefile
151 lines
3.8 KiB
Makefile
#
|
|
# Makefile
|
|
#
|
|
# Leendert van Doorn, leendert@watson.ibm.com
|
|
# Copyright (c) 2005, International Business Machines Corporation.
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify it
|
|
# under the terms and conditions of the GNU General Public License,
|
|
# version 2, as published by the Free Software Foundation.
|
|
#
|
|
# This program is distributed in the hope it will be useful, but WITHOUT
|
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
# more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License along with
|
|
# this program; If not, see <http://www.gnu.org/licenses/>.
|
|
#
|
|
|
|
XEN_ROOT = $(CURDIR)/../../..
|
|
include $(XEN_ROOT)/tools/firmware/Rules.mk
|
|
|
|
SUBDIRS := acpi
|
|
|
|
# The HVM loader is started in 32-bit mode at the address below:
|
|
LOADADDR = 0x100000
|
|
|
|
# SMBIOS spec requires format mm/dd/yyyy
|
|
SMBIOS_REL_DATE ?= $(shell date +%m/%d/%Y)
|
|
|
|
CFLAGS += $(CFLAGS_xeninclude)
|
|
|
|
# We mustn't use tools-only public interfaces.
|
|
CFLAGS += -D__XEN_INTERFACE_VERSION__=__XEN_LATEST_INTERFACE_VERSION__
|
|
|
|
OBJS = hvmloader.o mp_tables.o util.o smbios.o
|
|
OBJS += smp.o cacheattr.o xenbus.o vnuma.o
|
|
OBJS += e820.o pci.o pir.o ctype.o
|
|
OBJS += hvm_param.o
|
|
ifeq ($(debug),y)
|
|
OBJS += tests.o
|
|
endif
|
|
|
|
CIRRUSVGA_DEBUG ?= n
|
|
|
|
OVMF_DIR := ../ovmf-dir
|
|
ROMBIOS_DIR := ../rombios
|
|
SEABIOS_DIR := ../seabios-dir
|
|
|
|
ifeq ($(CONFIG_ROMBIOS),y)
|
|
STDVGA_ROM := ../vgabios/VGABIOS-lgpl-latest.bin
|
|
ifeq ($(CIRRUSVGA_DEBUG),y)
|
|
CIRRUSVGA_ROM := ../vgabios/VGABIOS-lgpl-latest.cirrus.debug.bin
|
|
else
|
|
CIRRUSVGA_ROM := ../vgabios/VGABIOS-lgpl-latest.cirrus.bin
|
|
endif
|
|
ETHERBOOT_ROMS := $(addprefix ../etherboot/ipxe/src/bin/, $(addsuffix .rom, $(ETHERBOOT_NICS)))
|
|
endif
|
|
|
|
ROMS :=
|
|
|
|
ifeq ($(CONFIG_OVMF),y)
|
|
OBJS += ovmf.o
|
|
CFLAGS += -DENABLE_OVMF
|
|
ifeq ($(OVMF_PATH),)
|
|
OVMF_ROM := $(OVMF_DIR)/ovmf.bin
|
|
else
|
|
OVMF_ROM := $(OVMF_PATH)
|
|
endif
|
|
ROMS += $(OVMF_ROM)
|
|
endif
|
|
|
|
ifeq ($(CONFIG_ROMBIOS),y)
|
|
OBJS += optionroms.o 32bitbios_support.o rombios.o
|
|
CFLAGS += -DENABLE_ROMBIOS
|
|
ROMBIOS_ROM := $(ROMBIOS_DIR)/BIOS-bochs-latest
|
|
ROMS += $(ROMBIOS_ROM) $(STDVGA_ROM) $(CIRRUSVGA_ROM) $(ETHERBOOT_ROMS)
|
|
endif
|
|
|
|
ifeq ($(CONFIG_SEABIOS),y)
|
|
OBJS += seabios.o
|
|
CFLAGS += -DENABLE_SEABIOS
|
|
ifeq ($(SEABIOS_PATH),)
|
|
SEABIOS_ROM := $(SEABIOS_DIR)/out/bios.bin
|
|
else
|
|
SEABIOS_ROM := $(SEABIOS_PATH)
|
|
endif
|
|
ROMS += $(SEABIOS_ROM)
|
|
endif
|
|
|
|
.PHONY: all
|
|
all: subdirs-all
|
|
$(MAKE) hvmloader
|
|
|
|
ovmf.o rombios.o seabios.o hvmloader.o: roms.inc
|
|
smbios.o: CFLAGS += -D__SMBIOS_DATE__="\"$(SMBIOS_REL_DATE)\""
|
|
|
|
hvmloader: $(OBJS) acpi/acpi.a
|
|
$(LD) $(LDFLAGS_DIRECT) -N -Ttext $(LOADADDR) -o hvmloader.tmp $^
|
|
$(OBJCOPY) hvmloader.tmp hvmloader
|
|
rm -f hvmloader.tmp
|
|
|
|
roms.inc: $(ROMS)
|
|
echo "/* Autogenerated file. DO NOT EDIT */" > $@.new
|
|
|
|
ifneq ($(ROMBIOS_ROM),)
|
|
echo "#ifdef ROM_INCLUDE_ROMBIOS" >> $@.new
|
|
sh ./mkhex rombios $(ROMBIOS_ROM) >> $@.new
|
|
echo "#endif" >> $@.new
|
|
endif
|
|
|
|
ifneq ($(SEABIOS_ROM),)
|
|
echo "#ifdef ROM_INCLUDE_SEABIOS" >> $@.new
|
|
sh ./mkhex seabios $(SEABIOS_ROM) >> $@.new
|
|
echo "#endif" >> $@.new
|
|
endif
|
|
|
|
ifneq ($(OVMF_ROM),)
|
|
echo "#ifdef ROM_INCLUDE_OVMF" >> $@.new
|
|
sh ./mkhex ovmf $(OVMF_ROM) >> $@.new
|
|
echo "#endif" >> $@.new
|
|
endif
|
|
|
|
ifneq ($(STDVGA_ROM),)
|
|
echo "#ifdef ROM_INCLUDE_VGABIOS" >> $@.new
|
|
sh ./mkhex vgabios_stdvga $(STDVGA_ROM) >> $@.new
|
|
echo "#endif" >> $@.new
|
|
endif
|
|
ifneq ($(CIRRUSVGA_ROM),)
|
|
echo "#ifdef ROM_INCLUDE_VGABIOS" >> $@.new
|
|
sh ./mkhex vgabios_cirrusvga $(CIRRUSVGA_ROM) >> $@.new
|
|
echo "#endif" >> $@.new
|
|
endif
|
|
ifneq ($(ETHERBOOT_ROMS),)
|
|
echo "#ifdef ROM_INCLUDE_ETHERBOOT" >> $@.new
|
|
sh ./mkhex etherboot $(ETHERBOOT_ROMS) >> $@.new
|
|
echo "#endif" >> $@.new
|
|
endif
|
|
|
|
mv $@.new $@
|
|
|
|
.PHONY: clean
|
|
clean: subdirs-clean
|
|
rm -f roms.inc roms.inc.new acpi.h
|
|
rm -f hvmloader hvmloader.tmp *.o $(DEPS)
|
|
|
|
.PHONY: distclean
|
|
distclean: clean
|
|
|
|
-include $(DEPS)
|