6f57d91935
Some versions of ld will complain that the automatically created (and unused by our build process) ELF program headers include a "LOAD segment with RWX permissions". Silence this warning by adding "-z separate-code" to the linker options, where supported. For BIOS builds, where the prefix will generally require writable access to its own (tiny) code segment, simply inhibit the warning completely via "--no-warn-rwx-segments". Signed-off-by: Michael Brown <mcb30@ipxe.org>
108 lines
2.5 KiB
Makefile
108 lines
2.5 KiB
Makefile
# -*- makefile -*- : Force emacs to use Makefile mode
|
|
|
|
# BIOS-specific directories containing source files
|
|
#
|
|
SRCDIRS += arch/x86/drivers/net
|
|
|
|
# The linker scripts
|
|
#
|
|
LDSCRIPT = arch/x86/scripts/pcbios.lds
|
|
LDSCRIPT_PREFIX = arch/x86/scripts/prefixonly.lds
|
|
|
|
# Stop ld from complaining about our customised linker script
|
|
#
|
|
LDFLAGS += -N --no-check-sections
|
|
|
|
# Do not warn about RWX segments (required by most prefixes)
|
|
#
|
|
WRWX_TEST = $(LD) --warn-rwx-segments --version 2>&1 > /dev/null
|
|
WRWX_FLAGS := $(shell [ -z "`$(WRWX_TEST)`" ] && \
|
|
$(ECHO) '--no-warn-rwx-segments')
|
|
LDFLAGS += $(WRWX_FLAGS)
|
|
|
|
# Media types.
|
|
#
|
|
MEDIA += rom
|
|
MEDIA += mrom
|
|
MEDIA += pcirom
|
|
MEDIA += isarom
|
|
MEDIA += pxe
|
|
MEDIA += kpxe
|
|
MEDIA += kkpxe
|
|
MEDIA += kkkpxe
|
|
MEDIA += lkrn
|
|
MEDIA += dsk
|
|
MEDIA += nbi
|
|
MEDIA += hd
|
|
MEDIA += raw
|
|
MEDIA += exe
|
|
|
|
# Padding rules
|
|
#
|
|
PAD_rom = $(PERL) $(PADIMG) --blksize=512 --byte=0xff
|
|
PAD_mrom = $(PAD_rom)
|
|
PAD_pcirom = $(PAD_rom)
|
|
PAD_isarom = $(PAD_rom)
|
|
PAD_dsk = $(PERL) $(PADIMG) --blksize=512
|
|
PAD_hd = $(PERL) $(PADIMG) --blksize=32768
|
|
PAD_exe = $(PERL) $(PADIMG) --blksize=512
|
|
|
|
# Finalisation rules
|
|
#
|
|
FINALISE_rom = $(PERL) $(FIXROM)
|
|
FINALISE_mrom = $(FINALISE_rom)
|
|
FINALISE_pcirom = $(FINALISE_rom)
|
|
FINALISE_isarom = $(FINALISE_rom)
|
|
|
|
# Use $(ROMS) rather than $(DRIVERS) for "allroms", "allmroms", etc.
|
|
#
|
|
LIST_NAME_rom := ROMS
|
|
LIST_NAME_mrom := ROMS
|
|
LIST_NAME_pcirom := ROMS
|
|
LIST_NAME_isarom := ROMS
|
|
|
|
# ISO images
|
|
NON_AUTO_MEDIA += iso
|
|
$(BIN)/%.iso : $(BIN)/%.lkrn util/genfsimg
|
|
$(QM)$(ECHO) " [GENFSIMG] $@"
|
|
$(Q)util/genfsimg -o $@ $<
|
|
|
|
# FAT filesystem images (via syslinux)
|
|
NON_AUTO_MEDIA += sdsk
|
|
$(BIN)/%.sdsk : $(BIN)/%.lkrn util/genfsimg
|
|
$(QM)$(ECHO) " [GENFSIMG] $@"
|
|
$(Q)util/genfsimg -o $@ $<
|
|
|
|
# rule to write disk images to /dev/fd0
|
|
NON_AUTO_MEDIA += fd0
|
|
%fd0 : %dsk
|
|
$(QM)$(ECHO) " [DD] $@"
|
|
$(Q)dd if=$< bs=512 conv=sync of=/dev/fd0
|
|
$(Q)sync
|
|
|
|
# Special target for building Master Boot Record binary
|
|
$(BIN)/mbr.tmp : $(BIN)/mbr.o
|
|
$(QM)$(ECHO) " [LD] $@"
|
|
$(Q)$(LD) $(LDFLAGS) -T $(LDSCRIPT_PREFIX) -o $@ -e mbr $<
|
|
|
|
# rule to make a USB disk image
|
|
$(BIN)/usbdisk.tmp : $(BIN)/usbdisk.o
|
|
$(QM)$(ECHO) " [LD] $@"
|
|
$(Q)$(LD) $(LDFLAGS) -T $(LDSCRIPT_PREFIX) -o $@ -e mbr $<
|
|
|
|
NON_AUTO_MEDIA += usb
|
|
%usb: $(BIN)/usbdisk.bin %hd
|
|
$(QM)$(ECHO) " [FINISH] $@"
|
|
$(Q)cat $^ > $@
|
|
|
|
NON_AUTO_MEDIA += vhd
|
|
%vhd: %usb
|
|
$(QM)$(ECHO) " [FINISH] $@"
|
|
$(Q)$(QEMUIMG) convert -f raw -O vpc $< $@
|
|
|
|
# Padded floppy image (e.g. for iLO)
|
|
NON_AUTO_MEDIA += pdsk
|
|
%pdsk : %dsk
|
|
$(Q)cp $< $@
|
|
$(Q)$(PADIMG) --blksize=1474560 $@
|