Sorry I made mistakes in the original post. That patch didn't really
work. Below is the quick-and-dirty patch to make "CC=clang ./all.bash"
work correctly (gcc is used only internally in cgo when necessary). It
does the following things:
1) In makefiles, change the variable name for 6c/8c from CC to C9 (I
wanted to make 9C but failed ;-), and all $(CC) in makefiles now
means $(QUOTED_GOBIN)/quietgcc, the actual compiler called by quietgcc
is set by Make.bash by checking the environment varaible CC, that's
how "CC=clang ./all.bash" work.
2) In makefiles, change several direct mention of gcc to $(CC).
3) Changed src/cmd/cgo/gcc.go to make sure cgo excutes gcc instead of
quietgcc when necessary (for me it means when a quietgcc which calls
clang inside won't work).
I'm still not sure whether I should make this quick-and-dirty fix more
sophisticated and submit for code review, any suggestions?
diff -r 768afe3769a8 src/Make.386
--- a/src/Make.386 Tue Aug 17 20:01:50 2010 -0400
+++ b/src/Make.386 Wed Aug 18 12:14:21 2010 +0800
@@ -4,7 +4,7 @@
O=8
AS=${O}a
-CC=${O}c
+C9=${O}c
GC=${O}g
LD=${O}l
OS=568vq
diff -r 768afe3769a8 src/Make.amd64
--- a/src/Make.amd64 Tue Aug 17 20:01:50 2010 -0400
+++ b/src/Make.amd64 Wed Aug 18 12:14:21 2010 +0800
@@ -4,7 +4,7 @@
O=6
AS=${O}a
-CC=${O}c
+C9=${O}c
GC=${O}g
LD=${O}l
OS=568vq
diff -r 768afe3769a8 src/Make.arm
--- a/src/Make.arm Tue Aug 17 20:01:50 2010 -0400
+++ b/src/Make.arm Wed Aug 18 12:14:21 2010 +0800
@@ -4,7 +4,7 @@
O=5
AS=${O}a
-CC=${O}c
+C9=${O}c
GC=${O}g
LD=${O}l
OS=568vq
diff -r 768afe3769a8 src/Make.pkg
--- a/src/Make.pkg Tue Aug 17 20:01:50 2010 -0400
+++ b/src/Make.pkg Wed Aug 18 12:14:21 2010 +0800
@@ -117,11 +117,13 @@
%.cgo2.c: _cgo_defun.c _cgo_gotypes.go
@true
+CC=$(QUOTED_GOBIN)/quietgcc
+
%.cgo2.o: %.cgo2.c
- gcc $(_CGO_CFLAGS_$(GOARCH)) -fPIC -O2 -o $@ -c $(CGO_CFLAGS)
$*.cgo2.c
+ $(CC) $(_CGO_CFLAGS_$(GOARCH)) -fPIC -O2 -o $@ -c $(CGO_CFLAGS)
$*.cgo2.c
_cgo_export.o: _cgo_export.c _cgo_export.h
- gcc $(_CGO_CFLAGS_$(GOARCH)) -fPIC -O2 -o $@ -c $(CGO_CFLAGS)
_cgo_export.c
+ $(CC) $(_CGO_CFLAGS_$(GOARCH)) -fPIC -O2 -o $@ -c $(CGO_CFLAGS)
_cgo_export.c
# The rules above added x.cgo1.go and _cgo_gotypes.go to $(GOFILES),
# added _cgo_defun.$O to $OFILES, and added the installed copy of
@@ -142,10 +144,10 @@
# Compile _cgo_defun.c with 6c; needs access to the runtime headers.
_cgo_defun.$O: _cgo_defun.c
- $(QUOTED_GOBIN)/$(CC) $(CFLAGS) $(RUNTIME_CFLAGS) _cgo_defun.c
+ $(QUOTED_GOBIN)/$(C9) $(CFLAGS) $(RUNTIME_CFLAGS) _cgo_defun.c
_cgo_.so: $(GCC_OFILES) $(CGO_DEPS)
- gcc $(_CGO_CFLAGS_$(GOARCH)) -o $@ $(GCC_OFILES) $(CGO_LDFLAGS) $
(_CGO_LDFLAGS_$(GOOS))
+ $(CC) $(_CGO_CFLAGS_$(GOARCH)) -o $@ $(GCC_OFILES) $(CGO_LDFLAGS) $
(_CGO_LDFLAGS_$(GOOS))
$(pkgdir)/$(CGOTARG).so: _cgo_.so
@test -d $(QUOTED_GOROOT)/pkg && mkdir -p $(pkgdir)/$(dir)
@@ -155,7 +157,7 @@
# These come last so that the rules above can override them
# for more specific file names.
%.$O: %.c
- $(QUOTED_GOBIN)/$(CC) $(CFLAGS) $*.c
+ $(QUOTED_GOBIN)/$(C9) $(CFLAGS) $*.c
%.$O: %.s
$(QUOTED_GOBIN)/$(AS) $*.s
diff -r 768afe3769a8 src/cmd/cgo/gcc.go
--- a/src/cmd/cgo/gcc.go Tue Aug 17 20:01:50 2010 -0400
+++ b/src/cmd/cgo/gcc.go Wed Aug 18 12:14:21 2010 +0800
@@ -491,7 +491,9 @@
// returns the corresponding DWARF data and any messages
// printed to standard error.
func (p *Package) gccDebug(stdin []byte) *dwarf.Data {
- runGcc(stdin, concat(p.gccCmd(), p.GccOptions))
+ cmd := p.gccCmd()
+ cmd[0] = "gcc"
+ runGcc(stdin, concat(cmd, p.GccOptions))
// Try to parse f as ELF and Mach-O and hope one works.
var f interface {
@@ -526,7 +528,9 @@
// gcc to fail.
func (p *Package) gccErrors(stdin []byte) string {
// TODO(rsc): require failure
- args := concat(p.gccCmd(), p.GccOptions)
+ cmd := p.gccCmd()
+ cmd[0] = "gcc";
+ args := concat(cmd, p.GccOptions)
if *debugGcc {
fmt.Fprintf(os.Stderr, "$ %s <<EOF\n", strings.Join(args, " "))
os.Stderr.Write(stdin)
diff -r 768afe3769a8 src/pkg/runtime/Makefile
--- a/src/pkg/runtime/Makefile Tue Aug 17 20:01:50 2010 -0400
+++ b/src/pkg/runtime/Makefile Wed Aug 18 12:14:21 2010 +0800
@@ -136,13 +136,13 @@
mv -f $@.tmp $@
%.$O: $(GOARCH)/%.c
- $(QUOTED_GOBIN)/$(CC) $(CFLAGS) $<
+ $(QUOTED_GOBIN)/$(C9) $(CFLAGS) $<
%.$O: $(GOOS)/%.c
- $(QUOTED_GOBIN)/$(CC) $(CFLAGS) $<
+ $(QUOTED_GOBIN)/$(C9) $(CFLAGS) $<
%.$O: $(GOOS)/$(GOARCH)/%.c
- $(QUOTED_GOBIN)/$(CC) $(CFLAGS) $<
+ $(QUOTED_GOBIN)/$(C9) $(CFLAGS) $<
%.$O: $(GOARCH)/%.s $(GOARCH)/asm.h
$(QUOTED_GOBIN)/$(AS) $<
@@ -152,16 +152,16 @@
# for discovering offsets inside structs when debugging
runtime.acid.$(GOARCH): runtime.h proc.c
- $(QUOTED_GOBIN)/$(CC) $(CFLAGS) -a proc.c >$@
+ $(QUOTED_GOBIN)/$(C9) $(CFLAGS) -a proc.c >$@
# 386 traceback is really amd64 traceback
ifeq ($(GOARCH),386)
traceback.$O: amd64/traceback.c
- $(QUOTED_GOBIN)/$(CC) $(CFLAGS) $<
+ $(QUOTED_GOBIN)/$(C9) $(CFLAGS) $<
endif
# NaCl closure is special.
ifeq ($(GOOS),nacl)
closure.$O: nacl/$(GOARCH)/closure.c
- $(QUOTED_GOBIN)/$(CC) $(CFLAGS) $<
+ $(QUOTED_GOBIN)/$(C9) $(CFLAGS) $<
endif