// Copyright 2017 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.

//go:build cgo

package main

import (
	"runtime"
	"testing"
)

func canInternalLink() bool {
	switch runtime.GOOS {
	case "aix":
		return false
	case "dragonfly":
		return false
	case "freebsd":
		switch runtime.GOARCH {
		case "arm64":
			return false
		}
	case "linux":
		switch runtime.GOARCH {
		case "arm64", "loong64", "mips64", "mips64le", "mips", "mipsle", "ppc64", "ppc64le", "riscv64":
			return false
		}
	case "openbsd":
		switch runtime.GOARCH {
		case "arm64", "mips64":
			return false
		}
	case "windows":
		switch runtime.GOARCH {
		case "arm64":
			return false
		}
	}
	return true
}

func TestInternalLinkerCgoExec(t *testing.T) {
	if !canInternalLink() {
		t.Skip("skipping; internal linking is not supported")
	}
	testGoExec(t, true, false)
}

func TestExternalLinkerCgoExec(t *testing.T) {
	testGoExec(t, true, true)
}

func TestCgoLib(t *testing.T) {
	testGoLib(t, true)
}
