|
|
|
|
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:
|