1
0
mirror of https://github.com/golang/go synced 2024-11-14 18:00:25 -07:00
go/misc/cgo/testcshared/main0.c
Ian Lance Taylor e45aebd6dd cmd/go: install headers for c-archive/c-shared cgo exports
When
  using -buildmode=c-archive or c-shared, and
  when installing packages that use cgo, and
  when those packages export some functions via //export comments,
then
  for each such package, install a pkg.h header file that declares the
  functions.

This permits C code to #include the header when calling the Go
functions.

This is a little awkward to use when there are multiple packages that
export functions, as you have to "go install" your c-archive/c-shared
object and then pull it out of the package directory.  When compiling
your C code you have to -I pkg/$GOOS_$GOARCH.  I haven't thought of
any more convenient approach.  It's simpler when only the main package
has exported functions.

When using c-shared you currently have to use a _shared suffix in the
-I option; it would be nice to fix that somehow.

Change-Id: I5d8cf08914b7d3c2b194120c77791d2732ffd26e
Reviewed-on: https://go-review.googlesource.com/9798
Reviewed-by: David Crawshaw <crawshaw@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
2015-05-07 17:39:56 +00:00

37 lines
974 B
C

// Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
#include <stdint.h>
#include <stdio.h>
#include "p.h"
#include "libgo.h"
// Tests libgo.so to export the following functions.
// int8_t DidInitRun();
// int8_t DidMainRun();
// int32_t FromPkg();
int main(void) {
int8_t ran_init = DidInitRun();
if (!ran_init) {
fprintf(stderr, "ERROR: DidInitRun returned unexpected results: %d\n",
ran_init);
return 1;
}
int8_t ran_main = DidMainRun();
if (ran_main) {
fprintf(stderr, "ERROR: DidMainRun returned unexpected results: %d\n",
ran_main);
return 1;
}
int32_t from_pkg = FromPkg();
if (from_pkg != 1024) {
fprintf(stderr, "ERROR: FromPkg=%d, want %d\n", from_pkg, 1024);
return 1;
}
// test.bash looks for "PASS" to ensure this program has reached the end.
printf("PASS\n");
return 0;
}