From cc6554f750ccaf63bcdcc478b2a60d71ca76d342 Mon Sep 17 00:00:00 2001 From: Srdjan Petrovic Date: Tue, 16 Jun 2015 10:07:45 -0700 Subject: cmd/link/internal/ld, cmd/go: -buildmode=c-shared support for darwin/amd64 All of the heavy-lifting was done by minux@, with his external-linking support for darwin/arm64: golang.org/cl/8781 Change-Id: I7c9fbc19246f418c065c92fb2c13c00026ff0f82 Reviewed-on: https://go-review.googlesource.com/11127 Run-TryBot: Srdjan Petrovic TryBot-Result: Gobot Gobot Reviewed-by: Ian Lance Taylor --- misc/cgo/testcshared/test.bash | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) (limited to 'misc') diff --git a/misc/cgo/testcshared/test.bash b/misc/cgo/testcshared/test.bash index 492d25e134..4d3cbccc74 100755 --- a/misc/cgo/testcshared/test.bash +++ b/misc/cgo/testcshared/test.bash @@ -20,7 +20,7 @@ goarch=$(go env GOARCH) # Directory where cgo headers and outputs will be installed. # The installation directory format varies depending on the platform. installdir=pkg/${goos}_${goarch}_testcshared_shared -if [ "${goos}/${goarch}" == "android/arm" ]; then +if [ "${goos}/${goarch}" == "android/arm" ] || [ "${goos}/${goarch}" == "darwin/amd64" ]; then installdir=pkg/${goos}_${goarch}_testcshared fi @@ -70,15 +70,20 @@ rm -rf pkg suffix="-installsuffix testcshared" +libext="so" +if [ "$goos" == "darwin" ]; then + libext="dylib" +fi + # Create the header files. GOPATH=$(pwd) go install -buildmode=c-shared $suffix libgo -GOPATH=$(pwd) go build -buildmode=c-shared $suffix -o libgo.so src/libgo/libgo.go -binpush libgo.so +GOPATH=$(pwd) go build -buildmode=c-shared $suffix -o libgo.$libext src/libgo/libgo.go +binpush libgo.$libext # test0: exported symbols in shared lib are accessible. # TODO(iant): using _shared here shouldn't really be necessary. -$(go env CC) $(go env GOGCCFLAGS) -I ${installdir} -o testp main0.c libgo.so +$(go env CC) $(go env GOGCCFLAGS) -I ${installdir} -o testp main0.c libgo.$libext binpush testp output=$(run LD_LIBRARY_PATH=. ./testp) @@ -87,19 +92,23 @@ if [ "$output" != "PASS" ]; then exit 1 fi -# test1: .so can be dynamically loaded and exported symbols are accessible. +# test1: shared library can be dynamically loaded and exported symbols are accessible. $(go env CC) $(go env GOGCCFLAGS) -o testp main1.c -ldl binpush testp -output=$(run ./testp ./libgo.so) +output=$(run ./testp ./libgo.$libext) if [ "$output" != "PASS" ]; then echo "FAIL test1 got ${output}" exit 1 fi -# test2: tests libgo2.so which does not export any functions. -GOPATH=$(pwd) go build -buildmode=c-shared $suffix -o libgo2.so src/libgo2/libgo2.go -binpush libgo2.so -$(go env CC) $(go env GOGCCFLAGS) -o testp2 main2.c -Wl,--no-as-needed libgo2.so +# test2: tests libgo2 which does not export any functions. +GOPATH=$(pwd) go build -buildmode=c-shared $suffix -o libgo2.$libext src/libgo2/libgo2.go +binpush libgo2.$libext +linkflags="-Wl,--no-as-needed" +if [ "$goos" == "darwin" ]; then + linkflags="" +fi +$(go env CC) $(go env GOGCCFLAGS) -o testp2 main2.c $linkflags libgo2.$libext binpush testp2 output=$(run LD_LIBRARY_PATH=. ./testp2) if [ "$output" != "PASS" ]; then -- cgit v1.3-5-g9baa