feat(build): add cleanbuild system + a touch of color

This commit is contained in:
Erica Marigold 2024-07-22 19:34:32 +05:30
parent 9088f6188d
commit efaccf57ad
No known key found for this signature in database
GPG key ID: 2768CC0C23D245D1

View file

@ -5,6 +5,9 @@ import (
"os" "os"
"path" "path"
"strings" "strings"
"github.com/gookit/color"
"golang.org/x/term"
) )
const LUAU_VERSION = "0.634" const LUAU_VERSION = "0.634"
@ -17,6 +20,8 @@ func bail(err error) {
} }
func buildVm(artifactPath string, cmakeFlags ...string) { func buildVm(artifactPath string, cmakeFlags ...string) {
color.Blue.Println("> Cloning luau-lang/luau")
dir, homeDirErr := os.MkdirTemp("", "lei-build") dir, homeDirErr := os.MkdirTemp("", "lei-build")
bail(homeDirErr) bail(homeDirErr)
@ -26,6 +31,10 @@ func buildVm(artifactPath string, cmakeFlags ...string) {
Exec("git", "", "clone", "https://github.com/luau-lang/luau.git", dir) Exec("git", "", "clone", "https://github.com/luau-lang/luau.git", dir)
Exec("git", dir, "checkout", LUAU_VERSION) Exec("git", dir, "checkout", LUAU_VERSION)
color.Green.Printf("> Cloned repo to%s\n\n", dir)
color.Blue.Println("> Compile libLuau.VM.a")
// Build the Luau VM using CMake // Build the Luau VM using CMake
buildDir := path.Join(dir, "cmake") buildDir := path.Join(dir, "cmake")
bail(os.Mkdir(buildDir, os.ModePerm)) bail(os.Mkdir(buildDir, os.ModePerm))
@ -34,9 +43,8 @@ func buildVm(artifactPath string, cmakeFlags ...string) {
Exec("cmake", buildDir, append(defaultCmakeFlags, cmakeFlags...)...) Exec("cmake", buildDir, append(defaultCmakeFlags, cmakeFlags...)...)
Exec("cmake", buildDir, "--build", ".", "--target Luau.VM", "--config", "RelWithDebInfo") Exec("cmake", buildDir, "--build", ".", "--target Luau.VM", "--config", "RelWithDebInfo")
// TODO: Write status file including version & build type (vector3 or vector4) color.Green.Println("> Successfully compiled!\n")
// If current build type and version differ, then rebuild from scratch and
// replace
// Copy the artifact to the artifact directory // Copy the artifact to the artifact directory
artifactFile, artifactErr := os.ReadFile(path.Join(buildDir, ARTIFACT_NAME)) artifactFile, artifactErr := os.ReadFile(path.Join(buildDir, ARTIFACT_NAME))
bail(artifactErr) bail(artifactErr)
@ -49,6 +57,7 @@ func main() {
artifactDir := path.Join(homeDir, ".lei") artifactDir := path.Join(homeDir, ".lei")
artifactPath := path.Join(artifactDir, ARTIFACT_NAME) artifactPath := path.Join(artifactDir, ARTIFACT_NAME)
lockfilePath := path.Join(artifactDir, ".lock")
bail(os.MkdirAll(artifactDir, os.ModePerm)) bail(os.MkdirAll(artifactDir, os.ModePerm))
@ -62,16 +71,23 @@ func main() {
for _, arg := range args { for _, arg := range args {
if arg == "--enable-vector4" { if arg == "--enable-vector4" {
features = append(features, "LUAU_VECTOR4") features = append(features, "LUAU_VECTOR4")
// FIXME: This flag apparently isn't recognized by cmake for some reason
cmakeFlags = append(cmakeFlags, "-DLUAU_VECTOR_SIZE=4") cmakeFlags = append(cmakeFlags, "-DLUAU_VECTOR_SIZE=4")
} else { } else {
goArgs = append(goArgs, arg) goArgs = append(goArgs, arg)
} }
} }
if _, err := os.Stat(artifactPath); err == nil { lockfileContents, err := os.ReadFile(lockfilePath)
bail(err)
serFeatures := fmt.Sprintf("%v", features)
toCleanBuild := string(lockfileContents) != serFeatures
if _, err := os.Stat(artifactPath); err == nil && !toCleanBuild {
fmt.Printf("[build] Using existing artifact at %s\n", artifactPath) fmt.Printf("[build] Using existing artifact at %s\n", artifactPath)
} else { } else {
buildVm(artifactPath, cmakeFlags...) buildVm(artifactPath, cmakeFlags...)
bail(os.WriteFile(lockfilePath, []byte(serFeatures), os.ModePerm))
} }
buildTags := []string{} buildTags := []string{}
@ -79,6 +95,10 @@ func main() {
buildTags = append(buildTags, []string{"-tags", strings.Join(features, ",")}...) buildTags = append(buildTags, []string{"-tags", strings.Join(features, ",")}...)
} }
w, _, termErr := term.GetSize(int(os.Stdout.Fd()))
bail(termErr)
fmt.Println(strings.Repeat("=", w))
subcommand := goArgs[0] subcommand := goArgs[0]
goArgs = goArgs[1:] goArgs = goArgs[1:]
combinedArgs := append(buildTags, goArgs...) combinedArgs := append(buildTags, goArgs...)