[Docker-maint] Bug#776401: Not as easy to achieve as I thought...
Hilko Bengen
bengen at debian.org
Wed Feb 18 22:05:56 UTC 2015
control: retitle -1 Enable CGO for MinGW platforms
After tinkering a bit, I realize that enabling CGO for all supported
architectures is not quite as easy as I initially thought. Sorry for the
noise.
What is possible today, though, is enabling CGO for GOOS=windows, using
the gcc-mingw-w64 compilers. With the patch below, the build system
attempts to build CGO support for every architecture. It fails
gracefully for architectures that cannot be built.
,----
| golang-1.3.3 $ find -name cgo.a
| ./debian/golang-go/usr/lib/go/pkg/windows_386/runtime/cgo.a
| ./debian/golang-go/usr/lib/go/pkg/windows_amd64/runtime/cgo.a
| ./debian/golang-go/usr/lib/go/pkg/linux_386/runtime/cgo.a
| ./debian/golang-go/usr/lib/go/pkg/netbsd_386/runtime/cgo.a
| ./debian/golang-go/usr/lib/go/pkg/darwin_386/runtime/cgo.a
| ./debian/golang-go/usr/lib/go/pkg/linux_amd64/runtime/cgo.a
| ./debian/golang-go/usr/lib/go/pkg/netbsd_amd64/runtime/cgo.a
| ./debian/golang-go/usr/lib/go/pkg/darwin_amd64/runtime/cgo.a
| ./debian/golang-go/usr/lib/go/pkg/linux_amd64_race/runtime/cgo.a
`----
The errors are:
,----
| *.arm: gcc: error: unrecognized command line option '-marm'
| freebsd-amd64: pkg/runtime/cgo/gcc_freebsd_amd64.c:6:27: fatal error: sys/signalvar.h: No such file or directory
| freebsd-i386: pkg/runtime/cgo/gcc_freebsd_386.c:6:27: fatal error: sys/signalvar.h: No such file or directory
`----
To be honest, I am a bit surprised that cgo.a files could be built for
netbsd and darwin. I did not bother to test whether the cgo support
works at all on those architectures -- CGO_ENABLED should not be set for
those as long as we don't have cross compiler support (which I doubt
will happen any time soon...)
However, I successfully built and tested Win32 and Win64 executables
that were linked against C library code built using the same
gcc-mingw-w64 compilers.
Cheers,
-Hilko
diff --git a/debian/control.base b/debian/control.base
index 99edc3b..c25ddba 100644
--- a/debian/control.base
+++ b/debian/control.base
@@ -7,7 +7,8 @@ Uploaders: Michael Stapelberg <stapelberg at debian.org>,
Tianon Gravi <admwiggin at gmail.com>
Vcs-Browser: http://anonscm.debian.org/gitweb/?p=pkg-golang/golang.git
Vcs-Git: git://anonscm.debian.org/pkg-golang/golang.git
-Build-Depends: debhelper (>= 7.4.10), bison, ed, mawk | awk, perl, netbase
+Build-Depends: debhelper (>= 7.4.10), bison, ed, mawk | awk, perl, netbase,
+ gcc-mingw-w64,
Build-Depends-Indep: po-debconf
Standards-Version: 3.9.3
Homepage: http://golang.org/
diff --git a/debian/rules b/debian/rules
index d73e90f..4a6b19a 100755
--- a/debian/rules
+++ b/debian/rules
@@ -116,6 +116,12 @@ debian/build.stamp:
-${FOR_GO_ARCH} \
export GOARCH=$$arch; \
export GOOS=$$os; \
+ export CGO_ENABLED=1; \
+ case "$$os-$$arch" in \
+ windows-386) export CC_FOR_TARGET=i686-w64-mingw32-gcc ;; \
+ windows-amd64) export CC_FOR_TARGET=x86_64-w64-mingw32-gcc ;; \
+ *) unset CC_FOR_TARGET ;; \
+ esac; \
cd src && bash ./make.bash --no-clean; \
[ "$$arch" = "amd64" ] && [ "$$os" = "linux" ] && $(GOBIN)/go install -race std; \
cd ..; \
More information about the Docker-maint
mailing list