diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..ddd5a98 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,74 @@ +name: build + +on: + push: + branches: "*" + +jobs: + build: + strategy: + matrix: + include: + # - target: aarch64-linux-musl + # goarch: arm64 + # goos: linux + # - target: armv7-linux-musleabihf + # goarch: arm + # goos: linux + - target: x86_64-linux-musl + goarch: amd64 + goos: linux + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + submodules: true + - uses: actions/setup-go@v4 + with: + go-version: "1.17.13" + - run: | + patch -d go -p1 < go-runtime.patch + (cd go/src && ./make.bash) + - run: | + cp -r go /opt/ + echo "PATH=/opt/go/bin:$PATH" >> $GITHUB_ENV + - run: | + which go + go version + make -C libkflow + env: + GOARCH: ${{ matrix.goarch }} + GOOS: ${{ matrix.goos }} + GOFLAGS: -mod=vendor + + # - uses: actions/upload-artifact@v3 + # with: + # name: libpcap-${{ matrix.target }}.a + # path: libpcap/libpcap-${{ matrix.target }}.a + + # publish: + # runs-on: ubuntu-latest + # steps: + # - uses: actions/download-artifact@v3 + # with: + # path: artifacts + # - uses: actions/github-script@v6 + # with: + # script: | + # const version = context.sha.substring(0, 8); + + # github.rest.git.createRef({ + # owner: context.repo.owner, + # repo: context.repo.repo, + # ref: `refs/tags/${version}`, + # sha: context.sha + # }); + + # core.setOutput('version', version); + # id: create-tag + # - uses: softprops/action-gh-release@v1 + # with: + # tag_name: ${{ steps.create-tag.outputs.version }} + # files: artifacts/**/* + # needs: build diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..2ec4cff --- /dev/null +++ b/.gitmodules @@ -0,0 +1,6 @@ +[submodule "go"] + path = go + url = https://github.com/golang/go +[submodule "libkflow"] + path = libkflow + url = https://github.com/kentik/libkflow diff --git a/go b/go new file mode 160000 index 0000000..7dd10d4 --- /dev/null +++ b/go @@ -0,0 +1 @@ +Subproject commit 7dd10d4ce20e64d96a10cb67794851a58d96a2aa diff --git a/go-runtime.patch b/go-runtime.patch new file mode 100644 index 0000000..1311308 --- /dev/null +++ b/go-runtime.patch @@ -0,0 +1,35 @@ +diff --git a/src/runtime/os_linux.go b/src/runtime/os_linux.go +index a04c995c00..f8017a2983 100644 +--- a/src/runtime/os_linux.go ++++ b/src/runtime/os_linux.go +@@ -212,7 +212,7 @@ func sysargs(argc int32, argv **byte) { + + // now argv+n is auxv + auxv := (*[1 << 28]uintptr)(add(unsafe.Pointer(argv), uintptr(n)*sys.PtrSize)) +- if sysauxv(auxv[:]) != 0 { ++ if argv != nil && sysauxv(auxv[:]) != 0 { + return + } + // In some situations we don't get a loader-provided +diff --git a/src/runtime/runtime1.go b/src/runtime/runtime1.go +index a0769bbb67..ae481808c5 100644 +--- a/src/runtime/runtime1.go ++++ b/src/runtime/runtime1.go +@@ -54,10 +54,17 @@ var ( + // nosplit for use in linux startup sysargs + //go:nosplit + func argv_index(argv **byte, i int32) *byte { ++ if argv == nil { ++ return nil ++ } + return *(**byte)(add(unsafe.Pointer(argv), uintptr(i)*sys.PtrSize)) + } + + func args(c int32, v **byte) { ++ if c > 65535 || c < 0 { ++ c = 0 ++ v = nil ++ } + argc = c + argv = v + sysargs(c, v) diff --git a/libkflow b/libkflow new file mode 160000 index 0000000..0ed6079 --- /dev/null +++ b/libkflow @@ -0,0 +1 @@ +Subproject commit 0ed60790a1d11c5d0b790580f12a65aa716c8cb0