8e5739ce4b
We originally built a separate binary for the netboot code since it was considered as experimental and we could not be sure that the necessary SLOF module had been checked out. Time passed, the code proved its usefulness, and the build system nowadays makes sure that the SLOF module is checked out if you have a s390x compiler available for building the s390-ccw bios. So there is no real compelling reason anymore to keep the netboot code in a separate binary. Linking the code together with the main s390-ccw.img will make future enhancements much easier, like supporting more than one boot device. Co-authored by: Thomas Huth <thuth@redhat.com> Signed-off-by: Jared Rossi <jrossi@linux.ibm.com> Message-ID: <20241020012953.1380075-4-jrossi@linux.ibm.com> Signed-off-by: Thomas Huth <thuth@redhat.com>
93 lines
2.8 KiB
Makefile
93 lines
2.8 KiB
Makefile
all: build-all
|
|
# Dummy command so that make thinks it has done something
|
|
@true
|
|
|
|
include config-host.mak
|
|
CFLAGS = -O2 -g
|
|
MAKEFLAGS += -rR
|
|
|
|
GIT_SUBMODULES = roms/SLOF
|
|
|
|
NULL :=
|
|
SPACE := $(NULL) #
|
|
TARGET_PREFIX := $(patsubst %/,%:$(SPACE),$(TARGET_DIR))
|
|
|
|
quiet-@ = $(if $(V),,@$(if $1,printf "%s\n" "$(TARGET_PREFIX)$1" && ))
|
|
quiet-command = $(call quiet-@,$2 $@)$1
|
|
|
|
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))
|
|
|
|
# Flags for dependency generation
|
|
QEMU_DGFLAGS = -MMD -MP -MT $@ -MF $(@D)/$(*F).d
|
|
|
|
%.o: %.c
|
|
$(call quiet-command,$(CC) $(EXTRA_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) \
|
|
-c -o $@ $<,Compiling)
|
|
|
|
%.o: %.S
|
|
$(call quiet-command,$(CCAS) $(EXTRA_CFLAGS) $(QEMU_DGFLAGS) $(CFLAGS) \
|
|
-c -o $@ $<,Assembling)
|
|
|
|
.PHONY : all clean build-all distclean
|
|
|
|
OBJECTS = start.o main.o bootmap.o jump2ipl.o sclp.o menu.o netmain.o \
|
|
virtio.o virtio-net.o virtio-scsi.o virtio-blkdev.o cio.o dasd-ipl.o
|
|
|
|
SLOF_DIR := $(SRC_PATH)/../../roms/SLOF
|
|
|
|
LIBC_INC := -nostdinc -I$(SLOF_DIR)/lib/libc/include
|
|
LIBNET_INC := -I$(SLOF_DIR)/lib/libnet
|
|
|
|
EXTRA_CFLAGS += -Wall
|
|
EXTRA_CFLAGS += -ffreestanding -fno-delete-null-pointer-checks -fno-common -fPIE
|
|
EXTRA_CFLAGS += -fwrapv -fno-strict-aliasing -fno-asynchronous-unwind-tables
|
|
EXTRA_CFLAGS += -msoft-float
|
|
EXTRA_CFLAGS += -std=gnu99
|
|
EXTRA_CFLAGS += $(LIBC_INC) $(LIBNET_INC)
|
|
LDFLAGS += -Wl,-pie -nostdlib -z noexecstack
|
|
|
|
cc-test = $(CC) -Werror $1 -c -o /dev/null -xc /dev/null >/dev/null 2>/dev/null
|
|
cc-option = if $(call cc-test, $1); then \
|
|
echo "$(TARGET_PREFIX)$1 detected" && echo "EXTRA_CFLAGS += $1" >&3; else \
|
|
echo "$(TARGET_PREFIX)$1 not detected" $(if $2,&& echo "EXTRA_CFLAGS += $2" >&3); fi
|
|
|
|
config-cc.mak: Makefile
|
|
$(quiet-@)($(call cc-option,-Wno-stringop-overflow); \
|
|
$(call cc-option,-fno-stack-protector); \
|
|
$(call cc-option,-Wno-array-bounds); \
|
|
$(call cc-option,-Wno-gnu); \
|
|
$(call cc-option,-march=z900,-march=z10)) 3> config-cc.mak
|
|
-include config-cc.mak
|
|
|
|
include $(SRC_PATH)/netboot.mak
|
|
|
|
build-all: s390-ccw.img
|
|
|
|
s390-ccw.elf: $(OBJECTS) libnet.a libc.a
|
|
$(call quiet-command,$(CC) $(LDFLAGS) -o $@ $^,Linking)
|
|
|
|
s390-ccw.img: s390-ccw.elf
|
|
$(call quiet-command,$(STRIP) --strip-unneeded $< -o $@,Stripping $< into)
|
|
|
|
$(OBJECTS): Makefile
|
|
|
|
ALL_OBJS = $(sort $(OBJECTS) $(LIBCOBJS) $(LIBNETOBJS))
|
|
-include $(ALL_OBJS:%.o=%.d)
|
|
|
|
clean:
|
|
rm -f *.o *.d *.img *.elf *~ *.a
|
|
|
|
distclean:
|
|
rm -f config-cc.mak
|
|
|
|
.PHONY: git-submodule-update
|
|
$(SRC_PATH)/../../.git-submodule-status: git-submodule-update config-host.mak
|
|
Makefile: $(SRC_PATH)/../../.git-submodule-status
|
|
|
|
git-submodule-update:
|
|
ifneq ($(GIT_SUBMODULES_ACTION),ignore)
|
|
$(quiet-@)GIT=git "$(SRC_PATH)/../../scripts/git-submodule.sh" $(GIT_SUBMODULES_ACTION) $(GIT_SUBMODULES)
|
|
endif
|