mirror of
https://github.com/lowRISC/ibex.git
synced 2025-04-24 22:07:43 -04:00
work in progress: llvm toolchain
This commit is contained in:
parent
d148a602e7
commit
9359f22b0b
7 changed files with 136 additions and 3 deletions
|
@ -49,6 +49,29 @@ $(GCC_INSTALL_DIR): vendor/riscv32-elf-gcc.url
|
|||
mv $(INSTALL_DIR)/riscv $(GCC_INSTALL_DIR)
|
||||
touch $(GCC_INSTALL_DIR)
|
||||
|
||||
|
||||
riscv32-llvm: $(LLVM_INSTALL_DIR)
|
||||
|
||||
vendor/riscv32-llvm.tar.gz:
|
||||
cd vendor && \
|
||||
wget https://buildbot.embecosm.com/job/riscv32-clang-ubuntu2004-release/24/artifact/riscv32-embecosm-ubuntu2004-clang16.0.2.tar.gz -O riscv32-llvm.tar.gz
|
||||
touch riscv32-llvm.tar.gz
|
||||
|
||||
$(LLVM_INSTALL_DIR): vendor/riscv32-llvm.tar.gz
|
||||
rm -fr $(LLVM_INSTALL_DIR)
|
||||
mkdir -p $(INSTALL_DIR)
|
||||
cd vendor && \
|
||||
tar -xzvf riscv32-llvm.tar.gz -C $(INSTALL_DIR)/ riscv32-embecosm-ubuntu2004-clang16.0.2
|
||||
mv $(INSTALL_DIR)/riscv32-embecosm-ubuntu2004-clang16.0.2 $(LLVM_INSTALL_DIR)
|
||||
touch $(LLVM_INSTALL_DIR)
|
||||
|
||||
riscv32-llvm-patch:
|
||||
@cd $(prj_path)/util/isolde && \
|
||||
tar -xzvf tools.tar.gz && \
|
||||
mv $(prj_path)/util/isolde/riscv32-unknown-elf-objcopy $(LLVM_INSTALL_DIR)/bin && \
|
||||
mv $(prj_path)/util/isolde/riscv32-unknown-elf-objdump $(LLVM_INSTALL_DIR)/bin && \
|
||||
echo "REPLACED riscv32-unknown-elf- objcopy/objdump"
|
||||
|
||||
dev-dep:
|
||||
sudo apt-get install libelf-dev
|
||||
sudo apt-get install srecord
|
||||
|
|
1
eth.sh
1
eth.sh
|
@ -18,6 +18,7 @@ export ROOT_DIR=$(git rev-parse --show-toplevel)
|
|||
export BENDER=~/eth/bin/bender
|
||||
export PULP_RISCV_GCC_TOOLCHAIN=$ROOT_DIR/install/riscv
|
||||
export GCC_TOOLCHAIN=$ROOT_DIR/install/riscv-gcc/bin
|
||||
export LLVM_TOOLCHAIN=$ROOT_DIR/install/riscv-llvm/bin
|
||||
export CC=gcc-10
|
||||
export CXX=g++-10
|
||||
|
||||
|
|
|
@ -23,6 +23,7 @@ clean-test:
|
|||
make -C $(dir $(test-program)) clean
|
||||
|
||||
run-test:
|
||||
@rm -f ibex_simple_system.log
|
||||
./$(BUILD_DIR)/sim-verilator/Vibex_simple_system -t --meminit=ram,$(test-program)
|
||||
@echo
|
||||
@echo ibex_simple_system.log
|
||||
|
|
102
isolde/sw/simple_system/common/common-llvm.mk
Normal file
102
isolde/sw/simple_system/common/common-llvm.mk
Normal file
|
@ -0,0 +1,102 @@
|
|||
# Copyright lowRISC contributors.
|
||||
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
COMMON_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
|
||||
|
||||
COMMON_SRCS = $(wildcard $(COMMON_DIR)/*.c)
|
||||
INCS := -I$(COMMON_DIR)
|
||||
|
||||
|
||||
TARGET := riscv32
|
||||
ARCH := rv32g
|
||||
RISCV_ABI := ilp32
|
||||
|
||||
RISCV_WARNINGS += -Wunused-variable -Wall -Wextra -Wno-unused-command-line-argument # -Werror
|
||||
|
||||
LLVM_FLAGS ?= --target=$(TARGET) -march=$(ARCH) -menable-experimental-extensions -mabi=$(RISCV_ABI) -mno-relax
|
||||
RISCV_FLAGS ?= $(LLVM_FLAGS) -mcmodel=medany -Os -ffast-math -g $(RISCV_WARNINGS)
|
||||
RISCV_CCFLAGS ?= $(RISCV_FLAGS) -ffunction-sections -fdata-sections -std=gnu99 -nostdlib -nostartfiles
|
||||
RISCV_CXXFLAGS ?= $(RISCV_FLAGS) -ffunction-sections -fdata-sections
|
||||
RISCV_LDFLAGS ?= -static -nostdlib
|
||||
|
||||
LINKER_SCRIPT ?= $(COMMON_DIR)/link.ld
|
||||
|
||||
CFLAGS ?= -march=$(ARCH) -mabi=ilp32 -static -mcmodel=medany -Wall -g -Os\
|
||||
-fvisibility=hidden -nostdlib -nostartfiles -ffreestanding $(PROGRAM_CFLAGS)
|
||||
|
||||
ifdef PROGRAM
|
||||
PROGRAM_C := $(PROGRAM).c
|
||||
endif
|
||||
|
||||
SRCS = $(COMMON_SRCS) $(PROGRAM_C) $(EXTRA_SRCS)
|
||||
|
||||
C_SRCS = $(filter %.c, $(SRCS))
|
||||
ASM_SRCS = $(filter %.S, $(SRCS))
|
||||
|
||||
CC := $(LLVM_TOOLCHAIN)/clang
|
||||
LD := $(LLVM_TOOLCHAIN)/ld.lld
|
||||
#LD := $(GCC_TOOLCHAIN)/riscv32-unknown-elf-gcc
|
||||
|
||||
|
||||
#OBJCOPY := $(LLVM_TOOLCHAIN)/llvm-objcopy
|
||||
OBJDUMP := $(GCC_TOOLCHAIN)/riscv32-unknown-elf-objdump
|
||||
#OBJDUMP := $(LLVM_TOOLCHAIN)/llvm-objdump
|
||||
|
||||
|
||||
CRT ?= $(COMMON_DIR)/crt0.S
|
||||
|
||||
|
||||
|
||||
|
||||
OBJS := ${C_SRCS:.c=.o} ${ASM_SRCS:.S=.o} ${CRT:.S=.o}
|
||||
DEPS = $(OBJS:%.o=%.d)
|
||||
|
||||
ifdef PROGRAM
|
||||
OUTFILES := $(PROGRAM).elf
|
||||
else
|
||||
OUTFILES := $(OBJS)
|
||||
endif
|
||||
|
||||
all: $(OUTFILES)
|
||||
|
||||
ifdef PROGRAM
|
||||
$(PROGRAM).elf: $(OBJS) $(LINKER_SCRIPT)
|
||||
# $(LD) $(CFLAGS) -T $(LINKER_SCRIPT) $(OBJS) -o $@ $(LIBS)
|
||||
$(LD) $(RISCV_LDFLAGS) -Map $@.map $(LINKER_SCRIPT) $(OBJS) -o $@ $(LIBS)
|
||||
$(OBJDUMP) -dh $@ >$@.headers
|
||||
|
||||
|
||||
.PHONY: disassemble
|
||||
disassemble: $(PROGRAM).dis
|
||||
endif
|
||||
|
||||
%.dis: %.elf
|
||||
$(OBJDUMP) -fhSD $^ > $@
|
||||
|
||||
# Note: this target requires the srecord package to be installed.
|
||||
# XXX: This could be replaced by objcopy once
|
||||
# https://sourceware.org/bugzilla/show_bug.cgi?id=19921
|
||||
# is widely available.
|
||||
%.vmem: %.bin
|
||||
srec_cat $^ -binary -offset 0x0000 -byte-swap 4 -o $@ -vmem
|
||||
|
||||
%.bin: %.elf
|
||||
$(OBJCOPY) -O binary $^ $@
|
||||
|
||||
%.o: %.c
|
||||
$(CC) -c $(RISCV_CCFLAGS) $(INCS) -o $@ $<
|
||||
# Rule to compile C to assembly
|
||||
%.s: %.c
|
||||
$(CC) -S $(RISCV_CCFLAGS) $(INCS) -o $@ $<
|
||||
|
||||
|
||||
%.o: %.S
|
||||
$(CC) -c $(RISCV_CCFLAGS) $(INCS) -o $@ $<
|
||||
|
||||
clean:
|
||||
$(RM) -f $(OBJS) $(DEPS)
|
||||
rm -f *.bin *.vmem *.elf *.headers
|
||||
|
||||
distclean: clean
|
||||
$(RM) -f $(OUTFILES)
|
|
@ -34,7 +34,7 @@ OBJS := ${C_SRCS:.c=.o} ${ASM_SRCS:.S=.o} ${CRT:.S=.o}
|
|||
DEPS = $(OBJS:%.o=%.d)
|
||||
|
||||
ifdef PROGRAM
|
||||
OUTFILES := $(PROGRAM).elf $(PROGRAM).vmem $(PROGRAM).bin
|
||||
OUTFILES := $(PROGRAM).elf
|
||||
else
|
||||
OUTFILES := $(OBJS)
|
||||
endif
|
||||
|
|
|
@ -11,4 +11,10 @@ PROGRAM_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
|
|||
# extension for assembly files
|
||||
EXTRA_SRCS :=
|
||||
|
||||
include ${PROGRAM_DIR}/../common/common.mk
|
||||
# Check the COMPILER variable passed via the command line
|
||||
ifeq ($(COMPILER), llvm)
|
||||
include $(PROGRAM_DIR)/../common/common-llvm.mk
|
||||
else
|
||||
include $(PROGRAM_DIR)/../common/common.mk
|
||||
endif
|
||||
|
||||
|
|
|
@ -138,7 +138,7 @@ void VerilatorSimCtrl::Run() {
|
|||
|
||||
|
||||
std::cout << std::endl
|
||||
<< "Simulation running, end by pressing CTRL-c." << std::endl;
|
||||
<< "Simulation running, end by pressing CTRL-z." << std::endl;
|
||||
|
||||
time_begin_ = std::chrono::steady_clock::now();
|
||||
DeassertReset();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue