// 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", "riscv64":
			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)
}
