Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
b47fa1a214
|
|||
|
9e363cb2c9
|
|||
|
1389c77022
|
@@ -64,11 +64,12 @@ func main() {
|
||||
return
|
||||
}
|
||||
|
||||
e, ok := r.(rosa.LoadError)
|
||||
if !ok {
|
||||
switch r.(type) {
|
||||
case rosa.LoadError, pkg.IRStringError:
|
||||
log.Fatal(r)
|
||||
default:
|
||||
panic(r)
|
||||
}
|
||||
log.Fatal(e)
|
||||
}()
|
||||
|
||||
ctx, stop := signal.NotifyContext(context.Background(),
|
||||
@@ -86,6 +87,7 @@ func main() {
|
||||
flagLTO bool
|
||||
flagPT bool
|
||||
|
||||
flagSourcePath string
|
||||
flagCrossOverride int
|
||||
|
||||
addr net.UnixAddr
|
||||
@@ -136,6 +138,12 @@ func main() {
|
||||
}
|
||||
}
|
||||
|
||||
if flagSourcePath != "" {
|
||||
if err := rosa.Native().SetSource(os.DirFS(flagSourcePath)); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}).Flag(
|
||||
&flagQuiet,
|
||||
@@ -196,6 +204,10 @@ func main() {
|
||||
&flagPT,
|
||||
"parse-time", command.BoolFlag(false),
|
||||
"Print duration of the initial azalea parse",
|
||||
).Flag(
|
||||
&flagSourcePath,
|
||||
"source", command.StringFlag(""),
|
||||
"Override hakurei source tree",
|
||||
)
|
||||
|
||||
c.NewCommand(
|
||||
|
||||
@@ -6,14 +6,12 @@ import (
|
||||
"hakurei.app/internal/pkg"
|
||||
)
|
||||
|
||||
var _go = H("go")
|
||||
|
||||
// newGo returns a specific version of the Go toolchain.
|
||||
func (t Toolchain) newGo(
|
||||
version, checksum string,
|
||||
env []string,
|
||||
script string,
|
||||
boot pkg.Artifact,
|
||||
boot ...pkg.Artifact,
|
||||
) pkg.Artifact {
|
||||
return t.NewPackage("go", version, newTar(
|
||||
"https://go.dev/dl/go"+version+".src.tar.gz",
|
||||
@@ -28,7 +26,7 @@ func (t Toolchain) newGo(
|
||||
"TMPDIR=/dev/shm/go",
|
||||
}, env),
|
||||
|
||||
Extra: []pkg.Artifact{boot},
|
||||
Extra: boot,
|
||||
}, &GenericHelper{
|
||||
InPlace: true,
|
||||
Build: `
|
||||
@@ -72,13 +70,13 @@ func init() {
|
||||
native.MustRegister(meta.Name, func(t Toolchain) (*Metadata, pkg.Artifact) {
|
||||
var (
|
||||
bootstrapEnv []string
|
||||
bootstrapEarly pkg.Artifact
|
||||
bootstrapEarly []pkg.Artifact
|
||||
|
||||
finalEnv []string
|
||||
)
|
||||
switch t.arch {
|
||||
case "amd64":
|
||||
bootstrapEarly = t.NewPackage("go", "1.4-bootstrap", newTar(
|
||||
bootstrapEarly = []pkg.Artifact{t.NewPackage("go", "1.4-bootstrap", newTar(
|
||||
"https://dl.google.com/go/go1.4-bootstrap-20171003.tar.gz",
|
||||
"8o9JL_ToiQKadCTb04nvBDkp8O1xiWOolAxVEqaTGodieNe4lOFEjlOxN3bwwe23",
|
||||
pkg.TarGzip,
|
||||
@@ -98,11 +96,11 @@ mkdir -p /var/tmp/
|
||||
`,
|
||||
},
|
||||
_bash,
|
||||
)
|
||||
)}
|
||||
|
||||
case "arm64", "riscv64":
|
||||
bootstrapEnv = append(bootstrapEnv, "GOROOT_BOOTSTRAP=/system")
|
||||
_, bootstrapEarly = t.MustLoad(H("gcc"))
|
||||
bootstrapEarly = t.Append(bootstrapEarly, H("gcc"))
|
||||
finalEnv = append(finalEnv, "CGO_ENABLED=0")
|
||||
|
||||
default:
|
||||
@@ -123,7 +121,7 @@ sed -i \
|
||||
echo \
|
||||
'type syscallDescriptor = int' >> \
|
||||
os/rawconn_test.go
|
||||
`, bootstrapEarly)
|
||||
`, bootstrapEarly...)
|
||||
|
||||
go121 := t.newGo(
|
||||
"1.21.13",
|
||||
|
||||
@@ -1,61 +0,0 @@
|
||||
From 2a9aa3b4007a73a6c9d4608cb9a8822247881fd6 Mon Sep 17 00:00:00 2001
|
||||
From: Ophestra <cat@gensokyo.uk>
|
||||
Date: Thu, 21 May 2026 23:34:50 +0900
|
||||
Subject: [PATCH] cmd/dist: include version in release
|
||||
|
||||
This makes HAKUREI_VERSION optional during build.
|
||||
|
||||
Signed-off-by: Ophestra <cat@gensokyo.uk>
|
||||
---
|
||||
cmd/dist/VERSION | 1 +
|
||||
cmd/dist/main.go | 7 ++++++-
|
||||
flake.nix | 1 -
|
||||
3 files changed, 7 insertions(+), 2 deletions(-)
|
||||
create mode 100644 cmd/dist/VERSION
|
||||
|
||||
diff --git a/cmd/dist/VERSION b/cmd/dist/VERSION
|
||||
new file mode 100644
|
||||
index 00000000..0eec13e4
|
||||
--- /dev/null
|
||||
+++ b/cmd/dist/VERSION
|
||||
@@ -0,0 +1 @@
|
||||
+v0.4.2
|
||||
diff --git a/cmd/dist/main.go b/cmd/dist/main.go
|
||||
index 9ed7f2f8..d876cf83 100644
|
||||
--- a/cmd/dist/main.go
|
||||
+++ b/cmd/dist/main.go
|
||||
@@ -18,8 +18,13 @@ import (
|
||||
"os/signal"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
+ "strings"
|
||||
)
|
||||
|
||||
+//go:generate sh -c "git describe --tags > VERSION"
|
||||
+//go:embed VERSION
|
||||
+var version string
|
||||
+
|
||||
// getenv looks up an environment variable, and returns fallback if it is unset.
|
||||
func getenv(key, fallback string) string {
|
||||
if v, ok := os.LookupEnv(key); ok {
|
||||
@@ -47,7 +52,7 @@ func main() {
|
||||
|
||||
verbose := os.Getenv("VERBOSE") != ""
|
||||
runTests := os.Getenv("HAKUREI_DIST_MAKE") == ""
|
||||
- version := getenv("HAKUREI_VERSION", "untagged")
|
||||
+ version = getenv("HAKUREI_VERSION", strings.TrimSpace(version))
|
||||
prefix := getenv("PREFIX", "/usr")
|
||||
destdir := getenv("DESTDIR", "dist")
|
||||
|
||||
diff --git a/flake.nix b/flake.nix
|
||||
index 4de35204..09520be2 100644
|
||||
--- a/flake.nix
|
||||
+++ b/flake.nix
|
||||
@@ -139,7 +139,6 @@
|
||||
GOCACHE="$(mktemp -d)" \
|
||||
PATH="${pkgs.pkgsStatic.musl.bin}/bin:$PATH" \
|
||||
DESTDIR="$out" \
|
||||
- HAKUREI_VERSION="v${hakurei.version}" \
|
||||
./all.sh
|
||||
'';
|
||||
}
|
||||
@@ -2,11 +2,11 @@ package hakurei-source {
|
||||
description = "hakurei source tree";
|
||||
exclude = true;
|
||||
|
||||
version* = "0.4.2";
|
||||
version* = "0.4.3";
|
||||
output = remoteTar {
|
||||
url = "https://git.gensokyo.uk/rosa/hakurei/archive/"+
|
||||
"v"+version+".tar.gz";
|
||||
checksum = "jadgaOrxv5ABGvzQ_Rk0aPGz7U8K-427TbMhQNQ32scSizEnlR44Pu7NoWYWVZWq";
|
||||
checksum = "1LqBJIcYcAFTVfydCahOm4hjjKhY953X9ars0eQj32hnpNncWFefuT6OJpZzIlZv";
|
||||
compress = gzip;
|
||||
};
|
||||
}
|
||||
@@ -17,7 +17,6 @@ package hakurei {
|
||||
anitya = 388834;
|
||||
|
||||
source = hakurei-source;
|
||||
patches = [ "2a9aa3b4007a73a6c9d4608cb9a8822247881fd6.patch" ];
|
||||
enterSource = true;
|
||||
writable = true;
|
||||
chmod = true;
|
||||
@@ -84,7 +83,6 @@ package hakurei-dist {
|
||||
website = "https://hakurei.app";
|
||||
|
||||
source = hakurei-source;
|
||||
patches = [ "2a9aa3b4007a73a6c9d4608cb9a8822247881fd6.patch" ];
|
||||
enterSource = true;
|
||||
writable = true;
|
||||
chmod = true;
|
||||
@@ -132,7 +130,6 @@ package earlyinit {
|
||||
exclude = true;
|
||||
|
||||
source = hakurei-source;
|
||||
patches = [ "2a9aa3b4007a73a6c9d4608cb9a8822247881fd6.patch" ];
|
||||
enterSource = true;
|
||||
writable = true;
|
||||
chmod = true;
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
package rosa
|
||||
|
||||
import (
|
||||
"archive/tar"
|
||||
"bytes"
|
||||
"compress/gzip"
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
@@ -1173,6 +1176,90 @@ func (s *S) RegisterFS(fsys fs.FS) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// SetSource overrides the hakurei-source package with a cached tarball of fsys.
|
||||
// The resulting IR is curable on the daemon. Must not be used concurrently with
|
||||
// any other method.
|
||||
func (s *S) SetSource(fsys fs.FS) error {
|
||||
var buf bytes.Buffer
|
||||
w, err := gzip.NewWriterLevel(&buf, gzip.BestSpeed)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
tw := tar.NewWriter(w)
|
||||
|
||||
if err = fs.WalkDir(fsys, ".", func(path string, d fs.DirEntry, err error) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if d.IsDir() && d.Name() == ".git" {
|
||||
return fs.SkipDir
|
||||
}
|
||||
|
||||
var fi fs.FileInfo
|
||||
if fi, err = d.Info(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var linkname string
|
||||
if fi.Mode()&fs.ModeSymlink != 0 {
|
||||
if linkname, err = fs.ReadLink(fsys, path); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
var h *tar.Header
|
||||
if h, err = tar.FileInfoHeader(fi, linkname); err != nil {
|
||||
return err
|
||||
}
|
||||
h.Name = path
|
||||
|
||||
if err = tw.WriteHeader(h); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if fi.Mode().IsRegular() {
|
||||
var f io.ReadCloser
|
||||
if f, err = fsys.Open(path); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
_, err = io.Copy(tw, f)
|
||||
if _err := f.Close(); err == nil {
|
||||
err = _err
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err = tw.Close(); err != nil {
|
||||
return err
|
||||
} else if err = w.Close(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
const name = "hakurei-source"
|
||||
a := pkg.NewFile("hakurei-src-current.tar.gz", buf.Bytes())
|
||||
s.artifacts.Store(
|
||||
H(name),
|
||||
Artifact(func(t Toolchain) (*Metadata, pkg.Artifact) {
|
||||
return &Metadata{
|
||||
Name: name,
|
||||
Description: "hakurei source tree (current)",
|
||||
Version: "1.0.0-CURRENT",
|
||||
Exclude: true,
|
||||
}, pkg.NewTar(a, pkg.TarGzip)
|
||||
}),
|
||||
)
|
||||
s.DropCaches(s.Arch(), s.Flags())
|
||||
return nil
|
||||
}
|
||||
|
||||
// SetGentooStage3 sets the Gentoo stage3 tarball url and checksum. It panics
|
||||
// if given zero values or if these values have already been set.
|
||||
func (s *S) SetGentooStage3(url string, checksum pkg.Checksum) {
|
||||
|
||||
Reference in New Issue
Block a user