xen: Build Xen EFI binary
This commit is contained in:
parent
6048a3c1f5
commit
22fdd2465c
@ -0,0 +1,36 @@
|
|||||||
|
diff -Naur xen-4.10.4-orig/xen/arch/x86/Makefile xen-4.10.4-patched/xen/arch/x86/Makefile
|
||||||
|
--- xen-4.10.4-orig/xen/arch/x86/Makefile 2019-07-04 01:28:50.000000000 +1000
|
||||||
|
+++ xen-4.10.4-patched/xen/arch/x86/Makefile 2020-03-03 13:32:34.607951507 +1100
|
||||||
|
@@ -166,7 +166,7 @@
|
||||||
|
# Check if the compiler supports the MS ABI.
|
||||||
|
export XEN_BUILD_EFI := $(shell $(CC) $(filter-out $(CFLAGS-y) .%.d,$(CFLAGS)) -c efi/check.c -o efi/check.o 2>/dev/null && echo y)
|
||||||
|
# Check if the linker supports PE.
|
||||||
|
-XEN_BUILD_PE := $(if $(XEN_BUILD_EFI),$(shell $(LD) -mi386pep --subsystem=10 -o efi/check.efi efi/check.o 2>/dev/null && echo y))
|
||||||
|
+XEN_BUILD_PE := $(if $(XEN_BUILD_EFI),$(shell $(EFI_LD) -mi386pep --subsystem=10 -o efi/check.efi efi/check.o 2>/dev/null && echo y))
|
||||||
|
CFLAGS-$(XEN_BUILD_EFI) += -DXEN_BUILD_EFI
|
||||||
|
|
||||||
|
$(TARGET).efi: VIRT_BASE = 0x$(shell $(NM) efi/relocs-dummy.o | sed -n 's, A VIRT_START$$,,p')
|
||||||
|
@@ -188,20 +188,20 @@
|
||||||
|
|
||||||
|
$(TARGET).efi: prelink-efi.o $(note_file) efi.lds efi/relocs-dummy.o $(BASEDIR)/common/symbols-dummy.o efi/mkreloc
|
||||||
|
$(foreach base, $(VIRT_BASE) $(ALT_BASE), \
|
||||||
|
- $(guard) $(LD) $(call EFI_LDFLAGS,$(base)) -T efi.lds -N $< efi/relocs-dummy.o \
|
||||||
|
+ $(guard) $(EFI_LD) $(call EFI_LDFLAGS,$(base)) -T efi.lds -N $< efi/relocs-dummy.o \
|
||||||
|
$(BASEDIR)/common/symbols-dummy.o $(note_file) -o $(@D)/.$(@F).$(base).0 &&) :
|
||||||
|
$(guard) efi/mkreloc $(foreach base,$(VIRT_BASE) $(ALT_BASE),$(@D)/.$(@F).$(base).0) >$(@D)/.$(@F).0r.S
|
||||||
|
$(guard) $(NM) -pa --format=sysv $(@D)/.$(@F).$(VIRT_BASE).0 \
|
||||||
|
| $(guard) $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort >$(@D)/.$(@F).0s.S
|
||||||
|
$(guard) $(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).0r.o $(@D)/.$(@F).0s.o
|
||||||
|
$(foreach base, $(VIRT_BASE) $(ALT_BASE), \
|
||||||
|
- $(guard) $(LD) $(call EFI_LDFLAGS,$(base)) -T efi.lds -N $< \
|
||||||
|
+ $(guard) $(EFI_LD) $(call EFI_LDFLAGS,$(base)) -T efi.lds -N $< \
|
||||||
|
$(@D)/.$(@F).0r.o $(@D)/.$(@F).0s.o $(note_file) -o $(@D)/.$(@F).$(base).1 &&) :
|
||||||
|
$(guard) efi/mkreloc $(foreach base,$(VIRT_BASE) $(ALT_BASE),$(@D)/.$(@F).$(base).1) >$(@D)/.$(@F).1r.S
|
||||||
|
$(guard) $(NM) -pa --format=sysv $(@D)/.$(@F).$(VIRT_BASE).1 \
|
||||||
|
| $(guard) $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort >$(@D)/.$(@F).1s.S
|
||||||
|
$(guard) $(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).1r.o $(@D)/.$(@F).1s.o
|
||||||
|
- $(guard) $(LD) $(call EFI_LDFLAGS,$(VIRT_BASE)) -T efi.lds -N $< \
|
||||||
|
+ $(guard) $(EFI_LD) $(call EFI_LDFLAGS,$(VIRT_BASE)) -T efi.lds -N $< \
|
||||||
|
$(@D)/.$(@F).1r.o $(@D)/.$(@F).1s.o $(note_file) -o $@
|
||||||
|
if $(guard) false; then rm -f $@; echo 'EFI support disabled'; \
|
||||||
|
else $(NM) -pa --format=sysv $(@D)/$(@F) \
|
@ -0,0 +1,35 @@
|
|||||||
|
EFI_MOUNTPOINT is conventionally /boot/efi or /boot/EFI or something
|
||||||
|
like that, and (on my machine) has directories within that called
|
||||||
|
{Boot, nixos, gummiboot}.
|
||||||
|
|
||||||
|
This patch does two things:
|
||||||
|
|
||||||
|
1) Xen apparently wants to put files in
|
||||||
|
$(EFI_MOUNTPOINT)/efi/$(EFI_VENDOR) - we remove the duplicate 'efi' name
|
||||||
|
because I can't see why we have it
|
||||||
|
|
||||||
|
2) Ensures the said directory exists
|
||||||
|
|
||||||
|
|
||||||
|
--- a/xen/Makefile 2016-01-08 01:50:58.028045657 +0000
|
||||||
|
+++ b/xen/Makefile 2016-01-08 01:51:33.560268718 +0000
|
||||||
|
@@ -49,7 +49,9 @@
|
||||||
|
ln -sf $(T)-$(XEN_FULLVERSION).efi $(D)$(EFI_DIR)/$(T)-$(XEN_VERSION).efi; \
|
||||||
|
ln -sf $(T)-$(XEN_FULLVERSION).efi $(D)$(EFI_DIR)/$(T).efi; \
|
||||||
|
if [ -n '$(EFI_MOUNTPOINT)' -a -n '$(EFI_VENDOR)' ]; then \
|
||||||
|
- $(INSTALL_DATA) $(TARGET).efi $(D)$(EFI_MOUNTPOINT)/efi/$(EFI_VENDOR)/$(T)-$(XEN_FULLVERSION).efi; \
|
||||||
|
+ [ -d $(D)$(EFI_MOUNTPOINT)/$(EFI_VENDOR) ] || \
|
||||||
|
+ $(INSTALL_DIR) $(D)$(EFI_MOUNTPOINT)/$(EFI_VENDOR) ;\
|
||||||
|
+ $(INSTALL_DATA) $(TARGET).efi $(D)$(EFI_MOUNTPOINT)/$(EFI_VENDOR)/$(T)-$(XEN_FULLVERSION).efi; \
|
||||||
|
elif [ "$(D)" = "$(patsubst $(shell cd $(XEN_ROOT) && pwd)/%,%,$(D))" ]; then \
|
||||||
|
echo 'EFI installation only partially done (EFI_VENDOR not set)' >&2; \
|
||||||
|
fi; \
|
||||||
|
@@ -69,7 +69,7 @@
|
||||||
|
rm -f $(D)$(EFI_DIR)/$(T)-$(XEN_VERSION).$(XEN_SUBVERSION).efi
|
||||||
|
rm -f $(D)$(EFI_DIR)/$(T)-$(XEN_VERSION).efi
|
||||||
|
rm -f $(D)$(EFI_DIR)/$(T).efi
|
||||||
|
- rm -f $(D)$(EFI_MOUNTPOINT)/efi/$(EFI_VENDOR)/$(T)-$(XEN_FULLVERSION).efi
|
||||||
|
+ rm -f $(D)$(EFI_MOUNTPOINT)/$(EFI_VENDOR)/$(T)-$(XEN_FULLVERSION).efi
|
||||||
|
|
||||||
|
.PHONY: _debug
|
||||||
|
_debug:
|
@ -20,6 +20,8 @@ config:
|
|||||||
# python2Packages.markdown
|
# python2Packages.markdown
|
||||||
, transfig, ghostscript, texinfo, pandoc
|
, transfig, ghostscript, texinfo, pandoc
|
||||||
|
|
||||||
|
, binutils-unwrapped
|
||||||
|
|
||||||
, ...} @ args:
|
, ...} @ args:
|
||||||
|
|
||||||
with stdenv.lib;
|
with stdenv.lib;
|
||||||
@ -42,6 +44,17 @@ let
|
|||||||
}
|
}
|
||||||
( __do )
|
( __do )
|
||||||
'');
|
'');
|
||||||
|
|
||||||
|
# We don't want to use the wrapped version, because this version of ld is
|
||||||
|
# only used for linking the Xen EFI binary, and the build process really
|
||||||
|
# needs control over the LDFLAGS used
|
||||||
|
efiBinutils = binutils-unwrapped.overrideAttrs (oldAttrs: {
|
||||||
|
name = "efi-binutils";
|
||||||
|
configureFlags = oldAttrs.configureFlags ++ [
|
||||||
|
"--enable-targets=x86_64-pep"
|
||||||
|
];
|
||||||
|
doInstallCheck = false; # We get a spurious failure otherwise, due to host/target mis-match
|
||||||
|
});
|
||||||
in
|
in
|
||||||
|
|
||||||
stdenv.mkDerivation (rec {
|
stdenv.mkDerivation (rec {
|
||||||
@ -119,10 +132,12 @@ stdenv.mkDerivation (rec {
|
|||||||
'')}
|
'')}
|
||||||
'';
|
'';
|
||||||
|
|
||||||
patches = [ ./0000-fix-ipxe-src.patch
|
patches = [
|
||||||
./0000-fix-install-python.patch
|
./0000-fix-ipxe-src.patch
|
||||||
] ++ optional (versionOlder version "4.8.5") ./acpica-utils-20180427.patch
|
./0000-fix-install-python.patch
|
||||||
++ (config.patches or []);
|
./0004-makefile-use-efi-ld.patch
|
||||||
|
./0005-makefile-fix-efi-mountdir-use.patch
|
||||||
|
] ++ (config.patches or []);
|
||||||
|
|
||||||
postPatch = ''
|
postPatch = ''
|
||||||
### Hacks
|
### Hacks
|
||||||
@ -186,6 +201,9 @@ stdenv.mkDerivation (rec {
|
|||||||
--replace /bin/ls ls
|
--replace /bin/ls ls
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
EFI_LD = "${efiBinutils}/bin/ld";
|
||||||
|
EFI_VENDOR = "nixos";
|
||||||
|
|
||||||
# TODO: Flask needs more testing before enabling it by default.
|
# TODO: Flask needs more testing before enabling it by default.
|
||||||
#makeFlags = [ "XSM_ENABLE=y" "FLASK_ENABLE=y" "PREFIX=$(out)" "CONFIG_DIR=/etc" "XEN_EXTFILES_URL=\\$(XEN_ROOT)/xen_ext_files" ];
|
#makeFlags = [ "XSM_ENABLE=y" "FLASK_ENABLE=y" "PREFIX=$(out)" "CONFIG_DIR=/etc" "XEN_EXTFILES_URL=\\$(XEN_ROOT)/xen_ext_files" ];
|
||||||
makeFlags = [ "PREFIX=$(out) CONFIG_DIR=/etc" "XEN_SCRIPT_DIR=/etc/xen/scripts" ]
|
makeFlags = [ "PREFIX=$(out) CONFIG_DIR=/etc" "XEN_SCRIPT_DIR=/etc/xen/scripts" ]
|
||||||
|
Loading…
Reference in New Issue
Block a user