diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fca526a70..7cb9115d2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -67,6 +67,14 @@ jobs: go build -v ./... go test -c -o /dev/null ./... >/dev/null + - name: Cross build wasm + env: + GOOS: js + GOARCH: wasm + run: | + go build -v ./... + go test -c -o /dev/null ./... >/dev/null + build-docs: name: Build Documentation runs-on: ubuntu-22.04 diff --git a/cmd/bpf2go/gen/target.go b/cmd/bpf2go/gen/target.go index 1e0247cb8..5e0b9544e 100644 --- a/cmd/bpf2go/gen/target.go +++ b/cmd/bpf2go/gen/target.go @@ -14,19 +14,20 @@ import ( var ErrInvalidTarget = errors.New("unsupported target") var targetsByGoArch = map[GoArch]Target{ - "386": {"bpfel", "x86"}, - "amd64": {"bpfel", "x86"}, - "arm": {"bpfel", "arm"}, - "arm64": {"bpfel", "arm64"}, - "loong64": {"bpfel", "loongarch"}, - "mips": {"bpfeb", "mips"}, - "mipsle": {"bpfel", ""}, - "mips64": {"bpfeb", ""}, - "mips64le": {"bpfel", ""}, - "ppc64": {"bpfeb", "powerpc"}, - "ppc64le": {"bpfel", "powerpc"}, - "riscv64": {"bpfel", "riscv"}, - "s390x": {"bpfeb", "s390"}, + "386": {"bpfel", "x86", ""}, + "amd64": {"bpfel", "x86", ""}, + "arm": {"bpfel", "arm", ""}, + "arm64": {"bpfel", "arm64", ""}, + "loong64": {"bpfel", "loongarch", ""}, + "mips": {"bpfeb", "mips", ""}, + "mipsle": {"bpfel", "", ""}, + "mips64": {"bpfeb", "", ""}, + "mips64le": {"bpfel", "", ""}, + "ppc64": {"bpfeb", "powerpc", ""}, + "ppc64le": {"bpfel", "powerpc", ""}, + "riscv64": {"bpfel", "riscv", ""}, + "s390x": {"bpfeb", "s390", ""}, + "wasm": {"bpfel", "", "js"}, } type Target struct { @@ -36,6 +37,8 @@ type Target struct { // Linux arch string, used to define __TARGET_ARCH_xzy macros used by // https://github.com/libbpf/libbpf/blob/master/src/bpf_tracing.h linux string + // GOOS override for use during tests. + goos string } // TargetsByGoArch returns all supported targets. @@ -118,7 +121,7 @@ func FindTarget(id string) (Target, GoArches, error) { } } slices.Sort(goarches) - return Target{id, ""}, goarches, nil + return Target{id, "", ""}, goarches, nil case "native": id = runtime.GOARCH diff --git a/cmd/bpf2go/gen/target_test.go b/cmd/bpf2go/gen/target_test.go index c0fe2ca8a..18085bd5b 100644 --- a/cmd/bpf2go/gen/target_test.go +++ b/cmd/bpf2go/gen/target_test.go @@ -43,32 +43,32 @@ func TestCollectTargets(t *testing.T) { }{ { "bpf", - Target{"bpf", ""}, + Target{"bpf", "", ""}, nil, }, { "bpfel", - Target{"bpfel", ""}, + Target{"bpfel", "", ""}, clangArches["bpfel"], }, { "bpfeb", - Target{"bpfeb", ""}, + Target{"bpfeb", "", ""}, clangArches["bpfeb"], }, { "amd64", - Target{"bpfel", "x86"}, + Target{"bpfel", "x86", ""}, linuxArchesLE["x86"], }, { "386", - Target{"bpfel", "x86"}, + Target{"bpfel", "x86", ""}, linuxArchesLE["x86"], }, { "ppc64", - Target{"bpfeb", "powerpc"}, + Target{"bpfeb", "powerpc", ""}, linuxArchesBE["powerpc"], }, { @@ -111,10 +111,14 @@ func TestCollectTargetsErrors(t *testing.T) { func TestGoarches(t *testing.T) { exe := goBin(t) - for GoArch := range targetsByGoArch { + for GoArch, tgt := range targetsByGoArch { t.Run(string(GoArch), func(t *testing.T) { + goOS := "linux" + if tgt.goos != "" { + goOS = tgt.goos + } goEnv := exec.Command(exe, "env") - goEnv.Env = []string{"GOROOT=/", "GOOS=linux", "GOARCH=" + string(GoArch)} + goEnv.Env = []string{"GOROOT=/", "GOOS=" + string(goOS), "GOARCH=" + string(GoArch)} output, err := goEnv.CombinedOutput() qt.Assert(t, qt.IsNil(err), qt.Commentf("go output is:\n%s", string(output))) }) diff --git a/cmd/bpf2go/test/test_bpfel.go b/cmd/bpf2go/test/test_bpfel.go index a990bccb2..169b88d5f 100644 --- a/cmd/bpf2go/test/test_bpfel.go +++ b/cmd/bpf2go/test/test_bpfel.go @@ -1,5 +1,5 @@ // Code generated by bpf2go; DO NOT EDIT. -//go:build (386 || amd64 || arm || arm64 || loong64 || mips64le || mipsle || ppc64le || riscv64) && linux +//go:build (386 || amd64 || arm || arm64 || loong64 || mips64le || mipsle || ppc64le || riscv64 || wasm) && linux package test diff --git a/docs/examples/getting_started/counter_bpfel.go b/docs/examples/getting_started/counter_bpfel.go index 28554227f..745d63920 100644 --- a/docs/examples/getting_started/counter_bpfel.go +++ b/docs/examples/getting_started/counter_bpfel.go @@ -1,5 +1,5 @@ // Code generated by bpf2go; DO NOT EDIT. -//go:build (386 || amd64 || arm || arm64 || loong64 || mips64le || mipsle || ppc64le || riscv64) && linux +//go:build (386 || amd64 || arm || arm64 || loong64 || mips64le || mipsle || ppc64le || riscv64 || wasm) && linux package main diff --git a/docs/examples/variables/variables_bpfel.go b/docs/examples/variables/variables_bpfel.go index f091b898d..469e6f7ba 100644 --- a/docs/examples/variables/variables_bpfel.go +++ b/docs/examples/variables/variables_bpfel.go @@ -1,5 +1,5 @@ // Code generated by bpf2go; DO NOT EDIT. -//go:build 386 || amd64 || arm || arm64 || loong64 || mips64le || mipsle || ppc64le || riscv64 +//go:build 386 || amd64 || arm || arm64 || loong64 || mips64le || mipsle || ppc64le || riscv64 || wasm package main diff --git a/examples/cgroup_skb/bpf_bpfel.go b/examples/cgroup_skb/bpf_bpfel.go index dc8969616..ace40f270 100644 --- a/examples/cgroup_skb/bpf_bpfel.go +++ b/examples/cgroup_skb/bpf_bpfel.go @@ -1,5 +1,5 @@ // Code generated by bpf2go; DO NOT EDIT. -//go:build (386 || amd64 || arm || arm64 || loong64 || mips64le || mipsle || ppc64le || riscv64) && linux +//go:build (386 || amd64 || arm || arm64 || loong64 || mips64le || mipsle || ppc64le || riscv64 || wasm) && linux package main diff --git a/examples/fentry/bpf_bpfel.go b/examples/fentry/bpf_bpfel.go index 8cd2a098d..96515ee92 100644 --- a/examples/fentry/bpf_bpfel.go +++ b/examples/fentry/bpf_bpfel.go @@ -1,5 +1,5 @@ // Code generated by bpf2go; DO NOT EDIT. -//go:build (386 || amd64 || arm || arm64 || loong64 || mips64le || mipsle || ppc64le || riscv64) && linux +//go:build (386 || amd64 || arm || arm64 || loong64 || mips64le || mipsle || ppc64le || riscv64 || wasm) && linux package main diff --git a/examples/kprobe/bpf_bpfel.go b/examples/kprobe/bpf_bpfel.go index b82cd7974..ec2bd068e 100644 --- a/examples/kprobe/bpf_bpfel.go +++ b/examples/kprobe/bpf_bpfel.go @@ -1,5 +1,5 @@ // Code generated by bpf2go; DO NOT EDIT. -//go:build (386 || amd64 || arm || arm64 || loong64 || mips64le || mipsle || ppc64le || riscv64) && linux +//go:build (386 || amd64 || arm || arm64 || loong64 || mips64le || mipsle || ppc64le || riscv64 || wasm) && linux package main diff --git a/examples/kprobe_percpu/bpf_bpfel.go b/examples/kprobe_percpu/bpf_bpfel.go index b82cd7974..ec2bd068e 100644 --- a/examples/kprobe_percpu/bpf_bpfel.go +++ b/examples/kprobe_percpu/bpf_bpfel.go @@ -1,5 +1,5 @@ // Code generated by bpf2go; DO NOT EDIT. -//go:build (386 || amd64 || arm || arm64 || loong64 || mips64le || mipsle || ppc64le || riscv64) && linux +//go:build (386 || amd64 || arm || arm64 || loong64 || mips64le || mipsle || ppc64le || riscv64 || wasm) && linux package main diff --git a/examples/kprobepin/bpf_bpfel.go b/examples/kprobepin/bpf_bpfel.go index b82cd7974..ec2bd068e 100644 --- a/examples/kprobepin/bpf_bpfel.go +++ b/examples/kprobepin/bpf_bpfel.go @@ -1,5 +1,5 @@ // Code generated by bpf2go; DO NOT EDIT. -//go:build (386 || amd64 || arm || arm64 || loong64 || mips64le || mipsle || ppc64le || riscv64) && linux +//go:build (386 || amd64 || arm || arm64 || loong64 || mips64le || mipsle || ppc64le || riscv64 || wasm) && linux package main diff --git a/examples/ringbuffer/bpf_bpfel.go b/examples/ringbuffer/bpf_bpfel.go index 3a0825c35..897a938eb 100644 --- a/examples/ringbuffer/bpf_bpfel.go +++ b/examples/ringbuffer/bpf_bpfel.go @@ -1,5 +1,5 @@ // Code generated by bpf2go; DO NOT EDIT. -//go:build (386 || amd64 || arm || arm64 || loong64 || mips64le || mipsle || ppc64le || riscv64) && linux +//go:build (386 || amd64 || arm || arm64 || loong64 || mips64le || mipsle || ppc64le || riscv64 || wasm) && linux package main diff --git a/examples/tcprtt/bpf_bpfel.go b/examples/tcprtt/bpf_bpfel.go index e40abf65f..2efbd26ca 100644 --- a/examples/tcprtt/bpf_bpfel.go +++ b/examples/tcprtt/bpf_bpfel.go @@ -1,5 +1,5 @@ // Code generated by bpf2go; DO NOT EDIT. -//go:build (386 || amd64 || arm || arm64 || loong64 || mips64le || mipsle || ppc64le || riscv64) && linux +//go:build (386 || amd64 || arm || arm64 || loong64 || mips64le || mipsle || ppc64le || riscv64 || wasm) && linux package main diff --git a/examples/tcprtt_sockops/bpf_bpfel.go b/examples/tcprtt_sockops/bpf_bpfel.go index c371fe554..dd04d6f3c 100644 --- a/examples/tcprtt_sockops/bpf_bpfel.go +++ b/examples/tcprtt_sockops/bpf_bpfel.go @@ -1,5 +1,5 @@ // Code generated by bpf2go; DO NOT EDIT. -//go:build (386 || amd64 || arm || arm64 || loong64 || mips64le || mipsle || ppc64le || riscv64) && linux +//go:build (386 || amd64 || arm || arm64 || loong64 || mips64le || mipsle || ppc64le || riscv64 || wasm) && linux package main diff --git a/examples/tcx/bpf_bpfel.go b/examples/tcx/bpf_bpfel.go index d23feed23..09261fb24 100644 --- a/examples/tcx/bpf_bpfel.go +++ b/examples/tcx/bpf_bpfel.go @@ -1,5 +1,5 @@ // Code generated by bpf2go; DO NOT EDIT. -//go:build (386 || amd64 || arm || arm64 || loong64 || mips64le || mipsle || ppc64le || riscv64) && linux +//go:build (386 || amd64 || arm || arm64 || loong64 || mips64le || mipsle || ppc64le || riscv64 || wasm) && linux package main diff --git a/examples/tracepoint_in_c/bpf_bpfel.go b/examples/tracepoint_in_c/bpf_bpfel.go index 691d541dc..b461b4d10 100644 --- a/examples/tracepoint_in_c/bpf_bpfel.go +++ b/examples/tracepoint_in_c/bpf_bpfel.go @@ -1,5 +1,5 @@ // Code generated by bpf2go; DO NOT EDIT. -//go:build (386 || amd64 || arm || arm64 || loong64 || mips64le || mipsle || ppc64le || riscv64) && linux +//go:build (386 || amd64 || arm || arm64 || loong64 || mips64le || mipsle || ppc64le || riscv64 || wasm) && linux package main diff --git a/examples/xdp/bpf_bpfel.go b/examples/xdp/bpf_bpfel.go index 45810c627..21bf4d3e0 100644 --- a/examples/xdp/bpf_bpfel.go +++ b/examples/xdp/bpf_bpfel.go @@ -1,5 +1,5 @@ // Code generated by bpf2go; DO NOT EDIT. -//go:build (386 || amd64 || arm || arm64 || loong64 || mips64le || mipsle || ppc64le || riscv64) && linux +//go:build (386 || amd64 || arm || arm64 || loong64 || mips64le || mipsle || ppc64le || riscv64 || wasm) && linux package main diff --git a/internal/endian_le.go b/internal/endian_le.go index 6dcd916d5..d833ea764 100644 --- a/internal/endian_le.go +++ b/internal/endian_le.go @@ -1,4 +1,4 @@ -//go:build 386 || amd64 || amd64p32 || arm || arm64 || loong64 || mipsle || mips64le || mips64p32le || ppc64le || riscv64 +//go:build 386 || amd64 || amd64p32 || arm || arm64 || loong64 || mipsle || mips64le || mips64p32le || ppc64le || riscv64 || wasm package internal