@@ -187,6 +187,8 @@ else
endif
endif
+TARGET_CFLAGS_GO=$(TARGET_CFLAGS) -g1
+
export PATH:=$(TARGET_PATH)
export STAGING_DIR STAGING_DIR_HOST
export SH_FUNC:=. $(INCLUDE_DIR)/shell.sh;
@@ -214,6 +216,7 @@ endif
BUILD_KEY=$(TOPDIR)/key-build
TARGET_CC:=$(TARGET_CROSS)gcc
+TARGET_GOC:=$(TARGET_CROSS)gccgo
TARGET_CXX:=$(TARGET_CROSS)g++
KPATCH:=$(SCRIPT_DIR)/patch-kernel.sh
SED:=$(STAGING_DIR_HOST)/bin/sed -i -e
@@ -253,6 +256,7 @@ TARGET_CONFIGURE_OPTS = \
LD=$(TARGET_CROSS)ld \
NM="$(TARGET_NM)" \
CC="$(TARGET_CC)" \
+ GOC="$(TARGET_GOC)" \
GCC="$(TARGET_CC)" \
CXX="$(TARGET_CXX)" \
RANLIB="$(TARGET_RANLIB)" \
@@ -72,3 +72,12 @@ config INSTALL_GFORTRAN
default n
help
Build/install GNU fortran compiler ?
+
+config INSTALL_GOLANG
+ bool
+ prompt "Build/install golang compiler?" if TOOLCHAINOPTS
+ default n
+ depends on GCC_VERSION_5
+ help
+ Build/install GNU golang compiler ?
+
@@ -101,7 +101,7 @@ HOST_STAMP_CONFIGURED:=$(GCC_BUILD_DIR)/.configured
HOST_STAMP_INSTALLED:=$(STAGING_DIR_HOST)/stamp/.gcc_$(GCC_VARIANT)_installed
SEP:=,
-TARGET_LANGUAGES:="c,c++$(if $(CONFIG_INSTALL_LIBGCJ),$(SEP)java)$(if $(CONFIG_INSTALL_GFORTRAN),$(SEP)fortran)"
+TARGET_LANGUAGES:="c,c++$(if $(CONFIG_INSTALL_LIBGCJ),$(SEP)java)$(if $(CONFIG_INSTALL_GFORTRAN),$(SEP)fortran)$(if $(CONFIG_INSTALL_GOLANG),$(SEP)go)"
export libgcc_cv_fixed_point=no
ifdef CONFIG_USE_UCLIBC
@@ -124,6 +124,7 @@ GCC_CONFIGURE:= \
CFLAGS="-O2 -fbracket-depth=512 -pipe" \
CXXFLAGS="-O2 -fbracket-depth=512 -pipe" \
) \
+ $(if $(CONFIG_USE_MUSL),CONFIG_USE_MUSL="-DCONFIG_USE_MUSL") \
$(HOST_SOURCE_DIR)/configure \
--with-bugurl=$(BUGURL) \
--with-pkgversion="$(PKGVERSION)" \
@@ -199,7 +200,8 @@ GCC_MAKE:= \
$(MAKE) \
CFLAGS="$(HOST_CFLAGS)" \
CFLAGS_FOR_TARGET="$(TARGET_CFLAGS)" \
- CXXFLAGS_FOR_TARGET="$(TARGET_CFLAGS)"
+ CXXFLAGS_FOR_TARGET="$(TARGET_CFLAGS)" \
+ GOCFLAGS_FOR_TARGET="$(TARGET_CFLAGS) -O2 -g $(if $(CONFIG_USE_MUSL),-DCONFIG_USE_MUSL)"
define Host/Prepare
mkdir -p $(GCC_BUILD_DIR)
@@ -44,7 +44,7 @@ define Host/Compile
endef
define SetupExtraArch
- for app in $(TOOLCHAIN_DIR)/bin/$(OPTIMIZE_FOR_CPU)*-{gcc,gcc-*,g++}; do \
+ for app in $(TOOLCHAIN_DIR)/bin/$(OPTIMIZE_FOR_CPU)*-{gcc,gcc-*,g++,gccgo}; do \
[ -e $$$$app ] || continue; \
old_base=$$$$(basename $$$$app); \
new_base=$(call qstrip,$(CONFIG_EXTRA_TARGET_ARCH_NAME))-$$$${old_base##$(OPTIMIZE_FOR_CPU)-}; \
new file mode 100644
@@ -0,0 +1,39 @@
+Index: gcc-5.2.0/gcc/go/Make-lang.in
+===================================================================
+--- gcc-5.2.0.orig/gcc/go/Make-lang.in
++++ gcc-5.2.0/gcc/go/Make-lang.in
+@@ -74,7 +74,7 @@ go_OBJS = $(GO_OBJS) go/gospec.o
+
+ go1$(exeext): $(GO_OBJS) attribs.o $(BACKEND) $(LIBDEPS)
+ +$(LLINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \
+- $(GO_OBJS) attribs.o $(BACKEND) $(LIBS) $(BACKENDLIBS)
++ $(GO_OBJS) attribs.o $(BACKEND) $(LIBS) $(BACKENDLIBS) -lm
+
+ # Documentation.
+
+Index: gcc-5.2.0/gcc/java/Make-lang.in
+===================================================================
+--- gcc-5.2.0.orig/gcc/java/Make-lang.in
++++ gcc-5.2.0/gcc/java/Make-lang.in
+@@ -96,7 +96,7 @@ java/jvspec.o-warn = -Wno-error
+ jc1$(exeext): $(JAVA_OBJS) $(BACKEND) $(LIBDEPS) attribs.o
+ rm -f $@
+ +$(LLINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \
+- $(JAVA_OBJS) $(BACKEND) $(ZLIB) $(LIBICONV) $(LIBS) attribs.o $(BACKENDLIBS)
++ $(JAVA_OBJS) $(BACKEND) $(ZLIB) $(LIBICONV) $(LIBS) attribs.o $(BACKENDLIBS) -lm
+
+ jcf-dump$(exeext): $(JCFDUMP_OBJS) $(LIBDEPS)
+ rm -f $@
+Index: gcc-5.2.0/gcc/fortran/Make-lang.in
+===================================================================
+--- gcc-5.2.0.orig/gcc/fortran/Make-lang.in
++++ gcc-5.2.0/gcc/fortran/Make-lang.in
+@@ -96,7 +96,7 @@ f951$(exeext): $(F95_OBJS) \
+ $(BACKEND) $(LIBDEPS) attribs.o
+ +$(LLINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ \
+ $(F95_OBJS) $(BACKEND) $(ZLIB) $(LIBS) attribs.o \
+- $(BACKENDLIBS)
++ $(BACKENDLIBS) -lm
+
+ gt-fortran-trans.h : s-gtype; @true
+ #
new file mode 100644
@@ -0,0 +1,13 @@
+Index: gcc-5.2.0/libgo/runtime/mprof.goc
+===================================================================
+--- gcc-5.2.0.orig/libgo/runtime/mprof.goc
++++ gcc-5.2.0/libgo/runtime/mprof.goc
+@@ -403,7 +403,7 @@ func ThreadCreateProfile(p Slice) (n int
+
+ func Stack(b Slice, all bool) (n int) {
+ byte *pc, *sp;
+- bool enablegc;
++ bool enablegc = false;
+
+ sp = runtime_getcallersp(&b);
+ pc = (byte*)(uintptr)runtime_getcallerpc(&b);
new file mode 100644
@@ -0,0 +1,119 @@
+Index: gcc-5.2.0/libgo/mksysinfo.sh
+===================================================================
+--- gcc-5.2.0.orig/libgo/mksysinfo.sh
++++ gcc-5.2.0/libgo/mksysinfo.sh
+@@ -166,6 +166,13 @@ cat > sysinfo.c <<EOF
+ #if defined(HAVE_SCHED_H)
+ #include <sched.h>
+ #endif
++#if defined(CONFIG_USE_MUSL)
++#include <sys/glibc-types.h>
++#undef off64_t
++#undef loff_t
++typedef off_t loff_t;
++typedef off_t off64_t;
++#endif
+
+ /* Constants that may only be defined as expressions on some systems,
+ expressions too complex for -fdump-go-spec to handle. These are
+Index: gcc-5.2.0/configure
+===================================================================
+--- gcc-5.2.0.orig/configure
++++ gcc-5.2.0/configure
+@@ -641,6 +641,7 @@ BUILD_CONFIG
+ LDFLAGS_FOR_TARGET
+ CXXFLAGS_FOR_TARGET
+ CFLAGS_FOR_TARGET
++CONFIG_USE_MUSL
+ DEBUG_PREFIX_CFLAGS_FOR_TARGET
+ SYSROOT_CFLAGS_FOR_TARGET
+ extra_host_libiberty_configure_flags
+Index: gcc-5.2.0/configure.ac
+===================================================================
+--- gcc-5.2.0.orig/configure.ac
++++ gcc-5.2.0/configure.ac
+@@ -2359,6 +2359,7 @@ if test "x$CFLAGS_FOR_TARGET" = x; then
+ fi
+ fi
+ AC_SUBST(CFLAGS_FOR_TARGET)
++AC_SUBST(CONFIG_USE_MUSL)
+
+ if test "x$CXXFLAGS_FOR_TARGET" = x; then
+ if test "x${is_cross_compiler}" = xyes; then
+Index: gcc-5.2.0/libgo/Makefile.in
+===================================================================
+--- gcc-5.2.0.orig/libgo/Makefile.in
++++ gcc-5.2.0/libgo/Makefile.in
+@@ -4510,7 +4510,7 @@ s-syscall_arch: Makefile
+
+ sysinfo.go: s-sysinfo; @true
+ s-sysinfo: $(srcdir)/mksysinfo.sh config.h
+- CC="$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(OSCFLAGS) -O" $(SHELL) $(srcdir)/mksysinfo.sh
++ CC="$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(OSCFLAGS) $(CONFIG_USE_MUSL) -O" $(SHELL) $(srcdir)/mksysinfo.sh
+ $(SHELL) $(srcdir)/mvifdiff.sh tmp-sysinfo.go sysinfo.go
+ $(STAMP) $@
+
+Index: gcc-5.2.0/Makefile.in
+===================================================================
+--- gcc-5.2.0.orig/Makefile.in
++++ gcc-5.2.0/Makefile.in
+@@ -353,6 +353,7 @@ NM_FOR_BUILD = @NM_FOR_BUILD@
+ RANLIB_FOR_BUILD = @RANLIB_FOR_BUILD@
+ WINDMC_FOR_BUILD = @WINDMC_FOR_BUILD@
+ WINDRES_FOR_BUILD = @WINDRES_FOR_BUILD@
++CONFIG_USE_MUSL = @CONFIG_USE_MUSL@
+
+ # Special variables passed down in EXTRA_GCC_FLAGS. They are defined
+ # here so that they can be overridden by Makefile fragments.
+@@ -412,6 +413,9 @@ CXXFLAGS = @CXXFLAGS@
+ LIBCXXFLAGS = $(CXXFLAGS) -fno-implicit-templates
+ GOCFLAGS = $(CFLAGS)
+
++MODULE_FLAGS-target-libgo = \
++ CONFIG_USE_MUSL="$(CONFIG_USE_MUSL)"
++
+ TFLAGS =
+
+ # Defaults for all stages; some are overridden below.
+@@ -40930,8 +40934,8 @@ all-target-libgo: configure-target-libgo
+ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
+ $(NORMAL_TARGET_EXPORTS) \
+ (cd $(TARGET_SUBDIR)/libgo && \
+- $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) \
+- $(TARGET-target-libgo))
++ $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) \
++ $(MODULE_FLAGS-target-libgo) $(TARGET-target-libgo))
+ @endif target-libgo
+
+
+Index: gcc-5.2.0/Makefile.tpl
+===================================================================
+--- gcc-5.2.0.orig/Makefile.tpl
++++ gcc-5.2.0/Makefile.tpl
+@@ -356,6 +356,7 @@ NM_FOR_BUILD = @NM_FOR_BUILD@
+ RANLIB_FOR_BUILD = @RANLIB_FOR_BUILD@
+ WINDMC_FOR_BUILD = @WINDMC_FOR_BUILD@
+ WINDRES_FOR_BUILD = @WINDRES_FOR_BUILD@
++CONFIG_USE_MUSL = @CONFIG_USE_MUSL@
+
+ # Special variables passed down in EXTRA_GCC_FLAGS. They are defined
+ # here so that they can be overridden by Makefile fragments.
+@@ -415,6 +416,9 @@ CXXFLAGS = @CXXFLAGS@
+ LIBCXXFLAGS = $(CXXFLAGS) -fno-implicit-templates
+ GOCFLAGS = $(CFLAGS)
+
++MODULE_FLAGS-target-libgo = \
++ CONFIG_USE_MUSL="$(CONFIG_USE_MUSL)"
++
+ TFLAGS =
+
+ # Defaults for all stages; some are overridden below.
+@@ -1104,7 +1108,7 @@ all-[+prefix+][+module+]: configure-[+pr
+ [+exports+] [+extra_exports+] \
+ (cd [+subdir+]/[+module+] && \
+ $(MAKE) $(BASE_FLAGS_TO_PASS) [+args+] [+stage1_args+] [+extra_make_flags+] \
+- $(TARGET-[+prefix+][+module+]))
++ $(MODULE_FLAGS-[+prefix+][+module+]) $(TARGET-[+prefix+][+module+]))
+ @endif [+prefix+][+module+]
+
+ [+ IF bootstrap +]
new file mode 100644
@@ -0,0 +1,26 @@
+Index: gcc-5.2.0/configure
+===================================================================
+--- gcc-5.2.0.orig/configure
++++ gcc-5.2.0/configure
+@@ -2836,7 +2836,7 @@ Use a pristine source tree when building
+ fi
+
+ # Skipdirs are removed silently.
+-skipdirs=
++skipdirs=gotools
+ # Noconfigdirs are removed loudly.
+ noconfigdirs=""
+
+Index: gcc-5.2.0/configure.ac
+===================================================================
+--- gcc-5.2.0.orig/configure.ac
++++ gcc-5.2.0/configure.ac
+@@ -226,7 +226,7 @@ Use a pristine source tree when building
+ fi
+
+ # Skipdirs are removed silently.
+-skipdirs=
++skipdirs=gotools
+ # Noconfigdirs are removed loudly.
+ noconfigdirs=""
+