a5b2afd522
Clang unfortunately does not support generating code for the z900 architecture level and starts with the z10 instead. Thus to be able to support compiling with Clang, we have to check for the supported compiler flags. The disadvantage is of course that the bios image will only run with z10 guest CPUs upwards (which is what most people use anyway), so just in case let's also emit a warning in that case (we will continue to ship firmware images that have been pre-built with GCC in future releases, so this should not impact normal users, too). Message-Id: <20210502174836.838816-5-thuth@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Reviewed-by: Cornelia Huck <cohuck@redhat.com> Signed-off-by: Thomas Huth <thuth@redhat.com>
66 lines
2.1 KiB
Makefile
66 lines
2.1 KiB
Makefile
all: build-all
|
|
# Dummy command so that make thinks it has done something
|
|
@true
|
|
|
|
include ../../config-host.mak
|
|
CFLAGS = -O2 -g
|
|
|
|
quiet-command = $(if $(V),$1,$(if $(2),@printf " %-7s %s\n" $2 $3 && $1, @$1))
|
|
cc-option = $(if $(shell $(CC) $1 $2 -S -o /dev/null -xc /dev/null \
|
|
>/dev/null 2>&1 && echo OK),$2,$3)
|
|
|
|
VPATH_SUFFIXES = %.c %.h %.S %.m %.mak %.sh %.rc Kconfig% %.json.in
|
|
set-vpath = $(if $1,$(foreach PATTERN,$(VPATH_SUFFIXES),$(eval vpath $(PATTERN) $1)))
|
|
$(call set-vpath, $(SRC_PATH)/pc-bios/s390-ccw)
|
|
|
|
# Flags for dependency generation
|
|
QEMU_DGFLAGS = -MMD -MP -MT $@ -MF $(@D)/$(*F).d
|
|
|
|
%.o: %.c
|
|
$(call quiet-command,$(CC) $(QEMU_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) \
|
|
-c -o $@ $<,"CC","$(TARGET_DIR)$@")
|
|
|
|
%.o: %.S
|
|
$(call quiet-command,$(CCAS) $(QEMU_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) \
|
|
-c -o $@ $<,"CCAS","$(TARGET_DIR)$@")
|
|
|
|
.PHONY : all clean build-all
|
|
|
|
OBJECTS = start.o main.o bootmap.o jump2ipl.o sclp.o menu.o \
|
|
virtio.o virtio-scsi.o virtio-blkdev.o libc.o cio.o dasd-ipl.o
|
|
|
|
QEMU_CFLAGS := -Wall $(filter -W%, $(QEMU_CFLAGS))
|
|
QEMU_CFLAGS += $(call cc-option,-Werror $(QEMU_CFLAGS),-Wno-stringop-overflow)
|
|
QEMU_CFLAGS += -ffreestanding -fno-delete-null-pointer-checks -fno-common -fPIE
|
|
QEMU_CFLAGS += -fwrapv -fno-strict-aliasing -fno-asynchronous-unwind-tables
|
|
QEMU_CFLAGS += $(call cc-option, $(QEMU_CFLAGS), -fno-stack-protector)
|
|
QEMU_CFLAGS += -msoft-float
|
|
QEMU_CFLAGS += $(call cc-option, $(QEMU_CFLAGS),-march=z900,-march=z10)
|
|
QEMU_CFLAGS += -std=gnu99
|
|
LDFLAGS += -Wl,-pie -nostdlib
|
|
|
|
build-all: s390-ccw.img s390-netboot.img
|
|
|
|
s390-ccw.elf: $(OBJECTS)
|
|
$(call quiet-command,$(CC) $(LDFLAGS) -o $@ $(OBJECTS),"BUILD","$(TARGET_DIR)$@")
|
|
|
|
STRIP ?= strip
|
|
|
|
s390-ccw.img: s390-ccw.elf
|
|
$(call quiet-command,$(STRIP) --strip-unneeded $< -o $@,"STRIP","$(TARGET_DIR)$@")
|
|
|
|
$(OBJECTS): Makefile
|
|
|
|
ifneq ($(wildcard $(SRC_PATH)/roms/SLOF/lib/libnet),)
|
|
include $(SRC_PATH)/pc-bios/s390-ccw/netboot.mak
|
|
else
|
|
s390-netboot.img:
|
|
@echo "s390-netboot.img not built since roms/SLOF/ is not available."
|
|
endif
|
|
|
|
ALL_OBJS = $(sort $(OBJECTS) $(NETOBJS) $(LIBCOBJS) $(LIBNETOBJS))
|
|
-include $(ALL_OBJS:%.o=%.d)
|
|
|
|
clean:
|
|
rm -f *.o *.d *.img *.elf *~ *.a
|