var exeSuffix string
var GOOS, GOARCH, GOROOT string
-var installdir, androiddir string
+var installdir string
var libgoname string
func TestMain(m *testing.M) {
log.Fatalf("Unable able to find GOROOT at '%s'", GOROOT)
}
- androiddir = fmt.Sprintf("/data/local/tmp/testcshared-%d", os.Getpid())
- if runtime.GOOS != GOOS && GOOS == "android" {
- args := append(adbCmd(), "exec-out", "mkdir", "-p", androiddir)
- cmd := exec.Command(args[0], args[1:]...)
- out, err := cmd.CombinedOutput()
- if err != nil {
- log.Fatalf("setupAndroid failed: %v\n%s\n", err, out)
- }
- defer cleanupAndroid()
- }
-
cc = []string{goEnv("CC")}
out := goEnv("GOGCCFLAGS")
return "./" + name + exeSuffix
}
-func adbCmd() []string {
- cmd := []string{"adb"}
- if flags := os.Getenv("GOANDROID_ADB_FLAGS"); flags != "" {
- cmd = append(cmd, strings.Split(flags, " ")...)
- }
- return cmd
-}
-
-func adbPush(t *testing.T, filename string) {
- if runtime.GOOS == GOOS || GOOS != "android" {
- return
- }
- args := append(adbCmd(), "push", filename, fmt.Sprintf("%s/%s", androiddir, filename))
- cmd := exec.Command(args[0], args[1:]...)
- if out, err := cmd.CombinedOutput(); err != nil {
- t.Fatalf("adb command failed: %v\n%s\n", err, out)
- }
-}
-
-func adbRun(t *testing.T, env []string, adbargs ...string) string {
- if GOOS != "android" {
- t.Fatalf("trying to run adb command when operating system is not android.")
- }
- args := append(adbCmd(), "exec-out")
- // Propagate LD_LIBRARY_PATH to the adb shell invocation.
- for _, e := range env {
- if strings.Contains(e, "LD_LIBRARY_PATH=") {
- adbargs = append([]string{e}, adbargs...)
- break
- }
- }
- shellcmd := fmt.Sprintf("cd %s; %s", androiddir, strings.Join(adbargs, " "))
- args = append(args, shellcmd)
- cmd := exec.Command(args[0], args[1:]...)
- out, err := cmd.CombinedOutput()
- if err != nil {
- t.Fatalf("adb command failed: %v\n%s\n", err, out)
- }
- return strings.Replace(string(out), "\r", "", -1)
-}
-
func run(t *testing.T, extraEnv []string, args ...string) string {
t.Helper()
cmd := exec.Command(args[0], args[1:]...)
func runExe(t *testing.T, extraEnv []string, args ...string) string {
t.Helper()
- if runtime.GOOS != GOOS && GOOS == "android" {
- return adbRun(t, append(os.Environ(), extraEnv...), args...)
- }
return run(t, extraEnv, args...)
}
}
}
- if runtime.GOOS != GOOS && GOOS == "android" {
- args = append(adbCmd(), "push", libgoname, fmt.Sprintf("%s/%s", androiddir, libgoname))
- cmd = exec.Command(args[0], args[1:]...)
- out, err = cmd.CombinedOutput()
- if err != nil {
- return fmt.Errorf("adb command failed: %v\n%s\n", err, out)
- }
- }
-
return nil
}
}
}
-func cleanupAndroid() {
- if GOOS != "android" {
- return
- }
- args := append(adbCmd(), "exec-out", "rm", "-rf", androiddir)
- cmd := exec.Command(args[0], args[1:]...)
- out, err := cmd.CombinedOutput()
- if err != nil {
- log.Panicf("cleanupAndroid failed: %v\n%s\n", err, out)
- }
-}
-
// test0: exported symbols in shared lib are accessible.
func TestExportedSymbols(t *testing.T) {
testenv.MustHaveCGO(t)
createHeadersOnce(t)
runCC(t, "-I", installdir, "-o", cmd, "main0.c", libgoname)
- adbPush(t, cmd)
defer os.Remove(bin)
} else {
runCC(t, "-o", cmd, "main1.c")
}
- adbPush(t, cmd)
defer os.Remove(bin)
"-installsuffix", "testcshared",
"-o", libname, "./libgo2",
)
- adbPush(t, libname)
linkFlags := "-Wl,--no-as-needed"
if GOOS == "darwin" || GOOS == "ios" {
}
runCC(t, "-o", cmd, "main2.c", linkFlags, libname)
- adbPush(t, cmd)
defer os.Remove(libname)
defer os.Remove(bin)
createHeadersOnce(t)
runCC(t, "-o", cmd, "main3.c", "-ldl")
- adbPush(t, cmd)
defer os.Remove(bin)
"-installsuffix", "testcshared",
"-o", libname, pkgname,
)
- adbPush(t, libname)
if GOOS != "freebsd" {
runCC(t, "-pthread", "-o", cmd, cfile, "-ldl")
} else {
runCC(t, "-pthread", "-o", cmd, cfile)
}
- adbPush(t, cmd)
bin := cmdToRun(cmd)