@ -1,9 +1,11 @@
XLEN ?= 32
XLEN ?= 32
CROSS = riscv$( XLEN) -unknown-elf-
CROSS = riscv$( XLEN) -unknown-elf-
CC = $( CROSS) gcc
CC = $( CROSS) gcc
CPP = $( CROSS) cpp
OBJCOPY = $( CROSS) objcopy
OBJCOPY = $( CROSS) objcopy
ARCH = $( CROSS) ar
ARCH = $( CROSS) ar
DEBUG ?= 0
DEBUG ?= 0
BASE_ADDRESS ?= 0x80000000
i f e q ( $( XLEN ) , 6 4 )
i f e q ( $( XLEN ) , 6 4 )
MARCH = rv64ima
MARCH = rv64ima
@ -33,7 +35,7 @@ CFLAGS = -march=$(MARCH) -mabi=$(MABI) -mcmodel=medany \
-fdata-sections \
-fdata-sections \
-fno-builtin-printf
-fno-builtin-printf
ASFLAGS = -march= $( MARCH) -mabi= $( MABI) -mcmodel= medany
ASFLAGS = -march= $( MARCH) -mabi= $( MABI) -mcmodel= medany
LDFLAGS = -nostartfiles -Tfake_rom.lds \
LDFLAGS = -nostartfiles \
-Xlinker --gc-sections \
-Xlinker --gc-sections \
-Xlinker --defsym= __stack_size = $( STACK_SIZE)
-Xlinker --defsym= __stack_size = $( STACK_SIZE)
@ -62,20 +64,25 @@ SRCS = main.c main_blinky.c riscv-virt.c htif.c \
ASMS = start.S \
ASMS = start.S \
$( RTOS_SOURCE_DIR) /portable/GCC/RISC-V/portASM.S
$( RTOS_SOURCE_DIR) /portable/GCC/RISC-V/portASM.S
OBJS = $( SRCS:%.c= $( BUILD_DIR) /%.o) $( ASMS:%.S= $( BUILD_DIR) /%.o)
OBJS = $( SRCS:%.c= $( BUILD_DIR) /%$( XLEN) .o) $( ASMS:%.S= $( BUILD_DIR) /%$( XLEN) .o)
DEPS = $( SRCS:%.c= $( BUILD_DIR) /%.d) $( ASMS:%.S= $( BUILD_DIR) /%.d)
DEPS = $( SRCS:%.c= $( BUILD_DIR) /%$( XLEN) .d) $( ASMS:%.S= $( BUILD_DIR) /%$( XLEN) .d)
$(BUILD_DIR)/RTOSDemo .axf: $( OBJS ) fake_rom .lds Makefile
$(BUILD_DIR)/RTOSDemo $(XLEN) .axf: $( OBJS ) $( BUILD_DIR ) /fake_rom $( BASE_ADDRESS ) .lds Makefile
$( CC) $( LDFLAGS) $( OBJS) -o $@
$( CC) $( LDFLAGS) $( OBJS) -T$( BUILD_DIR) /fake_rom$( BASE_ADDRESS) .lds - o $@
$(BUILD_DIR)/% .o: %.c Makefile
$(BUILD_DIR)/% $(XLEN) .o: %.c Makefile
@mkdir -p $( @D)
@mkdir -p $( @D)
$( CC) $( CPPFLAGS) $( CFLAGS) -MMD -MP -c $< -o $@
$( CC) $( CPPFLAGS) $( CFLAGS) -MMD -MP -c $< -o $@
$(BUILD_DIR)/% .o: %.S Makefile
$(BUILD_DIR)/% $(XLEN) .o: %.S Makefile
@mkdir -p $( @D)
@mkdir -p $( @D)
$( CC) $( CPPFLAGS) $( ASFLAGS) -MMD -MP -c $< -o $@
$( CC) $( CPPFLAGS) $( ASFLAGS) -MMD -MP -c $< -o $@
# Run lds through the C preprocessor, to replace BASE_ADDRESS with the actual
# value. It might be simpler to use sed instead.
$(BUILD_DIR)/%$(BASE_ADDRESS).lds : fake_rom .lds Makefile
$( CPP) $( CPPFLAGS) -DBASE_ADDRESS= $( BASE_ADDRESS) $< | grep -v '^#' > $@
clean :
clean :
rm -rf $( BUILD_DIR)
rm -rf $( BUILD_DIR)