GNU toolchain for RISC-V, including GCC
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

191 lines
5.0 KiB

INSTALL_DIR := @prefix@
srcdir := $(shell cd @top_srcdir@ && pwd)
PACKAGES := binutils gcc glibc newlib
gcc_version := 4.9.2
binutils_version := 2.25
glibc_version := 2.20
newlib_version := 1.18.0
GNU_MIRROR := http://mirrors.kernel.org/gnu
gcc_url := $(GNU_MIRROR)/gcc/gcc-$(gcc_version)/gcc-$(gcc_version).tar.gz
binutils_url := $(GNU_MIRROR)/binutils/binutils-$(binutils_version).tar.gz
glibc_url := $(GNU_MIRROR)/glibc/glibc-$(glibc_version).tar.gz
newlib_url := ftp://sourceware.org/pub/newlib/newlib-$(newlib_version).tar.gz
LINUX_DIR := $(srcdir)/linux-headers/
XLEN ?= 64
SYSROOT := $(INSTALL_DIR)/sysroot$(XLEN)
# Check that we have gawk installed. Set awk=gawk if necessary.
ifeq ($(shell awk --version | grep GNU),)
ifeq ($(shell gawk --version),)
$(error You must have gawk installed on your system!)
else
PATH := $(srcdir)/scripts/gawk:$(PATH)
endif
endif
# Check that we have gsed installed. Set sed=gsed if necessary.
ifeq ($(shell sed --version 2> /dev/null | grep GNU),)
ifeq ($(shell gsed --version),)
$(error You must have gsed installed on your system!)
else
PATH := $(srcdir)/scripts/gsed:$(PATH)
endif
endif
SHELL := /bin/bash
PATH := $(INSTALL_DIR)/bin:$(PATH)
export PATH := $(PATH)
all: @default_target@
newlib: build-gcc-newlib
linux: build-gcc-linux-stage2
$(addprefix src/original-,$(PACKAGES)):
mkdir -p src
rm -rf $@ $(subst original-,,$@)-*
cd src && curl $($(subst src/original-,,$@)_url) | tar zx
mv $(subst original-,,$@)-$($(subst src/original-,,$@)_version) $@
$(addprefix src/,$(PACKAGES)): src/%: src/original-%
rm -rf $@ $@.tmp
cp -r $< $@.tmp
$(srcdir)/scripts/cp_s $(srcdir)/$(shell basename $@) $@.tmp
cd $@.tmp && patch -p1 < $(srcdir)/patches/$(shell basename $@)
mv $@.tmp $@
.PHONY: patches $(addprefix $(srcdir)/patches/,$(PACKAGES))
$(addprefix $(srcdir)/patches/,$(PACKAGES)): $(srcdir)/patches/%: src/%
-cd src/$(shell basename $@) && rm `cd $(srcdir)/$(shell basename $@) && find . -type f`
-cd src && diff --exclude=manual --exclude=autom4te.cache -rupN original-$(shell basename $@) $(shell basename $@) | filterdiff --remove-timestamps > $@
$(srcdir)/scripts/cp_s $(srcdir)/$(shell basename $@) $<
patches: $(addprefix $(srcdir)/patches/,$(PACKAGES))
build-binutils-linux: src/binutils
rm -rf $@
mkdir $@
cd $@ && \
$(shell pwd)/$</configure \
--target=riscv$(XLEN)-unknown-linux-gnu \
--prefix=$(INSTALL_DIR) \
--with-sysroot=$(SYSROOT) \
--disable-multilib \
--disable-nls
$(MAKE) -C $@
$(MAKE) -C $@ install
build-glibc-linux: src/glibc build-gcc-linux-stage1
mkdir -p $(SYSROOT)/usr/lib $(SYSROOT)/lib $(SYSROOT)/usr/include
cp -r $(srcdir)/linux-headers/include/* $(SYSROOT)/usr/include
rm -rf $@
mkdir $@
cd $@ && CC= $(shell pwd)/$</configure \
--host=riscv$(XLEN)-unknown-linux-gnu \
--prefix=/usr \
libc_cv_forced_unwind=yes \
libc_cv_c_cleanup=yes \
--enable-shared \
--enable-__thread \
--disable-multilib \
--enable-kernel=2.6.32
$(MAKE) -C $@
$(MAKE) -C $@ install install_root=$(SYSROOT)
build-gcc-linux-stage1: src/gcc build-binutils-linux
rm -rf $@
mkdir $@
cd $@ && $(shell pwd)/$</configure \
--target=riscv$(XLEN)-unknown-linux-gnu \
--prefix=$(INSTALL_DIR) \
--with-sysroot=$(SYSROOT) \
--with-newlib \
--without-headers \
--disable-shared \
--disable-threads \
--enable-tls \
--enable-languages=c \
--disable-libatomic \
--disable-libmudflap \
--disable-libssp \
--disable-libquadmath \
--disable-libgomp \
--disable-nls \
--disable-multilib \
--disable-bootstrap
-$(MAKE) -C $@ inhibit-libc=true
$(MAKE) -C $@ install
build-gcc-linux-stage2: src/gcc build-glibc-linux
rm -rf $@
mkdir $@
cd $@ && $(shell pwd)/$</configure \
--target=riscv$(XLEN)-unknown-linux-gnu \
--prefix=$(INSTALL_DIR) \
--with-sysroot=$(SYSROOT) \
--enable-shared \
--enable-tls \
--enable-languages=c,c++,fortran \
--disable-libmudflap \
--disable-libssp \
--disable-libquadmath \
--disable-nls \
--disable-multilib \
--disable-bootstrap
$(MAKE) -C $@
$(MAKE) -C $@ install
build-binutils-newlib: src/binutils
rm -rf $@
mkdir $@
cd $@ && \
$(shell pwd)/$</configure \
--target=riscv$(XLEN)-unknown-elf \
--prefix=$(INSTALL_DIR) \
--enable-tls \
--disable-werror
$(MAKE) -C $@
$(MAKE) -C $@ install
src/newlib-gcc: src/gcc src/newlib
rm -rf $@ $@.tmp
cp -r src/gcc $@.tmp
cp -r src/newlib/newlib $@.tmp
cp -r src/newlib/libgloss $@.tmp
$(srcdir)/scripts/cp_s $(srcdir)/newlib $@.tmp
mv $@.tmp $@
build-gcc-newlib: src/newlib-gcc build-binutils-newlib
rm -rf $@
mkdir $@
cd $@ && $(shell pwd)/$</configure \
--target=riscv$(XLEN)-unknown-elf \
--prefix=$(INSTALL_DIR) \
--disable-shared \
--disable-threads \
--enable-tls \
--enable-languages=c,c++ \
--with-newlib \
--disable-libmudflap \
--disable-libssp \
--disable-libquadmath \
--disable-libgomp \
--disable-nls
$(MAKE) -C $@ inhibit-libc=true
$(MAKE) -C $@ install
clean:
rm -rf build-* $(addprefix src/,$(PACKAGES))
distclean:
rm -rf build-* src
# All of the packages install themselves, so our install target does nothing.
install: