Browse Source

when using OpenADK for toolchain building, a musl system have to use -static-libgcc

Waldemar Brodkorb 9 years ago
parent
commit
a81c14cdff
5 changed files with 39 additions and 9 deletions
  1. 2 2
      adk/config/Makefile
  2. 4 4
      mk/build.mk
  3. 2 2
      mk/vars.mk
  4. 30 0
      scripts/bulk-toolchain.sh
  5. 1 1
      scripts/scan-tools.sh

+ 2 - 2
adk/config/Makefile

@@ -6,11 +6,11 @@ include ${ADK_TOPDIR}/rules.mk
 endif
 
 CP=cp -fpR
-HOST_CFLAGS:=-DKBUILD_NO_NLS -O0 -g0 -w
+HOST_CFLAGS:=-DKBUILD_NO_NLS -O0 -g0 -w -static-libgcc
 
 all: ncurses conf mconf
 
-LIBS=		-lncurses
+LIBS=		-lncurses -ltinfo
 ifeq (/usr/include/ncurses/ncurses.h, $(wildcard /usr/include/ncurses/ncurses.h))
 HOST_CFLAGS+=	-I/usr/include/ncurses -DCURSES_LOC="<ncurses.h>"
 else

+ 4 - 4
mk/build.mk

@@ -305,7 +305,7 @@ ifeq ($(filter-out distclean,${MAKECMDGOALS}),)
 include ${ADK_TOPDIR}/mk/vars.mk
 else
 include $(ADK_TOPDIR)/prereq.mk
-export HOST_CC BASH MAKE LANGUAGE LC_ALL OStype PATH QEMU SHELL
+export HOST_CC HOST_CXX BASH MAKE LANGUAGE LC_ALL OStype PATH QEMU SHELL
 endif
 
 all: menuconfig
@@ -509,13 +509,13 @@ buildall:
 	$(GMAKE) VERBOSE=1 all 2>&1 | tee firmware/buildall.log
 
 $(ADK_TOPDIR)/adk/tools/pkgmaker: $(ADK_TOPDIR)/adk/tools/pkgmaker.c $(ADK_TOPDIR)/adk/tools/sortfile.c $(ADK_TOPDIR)/adk/tools/strmap.c
-	@$(HOST_CC) $(HOST_CFLAGS) -o $@ adk/tools/pkgmaker.c adk/tools/sortfile.c adk/tools/strmap.c
+	@$(HOST_CC) -O0 -g0 -static-libgcc -o $@ adk/tools/pkgmaker.c adk/tools/sortfile.c adk/tools/strmap.c
 
 $(ADK_TOPDIR)/adk/tools/pkgrebuild: $(ADK_TOPDIR)/adk/tools/pkgrebuild.c $(ADK_TOPDIR)/adk/tools/strmap.c
-	@$(HOST_CC) $(HOST_CFLAGS) -o $@ adk/tools/pkgrebuild.c adk/tools/strmap.c
+	@$(HOST_CC) -O0 -g0 -static-libgcc -o $@ adk/tools/pkgrebuild.c adk/tools/strmap.c
 
 $(ADK_TOPDIR)/adk/tools/depmaker: $(ADK_TOPDIR)/adk/tools/depmaker.c
-	@$(HOST_CC) $(HOST_CFLAGS) -o $@ $(ADK_TOPDIR)/adk/tools/depmaker.c
+	@$(HOST_CC) -O0 -g0 -static-libgcc -o $@ $(ADK_TOPDIR)/adk/tools/depmaker.c
 
 menu .menu: $(wildcard package/*/Makefile) $(wildcard target/*/systems) $(wildcard target/*/systems/*) $(ADK_TOPDIR)/adk/tools/pkgmaker $(ADK_TOPDIR)/adk/tools/pkgrebuild $(wildcard target/*/collections)
 	@echo "Generating menu structure ..."

+ 2 - 2
mk/vars.mk

@@ -185,8 +185,8 @@ endif
 
 # host compiler and linker flags
 HOST_CPPFLAGS:=		-I$(STAGING_HOST_DIR)/usr/include
-HOST_CFLAGS:=		-O0 -g0
-HOST_CXXFLAGS:=		-O0 -g0
+HOST_CFLAGS:=		-O0 -g0 -static-libgcc
+HOST_CXXFLAGS:=		-O0 -g0 -static-libgcc
 HOST_LDFLAGS:=		-L$(STAGING_HOST_DIR)/usr/lib -Wl,-rpath -Wl,${STAGING_HOST_DIR}/usr/lib
 
 PATCH=			PATH=${HOST_PATH} ${BASH} $(SCRIPT_DIR)/patch.sh

+ 30 - 0
scripts/bulk-toolchain.sh

@@ -0,0 +1,30 @@
+#!/bin/sh
+
+if [ ! -z $1 ];then
+	c=$1
+else
+	c="uclibc-ng glibc musl uclibc"
+fi
+
+for libc in $c; do
+	for arch in $(cat toolchain/$libc/arch.lst);do
+		echo "Cleaning old stuff"
+		make cleandir
+		echo "Building $libc for $arch"
+		DEFAULT="VERBOSE=1 ADK_TARGET_ARCH=$arch ADK_TARGET_SYSTEM=toolchain-$arch ADK_TARGET_LIBC=$libc"
+		case $arch in
+		mips|microblaze|sh)
+			for endian in little big;do
+				make $DEFAULT ADK_TARGET_ENDIAN=$endian defconfig all
+			done
+			;;
+		*)
+			make $DEFAULT defconfig all
+			;;
+		esac
+		if [ $? -ne 0 ];then
+			echo "build failed"
+			exit 1
+		fi
+	done
+done

+ 1 - 1
scripts/scan-tools.sh

@@ -82,7 +82,7 @@ include ${ADK_TOPDIR}/prereq.mk
 all: run-test
 
 test: test.c
-	${HOST_CC} -o $@ $^ ${LDADD}
+	${HOST_CC} -static-libgcc -o $@ $^ ${LDADD}
 
 run-test: test
 	./test