Files
old_carga/internal/target/darwin/darwin_target.go
2025-08-20 21:15:35 +03:00

101 lines
3.9 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package darwin
import (
"fmt"
"log"
"os"
"os/exec"
"path"
"git.gulenok.ru/greenhaze/old_carga/internal/global"
"git.gulenok.ru/greenhaze/old_carga/internal/utils"
)
type DarwinBuildTarget struct {
}
func (d DarwinBuildTarget) CreateBuildProject(config global.ProjectFile) bool {
//создаем папку в которой будем проводить все наши изуверства
// поскольку я не знаю насколько ниндзя/make дружат с кириллицей, пока что пусть называется build
value, err := os.Getwd()
if err != nil {
log.Fatalln("карга не смогла получить рабочую директорию")
}
os.Mkdir(path.Join(value, "build"), 0755)
//копируем тривиль исходники в build
utils.CopyDir("./исх", "./build/src")
os.Chdir("./build")
//качаем бинарник компилятора если оного нет и не забываем удалить забытые скрипты
if _, err := os.Stat("./трик"); os.IsNotExist(err) {
log.Println("АХТУНГ. Поскольку это дев билд а у меня адекватно не завелся компилятор, сейчас оно качает бинарь с релиза каждый раз")
cmd := exec.Command("wget", "https://gitflic.ru/project/alekseinedoria/trivil-0/release/c09308df-49c1-4297-8e1c-a41030933720/df79d7c6-fd81-420c-bb42-6f3115dbbc2c/download")
if err := cmd.Run(); err != nil {
log.Fatal(err)
}
cmd = exec.Command("tar", "-zxf", "download")
if err := cmd.Run(); err != nil {
log.Fatal(err)
}
//а вот это в свою очередь уже костыль потому что из релиза забыли убрать билд кеши
cmd = exec.Command("rm", "-rf", "./_си")
cmd.Stdout = os.Stdout
if err := cmd.Run(); err != nil {
log.Fatal(err)
}
}
//собираем Тривиль код в Си
cmd := exec.Command("./трик.exe", "-отл-сборка=истина", "-сборка=ложь", "src")
cmd.Stdout = os.Stdout
if err := cmd.Run(); err != nil {
log.Fatalf("сборка триком не удалась %s", err)
}
// внедряем Си
log.Println(config.Modules)
for _, v := range config.Modules {
err := utils.CopyFile(fmt.Sprintf("../си/%s", v.CFile), fmt.Sprintf("./_си/%s", v.CFile))
if err != nil {
log.Fatalf("карга не смогла скопировать Си файл %s", err)
}
}
//собираем Makefile
files, err := getCFilesInCurrentDir()
if err != nil {
panic(err)
}
out, err := renderMakefile(Vars{
FILES: files,
RUNTIME: "../runtime",
TARGET: "target",
})
if err != nil {
panic(err)
}
err = os.WriteFile("./_си/Makefile", []byte(out), 0644)
if err != nil {
log.Fatalln("Карга не смогла записать Makefile")
}
os.Chdir("./_си")
// Собираем
cmd = exec.Command("make")
cmd.Stdout = os.Stdout
if err := cmd.Run(); err != nil {
log.Fatalf("сборка make не удалась %s", err)
}
return true
}
/*
*
* pushd . &&
* cd /home/dmitrys/devel/trivil-project/trivil-0/scripts/rel/_си && clang yunikod.c utf8.c stroki.c vyvod.c fnv.c komstroka.c platforma.c fayily.c str_str.c osh_soobshcheniya.c osnova.c klyuchevye_slova.c lekser.c asd.c asd_pokaz.c slovar__moduli.c slovar__sostoyanie.c slovar__opisaniyi.c imena.c slovar__tcel_tcel.c kontrol_.c semantika.c perevod_imen.c str_log.c imena_opisaniyi.c imena_tipov.c si.c ar.c gen.c parser.c slovar__importy.c kompilyator.c trik.c /home/dmitrys/devel/trivil-project/trivil-0/scripts/rel/runtime/rt_api.c /home/dmitrys/devel/trivil-project/trivil-0/scripts/rel/runtime/rt_sysapi.c /home/dmitrys/devel/trivil-project/trivil-0/scripts/rel/runtime/rt_syscrash_linux.c -lm -rdynamic -I/home/dmitrys/devel/trivil-project/trivil-0/scripts/rel/runtime -o ../трик.exe && popd
*/