diff options
| author | Srdjan Petrovic <spetrovic@google.com> | 2015-06-16 10:07:45 -0700 |
|---|---|---|
| committer | Ian Lance Taylor <iant@golang.org> | 2015-06-19 20:28:01 +0000 |
| commit | cc6554f750ccaf63bcdcc478b2a60d71ca76d342 (patch) | |
| tree | e8fef7b61482ba964a8ba3d4a3d659fcddf3dee0 /misc | |
| parent | dc89350fed5f75c277ceb1367cf7e8a2a88f0c77 (diff) | |
| download | go-cc6554f750ccaf63bcdcc478b2a60d71ca76d342.tar.xz | |
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 <spetrovic@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Diffstat (limited to 'misc')
| -rwxr-xr-x | misc/cgo/testcshared/test.bash | 29 |
1 files changed, 19 insertions, 10 deletions
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 |
