aboutsummaryrefslogtreecommitdiffhomepage
path: root/cmd
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-10-23 05:43:48 +0900
committerOphestra <cat@gensokyo.uk>2026-10-23 05:43:48 +0900
commitb04cb706de8d0829cc8d94071f13e740cb5fc3f2 (patch)
treef524863044c7a22468fede5eaadafad107d9bffd /cmd
parente10c90b58c2a7d92c42b27054ecc783b64585bc5 (diff)
cmd/dist: cross-compile via clang
The cross-compiled sysroot can now be provided by internal/rosa. Unfortunately pkg-config still had to be configured externally to avoid making any assumptions about the prefix. Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'cmd')
-rw-r--r--cmd/dist/main.go47
1 files changed, 38 insertions, 9 deletions
diff --git a/cmd/dist/main.go b/cmd/dist/main.go
index 40a0583c..df586bbf 100644
--- a/cmd/dist/main.go
+++ b/cmd/dist/main.go
@@ -47,6 +47,22 @@ func mustRun(ctx context.Context, env []string, name string, arg ...string) {
}
}
+// mustLinuxArch returns the architecture name used by linux corresponding to arch.
+func mustLinuxArch(arch string) string {
+ switch arch {
+ case "amd64":
+ return "x86_64"
+ case "arm64":
+ return "aarch64"
+ case "riscv64":
+ return "riscv64"
+
+ default:
+ log.Fatalf("unsupported target %s", arch)
+ return "\x00"
+ }
+}
+
//go:embed comp/_hakurei
var comp []byte
@@ -56,6 +72,8 @@ func main() {
log.SetOutput(os.Stdout)
verbose := os.Getenv("VERBOSE") != ""
+ arch := getenv("HAKUREI_ARCH", runtime.GOARCH)
+ sysroot := getenv("HAKUREI_SYSROOT", "/")
runTests := os.Getenv("HAKUREI_DIST_MAKE") == ""
race := os.Getenv("HAKUREI_RACE") != ""
dynamic := os.Getenv("HAKUREI_DYNAMIC") != ""
@@ -63,6 +81,9 @@ func main() {
prefix := getenv("PREFIX", "/usr/local")
destdir := getenv("DESTDIR", "dist")
+ linuxArch := mustLinuxArch(arch)
+ target := linuxArch + "-rosa-linux-musl"
+
if verbose {
log.Println()
}
@@ -71,10 +92,13 @@ func main() {
version += "-race"
}
- if err := os.Setenv("CC", "clang"); err != nil {
- log.Fatal(err)
- } else if err = os.Setenv("CXX", "clang++"); err != nil {
- log.Fatal(err)
+ for _, env := range [][2]string{
+ {"CC", "clang --target=" + target + " --sysroot=" + sysroot},
+ {"CXX", "clang++ --target=" + target + " --sysroot=" + sysroot},
+ } {
+ if err := os.Setenv(env[0], env[1]); err != nil {
+ log.Fatal(err)
+ }
}
if err := os.MkdirAll(destdir, 0755); err != nil {
@@ -134,10 +158,12 @@ func main() {
ldflagsStatic = ""
}
- log.Printf("Building hakurei %s for %s/%s.", version, runtime.GOOS, runtime.GOARCH)
+ log.Printf("Building hakurei %s for %s/%s.", version, runtime.GOOS, arch)
mustRun(ctx, nil, "go", "generate", "./...")
mustRun(
- ctx, nil, "go", "build",
+ ctx, []string{
+ "GOARCH=" + arch,
+ }, "go", "build",
"-trimpath",
verboseFlag, raceFlag, "-o", s,
"-ldflags=-s -w "+
@@ -149,9 +175,12 @@ func main() {
"./cmd/sharefs",
)
- log.Printf("Building cmd/hsu for %s/%s.", runtime.GOOS, runtime.GOARCH)
+ log.Printf("Building cmd/hsu for %s/%s.", runtime.GOOS, arch)
mustRun(
- ctx, []string{"CGO_ENABLED=0"}, "go", "build",
+ ctx, []string{
+ "CGO_ENABLED=0",
+ "GOARCH=" + arch,
+ }, "go", "build",
"-trimpath",
verboseFlag, "-o", s,
"-ldflags=-s -w "+
@@ -173,7 +202,7 @@ func main() {
log.Println("##### Creating distribution.")
const suffix = ".tar.gz"
- distName := "hakurei-" + version + "-" + runtime.GOARCH
+ distName := "hakurei-" + version + "-" + arch
var f *os.File
if f, err = os.OpenFile(
filepath.Join(s, distName+suffix),