summaryrefslogtreecommitdiff
path: root/src/Make.pkg
diff options
context:
space:
mode:
Diffstat (limited to 'src/Make.pkg')
-rw-r--r--src/Make.pkg58
1 files changed, 29 insertions, 29 deletions
diff --git a/src/Make.pkg b/src/Make.pkg
index ca0fa9ee2..3d616ca99 100644
--- a/src/Make.pkg
+++ b/src/Make.pkg
@@ -36,7 +36,7 @@ INSTALLFILES+=$(pkgdir)/$(TARG).a
# The rest of the cgo rules are below, but these variable updates
# must be done here so they apply to the main rules.
ifdef CGOFILES
-GOFILES+=$(patsubst %.go,%.cgo1.go,$(CGOFILES)) _cgo_gotypes.go
+GOFILES+=$(patsubst %.go,_obj/%.cgo1.go,$(CGOFILES)) _obj/_cgo_gotypes.go
CGO_OFILES+=$(patsubst %.go,%.cgo2.o,$(CGOFILES)) _cgo_export.o
OFILES+=_cgo_defun.$O _cgo_import.$O $(CGO_OFILES)
endif
@@ -47,21 +47,19 @@ coverage:
gotest
6cov -g $(shell pwd) $O.out | grep -v '_test\.go:'
-CLEANFILES+=*.cgo1.go *.cgo2.c _cgo_defun.c _cgo_gotypes.go _cgo_export.*
-CLEANFILES+=_cgo_.c _cgo_import.c _cgo_main.c _cgo_flags _cgo_run
-CLEANFILES+=*.so _obj _test _testmain.go *.exe
+CLEANFILES+=*.so _obj _test _testmain.go *.exe _cgo* *.cgo[12].*
test:
gotest
bench:
- gotest -benchmarks=. -match="Do not run tests"
+ gotest -test.bench=. -test.run="Do not run tests"
nuke: clean
rm -f $(pkgdir)/$(TARG).a
testpackage-clean:
- rm -f _test/$(TARG).a _gotest_.$O
+ rm -f _test/$(TARG).a
install: $(INSTALLFILES)
@@ -103,33 +101,34 @@ dir:
# x.go and y.go.
# Cgo translates each x.go file listed in $(CGOFILES) into a basic
-# translation of x.go, called x.cgo1.go. Additionally, three other
+# translation of x.go, called _obj/x.cgo1.go. Additionally, three other
# files are created:
#
-# _cgo_gotypes.go - declarations needed for all .go files in the package; imports "unsafe"
-# _cgo_defun.c - C trampoline code to be compiled with 6c and linked into the package
-# x.cgo2.c - C implementations compiled with gcc to create a dynamic library
+# _obj/_cgo_gotypes.go - declarations needed for all .go files in the package; imports "unsafe"
+# _obj/_cgo_defun.c - C trampoline code to be compiled with 6c and linked into the package
+# _obj/x.cgo2.c - C implementations compiled with gcc to create a dynamic library
#
ifdef CGOFILES
-_cgo_run: $(CGOFILES)
+_obj/_cgo_run: $(CGOFILES)
+ @mkdir -p _obj
CGOPKGPATH=$(dir) cgo -- $(CGO_CFLAGS) $(CGOFILES)
- touch _cgo_run
+ touch _obj/_cgo_run
# _CGO_CFLAGS and _CGO_LDFLAGS are defined via the evaluation of _cgo_flags.
# The include happens before the commands in the recipe run,
# so it cannot be done in the same recipe that runs cgo.
-_load_cgo_flags: _cgo_run
- $(eval include _cgo_flags)
+_obj/_load_cgo_flags: _obj/_cgo_run
+ $(eval include _obj/_cgo_flags)
# Include any previous flags in case cgo files are up to date.
--include _cgo_flags
+-include _obj/_cgo_flags
# Ugly but necessary - cgo writes these files too.
-_cgo_gotypes.go _cgo_export.c _cgo_export.h _cgo_main.c _cgo_defun.c: _load_cgo_flags
+_obj/_cgo_gotypes.go _obj/_cgo_export.c _obj/_cgo_export.h _obj/_cgo_main.c _obj/_cgo_defun.c: _obj/_load_cgo_flags
@true
-%.cgo1.go %.cgo2.c: _cgo_defun.c
+_obj/%.cgo1.go _obj/%.cgo2.c: _obj/_cgo_defun.c
@true
endif
@@ -137,6 +136,9 @@ endif
%.o: %.c
$(HOST_CC) $(_CGO_CFLAGS_$(GOARCH)) -g -fPIC -O2 -o $@ -c $(CGO_CFLAGS) $(_CGO_CFLAGS) $*.c
+%.o: _obj/%.c
+ $(HOST_CC) $(_CGO_CFLAGS_$(GOARCH)) -I . -g -fPIC -O2 -o $@ -c $(CGO_CFLAGS) $(_CGO_CFLAGS) $^
+
# To find out which symbols are needed from external libraries
# and which libraries are needed, we build a simple a.out that
# links all the objects we just created and then use cgo -dynimport
@@ -145,14 +147,12 @@ endif
# After main we have to define all the symbols that will be provided
# by Go code. That's crosscall2 and any exported symbols.
-_cgo_main.o: _cgo_main.c
- $(HOST_CC) $(_CGO_CFLAGS_$(GOARCH)) -g -fPIC -O2 -o $@ -c $(CGO_CFLAGS) $(_CGO_CFLAGS) _cgo_main.c
-
_cgo1_.o: _cgo_main.o $(CGO_OFILES)
$(HOST_CC) $(_CGO_CFLAGS_$(GOARCH)) -g -fPIC -O2 -o $@ $^ $(CGO_LDFLAGS) $(_CGO_LDFLAGS)
-_cgo_import.c: _cgo1_.o
- cgo -dynimport _cgo1_.o >_$@ && mv -f _$@ $@
+_obj/_cgo_import.c: _cgo1_.o
+ @mkdir -p _obj
+ cgo -dynimport _cgo1_.o >$@_ && mv -f $@_ $@
# 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
@@ -170,17 +170,17 @@ _CGO_LDFLAGS_windows=-shared -lm -mthreads
RUNTIME_CFLAGS=-I$(pkgdir)
# Compile _cgo_defun.c with 6c; needs access to the runtime headers.
-_cgo_defun.$O: _cgo_defun.c
- $(CC) $(CFLAGS) $(RUNTIME_CFLAGS) _cgo_defun.c
+_cgo_defun.$O: _obj/_cgo_defun.c
+ $(CC) $(CFLAGS) $(RUNTIME_CFLAGS) -I . -o "$@" _obj/_cgo_defun.c
# Generic build rules.
# These come last so that the rules above can override them
# for more specific file names.
-%.$O: %.c
- $(CC) $(CFLAGS) $*.c
+%.$O: %.c $(HFILES)
+ $(CC) $(CFLAGS) -o "$@" $*.c
+
+%.$O: _obj/%.c $(HFILES)
+ $(CC) $(CFLAGS) -I . -o "$@" _obj/$*.c
%.$O: %.s
$(AS) $*.s
-
-%.$O: $(HFILES)
-