mirror of
https://github.com/anyproto/anytype-heart.git
synced 2025-06-08 05:47:07 +09:00
214 lines
4.4 KiB
Go
214 lines
4.4 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"os/exec"
|
|
"path/filepath"
|
|
)
|
|
|
|
const (
|
|
repack = "repack"
|
|
iosArm64 = "ios_arm64.a"
|
|
iosArm64Sim = "ios_arm64_sim.a"
|
|
iosX86Sim = "ios_x86_sim.a"
|
|
iosArm64Repack = "iosArm64"
|
|
iosArm64SimRepack = "iosArm64Sim"
|
|
iosX86SimRepack = "iosX86Sim"
|
|
combined = "libcombined.a"
|
|
)
|
|
|
|
type iosContext struct {
|
|
tantivyArm64 string
|
|
tantivyArm64Sim string
|
|
tantivyX86Sim string
|
|
iosLib string
|
|
}
|
|
|
|
func main() {
|
|
err := delegateMain()
|
|
if err != nil {
|
|
fmt.Println("Error:", err)
|
|
os.Exit(-1)
|
|
}
|
|
}
|
|
|
|
func delegateMain() error {
|
|
ctx := new(iosContext)
|
|
ctx.tantivyArm64 = "deps/libs/ios-arm64/libtantivy_go.a"
|
|
ctx.tantivyArm64Sim = "deps/libs/ios-arm64-sim/libtantivy_go.a"
|
|
ctx.tantivyX86Sim = "deps/libs/ios-amd64/libtantivy_go.a"
|
|
ctx.iosLib = "dist/ios/Lib.xcframework"
|
|
|
|
iosArm64Lib, iosSimLib, err := thinIosLibs(ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = repackIosLibsWithTantivy(ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = removeOldIosLibs(iosArm64Lib, iosSimLib)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = createNewIosLibs(iosArm64Lib, iosSimLib)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func createNewIosLibs(iosArm64Lib string, iosSimLib string) error {
|
|
defer func() {
|
|
_ = execute("Cleanup:", "rm", "-rf", repack)
|
|
_ = execute("Cleanup:", "rm", iosArm64)
|
|
_ = execute("Cleanup:", "rm", iosArm64Sim)
|
|
_ = execute("Cleanup:", "rm", iosX86Sim)
|
|
}()
|
|
|
|
err := execute("Error creating lib:", "lipo", "-create",
|
|
filepath.Join(repack, iosArm64Repack, combined), "-output", "Lib")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = execute("Move created lib:", "mv", "Lib", iosArm64Lib)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = execute("Error creating lib:", "lipo", "-create",
|
|
filepath.Join(repack, iosArm64SimRepack, combined),
|
|
filepath.Join(repack, iosX86SimRepack, combined), "-output", "Lib")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = execute("Move created lib:", "mv", "Lib", iosSimLib)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func removeOldIosLibs(iosArm64Lib string, iosSimLib string) error {
|
|
err := execute("Error removing lib:", "rm", iosArm64Lib)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = execute("Error removing lib:", "rm", iosSimLib)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func thinIosLibs(ctx *iosContext) (string, string, error) {
|
|
iosArm64Lib := filepath.Join(ctx.iosLib, "ios-arm64", "Lib.framework", "Lib")
|
|
err := execute("Error extracting lib:", "lipo", iosArm64Lib, "-thin", "arm64", "-output", iosArm64)
|
|
if err != nil {
|
|
return "", "", err
|
|
}
|
|
|
|
iosSimLib := filepath.Join(ctx.iosLib, "ios-arm64_x86_64-simulator", "Lib.framework", "Lib")
|
|
err = execute("Error extracting lib:", "lipo", iosSimLib, "-thin", "arm64", "-output", iosArm64Sim)
|
|
if err != nil {
|
|
return "", "", err
|
|
}
|
|
|
|
err = execute("Error extracting lib:", "lipo", iosSimLib, "-thin", "x86_64", "-output", iosX86Sim)
|
|
if err != nil {
|
|
return "", "", err
|
|
}
|
|
return iosArm64Lib, iosSimLib, nil
|
|
}
|
|
|
|
func repackIosLibsWithTantivy(ctx *iosContext) error {
|
|
err := os.MkdirAll(repack, os.ModePerm)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = os.Chdir(repack)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = repackLib(iosArm64Repack, ctx.tantivyArm64, iosArm64)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = repackLib(iosArm64SimRepack, ctx.tantivyArm64Sim, iosArm64Sim)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = repackLib(iosX86SimRepack, ctx.tantivyX86Sim, iosX86Sim)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = os.Chdir("..")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func repackLib(dir string, tantivyLib string, iosLib string) error {
|
|
err := os.MkdirAll(dir, os.ModePerm)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = os.Chdir(dir)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = execute("Error extracting lib:", "ar", "-x", filepath.Join("..", "..", tantivyLib))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = execute("Error extracting lib:", "ar", "-x", filepath.Join("..", "..", iosLib))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
oFiles, err := filepath.Glob("*.o")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = execute("Error combine lib:", "ar", append([]string{"-qc", combined}, oFiles...)...)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = os.Chdir("..")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func execute(errText string, name string, arg ...string) error {
|
|
cmd := exec.Command(name, arg...)
|
|
cmd.Stdout = os.Stdout
|
|
cmd.Stderr = os.Stderr
|
|
err := cmd.Run()
|
|
if err != nil {
|
|
fmt.Println(errText, err)
|
|
return err
|
|
}
|
|
return nil
|
|
}
|