From f9ed3158ec75852d35d7f39edb2facff4df27c41 Mon Sep 17 00:00:00 2001 From: Yanyan Jiang Date: Thu, 21 Mar 2019 17:57:49 +0800 Subject: [PATCH] Makfiles: move arch-dependent flags to arch.mk --- Makefile.compile | 73 ++++++++--------------------------------- am/arch/mips32-nemu.mk | 2 ++ am/arch/native.mk | 3 ++ am/arch/navy/navy.mk | 4 +++ am/arch/riscv32-nemu.mk | 6 +++- am/arch/riscv32-noop.mk | 8 +++-- am/arch/x86-nemu.mk | 5 ++- am/arch/x86-qemu.mk | 6 +++- 8 files changed, 43 insertions(+), 64 deletions(-) diff --git a/Makefile.compile b/Makefile.compile index 6b265bac..824c63cb 100644 --- a/Makefile.compile +++ b/Makefile.compile @@ -1,79 +1,34 @@ -# Compilation flags - -ifeq ($(ISA), riscv32) -CROSS_COMPILE = riscv-none-embed- -endif - -ifeq ($(PLATFORM), navy) -NAVY_LIBS = libndl libos libc -INC_DIR += $(addsuffix /include/, $(addprefix $(NAVY_HOME)/libs/, $(NAVY_LIBS))) -endif - -AS = $(CROSS_COMPILE)gcc -CC = $(CROSS_COMPILE)gcc +AS = $(CROSS_COMPILE)gcc +CC = $(CROSS_COMPILE)gcc CXX = $(CROSS_COMPILE)g++ -LD = $(CROSS_COMPILE)ld +LD = $(CROSS_COMPILE)ld OBJDUMP = $(CROSS_COMPILE)objdump OBJCOPY = $(CROSS_COMPILE)objcopy READELF = $(CROSS_COMPILE)readelf -ISA_DEF = __ISA_$(shell echo $(ISA) | tr a-z A-Z)__ +ISA_DEF = __ISA_$(shell echo $(ISA) | tr a-z A-Z)__ ARCH_DEF = __ARCH_$(shell echo $(ARCH) | tr a-z A-Z | tr - _) INCLUDES = $(addprefix -I, $(INC_DIR)) -I$(AM_HOME)/am/ INCLUDES += -I$(AM_HOME)/am/include -CFLAGS_COMMON += -O2 -MMD -Wall -Werror -ggdb $(INCLUDES) -D$(ISA_DEF) -D__ISA__=\"$(ISA)\" \ - -D__ARCH__=$(ARCH) -D$(ARCH_DEF) \ - -fno-asynchronous-unwind-tables -fno-builtin -fno-stack-protector - -CFLAGS += -std=gnu11 -CXXFLAGS += -std=c++11 -ffreestanding -fno-rtti -fno-exceptions -ASFLAGS += -MMD $(INCLUDES) -D$(ISA_DEF) - -ifeq ($(ISA), native) -CFLAGS_COMMON += -fpie -ASFLAGS += -fpie -pie -endif - -ifeq ($(ISA), mips32) -CFLAGS_COMMON += -fno-pic -static -fno-delayed-branch -mno-abicalls -march=mips32 -mno-check-zero-division -EL -mno-llsc -mno-imadd -mno-mad -ASFLAGS += -march=mips32 -EL -mno-check-zero-division -O0 -mno-abicalls -fno-pic -fno-delayed-branch -endif - -ifeq ($(ISA), x86) -CFLAGS_COMMON += -m32 -fno-pic -fno-omit-frame-pointer -march=i386 -mstringop-strategy=loop -fno-reorder-functions -ASFLAGS += -m32 -fno-pic -endif - -ifeq ($(ISA), riscv32) -CFLAGS_COMMON += -fno-pic -static -march=rv32im -mabi=ilp32 -ASFLAGS += -march=rv32im -mabi=ilp32 -O0 -fno-pic -endif - -ifeq ($(ISA), am_native) -CFLAGS_COMMON += -fno-omit-frame-pointer -fno-reorder-functions -endif - -CFLAGS += $(CFLAGS_COMMON) -CXXFLAGS += $(CFLAGS_COMMON) +CFLAGS += -O2 -MMD -Wall -Werror -ggdb $(INCLUDES) -D$(ISA_DEF) -D__ISA__=\"$(ISA)\" \ + -D__ARCH__=$(ARCH) -D$(ARCH_DEF) \ + -fno-asynchronous-unwind-tables -fno-builtin -fno-stack-protector # Files to be compiled OBJS = $(addprefix $(DST_DIR)/, $(addsuffix .o, $(basename $(SRCS)))) # Compilation patterns -$(DST_DIR)/%.o: %.cpp - @echo + CXX $< - @mkdir -p $(dir $@) - @$(CXX) $(CXXFLAGS) -c -o $@ $(realpath $<) $(DST_DIR)/%.o: %.c - @echo + CC $< - @mkdir -p $(dir $@) - @$(CC) $(CFLAGS) -c -o $@ $(realpath $<) + @mkdir -p $(dir $@) && echo + CC $< + @$(CC) -std=gnu11 $(CFLAGS) -c -o $@ $(realpath $<) +$(DST_DIR)/%.o: %.cpp + @mkdir -p $(dir $@) && echo + CXX $< + @$(CXX) -std=c++11 -ffreestanding -fno-rtti -fno-exceptions $(CXXFLAGS) $(CFLAGS) -c -o $@ $(realpath $<) $(DST_DIR)/%.o: %.S - @echo + AS $< - @mkdir -p $(dir $@) - @$(AS) $(ASFLAGS) -c -o $@ $(realpath $<) + @mkdir -p $(dir $@) && echo + AS $< + @$(AS) -MMD $(INCLUDES) -D$(ISA_DEF) $(ASFLAGS) -c -o $@ $(realpath $<) # Depencies DEPS = $(addprefix $(DST_DIR)/, $(addsuffix .d, $(basename $(SRCS)))) diff --git a/am/arch/mips32-nemu.mk b/am/arch/mips32-nemu.mk index 2c870a36..3823820b 100644 --- a/am/arch/mips32-nemu.mk +++ b/am/arch/mips32-nemu.mk @@ -1,4 +1,6 @@ LDFLAGS := -EL CROSS_COMPILE := mips-linux-gnu- +CFLAGS += -fno-pic -static -fno-delayed-branch -mno-abicalls -march=mips32 -mno-check-zero-division -EL -mno-llsc -mno-imadd -mno-mad +ASFLAGS += -march=mips32 -EL -mno-check-zero-division -O0 -mno-abicalls -fno-pic -fno-delayed-branch include $(AM_HOME)/am/arch/nemu/nemu.mk diff --git a/am/arch/native.mk b/am/arch/native.mk index 69e95cb6..7bd6f8ef 100644 --- a/am/arch/native.mk +++ b/am/arch/native.mk @@ -8,6 +8,9 @@ AM_SRCS := native/trm.c \ native/devices/timer.c \ native/devices/video.c \ +CFLAGS += -fpie +ASFLAGS += -fpie -pie + image: @echo + LD "->" $(BINARY) @g++ -pie -o $(BINARY) -Wl,--start-group $(LINK_FILES) -Wl,--end-group -lSDL2 -lGL -lrt diff --git a/am/arch/navy/navy.mk b/am/arch/navy/navy.mk index e1428e03..c6eddd65 100644 --- a/am/arch/navy/navy.mk +++ b/am/arch/navy/navy.mk @@ -8,6 +8,10 @@ AM_SRCS := navy/trm.c \ NAVY_MAKEFILE = Makefile.navy NAVY_MAKEFILE_CONTENT = "NAME = $(NAME)-am\nAPP = $(BINARY_ABS)\nOBJS = $(LINK_FILES)\nLIBS += libndl\ninclude $${NAVY_HOME}/Makefile.app" +NAVY_LIBS = libndl libos libc +INC_DIR += $(addsuffix /include/, $(addprefix $(NAVY_HOME)/libs/, $(NAVY_LIBS))) + + image: @/bin/echo -e $(NAVY_MAKEFILE_CONTENT) > $(NAVY_MAKEFILE) $(MAKE) install -f $(NAVY_MAKEFILE) ISA=$(ISA) diff --git a/am/arch/riscv32-nemu.mk b/am/arch/riscv32-nemu.mk index 668c9c4a..621fc14c 100644 --- a/am/arch/riscv32-nemu.mk +++ b/am/arch/riscv32-nemu.mk @@ -1,2 +1,6 @@ -LDFLAGS := -melf32lriscv +CROSS_COMPILE := riscv-none-embed- +LDFLAGS += -melf32lriscv +CFLAGS += -fno-pic -static -march=rv32im -mabi=ilp32 +ASFLAGS += -march=rv32im -mabi=ilp32 -O0 -fno-pic + include $(AM_HOME)/am/arch/nemu/nemu.mk diff --git a/am/arch/riscv32-noop.mk b/am/arch/riscv32-noop.mk index e8581c6d..e69042e8 100644 --- a/am/arch/riscv32-noop.mk +++ b/am/arch/riscv32-noop.mk @@ -8,8 +8,12 @@ AM_SRCS := $(ISA)/nemu/trm.c \ nemu-devices/nemu-video.c \ $(ISA)/nemu/boot/start.S -LDFLAGS := -melf32lriscv -LD_SCRIPT := $(AM_HOME)/am/src/$(ISA)/nemu/boot/loader.ld +CROSS_COMPILE := riscv-none-embed- +CFLAGS += -fno-pic -static -march=rv32im -mabi=ilp32 +LDFLAGS += -melf32lriscv +ASFLAGS += -march=rv32im -mabi=ilp32 -O0 -fno-pic + +LD_SCRIPT := $(AM_HOME)/am/src/$(ISA)/nemu/boot/loader.ld GEN_READMEMH := $(NOOP_HOME)/tools/readmemh/verilator-readmemh $(GEN_READMEMH): diff --git a/am/arch/x86-nemu.mk b/am/arch/x86-nemu.mk index 9225f157..ad6d8cc3 100644 --- a/am/arch/x86-nemu.mk +++ b/am/arch/x86-nemu.mk @@ -1,2 +1,5 @@ -LDFLAGS := -melf_i386 +CFLAGS += -m32 -fno-pic -fno-omit-frame-pointer -march=i386 -mstringop-strategy=loop -fno-reorder-functions +LDFLAGS += -melf_i386 +ASFLAGS += -m32 -fno-pic + include $(AM_HOME)/am/arch/nemu/nemu.mk diff --git a/am/arch/x86-qemu.mk b/am/arch/x86-qemu.mk index 9ae2de63..9012c2ac 100644 --- a/am/arch/x86-qemu.mk +++ b/am/arch/x86-qemu.mk @@ -12,10 +12,14 @@ AM_SRCS := x86/qemu/trm.c \ x86/qemu/devices/timer.c \ x86/qemu/devices/video.c \ +CFLAGS += -m32 -fno-pic -fno-omit-frame-pointer -march=i386 +LDFLAGS += -melf_i386 +ASFLAGS += -m32 -fno-pic + image: @make -s -C $(AM_HOME)/am/src/x86/qemu/boot @echo + LD "->" $(BINARY).o - @ld -melf_i386 -Ttext 0x00100000 -o $(BINARY).o --start-group $(LINK_FILES) --end-group + @$(LD) $(LDFLAGS) -Ttext 0x00100000 -o $(BINARY).o --start-group $(LINK_FILES) --end-group @echo + CREATE "->" $(BINARY) @cat $(AM_HOME)/am/src/x86/qemu/boot/mbr $(BINARY).o > $(BINARY)