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) os.RemoveAll(path.Join(value, "build", "исх")) //копируем тривиль исходники в build utils.CopyDir("./исх", "./build/исх") 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) } } os.RemoveAll("./_си") //собираем Тривиль код в Си cmd := exec.Command("./трик.exe", "-отл-сборка=истина", "-сборка=ложь", "исх") 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 */