Skip to content

Commit 9095651

Browse files
committed
sourcepkg: add a complete source package build
There is a makefile that will produce a libtailscale.tar.zst. This archive contains a vendored Go source tree for libtailscale, and a `configure` and `Makefile` that will produce a .so, a .a, and a .pc file for building & linking against. Updates tailscale/tailscale#8912
1 parent 7c1e4de commit 9095651

File tree

6 files changed

+114
-1
lines changed

6 files changed

+114
-1
lines changed

.github/workflows/sourcepkg.yml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
name: Source Package
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
8+
pull_request:
9+
10+
jobs:
11+
build:
12+
runs-on: ubuntu-latest
13+
14+
steps:
15+
- uses: actions/checkout@v3
16+
17+
- name: Set up Go
18+
uses: actions/setup-go@v3
19+
with:
20+
go-version-file: "go.mod"
21+
22+
- name: Run build & test
23+
run: |
24+
cd sourcepkg
25+
make check

.gitignore

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
libtailscale.so
22
libtailscale.a
33
libtailscale.h
4+
libtailscale.tar*
45
/ruby/tmp/
56
/ruby/pkg/
67
/ruby/doc/
78
/ruby/ext/libtailscale/*.go
89
/ruby/ext/libtailscale/go.mod
910
/ruby/ext/libtailscale/go.sum
10-
/ruby/LICENSE
11+
/ruby/LICENSE
12+
/sourcepkg/libtailscale
13+
/sourcepkg/libtailscale.tar*
14+
/vendor/

sourcepkg/Makefile

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# Copyright (c) Tailscale Inc & AUTHORS
2+
# SPDX-License-Identifier: BSD-3-Clause
3+
4+
# Construct a source package by vendoring all source and packing it up into a
5+
# tarball.
6+
7+
ifeq ($(shell uname -s),Darwin)
8+
TAR?=gtar
9+
else
10+
TAR?=tar
11+
endif
12+
13+
all: check
14+
15+
check: libtailscale.tar.zst
16+
@echo "Checking that the tarball is self-contained..."
17+
test `$(TAR) tf libtailscale.tar.zst | grep -c -v '^libtailscale/'` -eq 0 || (echo "Tarball is not self-contained!" && exit 1)
18+
19+
@tar xf libtailscale.tar.zst
20+
@echo "Checking that the tarball is usable..."
21+
@cd libtailscale && ./configure && make
22+
23+
24+
clean:
25+
rm -rf ./libtailscale.tar.zst ../vendor ./libtailscale
26+
27+
../vendor: ../go.mod ../go.sum ../tailscale.go Makefile.src Makefile
28+
go mod vendor
29+
30+
libtailscale.tar.zst: Makefile.src configure ../vendor ../LICENSE ../tailscale.go ../go.mod ../go.sum
31+
$(TAR) --transform 's#^#libtailscale/#' --transform 's#Makefile.src#Makefile#' -acf $@ Makefile.src configure ../vendor ../LICENSE ../tailscale.go ../go.mod ../go.sum

sourcepkg/Makefile.src

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# Copyright (c) Tailscale Inc & AUTHORS
2+
# SPDX-License-Identifier: BSD-3-Clause
3+
4+
prefix?=/usr/local
5+
libdir?=$(prefix)/lib
6+
includedir?=$(prefix)/include
7+
8+
all: libtailscale.a libtailscale.so libtailscale.pc
9+
10+
libtailscale.a:
11+
go build -trimpath -buildvcs=false -buildmode=c-archive -o libtailscale.a
12+
13+
libtailscale.so:
14+
go build -trimpath -buildvcs=false -buildmode=c-shared -o libtailscale.so
15+
16+
# TODO(raggi): the dylib build currently fails to build for amd64 on macOS on an
17+
# M1, the toolchain reports a build constraints error despite no build
18+
# constraints.
19+
libtailscale.dylib:
20+
GOARCH=amd64 GOOS=darwin go build -trimpath -buildmode=c-shared -o libtailscale.dylib.amd64 .
21+
GOARCH=arm64 GOOS=darwin go build -trimpath -buildmode=c-shared -o libtailscale.dylib.arm64 .
22+
lipo -create -output libtailscale.dylib libtailscale.dylib.amd64 libtailscale.dylib.arm64
23+
24+
libtailscale.pc:
25+
echo "prefix=/usr/local" > libtailscale.pc
26+
echo "exec_prefix=\$${prefix}" >> libtailscale.pc
27+
echo "libdir=\$${exec_prefix}/lib" >> libtailscale.pc
28+
echo "includedir=\$${prefix}/include" >> libtailscale.pc
29+
echo "" >> libtailscale.pc
30+
echo "Name: libtailscale" >> libtailscale.pc
31+
echo "Description: Tailscale library" >> libtailscale.pc
32+
echo "Version: 0.0.1" >> libtailscale.pc
33+
echo "Libs: -L\$${libdir} -ltailscale" >> libtailscale.pc
34+
echo "Cflags: -I\$${includedir}" >> libtailscale.pc
35+
36+
install: libtailscale.a libtailscale.so libtailscale.pc
37+
install -d $(DESTDIR)$(libdir)
38+
install -m 644 libtailscale.a $(DESTDIR)$(libdir)
39+
install -m 644 libtailscale.so $(DESTDIR)$(libdir)
40+
install -d $(DESTDIR)$(libdir)/pkgconfig
41+
install -m 644 libtailscale.pc $(DESTDIR)$(libdir)/pkgconfig
42+
install -d $(DESTDIR)$(includedir)
43+
install -m 644 *.h $(DESTDIR)$(includedir)

sourcepkg/README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# libtailscale - Source package
2+
3+
This directory contains extra code included in the `libtailscale` source
4+
package. The source package can be built using the `Makefile` in the top level
5+
project directory.

sourcepkg/configure

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#!/usr/bin/env sh
2+
# Copyright (c) Tailscale Inc & AUTHORS
3+
# SPDX-License-Identifier: BSD-3-Clause
4+
5+
go version > /dev/null 2>&1 || { echo >&2 "A Go compiler is required."; exit 1; }

0 commit comments

Comments
 (0)