diff --git a/Makefile b/Makefile index 4d3d991..1d55214 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,4 @@ # Makefile for AbstractMachine Kernels and Libraries -include scripts/helpers/rules.mk ### *Get a more readable version of this Makefile* by `make html` (requires python-markdown) html: @@ -9,15 +8,18 @@ html: ## 1. Basic Setup and Checks -### Default to create all static libraries +### Default to create a bare-metal kernel image ifeq ($(MAKECMDGOALS),) - MAKECMDGOALS = libs - .DEFAULT_GOAL = libs + MAKECMDGOALS = image + .DEFAULT_GOAL = image endif ### Override checks when `make clean/clean-all/html` ifeq ($(findstring $(MAKECMDGOALS),clean|clean-all|html),) +### Print build info message +$(info # Building $(NAME)-$(MAKECMDGOALS) [$(ARCH)]) + ### Check: environment variable `$AM_HOME` looks sane ifeq ($(wildcard $(AM_HOME)/am/include/am.h),) $(error $$AM_HOME must be an AbstractMachine repo) @@ -34,20 +36,35 @@ ARCH_SPLIT = $(subst -, ,$(ARCH)) ISA = $(word 1,$(ARCH_SPLIT)) PLATFORM = $(word 2,$(ARCH_SPLIT)) +### Check if there is something to build +ifeq ($(flavor SRCS), undefined) + $(error Nothing to build) +endif + ### Checks end here endif -## 2. Setup variables pointing to build and install directory +## 2. General Compilation Targets ### Create the destination directory (`build/$ARCH`) -WORK_DIR ?= $(shell pwd) -DST_DIR ?= $(WORK_DIR)/build/$(ARCH) -LIB_BUILDDIR ?= $(DST_DIR)/lib -INSTALLDIR ?= $(WORK_DIR)/build/install/$(ARCH) -LIB_INSTALLDIR ?= $(INSTALLDIR)/lib -INC_INSTALLDIR ?= $(INSTALLDIR)/include +WORK_DIR = $(shell pwd) +DST_DIR = $(WORK_DIR)/build/$(ARCH) +$(shell mkdir -p $(DST_DIR)) -## 3. Toolchain setup +### Compilation targets (a binary image or archive) +IMAGE_REL = build/$(NAME)-$(ARCH) +IMAGE = $(abspath $(IMAGE_REL)) +ARCHIVE = $(WORK_DIR)/build/$(NAME)-$(ARCH).a + +### Collect the files to be linked: object files (`.o`) and libraries (`.a`) +OBJS = $(addprefix $(DST_DIR)/, $(addsuffix .o, $(basename $(SRCS)))) +LIBS := $(sort $(LIBS) am klib) # lazy evaluation ("=") causes infinite recursions +LINKAGE = $(OBJS) \ + $(addsuffix -$(ARCH).a, $(join \ + $(addsuffix /build/, $(addprefix $(AM_HOME)/, $(LIBS))), \ + $(LIBS) )) + +## 3. General Compilation Flags ### (Cross) compilers, e.g., mips-linux-gnu-g++ CC ?= $(CROSS_COMPILE)gcc @@ -59,103 +76,80 @@ OBJDUMP ?= $(CROSS_COMPILE)objdump OBJCOPY ?= $(CROSS_COMPILE)objcopy READELF ?= $(CROSS_COMPILE)readelf +### Compilation flags +INC_PATH += $(WORK_DIR)/include $(addsuffix /include/, $(addprefix $(AM_HOME)/, $(LIBS))) +INCFLAGS += $(addprefix -I, $(INC_PATH)) + +ARCH_H := arch/$(ARCH).h +CFLAGS += -lm -g -O3 -MMD -Wall $(INCFLAGS) \ + -D__ISA__=\"$(ISA)\" -D__ISA_$(shell echo $(ISA) | tr a-z A-Z)__ \ + -D__ARCH__=$(ARCH) -D__ARCH_$(shell echo $(ARCH) | tr a-z A-Z | tr - _) \ + -D__PLATFORM__=$(PLATFORM) -D__PLATFORM_$(shell echo $(PLATFORM) | tr a-z A-Z | tr - _) \ + -DARCH_H=\"$(ARCH_H)\" \ + -fno-asynchronous-unwind-tables -fno-builtin -fno-stack-protector \ + -Wno-main -U_FORTIFY_SOURCE -fvisibility=hidden +CXXFLAGS += $(CFLAGS) -ffreestanding -fno-rtti -fno-exceptions +ASFLAGS += $(INCFLAGS) +LDFLAGS += -z noexecstack + ## 4. Arch-Specific Configurations -# TODO: Removed CROSS_COMPILE toolchain setup as it's too complicated -# for Makefile to do right. Force the user to provide a CROSS_COMPILE -# prefix for now. They can also specify CFLAGS and LDFLAGS through -# environment variable. -include $(AM_HOME)/scripts/$(ARCH).mk +### Paste in arch-specific configurations (e.g., from `scripts/x86_64-qemu.mk`) +-include $(AM_HOME)/scripts/$(ARCH).mk + +### Fall back to native gcc/binutils if there is no cross compiler +ifeq ($(wildcard $(shell which $(CC))),) + $(info # $(CC) not found; fall back to default gcc and binutils) + CROSS_COMPILE := riscv64-unknown-linux-gnu- +endif ## 5. Compilation Rules -BUILDDIR := $(DST_DIR) -COMMON_CFLAGS := $(CFLAGS) -g -O3 -MMD -Wall \ - -fno-asynchronous-unwind-tables -fno-builtin -fno-stack-protector \ - -U_FORTIFY_SOURCE -fvisibility=hidden -fno-exceptions -std=gnu11 -INTERFACE_LDFLAGS += -z noexecstack -INTERFACE_CFLAGS += -fno-asynchronous-unwind-tables \ - -fno-builtin -fno-stack-protector \ - -U_FORTIFY_SOURCE -fvisibility=hidden -fno-exceptions -### Build libam -#### Include archetecture specific build flags -COMMON_CFLAGS += -D__ARCH_$(shell echo $(ARCH) | tr a-z A-Z | tr - _) \ - -D__ISA_$(shell echo $(ISA) | tr a-z A-Z)__ \ - -DARCH_H=\"$(ARCH_H)\" -INTERFACE_CFLAGS += -DARCH_H=\"$(ARCH_H)\" +### Rule (compile): a single `.c` -> `.o` (gcc) +$(DST_DIR)/%.o: %.c + @mkdir -p $(dir $@) && echo + CC $< + @$(CC) -std=gnu11 $(CFLAGS) -c -o $@ $(realpath $<) -#### Generating build rules with ADD_LIBRARY call. Target specific build flags can be tuned via changing prefixed variables (AM_ here) -AM_INCPATH += $(AM_HOME)/am/include $(AM_HOME)/am/src $(AM_HOME)/klib/include -AM_CFLAGS += $(COMMON_CFLAGS) $(addprefix -I, $(AM_INCPATH)) -AM_INTERFACE_INCPATH += $(AM_HOME)/am/include $(AM_HOME)/klib/include -AM_INTERFACE_CFLAGS += - -AM_INTERFACE_LDFLAGS += -lam-$(ARCH) +### Rule (compile): a single `.cc` -> `.o` (g++) +$(DST_DIR)/%.o: %.cc + @mkdir -p $(dir $@) && echo + CXX $< + @$(CXX) -std=c++17 $(CXXFLAGS) -c -o $@ $(realpath $<) -$(eval $(call ADD_LIBRARY,$(LIB_BUILDDIR)/libam-$(ARCH).a,AM_)) +### Rule (compile): a single `.cpp` -> `.o` (g++) +$(DST_DIR)/%.o: %.cpp + @mkdir -p $(dir $@) && echo + CXX $< + @$(CXX) -std=c++17 $(CXXFLAGS) -c -o $@ $(realpath $<) -### Build klib +### Rule (compile): a single `.S` -> `.o` (gcc, which preprocesses and calls as) +$(DST_DIR)/%.o: %.S + @mkdir -p $(dir $@) && echo + AS $< + @$(AS) $(ASFLAGS) -c -o $@ $(realpath $<) -KLIB_SRCS := $(shell find klib/src/ -name "*.c") +### Rule (recursive make): build a dependent library (am, klib, ...) +$(LIBS): %: + @$(MAKE) -s -C $(AM_HOME)/$* archive -KLIB_INCPATH += $(AM_HOME)/am/include $(AM_HOME)/klib/include -KLIB_CFLAGS += $(COMMON_CFLAGS) $(addprefix -I, $(KLIB_INCPATH)) -KLIB_INTERFACE_INCPATH += $(AM_HOME)/am/include $(AM_HOME)/klib/include -KLIB_INTERFACE_CFLAGS += -KLIB_INTERFACE_LDFLAGS += -lklib-$(ARCH) +### Rule (link): objects (`*.o`) and libraries (`*.a`) -> `IMAGE.elf`, the final ELF binary to be packed into image (ld) +$(IMAGE).elf: $(OBJS) $(LIBS) + @echo + LD "->" $(IMAGE_REL).elf + @$(LD) $(LDFLAGS) -o $(IMAGE).elf --start-group $(LINKAGE) --end-group -$(eval $(call ADD_LIBRARY,$(LIB_BUILDDIR)/libklib-$(ARCH).a,KLIB_)) +### Rule (archive): objects (`*.o`) -> `ARCHIVE.a` (ar) +$(ARCHIVE): $(OBJS) + @echo + AR "->" $(shell realpath $@ --relative-to .) + @$(AR) rcs $(ARCHIVE) $(OBJS) -LIBS := am klib -libs: $(addsuffix -$(ARCH).a, $(addprefix $(LIB_BUILDDIR)/lib, $(ALL))) -$(LIBS): %: $(addsuffix -$(ARCH).a, $(addprefix $(LIB_BUILDDIR)/lib, %)) +### Rule (`#include` dependencies): paste in `.d` files generated by gcc on `-MMD` +-include $(addprefix $(DST_DIR)/, $(addsuffix .d, $(basename $(SRCS)))) -## 6. Install rules -INTERFACE_INCPATH += $(sort $(KLIB_INTERFACE_INCPATH) $(AM_INTERFACE_INCPATH)) -# TODO: Use sort here will cause error on seperated flags, such as: -e _start -# but without sort, duplicated flags will not be removed. -INTERFACE_CFLAGS += $(addprefix -I, $(INTERFACE_INCPATH:%=$(INC_INSTALLDIR))) $(sort $(KLIB_INTERFACE_CFLAGS) $(AM_INTERFACE_CFLAGS)) -INTERFACE_CXXFLAGS += $(INTERFACE_CFLAGS) $(addprefix -I, $(INTERFACE_INCPATH:%=$(INC_INSTALLDIR))) -INTERFACE_LDFLAGS += -L$(LIB_INSTALLDIR) $(sort $(KLIB_INTERFACE_LDFLAGS) $(AM_INTERFACE_LDFLAGS)) +## 6. Miscellaneous -EXPORT_FLAGS_FILE := $(LIB_INSTALLDIR)/make/flags-$(ARCH).mk -EXPORT_FLAGS_TEMPLATE := $(file < $(AM_HOME)/scripts/templates/flags.tmpl) -HELPERS := $(wildcard find scripts/helpers/*.mk) -EXPORT_HELPERS := $(HELPERS:scripts/helpers/%=$(LIB_INSTALLDIR)/make/%) - -EXPORTS := $(EXPORT_FLAGS_FILE) $(EXPORT_HELPERS) - -$(EXPORT_HELPERS): $(LIB_INSTALLDIR)/make/%: scripts/helpers/% - @echo + INSTALL $(patsubst $(INSTALLDIR)/%,%,$@) - @install -dm755 $(dir $@) - @install -Dm644 $< $(dir $@) - -export INTERFACE_CFLAGS INTERFACE_CXXFLAGS INTERFACE_ASFLAGS INTERFACE_INCPATH INTERFACE_LDFLAGS -$(EXPORT_FLAGS_FILE): - @echo + INSTALL $(patsubst $(INSTALLDIR)/%,%,$@) - @install -Dm644 <(printf $(EXPORT_FLAGS_TEMPLATE)) $(EXPORT_FLAGS_FILE) - -LDSCRIPTS := $(patsubst $(AM_HOME)/scripts/%, $(LIB_INSTALLDIR)/ldscripts/%, $(shell find $(AM_HOME)/scripts -name "*.ld")) - -$(LDSCRIPTS): $(LIB_INSTALLDIR)/ldscripts/%: $(AM_HOME)/scripts/% - @echo + INSTALL $(patsubst $(INSTALLDIR)/%,%,$@) - @mkdir -p $(LIB_INSTALLDIR)/ldscripts - @install -Dm644 $< $(dir $@) - -install-libs: $(LIBS) - @echo + INSTALL LIBS: $(LIBS) - @install -dm755 $(LIB_INSTALLDIR) - @install -Dm644 $(addsuffix -$(ARCH).a, $(addprefix $(LIB_BUILDDIR)/lib, $(LIBS))) $(LIB_INSTALLDIR) - -install-headers: HEADERS := $(shell find $(INTERFACE_INCPATH) -name '*.h') -install-headers: $(HEADERS) # Headers needs to be reinstalled if they are changed - @echo + INSTALL HEADERS: $(INTERFACE_INCPATH) - @install -dm755 $(INC_INSTALLDIR) - @cp -r $(addsuffix /*, $(INTERFACE_INCPATH)) $(INC_INSTALLDIR) - -install: $(EXPORTS) install-libs install-headers $(LDSCRIPTS) - -.PHONY: libs $(LIBS) install +### Build order control +image: image-dep +archive: $(ARCHIVE) +image-dep: $(OBJS) $(LIBS) + @echo \# Creating image [$(ARCH)] +.PHONY: image image-dep archive run $(LIBS) ### Clean a single project (remove `build/`) clean: diff --git a/am/src/platform/nemu/ioe/ioe.c b/am/src/platform/nemu/ioe/ioe.c index b0883a9..5970e20 100644 --- a/am/src/platform/nemu/ioe/ioe.c +++ b/am/src/platform/nemu/ioe/ioe.c @@ -59,4 +59,3 @@ bool ioe_init() { void ioe_read(int reg, void *buf) { ((handler_t)lut[reg])(buf); } void ioe_write(int reg, void *buf) { ((handler_t)lut[reg])(buf); } - diff --git a/am/src/platform/nemu/trm.c b/am/src/platform/nemu/trm.c index 9711edf..a46af4d 100644 --- a/am/src/platform/nemu/trm.c +++ b/am/src/platform/nemu/trm.c @@ -22,7 +22,6 @@ void halt(int code) { while (1); } - void _trm_init() { heap_alloc_ptr = heap.start; int ret = main(mainargs); diff --git a/am/src/riscv/nemu/start.S b/am/src/riscv/nemu/start.S index 3f9740f..3e56e5c 100644 --- a/am/src/riscv/nemu/start.S +++ b/am/src/riscv/nemu/start.S @@ -5,7 +5,4 @@ _start: mv s0, zero la sp, _stack_pointer - - lui t0, %hi(_trm_init) # Load upper 20 bits - addi t0, t0, %lo(_trm_init) # Add lower 12 bits - jalr ra, t0, 0 # Jump and link register + jal _trm_init diff --git a/klib/include/klib.h b/klib/include/klib.h index 2be1e1f..80103e1 100644 --- a/klib/include/klib.h +++ b/klib/include/klib.h @@ -24,7 +24,6 @@ char *strcpy(char *dst, const char *src); char *strncpy(char *dst, const char *src, size_t n); int strcmp(const char *s1, const char *s2); int strncmp(const char *s1, const char *s2, size_t n); -void *memchr(const void *src, int c, size_t n); //stdlib.h diff --git a/klib/src/stdlib.c b/klib/src/stdlib.c index ca372ef..e88eb69 100644 --- a/klib/src/stdlib.c +++ b/klib/src/stdlib.c @@ -54,31 +54,4 @@ void *malloc(size_t size) { void free(void *ptr) { } -#include -#include - -#define SS (sizeof(size_t)) -#define ALIGN (sizeof(size_t)-1) -#define ONES ((size_t)-1/UCHAR_MAX) -#define HIGHS (ONES * (UCHAR_MAX/2+1)) -#define HASZERO(x) ((x)-ONES & ~(x) & HIGHS) - -void *memchr(const void *src, int c, size_t n) -{ - const unsigned char *s = src; - c = (unsigned char)c; -#ifdef __GNUC__ - for (; ((uintptr_t)s & ALIGN) && n && *s != c; s++, n--); - if (n && *s != c) { - typedef size_t __attribute__((__may_alias__)) word; - const word *w; - size_t k = ONES * c; - for (w = (const void *)s; n>=SS && !HASZERO(*w^k); w++, n-=SS); - s = (const void *)w; - } -#endif - for (; n && *s != c; s++, n--); - return n ? (void *)s : 0; -} - #endif diff --git a/scripts/helpers/rules.mk b/scripts/helpers/rules.mk deleted file mode 100644 index df51bee..0000000 --- a/scripts/helpers/rules.mk +++ /dev/null @@ -1,64 +0,0 @@ - -# Usage: -# $(1): Target prefix -# -# Generate build rules for files in variable _SRCS. Use _CFLAGS, -# _CXXFLAGS, _ASFLAGS to control build flags. -# Object files will be put into $BUILDDIR -# E.g: -# $(eval $(call COMPILE_RULES,AM_)) -define COMPILE_RULES -$(1)OBJS += $$(addprefix $$(BUILDDIR)/, $$(addsuffix .o, $$($(1)SRCS))) -### Rule (compile): a single `.c` -> `.c.o` (gcc) -$$(filter %.c.o, $$($(1)OBJS)): $$(BUILDDIR)/%.c.o: %.c - @mkdir -p $$(dir $$@) && echo + CC $$< - @$$(CC) $$($(1)CFLAGS) -c -o $$@ $$(realpath $$<) - -### Rule (compile): a single `.cc` -> `.cc.o` (g++) -$$(filter %.cc.o, $$($(1)OBJS)): $$(BUILDDIR)/%.cc.o: %.cc - @mkdir -p $$(dir $$@) && echo + CXX $$< - @$$(CXX) $$($(1)CXXFLAGS) -c -o $$@ $$(realpath $$<) - -### Rule (compile): a single `.cpp` -> `.cpp.o` (g++) -$$(filter %.cpp.o, $$($(1)OBJS)): $$(BUILDDIR)/%.cpp.o: %.cpp - @mkdir -p $$(dir $$@) && echo + CXX $$< - @$$(CXX) $$($(1)CXXFLAGS) -c -o $$@ $$(realpath $$<) - -### Rule (compile): a single `.S` -> `.S.o` (gcc, which preprocesses and calls as) -$$(filter %.S.o, $$($(1)OBJS)): $$(BUILDDIR)/%.S.o: %.S - @mkdir -p $$(dir $$@) && echo + AS $$< - @$$(AS) $$($(1)ASFLAGS) -c -o $$@ $$(realpath $$<) - -### Rule (`#include` dependencies): paste in `.d` files generated by gcc on `-MMD` --include $$(addprefix $$(BUILDDIR)/, $$(addsuffix .d, $$(filter %.c %.cc, $$($(1)SRCS)))) -endef - -# Usage: -# $(1): Library build path -# $(2): Library variable prefix -# E.g: -# $(eval $(call ADD_LIBRARY,am-riscv,AM_)) -define ADD_LIBRARY -$(eval $(call COMPILE_RULES,$(2))) -$(1): $$($(2)OBJS) - @mkdir -p $$(dir $$@) - @echo + AR "->" $$(patsubst $$(CURDIR)/%,%,$(1)) - @$$(AR) rcs $$@ $$($(2)OBJS) -endef - -# Usage: -# $(1): Image build path -# $(2): Image variable prefix -# E.g: -# $(eval $(call ADD_IMAGE,dummy,DUMMY_)) -define ADD_IMAGE -$(eval $(call COMPILE_RULES,$(2))) -$(1).elf: $$($(2)OBJS) - @mkdir -p $$(dir $$@) - @echo + LD "->" $$(patsubst $$(CURDIR)/%,%,$(1).elf) - @$$(LD) -o $$@ $$(filter-out -l%,$$($(2)LDFLAGS)) --start-group $$($(2)OBJS) $$(filter -l%,$$($(2)LDFLAGS)) --end-group -$(1).bin: $(1).elf - @echo + OBJCOPY "->" $$(patsubst $$(CURDIR)/%,%,$(1).bin) - @$$(OBJCOPY) -S --set-section-flags .bss=alloc,contents -O binary $(1).elf $(1).bin -endef - diff --git a/scripts/isa/riscv.mk b/scripts/isa/riscv.mk index bfe8e1f..1315be9 100644 --- a/scripts/isa/riscv.mk +++ b/scripts/isa/riscv.mk @@ -1,9 +1,8 @@ -AM_CFLAGS += -static -fno-pic -mstrict-align -ffreestanding -AM_ASFLAGS += -static -fno-pic -O0 - -INTERFACE_CFLAGS += -static -mcmodel=medany -mstrict-align -ffreestanding -INTERFACE_ASFLAGS += -static -mcmodel=medany -INTERFACE_LDFLAGS += +CROSS_COMPILE := riscv64-linux-gnu- +COMMON_CFLAGS := -fno-pic -march=rv64g -mcmodel=medany -mstrict-align +CFLAGS += $(COMMON_CFLAGS) -static +ASFLAGS += $(COMMON_CFLAGS) -O0 +LDFLAGS += -melf64lriscv -O2 # overwrite ARCH_H defined in $(AM_HOME)/Makefile ARCH_H := arch/riscv.h diff --git a/scripts/platform/nemu.mk b/scripts/platform/nemu.mk index 0e95484..dd554bd 100644 --- a/scripts/platform/nemu.mk +++ b/scripts/platform/nemu.mk @@ -1,26 +1,28 @@ -AM_SRCS := am/src/platform/nemu/trm.c \ - am/src/platform/nemu/ioe/ioe.c \ - am/src/platform/nemu/ioe/timer.c \ - am/src/platform/nemu/ioe/input.c \ - am/src/platform/nemu/ioe/gpu.c \ - am/src/platform/nemu/ioe/audio.c \ - am/src/platform/nemu/ioe/disk.c \ - am/src/platform/nemu/mpe.c - -AM_PUBLIC_CFLAGS := -fdata-sections -ffunction-sections -AM_PUBLIC_LDFLAGS := --defsym=_pmem_start=0x80000000 --defsym=_entry_offset=0x0 \ - --gc-sections --entry=_start -AM_CFLAGS += $(AM_PUBLIC_CFLAGS) -DMAINARGS=\"$(mainargs)\" -AM_LDFLAGS += -T$(AM_HOME)/scripts/linker.ld $(AM_PUBLIC_LDFLAGS) -AM_INCPATH += $(AM_HOME)/am/src/platform/nemu/include - -AM_INTERFACE_CFLAGS += $(AM_PUBLIC_CFLAGS) -AM_INTERFACE_LDFLAGS += -T$(LIB_INSTALLDIR)/ldscripts/linker.ld $(AM_PUBLIC_LDFLAGS) -.PHONY: $(AM_HOME)/am/src/platform/nemu/trm.c +AM_SRCS := platform/nemu/trm.c \ + platform/nemu/ioe/ioe.c \ + platform/nemu/ioe/timer.c \ + platform/nemu/ioe/input.c \ + platform/nemu/ioe/gpu.c \ + platform/nemu/ioe/audio.c \ + platform/nemu/ioe/disk.c \ + platform/nemu/mpe.c +CFLAGS += -fdata-sections -ffunction-sections +LDFLAGS += -T $(AM_HOME)/scripts/linker.ld \ + --defsym=_pmem_start=0x80000000 --defsym=_entry_offset=0x0 +LDFLAGS += --gc-sections -e _start NEMUFLAGS += -b #-l $(shell dirname $(IMAGE).elf)/nemu-log.txt +CFLAGS += -DMAINARGS=\"$(mainargs)\" +CFLAGS += -I$(AM_HOME)/am/src/platform/nemu/include +.PHONY: $(AM_HOME)/am/src/platform/nemu/trm.c + +image: $(IMAGE).elf + @$(OBJDUMP) -d $(IMAGE).elf > $(IMAGE).txt + @echo + OBJCOPY "->" $(IMAGE_REL).bin + @$(OBJCOPY) -S --set-section-flags .bss=alloc,contents -O binary $(IMAGE).elf $(IMAGE).bin + run: image $(MAKE) -C $(NEMU_HOME) ISA=$(ISA) run ARGS="$(NEMUFLAGS)" IMG=$(IMAGE).bin diff --git a/scripts/riscv32-nemu.mk b/scripts/riscv32-nemu.mk index 73dc0b1..7b3a274 100644 --- a/scripts/riscv32-nemu.mk +++ b/scripts/riscv32-nemu.mk @@ -1,14 +1,10 @@ include $(AM_HOME)/scripts/isa/riscv.mk include $(AM_HOME)/scripts/platform/nemu.mk -AM_CFLAGS += -DISA_H=\"riscv/riscv.h\" -march=rv32im_zicsr -mabi=ilp32 -AM_ASFLAGS += -march=rv32im_zicsr -mabi=ilp32 -KLIB_CFLAGS += -march=rv32im_zicsr -mabi=ilp32 -AM_LDFLAGS += -melf32lriscv -INTERFACE_CFLAGS += -march=rv32im_zicsr -mabi=ilp32 -INTERFACE_CXXFLAGS += -march=rv32im_zicsr -mabi=ilp32 -INTERFACE_ASFLAGS += -march=rv32im_zicsr -mabi=ilp32 +CFLAGS += -DISA_H=\"riscv/riscv.h\" +COMMON_CFLAGS += -march=rv32im_zicsr -mabi=ilp32 # overwrite +LDFLAGS += -melf32lriscv # overwrite -AM_SRCS += am/src/riscv/nemu/start.S \ - am/src/riscv/nemu/cte.c \ - am/src/riscv/nemu/trap.S \ - am/src/riscv/nemu/vme.c +AM_SRCS += riscv/nemu/start.S \ + riscv/nemu/cte.c \ + riscv/nemu/trap.S \ + riscv/nemu/vme.c diff --git a/scripts/templates/flags.tmpl b/scripts/templates/flags.tmpl deleted file mode 100644 index df76341..0000000 --- a/scripts/templates/flags.tmpl +++ /dev/null @@ -1,10 +0,0 @@ -"AM_CFLAGS += %s \n\ -AM_CXXFLAGS += %s \n\ -AM_INCPATH += %s \n\ -AM_LDFLAGS += %s \n\ -AM_ASFLAGS += %s" \ -"$INTERFACE_CFLAGS" \ -"$INTERFACE_CXXFLAGS" \ -"$INTERFACE_INCPATH" \ -"$INTERFACE_LDFLAGS" \ -"$INTERFACE_ASFLAGS"