The quiet-command make rule currently takes two arguments: the command and arguments to run, and a string to print if the V flag is not set (ie we are not being verbose). By convention, the string printed is of the form " NAME some args". Unfortunately to get nicely lined up output all the strings have to agree about what column the arguments should start in, which means that if we add a new quiet-command usage which wants a slightly longer CMD name then we either put up with misalignment or change every quiet-command string. Split the quiet-mode string into two, the "NAME" and the "same args" part, and use printf(1) to format the string automatically. This means we only need to change one place if we want to support a longer maximum name. In particular, we can now print 7-character names lined up properly (they are needed for the OSX "SETTOOL" invocation). Change all the uses of quiet-command to the new syntax. (Any which are missed or inadvertently reintroduced via later merges will result in slightly misformatted quiet output rather than disaster.) A few places in the pc-bios/ makefiles are updated to use "BUILD", "SIGN" and "STRIP" rather than "Building", "Signing" and "Stripping" for consistency and to keep them below 7 characters. Module .mo links now print "LD" rather than the nonstandard "LD -r". Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Eric Blake <eblake@redhat.com> Message-id: 1475598441-27908-1-git-send-email-peter.maydell@linaro.org
59 lines
2 KiB
Makefile
59 lines
2 KiB
Makefile
all: build-all
|
|
# Dummy command so that make thinks it has done something
|
|
@true
|
|
|
|
include ../../config-host.mak
|
|
include $(SRC_PATH)/rules.mak
|
|
|
|
$(call set-vpath, $(SRC_PATH)/pc-bios/optionrom)
|
|
|
|
.PHONY : all clean build-all
|
|
|
|
# Compiling with no optimization creates ROMs that are too large
|
|
ifeq ($(lastword $(filter -O%, -O0 $(CFLAGS))),-O0)
|
|
override CFLAGS += -O2
|
|
endif
|
|
|
|
# Drop -fstack-protector and the like
|
|
QEMU_CFLAGS := $(filter -W%, $(QEMU_CFLAGS)) $(CFLAGS_NOPIE) -ffreestanding
|
|
QEMU_CFLAGS += $(call cc-option, $(QEMU_CFLAGS), -fno-stack-protector)
|
|
QEMU_CFLAGS += $(call cc-option, $(QEMU_CFLAGS), -m16)
|
|
ifeq ($(filter -m16, $(QEMU_CFLAGS)),)
|
|
# Attempt to work around compilers that lack -m16 (GCC <= 4.8, clang <= ??)
|
|
# On GCC we add -fno-toplevel-reorder to keep the order of asm blocks with
|
|
# respect to the rest of the code. clang does not have -fno-toplevel-reorder,
|
|
# but it places all asm blocks at the beginning and we're relying on it for
|
|
# the option ROM header. So just force clang not to use the integrated
|
|
# assembler, which doesn't support .code16gcc.
|
|
QEMU_CFLAGS += $(call cc-option, $(QEMU_CFLAGS), -fno-toplevel-reorder)
|
|
QEMU_CFLAGS += $(call cc-option, $(QEMU_CFLAGS), -no-integrated-as)
|
|
QEMU_CFLAGS += -m32 -include $(SRC_PATH)/pc-bios/optionrom/code16gcc.h
|
|
endif
|
|
|
|
QEMU_INCLUDES += -I$(SRC_PATH)
|
|
|
|
Wa = -Wa,
|
|
ASFLAGS += -32
|
|
QEMU_CFLAGS += $(call cc-c-option, $(QEMU_CFLAGS), $(Wa)-32)
|
|
|
|
build-all: multiboot.bin linuxboot.bin linuxboot_dma.bin kvmvapic.bin
|
|
|
|
# suppress auto-removal of intermediate files
|
|
.SECONDARY:
|
|
|
|
|
|
%.o: %.S
|
|
$(call quiet-command,$(CPP) $(QEMU_INCLUDES) $(QEMU_DGFLAGS) -c -o - $< | $(AS) $(ASFLAGS) -o $@,"AS","$(TARGET_DIR)$@")
|
|
|
|
%.img: %.o
|
|
$(call quiet-command,$(LD) $(LDFLAGS_NOPIE) -m $(LD_I386_EMULATION) -T $(SRC_PATH)/pc-bios/optionrom/flat.lds -s -o $@ $<,"BUILD","$(TARGET_DIR)$@")
|
|
|
|
%.raw: %.img
|
|
$(call quiet-command,$(OBJCOPY) -O binary -j .text $< $@,"BUILD","$(TARGET_DIR)$@")
|
|
|
|
%.bin: %.raw
|
|
$(call quiet-command,$(PYTHON) $(SRC_PATH)/scripts/signrom.py $< $@,"SIGN","$(TARGET_DIR)$@")
|
|
|
|
clean:
|
|
rm -f *.o *.d *.raw *.img *.bin *~
|