From f250397c96dbfb7f3ea1c0a5ae1d9d1a82e1f4b2 Mon Sep 17 00:00:00 2001 From: Waldemar Brodkorb Date: Thu, 3 Dec 2015 11:46:03 +0100 Subject: toolchain: add newlib support OpenADK can now build bare-metal toolchains. Tested for ARM/MIPS. No runtime testing, yet. --- toolchain/Makefile | 4 +++ toolchain/gcc/Makefile | 8 +++++ toolchain/newlib/Makefile | 39 +++++++++++++++++++++++ toolchain/newlib/Makefile.inc | 18 +++++++++++ toolchain/newlib/patches/2.2.0/disable-docs.patch | 14 ++++++++ toolchain/newlib/patches/2.2.0/fix-tooldir.patch | 12 +++++++ 6 files changed, 95 insertions(+) create mode 100644 toolchain/newlib/Makefile create mode 100644 toolchain/newlib/Makefile.inc create mode 100644 toolchain/newlib/patches/2.2.0/disable-docs.patch create mode 100644 toolchain/newlib/patches/2.2.0/fix-tooldir.patch (limited to 'toolchain') diff --git a/toolchain/Makefile b/toolchain/Makefile index e81b2b073..088f563e3 100644 --- a/toolchain/Makefile +++ b/toolchain/Makefile @@ -26,6 +26,10 @@ ifeq ($(ADK_TARGET_LIB_MUSL),y) TARGETS+=musl CLIB:=musl endif +ifeq ($(ADK_TARGET_LIB_NEWLIB),y) +TARGETS+=newlib +CLIB:=newlib +endif ifeq ($(ADK_TARGET_BINFMT_FLAT),y) TARGETS+=elf2flt diff --git a/toolchain/gcc/Makefile b/toolchain/gcc/Makefile index 079ddd0e5..d5375751c 100644 --- a/toolchain/gcc/Makefile +++ b/toolchain/gcc/Makefile @@ -56,6 +56,10 @@ GCC_CONFOPTS:= --prefix=$(TOOLCHAIN_DIR)/usr \ --without-isl \ --disable-nls +ifeq ($(ADK_TARGET_LIB_NEWLIB),y) +GCC_FINAL_CONFOPTS:= --with-newlib +endif + ifeq ($(ADK_TARGET_WITH_NPTL),y) GCC_FINAL_CONFOPTS:= --enable-tls --enable-threads --enable-libatomic endif @@ -255,6 +259,10 @@ else PATH='$(TARGET_PATH)' \ $(MAKE) -C $(GCC_BUILD_DIR_INITIAL) install-gcc install-target-libgcc endif + # required for newlib + (cd $(TOOLCHAIN_DIR)/usr/bin && \ + ln -sf $(GNU_TARGET_NAME)-gcc $(GNU_TARGET_NAME)-cc \ + ) ifeq ($(ADK_TARGET_ARCH_M68K),y) # create gcc wrapper for uClinux/m68k echo "#!/bin/sh" > $(TOOLCHAIN_DIR)/usr/bin/adk-uclinux-gcc diff --git a/toolchain/newlib/Makefile b/toolchain/newlib/Makefile new file mode 100644 index 000000000..246927667 --- /dev/null +++ b/toolchain/newlib/Makefile @@ -0,0 +1,39 @@ +# This file is part of the OpenADK project. OpenADK is copyrighted +# material, please see the LICENCE file in the top-level directory. + +include $(ADK_TOPDIR)/rules.mk +include ../rules.mk +include Makefile.inc +include ${ADK_TOPDIR}/mk/buildhlp.mk + +$(WRKBUILD)/.configured: + (cd $(WRKBUILD); \ + CC='' \ + CFLAGS='' \ + LDFLAGS='' \ + have_doc='' \ + ./configure --prefix=/usr \ + --target=$(GNU_TARGET_NAME) \ + --enable-newlib-io-long-long \ + --enable-newlib-register-fini \ + --disable-newlib-supplied-syscalls \ + --disable-nls \ + ) + touch $@ + +$(WRKBUILD)/.compiled: + PATH='$(HOST_PATH)' $(MAKE) -C $(WRKBUILD) \ + CC='' \ + CFLAGS='$(TARGET_CFLAGS)' \ + all + touch $@ + +$(WRKBUILD)/.installed: $(WRKBUILD)/.compiled + PATH='$(HOST_PATH)' $(MAKE) -C $(WRKBUILD) \ + CC='' \ + CFLAGS='$(TARGET_CFLAGS)' \ + DESTDIR=$(STAGING_TARGET_DIR) \ + install + touch $@ + +include ${ADK_TOPDIR}/mk/toolchain.mk diff --git a/toolchain/newlib/Makefile.inc b/toolchain/newlib/Makefile.inc new file mode 100644 index 000000000..3809ccc98 --- /dev/null +++ b/toolchain/newlib/Makefile.inc @@ -0,0 +1,18 @@ +# This file is part of the OpenADK project. OpenADK is copyrighted +# material, please see the LICENCE file in the top-level directory. + +PKG_NAME:= newlib +ifeq ($(ADK_LIBC_VERSION),git) +PKG_VERSION:= git +PKG_RELEASE:= 1 +PKG_SITES:= git://sourceware.org/git/newlib-cygwin.git +DISTFILES:= ${PKG_NAME}-${PKG_VERSION}.tar.xz +endif +ifeq ($(ADK_TARGET_LIB_NEWLIB_2_2_0),y) +PKG_VERSION:= 2.2.0 +PKG_RELEASE:= 1 +PKG_HASH:= c1d53fd1765d955ac513aa6e2f576455ee7507072d400314495c8a8a26ebc8ec +PKG_SITES:= ftp://sourceware.org/pub/newlib/ +DISTFILES:= ${PKG_NAME}-${PKG_VERSION}-1.tar.gz +WRKDIST= $(WRKDIR)/${PKG_NAME}-${PKG_VERSION}-1 +endif diff --git a/toolchain/newlib/patches/2.2.0/disable-docs.patch b/toolchain/newlib/patches/2.2.0/disable-docs.patch new file mode 100644 index 000000000..3b500b61c --- /dev/null +++ b/toolchain/newlib/patches/2.2.0/disable-docs.patch @@ -0,0 +1,14 @@ +diff -Nur newlib-2.2.0-1.orig/etc/Makefile.in newlib-2.2.0-1/etc/Makefile.in +--- newlib-2.2.0-1.orig/etc/Makefile.in 2010-11-20 20:37:57.000000000 +0100 ++++ newlib-2.2.0-1/etc/Makefile.in 2015-12-03 14:23:44.043820971 +0100 +@@ -63,8 +63,8 @@ + PDFFILES = standards.pdf configure.pdf + HTMLFILES = standards.html configure.html + +-all: info +-install install-strip: install-info ++all: ++install install-strip: + + uninstall: + diff --git a/toolchain/newlib/patches/2.2.0/fix-tooldir.patch b/toolchain/newlib/patches/2.2.0/fix-tooldir.patch new file mode 100644 index 000000000..652f7494b --- /dev/null +++ b/toolchain/newlib/patches/2.2.0/fix-tooldir.patch @@ -0,0 +1,12 @@ +diff -Nur newlib-2.2.0-1.orig/configure newlib-2.2.0-1/configure +--- newlib-2.2.0-1.orig/configure 2014-07-05 23:09:07.000000000 +0200 ++++ newlib-2.2.0-1/configure 2015-11-25 06:33:11.461178398 +0100 +@@ -6985,7 +6985,7 @@ + + # Some systems (e.g., one of the i386-aix systems the gas testers are + # using) don't handle "\$" correctly, so don't use it here. +-tooldir='${exec_prefix}'/${target_noncanonical} ++tooldir='${exec_prefix}' + build_tooldir=${tooldir} + + # Create a .gdbinit file which runs the one in srcdir -- cgit v1.2.3