internal/rosa: lazy initialise all artifacts
All checks were successful
Test / Create distribution (push) Successful in 48s
Test / Sandbox (push) Successful in 2m37s
Test / Hakurei (push) Successful in 4m5s
Test / ShareFS (push) Successful in 4m2s
Test / Hpkg (push) Successful in 4m33s
Test / Sandbox (race detector) (push) Successful in 4m59s
Test / Hakurei (race detector) (push) Successful in 5m57s
Test / Flake checks (push) Successful in 1m44s
All checks were successful
Test / Create distribution (push) Successful in 48s
Test / Sandbox (push) Successful in 2m37s
Test / Hakurei (push) Successful in 4m5s
Test / ShareFS (push) Successful in 4m2s
Test / Hpkg (push) Successful in 4m33s
Test / Sandbox (race detector) (push) Successful in 4m59s
Test / Hakurei (race detector) (push) Successful in 5m57s
Test / Flake checks (push) Successful in 1m44s
This improves performance, though not as drastically as lazy initialising llvm. Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
@@ -143,24 +143,52 @@ func main() {
|
|||||||
if len(args) != 1 {
|
if len(args) != 1 {
|
||||||
return errors.New("cure requires 1 argument")
|
return errors.New("cure requires 1 argument")
|
||||||
}
|
}
|
||||||
var a pkg.Artifact
|
var p rosa.PArtifact
|
||||||
switch args[0] {
|
switch args[0] {
|
||||||
|
case "autoconf":
|
||||||
|
p = rosa.Autoconf
|
||||||
|
case "bash":
|
||||||
|
p = rosa.Bash
|
||||||
case "busybox":
|
case "busybox":
|
||||||
a = rosa.Std.NewBusybox()
|
p = rosa.Busybox
|
||||||
case "musl":
|
case "cmake":
|
||||||
a = rosa.Std.NewMusl(nil)
|
p = rosa.CMake
|
||||||
|
case "coreutils":
|
||||||
|
p = rosa.Coreutils
|
||||||
|
case "diffutils":
|
||||||
|
p = rosa.Diffutils
|
||||||
|
case "gettext":
|
||||||
|
p = rosa.Gettext
|
||||||
case "git":
|
case "git":
|
||||||
a = rosa.Std.NewGit()
|
p = rosa.Git
|
||||||
case "go":
|
case "go":
|
||||||
a = rosa.Std.NewGo()
|
p = rosa.Go
|
||||||
|
case "kernel-headers":
|
||||||
|
p = rosa.KernelHeaders
|
||||||
|
case "libffi":
|
||||||
|
p = rosa.Libffi
|
||||||
|
case "m4":
|
||||||
|
p = rosa.M4
|
||||||
|
case "make":
|
||||||
|
p = rosa.Make
|
||||||
|
case "ninja":
|
||||||
|
p = rosa.Ninja
|
||||||
|
case "perl":
|
||||||
|
p = rosa.Perl
|
||||||
|
case "patch":
|
||||||
|
p = rosa.Patch
|
||||||
|
case "python":
|
||||||
|
p = rosa.Python
|
||||||
case "rsync":
|
case "rsync":
|
||||||
a = rosa.Std.NewRsync()
|
p = rosa.Rsync
|
||||||
|
case "zlib":
|
||||||
|
p = rosa.Zlib
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return fmt.Errorf("unsupported artifact %q", args[0])
|
return fmt.Errorf("unsupported artifact %q", args[0])
|
||||||
}
|
}
|
||||||
|
|
||||||
pathname, _, err := cache.Cure(a)
|
pathname, _, err := cache.Cure(rosa.Std.Load(p))
|
||||||
if err == nil {
|
if err == nil {
|
||||||
log.Println(pathname)
|
log.Println(pathname)
|
||||||
}
|
}
|
||||||
|
|||||||
53
internal/rosa/all.go
Normal file
53
internal/rosa/all.go
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
package rosa
|
||||||
|
|
||||||
|
import (
|
||||||
|
"sync"
|
||||||
|
|
||||||
|
"hakurei.app/internal/pkg"
|
||||||
|
)
|
||||||
|
|
||||||
|
// PArtifact is a lazily-initialised [pkg.Artifact] preset.
|
||||||
|
type PArtifact int
|
||||||
|
|
||||||
|
const (
|
||||||
|
Autoconf PArtifact = iota
|
||||||
|
Bash
|
||||||
|
Busybox
|
||||||
|
CMake
|
||||||
|
Coreutils
|
||||||
|
Diffutils
|
||||||
|
Gettext
|
||||||
|
Git
|
||||||
|
Go
|
||||||
|
KernelHeaders
|
||||||
|
Libffi
|
||||||
|
M4
|
||||||
|
Make
|
||||||
|
Ninja
|
||||||
|
Perl
|
||||||
|
Patch
|
||||||
|
Python
|
||||||
|
Rsync
|
||||||
|
Zlib
|
||||||
|
|
||||||
|
// _presetEnd is the total number of presets and does not denote a preset.
|
||||||
|
_presetEnd
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
// artifactsF is an array of functions for the result of [PArtifact].
|
||||||
|
artifactsF [_presetEnd]func(t Toolchain) pkg.Artifact
|
||||||
|
|
||||||
|
// artifacts stores the result of artifactsF.
|
||||||
|
artifacts [_toolchainEnd][len(artifactsF)]pkg.Artifact
|
||||||
|
// artifactsOnce is for lazy initialisation of artifacts.
|
||||||
|
artifactsOnce [_toolchainEnd][len(artifactsF)]sync.Once
|
||||||
|
)
|
||||||
|
|
||||||
|
// Load returns the resulting [pkg.Artifact] of [PArtifact].
|
||||||
|
func (t Toolchain) Load(p PArtifact) pkg.Artifact {
|
||||||
|
artifactsOnce[t][p].Do(func() {
|
||||||
|
artifacts[t][p] = artifactsF[p](t)
|
||||||
|
})
|
||||||
|
return artifacts[t][p]
|
||||||
|
}
|
||||||
@@ -100,9 +100,7 @@ func newBusyboxBin() pkg.Artifact {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewBusybox returns a [pkg.Artifact] containing a dynamically linked busybox
|
func (t Toolchain) newBusybox() pkg.Artifact {
|
||||||
// installation usable within the [Toolchain] it is compiled against.
|
|
||||||
func (t Toolchain) NewBusybox() pkg.Artifact {
|
|
||||||
const (
|
const (
|
||||||
version = "1.37.0"
|
version = "1.37.0"
|
||||||
checksum = "Ial94Tnt7esJ_YEeb0AxunVL6MGYFyOw7Rtu2o87CXCi1TLrc6rlznVsN1rZk7it"
|
checksum = "Ial94Tnt7esJ_YEeb0AxunVL6MGYFyOw7Rtu2o87CXCi1TLrc6rlznVsN1rZk7it"
|
||||||
@@ -114,8 +112,8 @@ func (t Toolchain) NewBusybox() pkg.Artifact {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return t.New("busybox-"+version, stage3Concat(t, []pkg.Artifact{},
|
return t.New("busybox-"+version, stage3Concat(t, []pkg.Artifact{},
|
||||||
t.NewMake(),
|
t.Load(Make),
|
||||||
t.NewKernelHeaders(),
|
t.Load(KernelHeaders),
|
||||||
), nil, slices.Concat([]string{
|
), nil, slices.Concat([]string{
|
||||||
"ROSA_BUSYBOX_ENABLE=" + strings.Join([]string{
|
"ROSA_BUSYBOX_ENABLE=" + strings.Join([]string{
|
||||||
"STATIC",
|
"STATIC",
|
||||||
@@ -354,3 +352,4 @@ index 64e752f4b..40f5ba7f7 100644
|
|||||||
}`)),
|
}`)),
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
func init() { artifactsF[Busybox] = Toolchain.newBusybox }
|
||||||
|
|||||||
@@ -8,15 +8,14 @@ import (
|
|||||||
"hakurei.app/internal/pkg"
|
"hakurei.app/internal/pkg"
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewCMake returns a [pkg.Artifact] containing an installation of CMake.
|
func (t Toolchain) newCMake() pkg.Artifact {
|
||||||
func (t Toolchain) NewCMake() pkg.Artifact {
|
|
||||||
const (
|
const (
|
||||||
version = "4.2.1"
|
version = "4.2.1"
|
||||||
checksum = "Y3OdbMsob6Xk2y1DCME6z4Fryb5_TkFD7knRT8dTNIRtSqbiCJyyDN9AxggN_I75"
|
checksum = "Y3OdbMsob6Xk2y1DCME6z4Fryb5_TkFD7knRT8dTNIRtSqbiCJyyDN9AxggN_I75"
|
||||||
)
|
)
|
||||||
return t.New("cmake-"+version, []pkg.Artifact{
|
return t.New("cmake-"+version, []pkg.Artifact{
|
||||||
t.NewMake(),
|
t.Load(Make),
|
||||||
t.NewKernelHeaders(),
|
t.Load(KernelHeaders),
|
||||||
}, nil, nil, `
|
}, nil, nil, `
|
||||||
# expected to be writable in the copy made during bootstrap
|
# expected to be writable in the copy made during bootstrap
|
||||||
chmod -R +w /usr/src/cmake/Tests
|
chmod -R +w /usr/src/cmake/Tests
|
||||||
@@ -37,6 +36,7 @@ make DESTDIR=/work install
|
|||||||
pkg.TarGzip,
|
pkg.TarGzip,
|
||||||
)))
|
)))
|
||||||
}
|
}
|
||||||
|
func init() { artifactsF[CMake] = Toolchain.newCMake }
|
||||||
|
|
||||||
// CMakeAttr holds the project-specific attributes that will be applied to a new
|
// CMakeAttr holds the project-specific attributes that will be applied to a new
|
||||||
// [pkg.Artifact] compiled via CMake.
|
// [pkg.Artifact] compiled via CMake.
|
||||||
@@ -95,8 +95,8 @@ chmod -R +w "${ROSA_SOURCE}"
|
|||||||
|
|
||||||
sourcePath := AbsUsrSrc.Append(name)
|
sourcePath := AbsUsrSrc.Append(name)
|
||||||
return t.New(name+"-"+variant+"-"+version, stage3Concat(t, attr.Extra,
|
return t.New(name+"-"+variant+"-"+version, stage3Concat(t, attr.Extra,
|
||||||
t.NewCMake(),
|
t.Load(CMake),
|
||||||
t.NewNinja(),
|
t.Load(Ninja),
|
||||||
), nil, slices.Concat([]string{
|
), nil, slices.Concat([]string{
|
||||||
"ROSA_SOURCE=" + sourcePath.String(),
|
"ROSA_SOURCE=" + sourcePath.String(),
|
||||||
"ROSA_CMAKE_SOURCE=" + sourcePath.Append(attr.Append...).String(),
|
"ROSA_CMAKE_SOURCE=" + sourcePath.Append(attr.Append...).String(),
|
||||||
|
|||||||
@@ -4,20 +4,19 @@ import (
|
|||||||
"hakurei.app/internal/pkg"
|
"hakurei.app/internal/pkg"
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewGit returns a [pkg.Artifact] containing an installation of git.
|
func (t Toolchain) newGit() pkg.Artifact {
|
||||||
func (t Toolchain) NewGit() pkg.Artifact {
|
|
||||||
const (
|
const (
|
||||||
version = "2.52.0"
|
version = "2.52.0"
|
||||||
checksum = "uH3J1HAN_c6PfGNJd2OBwW4zo36n71wmkdvityYnrh8Ak0D1IifiAvEWz9Vi9DmS"
|
checksum = "uH3J1HAN_c6PfGNJd2OBwW4zo36n71wmkdvityYnrh8Ak0D1IifiAvEWz9Vi9DmS"
|
||||||
)
|
)
|
||||||
return t.New("git-"+version, stage3Concat(t, []pkg.Artifact{},
|
return t.New("git-"+version, stage3Concat(t, []pkg.Artifact{},
|
||||||
t.NewMake(),
|
t.Load(Make),
|
||||||
t.NewPerl(),
|
t.Load(Perl),
|
||||||
t.NewM4(),
|
t.Load(M4),
|
||||||
t.NewAutoconf(),
|
t.Load(Autoconf),
|
||||||
t.NewGettext(),
|
t.Load(Gettext),
|
||||||
|
|
||||||
t.NewZlib(),
|
t.Load(Zlib),
|
||||||
), nil, nil, `
|
), nil, nil, `
|
||||||
chmod -R +w /usr/src/git && cd /usr/src/git
|
chmod -R +w /usr/src/git && cd /usr/src/git
|
||||||
make configure
|
make configure
|
||||||
@@ -31,3 +30,4 @@ make DESTDIR=/work install
|
|||||||
pkg.TarGzip,
|
pkg.TarGzip,
|
||||||
)))
|
)))
|
||||||
}
|
}
|
||||||
|
func init() { artifactsF[Git] = Toolchain.newGit }
|
||||||
|
|||||||
@@ -2,8 +2,7 @@ package rosa
|
|||||||
|
|
||||||
import "hakurei.app/internal/pkg"
|
import "hakurei.app/internal/pkg"
|
||||||
|
|
||||||
// NewMake returns a [pkg.Artifact] containing an installation of GNU Make.
|
func (t Toolchain) newMake() pkg.Artifact {
|
||||||
func (t Toolchain) NewMake() pkg.Artifact {
|
|
||||||
const (
|
const (
|
||||||
version = "4.4.1"
|
version = "4.4.1"
|
||||||
checksum = "YS_B07ZcAy9PbaK5_vKGj64SrxO2VMpnMKfc9I0Q9IC1rn0RwOH7802pJoj2Mq4a"
|
checksum = "YS_B07ZcAy9PbaK5_vKGj64SrxO2VMpnMKfc9I0Q9IC1rn0RwOH7802pJoj2Mq4a"
|
||||||
@@ -23,15 +22,15 @@ cd "$(mktemp -d)"
|
|||||||
pkg.TarGzip,
|
pkg.TarGzip,
|
||||||
)))
|
)))
|
||||||
}
|
}
|
||||||
|
func init() { artifactsF[Make] = Toolchain.newMake }
|
||||||
|
|
||||||
// NewM4 returns a [pkg.Artifact] containing an installation of GNU M4.
|
func (t Toolchain) newM4() pkg.Artifact {
|
||||||
func (t Toolchain) NewM4() pkg.Artifact {
|
|
||||||
const (
|
const (
|
||||||
version = "1.4.20"
|
version = "1.4.20"
|
||||||
checksum = "RT0_L3m4Co86bVBY3lCFAEs040yI1WdeNmRylFpah8IZovTm6O4wI7qiHJN3qsW9"
|
checksum = "RT0_L3m4Co86bVBY3lCFAEs040yI1WdeNmRylFpah8IZovTm6O4wI7qiHJN3qsW9"
|
||||||
)
|
)
|
||||||
return t.New("m4-"+version, []pkg.Artifact{
|
return t.New("m4-"+version, []pkg.Artifact{
|
||||||
t.NewMake(),
|
t.Load(Make),
|
||||||
}, nil, nil, `
|
}, nil, nil, `
|
||||||
cd /usr/src/m4
|
cd /usr/src/m4
|
||||||
chmod +w tests/test-c32ispunct.sh && echo '#!/bin/sh' > tests/test-c32ispunct.sh
|
chmod +w tests/test-c32ispunct.sh && echo '#!/bin/sh' > tests/test-c32ispunct.sh
|
||||||
@@ -49,17 +48,17 @@ make DESTDIR=/work install
|
|||||||
pkg.TarBzip2,
|
pkg.TarBzip2,
|
||||||
)))
|
)))
|
||||||
}
|
}
|
||||||
|
func init() { artifactsF[M4] = Toolchain.newM4 }
|
||||||
|
|
||||||
// NewAutoconf returns a [pkg.Artifact] containing an installation of GNU Autoconf.
|
func (t Toolchain) newAutoconf() pkg.Artifact {
|
||||||
func (t Toolchain) NewAutoconf() pkg.Artifact {
|
|
||||||
const (
|
const (
|
||||||
version = "2.72"
|
version = "2.72"
|
||||||
checksum = "-c5blYkC-xLDer3TWEqJTyh1RLbOd1c5dnRLKsDnIrg_wWNOLBpaqMY8FvmUFJ33"
|
checksum = "-c5blYkC-xLDer3TWEqJTyh1RLbOd1c5dnRLKsDnIrg_wWNOLBpaqMY8FvmUFJ33"
|
||||||
)
|
)
|
||||||
return t.New("autoconf-"+version, []pkg.Artifact{
|
return t.New("autoconf-"+version, []pkg.Artifact{
|
||||||
t.NewMake(),
|
t.Load(Make),
|
||||||
t.NewM4(),
|
t.Load(M4),
|
||||||
t.NewPerl(),
|
t.Load(Perl),
|
||||||
}, nil, nil, `
|
}, nil, nil, `
|
||||||
cd "$(mktemp -d)"
|
cd "$(mktemp -d)"
|
||||||
/usr/src/autoconf/configure \
|
/usr/src/autoconf/configure \
|
||||||
@@ -74,15 +73,15 @@ make DESTDIR=/work install
|
|||||||
pkg.TarGzip,
|
pkg.TarGzip,
|
||||||
)))
|
)))
|
||||||
}
|
}
|
||||||
|
func init() { artifactsF[Autoconf] = Toolchain.newAutoconf }
|
||||||
|
|
||||||
// NewGettext returns a [pkg.Artifact] containing an installation of GNU gettext.
|
func (t Toolchain) newGettext() pkg.Artifact {
|
||||||
func (t Toolchain) NewGettext() pkg.Artifact {
|
|
||||||
const (
|
const (
|
||||||
version = "0.26"
|
version = "0.26"
|
||||||
checksum = "IMu7yDZX7xL5UO1ZxXc-iBMbY9LLEUlOroyuSlHMZwg9MKtxG7HIm8F2LheDua0y"
|
checksum = "IMu7yDZX7xL5UO1ZxXc-iBMbY9LLEUlOroyuSlHMZwg9MKtxG7HIm8F2LheDua0y"
|
||||||
)
|
)
|
||||||
return t.New("gettext-"+version, []pkg.Artifact{
|
return t.New("gettext-"+version, []pkg.Artifact{
|
||||||
t.NewMake(),
|
t.Load(Make),
|
||||||
}, nil, nil, `
|
}, nil, nil, `
|
||||||
cd /usr/src/gettext
|
cd /usr/src/gettext
|
||||||
test_disable() { chmod +w "$2" && echo "$1" > "$2"; }
|
test_disable() { chmod +w "$2" && echo "$1" > "$2"; }
|
||||||
@@ -110,15 +109,15 @@ make DESTDIR=/work install
|
|||||||
pkg.TarGzip,
|
pkg.TarGzip,
|
||||||
)))
|
)))
|
||||||
}
|
}
|
||||||
|
func init() { artifactsF[Gettext] = Toolchain.newGettext }
|
||||||
|
|
||||||
// NewDiffutils returns a [pkg.Artifact] containing an installation of GNU diffutils.
|
func (t Toolchain) newDiffutils() pkg.Artifact {
|
||||||
func (t Toolchain) NewDiffutils() pkg.Artifact {
|
|
||||||
const (
|
const (
|
||||||
version = "3.12"
|
version = "3.12"
|
||||||
checksum = "9J5VAq5oA7eqwzS1Yvw-l3G5o-TccUrNQR3PvyB_lgdryOFAfxtvQfKfhdpquE44"
|
checksum = "9J5VAq5oA7eqwzS1Yvw-l3G5o-TccUrNQR3PvyB_lgdryOFAfxtvQfKfhdpquE44"
|
||||||
)
|
)
|
||||||
return t.New("diffutils-"+version, []pkg.Artifact{
|
return t.New("diffutils-"+version, []pkg.Artifact{
|
||||||
t.NewMake(),
|
t.Load(Make),
|
||||||
}, nil, nil, `
|
}, nil, nil, `
|
||||||
cd /usr/src/diffutils
|
cd /usr/src/diffutils
|
||||||
test_disable() { chmod +w "$2" && echo "$1" > "$2"; }
|
test_disable() { chmod +w "$2" && echo "$1" > "$2"; }
|
||||||
@@ -139,15 +138,15 @@ make DESTDIR=/work install
|
|||||||
pkg.TarGzip,
|
pkg.TarGzip,
|
||||||
)))
|
)))
|
||||||
}
|
}
|
||||||
|
func init() { artifactsF[Diffutils] = Toolchain.newDiffutils }
|
||||||
|
|
||||||
// NewPatch returns a [pkg.Artifact] containing an installation of GNU patch.
|
func (t Toolchain) newPatch() pkg.Artifact {
|
||||||
func (t Toolchain) NewPatch() pkg.Artifact {
|
|
||||||
const (
|
const (
|
||||||
version = "2.8"
|
version = "2.8"
|
||||||
checksum = "MA0BQc662i8QYBD-DdGgyyfTwaeALZ1K0yusV9rAmNiIsQdX-69YC4t9JEGXZkeR"
|
checksum = "MA0BQc662i8QYBD-DdGgyyfTwaeALZ1K0yusV9rAmNiIsQdX-69YC4t9JEGXZkeR"
|
||||||
)
|
)
|
||||||
return t.New("patch-"+version, []pkg.Artifact{
|
return t.New("patch-"+version, []pkg.Artifact{
|
||||||
t.NewMake(),
|
t.Load(Make),
|
||||||
}, nil, nil, `
|
}, nil, nil, `
|
||||||
cd /usr/src/patch
|
cd /usr/src/patch
|
||||||
test_disable() { chmod +w "$2" && echo "$1" > "$2"; }
|
test_disable() { chmod +w "$2" && echo "$1" > "$2"; }
|
||||||
@@ -168,15 +167,15 @@ make DESTDIR=/work install
|
|||||||
pkg.TarGzip,
|
pkg.TarGzip,
|
||||||
)))
|
)))
|
||||||
}
|
}
|
||||||
|
func init() { artifactsF[Patch] = Toolchain.newPatch }
|
||||||
|
|
||||||
// NewBash returns a [pkg.Artifact] containing an installation of GNU Bash.
|
func (t Toolchain) newBash() pkg.Artifact {
|
||||||
func (t Toolchain) NewBash() pkg.Artifact {
|
|
||||||
const (
|
const (
|
||||||
version = "5.3"
|
version = "5.3"
|
||||||
checksum = "4LQ_GRoB_ko-Ih8QPf_xRKA02xAm_TOxQgcJLmFDT6udUPxTAWrsj-ZNeuTusyDq"
|
checksum = "4LQ_GRoB_ko-Ih8QPf_xRKA02xAm_TOxQgcJLmFDT6udUPxTAWrsj-ZNeuTusyDq"
|
||||||
)
|
)
|
||||||
return t.New("bash-"+version, []pkg.Artifact{
|
return t.New("bash-"+version, []pkg.Artifact{
|
||||||
t.NewMake(),
|
t.Load(Make),
|
||||||
}, nil, nil, `
|
}, nil, nil, `
|
||||||
cd "$(mktemp -d)"
|
cd "$(mktemp -d)"
|
||||||
/usr/src/bash/configure \
|
/usr/src/bash/configure \
|
||||||
@@ -192,18 +191,18 @@ make DESTDIR=/work install
|
|||||||
pkg.TarGzip,
|
pkg.TarGzip,
|
||||||
)))
|
)))
|
||||||
}
|
}
|
||||||
|
func init() { artifactsF[Bash] = Toolchain.newBash }
|
||||||
|
|
||||||
// NewCoreutils returns a [pkg.Artifact] containing an installation of GNU Coreutils.
|
func (t Toolchain) newCoreutils() pkg.Artifact {
|
||||||
func (t Toolchain) NewCoreutils() pkg.Artifact {
|
|
||||||
const (
|
const (
|
||||||
version = "9.9"
|
version = "9.9"
|
||||||
checksum = "B1_TaXj1j5aiVIcazLWu8Ix03wDV54uo2_iBry4qHG6Y-9bjDpUPlkNLmU_3Nvw6"
|
checksum = "B1_TaXj1j5aiVIcazLWu8Ix03wDV54uo2_iBry4qHG6Y-9bjDpUPlkNLmU_3Nvw6"
|
||||||
)
|
)
|
||||||
return t.New("coreutils-"+version, []pkg.Artifact{
|
return t.New("coreutils-"+version, []pkg.Artifact{
|
||||||
t.NewMake(),
|
t.Load(Make),
|
||||||
t.NewPerl(),
|
t.Load(Perl),
|
||||||
|
|
||||||
t.NewKernelHeaders(),
|
t.Load(KernelHeaders),
|
||||||
}, nil, nil, `
|
}, nil, nil, `
|
||||||
cd /usr/src/coreutils
|
cd /usr/src/coreutils
|
||||||
test_disable() { chmod +w "$2" && echo "$1" > "$2"; }
|
test_disable() { chmod +w "$2" && echo "$1" > "$2"; }
|
||||||
@@ -223,3 +222,4 @@ make DESTDIR=/work install
|
|||||||
pkg.TarGzip,
|
pkg.TarGzip,
|
||||||
)))
|
)))
|
||||||
}
|
}
|
||||||
|
func init() { artifactsF[Coreutils] = Toolchain.newCoreutils }
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import (
|
|||||||
func (t Toolchain) newGoBootstrap() pkg.Artifact {
|
func (t Toolchain) newGoBootstrap() pkg.Artifact {
|
||||||
const checksum = "8o9JL_ToiQKadCTb04nvBDkp8O1xiWOolAxVEqaTGodieNe4lOFEjlOxN3bwwe23"
|
const checksum = "8o9JL_ToiQKadCTb04nvBDkp8O1xiWOolAxVEqaTGodieNe4lOFEjlOxN3bwwe23"
|
||||||
return t.New("go1.4-bootstrap", []pkg.Artifact{
|
return t.New("go1.4-bootstrap", []pkg.Artifact{
|
||||||
t.NewBash(),
|
t.Load(Bash),
|
||||||
}, nil, []string{
|
}, nil, []string{
|
||||||
"CGO_ENABLED=0",
|
"CGO_ENABLED=0",
|
||||||
}, `
|
}, `
|
||||||
@@ -65,8 +65,7 @@ sh make.bash
|
|||||||
)))
|
)))
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewGo returns a [pkg.Artifact] containing the Go toolchain.
|
func (t Toolchain) newGoLatest() pkg.Artifact {
|
||||||
func (t Toolchain) NewGo() pkg.Artifact {
|
|
||||||
go119 := t.newGo(
|
go119 := t.newGo(
|
||||||
"1.19",
|
"1.19",
|
||||||
"9_e0aFHsIkVxWVGsp9T2RvvjOc3p4n9o9S8tkNe9Cvgzk_zI2FhRQB7ioQkeAAro",
|
"9_e0aFHsIkVxWVGsp9T2RvvjOc3p4n9o9S8tkNe9Cvgzk_zI2FhRQB7ioQkeAAro",
|
||||||
@@ -90,3 +89,4 @@ func (t Toolchain) NewGo() pkg.Artifact {
|
|||||||
)
|
)
|
||||||
return go125
|
return go125
|
||||||
}
|
}
|
||||||
|
func init() { artifactsF[Go] = Toolchain.newGoLatest }
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ func (t Toolchain) newKernel(
|
|||||||
checksum = "-V1e1WWl7HuePkmm84sSKF7nLuHfUs494uNMzMqXEyxcNE_PUE0FICL0oGWn44mM"
|
checksum = "-V1e1WWl7HuePkmm84sSKF7nLuHfUs494uNMzMqXEyxcNE_PUE0FICL0oGWn44mM"
|
||||||
)
|
)
|
||||||
return t.New("kernel-"+version, slices.Concat([]pkg.Artifact{
|
return t.New("kernel-"+version, slices.Concat([]pkg.Artifact{
|
||||||
t.NewMake(),
|
t.Load(Make),
|
||||||
}, extra), nil, nil, `
|
}, extra), nil, nil, `
|
||||||
export LLVM=1
|
export LLVM=1
|
||||||
export HOSTLDFLAGS="${LDFLAGS}"
|
export HOSTLDFLAGS="${LDFLAGS}"
|
||||||
@@ -30,11 +30,11 @@ chmod -R +w /usr/src/linux && cd /usr/src/linux
|
|||||||
)))
|
)))
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewKernelHeaders returns a [pkg.Artifact] containing kernel headers.
|
func (t Toolchain) newKernelHeaders() pkg.Artifact {
|
||||||
func (t Toolchain) NewKernelHeaders() pkg.Artifact {
|
|
||||||
return t.newKernel(`
|
return t.newKernel(`
|
||||||
make "-j$(nproc)" \
|
make "-j$(nproc)" \
|
||||||
INSTALL_HDR_PATH=/work/system \
|
INSTALL_HDR_PATH=/work/system \
|
||||||
headers_install
|
headers_install
|
||||||
`, t.NewRsync())
|
`, t.Load(Rsync))
|
||||||
}
|
}
|
||||||
|
func init() { artifactsF[KernelHeaders] = Toolchain.newKernelHeaders }
|
||||||
|
|||||||
@@ -2,15 +2,14 @@ package rosa
|
|||||||
|
|
||||||
import "hakurei.app/internal/pkg"
|
import "hakurei.app/internal/pkg"
|
||||||
|
|
||||||
// NewLibffi returns a [pkg.Artifact] containing an installation of libffi.
|
func (t Toolchain) newLibffi() pkg.Artifact {
|
||||||
func (t Toolchain) NewLibffi() pkg.Artifact {
|
|
||||||
const (
|
const (
|
||||||
version = "3.4.5"
|
version = "3.4.5"
|
||||||
checksum = "apIJzypF4rDudeRoI_n3K7N-zCeBLTbQlHRn9NSAZqdLAWA80mR0gXPTpHsL7oMl"
|
checksum = "apIJzypF4rDudeRoI_n3K7N-zCeBLTbQlHRn9NSAZqdLAWA80mR0gXPTpHsL7oMl"
|
||||||
)
|
)
|
||||||
return t.New("libffi-"+version, []pkg.Artifact{
|
return t.New("libffi-"+version, []pkg.Artifact{
|
||||||
t.NewMake(),
|
t.Load(Make),
|
||||||
t.NewKernelHeaders(),
|
t.Load(KernelHeaders),
|
||||||
}, nil, nil, `
|
}, nil, nil, `
|
||||||
cd "$(mktemp -d)"
|
cd "$(mktemp -d)"
|
||||||
/usr/src/libffi/configure \
|
/usr/src/libffi/configure \
|
||||||
@@ -26,3 +25,4 @@ make DESTDIR=/work install
|
|||||||
pkg.TarGzip,
|
pkg.TarGzip,
|
||||||
)))
|
)))
|
||||||
}
|
}
|
||||||
|
func init() { artifactsF[Libffi] = Toolchain.newLibffi }
|
||||||
|
|||||||
@@ -188,7 +188,7 @@ cp -r /system/include /usr/include && rm -rf /system/include
|
|||||||
if len(patches) > 1 {
|
if len(patches) > 1 {
|
||||||
source = t.New(
|
source = t.New(
|
||||||
"llvmorg-patched", stage3Concat(t, []pkg.Artifact{},
|
"llvmorg-patched", stage3Concat(t, []pkg.Artifact{},
|
||||||
t.NewPatch(),
|
t.Load(Patch),
|
||||||
), nil, nil, `
|
), nil, nil, `
|
||||||
cp -r /usr/src/llvmorg/. /work/.
|
cp -r /usr/src/llvmorg/. /work/.
|
||||||
chmod -R +w /work && cd /work
|
chmod -R +w /work && cd /work
|
||||||
@@ -201,14 +201,14 @@ cat /usr/src/llvm-patches/* | patch -p 1
|
|||||||
Cache: slices.Concat(cache, attr.cmake),
|
Cache: slices.Concat(cache, attr.cmake),
|
||||||
Append: cmakeAppend,
|
Append: cmakeAppend,
|
||||||
Extra: stage3Concat(t, attr.extra,
|
Extra: stage3Concat(t, attr.extra,
|
||||||
t.NewLibffi(),
|
t.Load(Libffi),
|
||||||
t.NewPython(),
|
t.Load(Python),
|
||||||
t.NewPerl(),
|
t.Load(Perl),
|
||||||
t.NewDiffutils(),
|
t.Load(Diffutils),
|
||||||
t.NewBash(),
|
t.Load(Bash),
|
||||||
t.NewCoreutils(),
|
t.Load(Coreutils),
|
||||||
|
|
||||||
t.NewKernelHeaders(),
|
t.Load(KernelHeaders),
|
||||||
),
|
),
|
||||||
Prefix: attr.prefix,
|
Prefix: attr.prefix,
|
||||||
|
|
||||||
@@ -327,7 +327,7 @@ ln -s \
|
|||||||
musl,
|
musl,
|
||||||
compilerRT,
|
compilerRT,
|
||||||
runtimes,
|
runtimes,
|
||||||
t.NewGit(),
|
t.Load(Git),
|
||||||
},
|
},
|
||||||
script: `
|
script: `
|
||||||
ln -s clang /work/system/bin/cc
|
ln -s clang /work/system/bin/cc
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ rmdir -v /work/lib
|
|||||||
}
|
}
|
||||||
|
|
||||||
return t.New("musl-"+version, stage3Concat(t, attr.Extra,
|
return t.New("musl-"+version, stage3Concat(t, attr.Extra,
|
||||||
t.NewMake(),
|
t.Load(Make),
|
||||||
), nil, slices.Concat([]string{
|
), nil, slices.Concat([]string{
|
||||||
"ROSA_MUSL_TARGET=" + target,
|
"ROSA_MUSL_TARGET=" + target,
|
||||||
}, attr.Env), `
|
}, attr.Env), `
|
||||||
|
|||||||
@@ -2,15 +2,14 @@ package rosa
|
|||||||
|
|
||||||
import "hakurei.app/internal/pkg"
|
import "hakurei.app/internal/pkg"
|
||||||
|
|
||||||
// NewNinja returns a [pkg.Artifact] containing an installation of Ninja.
|
func (t Toolchain) newNinja() pkg.Artifact {
|
||||||
func (t Toolchain) NewNinja() pkg.Artifact {
|
|
||||||
const (
|
const (
|
||||||
version = "1.13.2"
|
version = "1.13.2"
|
||||||
checksum = "ygKWMa0YV2lWKiFro5hnL-vcKbc_-RACZuPu0Io8qDvgQlZ0dxv7hPNSFkt4214v"
|
checksum = "ygKWMa0YV2lWKiFro5hnL-vcKbc_-RACZuPu0Io8qDvgQlZ0dxv7hPNSFkt4214v"
|
||||||
)
|
)
|
||||||
return t.New("ninja-"+version, []pkg.Artifact{
|
return t.New("ninja-"+version, []pkg.Artifact{
|
||||||
t.NewCMake(),
|
t.Load(CMake),
|
||||||
t.NewPython(),
|
t.Load(Python),
|
||||||
}, nil, nil, `
|
}, nil, nil, `
|
||||||
chmod -R +w /usr/src/ninja/
|
chmod -R +w /usr/src/ninja/
|
||||||
mkdir -p /work/system/bin/ && cd /work/system/bin/
|
mkdir -p /work/system/bin/ && cd /work/system/bin/
|
||||||
@@ -33,3 +32,4 @@ python3 /usr/src/ninja/configure.py \
|
|||||||
pkg.TarGzip,
|
pkg.TarGzip,
|
||||||
)))
|
)))
|
||||||
}
|
}
|
||||||
|
func init() { artifactsF[Ninja] = Toolchain.newNinja }
|
||||||
|
|||||||
@@ -2,14 +2,13 @@ package rosa
|
|||||||
|
|
||||||
import "hakurei.app/internal/pkg"
|
import "hakurei.app/internal/pkg"
|
||||||
|
|
||||||
// NewPerl returns a [pkg.Artifact] containing an installation of perl.
|
func (t Toolchain) newPerl() pkg.Artifact {
|
||||||
func (t Toolchain) NewPerl() pkg.Artifact {
|
|
||||||
const (
|
const (
|
||||||
version = "5.42.0"
|
version = "5.42.0"
|
||||||
checksum = "2KR7Jbpk-ZVn1a30LQRwbgUvg2AXlPQZfzrqCr31qD5-yEsTwVQ_W76eZH-EdxM9"
|
checksum = "2KR7Jbpk-ZVn1a30LQRwbgUvg2AXlPQZfzrqCr31qD5-yEsTwVQ_W76eZH-EdxM9"
|
||||||
)
|
)
|
||||||
return t.New("perl-"+version, []pkg.Artifact{
|
return t.New("perl-"+version, []pkg.Artifact{
|
||||||
t.NewMake(),
|
t.Load(Make),
|
||||||
}, nil, nil, `
|
}, nil, nil, `
|
||||||
chmod -R +w /usr/src/perl && cd /usr/src/perl
|
chmod -R +w /usr/src/perl && cd /usr/src/perl
|
||||||
|
|
||||||
@@ -32,3 +31,4 @@ make DESTDIR=/work install
|
|||||||
pkg.TarGzip,
|
pkg.TarGzip,
|
||||||
)))
|
)))
|
||||||
}
|
}
|
||||||
|
func init() { artifactsF[Perl] = Toolchain.newPerl }
|
||||||
|
|||||||
@@ -6,8 +6,7 @@ import (
|
|||||||
"hakurei.app/internal/pkg"
|
"hakurei.app/internal/pkg"
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewPython returns a [pkg.Artifact] containing an installation of Python.
|
func (t Toolchain) newPython() pkg.Artifact {
|
||||||
func (t Toolchain) NewPython() pkg.Artifact {
|
|
||||||
const (
|
const (
|
||||||
version = "3.14.2"
|
version = "3.14.2"
|
||||||
checksum = "7nZunVMGj0viB-CnxpcRego2C90X5wFsMTgsoewd5z-KSZY2zLuqaBwG-14zmKys"
|
checksum = "7nZunVMGj0viB-CnxpcRego2C90X5wFsMTgsoewd5z-KSZY2zLuqaBwG-14zmKys"
|
||||||
@@ -34,9 +33,9 @@ func (t Toolchain) NewPython() pkg.Artifact {
|
|||||||
"test_dbm_gnu",
|
"test_dbm_gnu",
|
||||||
}
|
}
|
||||||
return t.New("python-"+version, []pkg.Artifact{
|
return t.New("python-"+version, []pkg.Artifact{
|
||||||
t.NewMake(),
|
t.Load(Make),
|
||||||
t.NewZlib(),
|
t.Load(Zlib),
|
||||||
t.NewLibffi(),
|
t.Load(Libffi),
|
||||||
}, nil, []string{
|
}, nil, []string{
|
||||||
"EXTRATESTOPTS=-j0 -x " + strings.Join(skipTests, " -x "),
|
"EXTRATESTOPTS=-j0 -x " + strings.Join(skipTests, " -x "),
|
||||||
|
|
||||||
@@ -63,3 +62,4 @@ make DESTDIR=/work install
|
|||||||
pkg.TarGzip,
|
pkg.TarGzip,
|
||||||
)))
|
)))
|
||||||
}
|
}
|
||||||
|
func init() { artifactsF[Python] = Toolchain.newPython }
|
||||||
|
|||||||
@@ -235,7 +235,7 @@ ln -vs ../usr/bin /work/bin
|
|||||||
compilerRT,
|
compilerRT,
|
||||||
runtimes,
|
runtimes,
|
||||||
clang,
|
clang,
|
||||||
boot.NewBusybox(),
|
boot.Load(Busybox),
|
||||||
})
|
})
|
||||||
env = fixupEnviron(env, []string{
|
env = fixupEnviron(env, []string{
|
||||||
EnvTriplet + "=" + triplet(),
|
EnvTriplet + "=" + triplet(),
|
||||||
|
|||||||
@@ -2,14 +2,13 @@ package rosa
|
|||||||
|
|
||||||
import "hakurei.app/internal/pkg"
|
import "hakurei.app/internal/pkg"
|
||||||
|
|
||||||
// NewRsync returns a [pkg.Artifact] containing an installation of rsync.
|
func (t Toolchain) newRsync() pkg.Artifact {
|
||||||
func (t Toolchain) NewRsync() pkg.Artifact {
|
|
||||||
const (
|
const (
|
||||||
version = "3.4.1"
|
version = "3.4.1"
|
||||||
checksum = "VBlTsBWd9z3r2-ex7GkWeWxkUc5OrlgDzikAC0pK7ufTjAJ0MbmC_N04oSVTGPiv"
|
checksum = "VBlTsBWd9z3r2-ex7GkWeWxkUc5OrlgDzikAC0pK7ufTjAJ0MbmC_N04oSVTGPiv"
|
||||||
)
|
)
|
||||||
return t.New("rsync-"+version, []pkg.Artifact{
|
return t.New("rsync-"+version, []pkg.Artifact{
|
||||||
t.NewMake(),
|
t.Load(Make),
|
||||||
}, nil, nil, `
|
}, nil, nil, `
|
||||||
cd "$(mktemp -d)"
|
cd "$(mktemp -d)"
|
||||||
/usr/src/rsync/configure --prefix=/system \
|
/usr/src/rsync/configure --prefix=/system \
|
||||||
@@ -27,3 +26,4 @@ make DESTDIR=/work install
|
|||||||
pkg.TarGzip,
|
pkg.TarGzip,
|
||||||
)))
|
)))
|
||||||
}
|
}
|
||||||
|
func init() { artifactsF[Rsync] = Toolchain.newRsync }
|
||||||
|
|||||||
@@ -2,14 +2,13 @@ package rosa
|
|||||||
|
|
||||||
import "hakurei.app/internal/pkg"
|
import "hakurei.app/internal/pkg"
|
||||||
|
|
||||||
// NewZlib returns a new [pkg.Artifact] containing an installation of zlib.
|
func (t Toolchain) newZlib() pkg.Artifact {
|
||||||
func (t Toolchain) NewZlib() pkg.Artifact {
|
|
||||||
const (
|
const (
|
||||||
version = "1.3.1"
|
version = "1.3.1"
|
||||||
checksum = "E-eIpNzE8oJ5DsqH4UuA_0GDKuQF5csqI8ooDx2w7Vx-woJ2mb-YtSbEyIMN44mH"
|
checksum = "E-eIpNzE8oJ5DsqH4UuA_0GDKuQF5csqI8ooDx2w7Vx-woJ2mb-YtSbEyIMN44mH"
|
||||||
)
|
)
|
||||||
return t.New("zlib-"+version, []pkg.Artifact{
|
return t.New("zlib-"+version, []pkg.Artifact{
|
||||||
t.NewMake(),
|
t.Load(Make),
|
||||||
}, nil, nil, `
|
}, nil, nil, `
|
||||||
cd "$(mktemp -d)"
|
cd "$(mktemp -d)"
|
||||||
CC="clang -fPIC" /usr/src/zlib/configure \
|
CC="clang -fPIC" /usr/src/zlib/configure \
|
||||||
@@ -23,3 +22,4 @@ make DESTDIR=/work install
|
|||||||
pkg.TarGzip,
|
pkg.TarGzip,
|
||||||
)))
|
)))
|
||||||
}
|
}
|
||||||
|
func init() { artifactsF[Zlib] = Toolchain.newZlib }
|
||||||
|
|||||||
Reference in New Issue
Block a user