58 lines
1.0 KiB
Go
58 lines
1.0 KiB
Go
//go:build !js
|
|
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"go/build"
|
|
"io"
|
|
"os"
|
|
"os/exec"
|
|
"path/filepath"
|
|
|
|
"git.handmade.network/hmn/hmn/src/utils"
|
|
)
|
|
|
|
func main() {
|
|
const publicDir = "../../../public"
|
|
compile := exec.Command("go", "build", "-o", filepath.Join(publicDir, "parsing.wasm"))
|
|
compile.Env = append(os.Environ(), "GOOS=js", "GOARCH=wasm")
|
|
run(compile)
|
|
|
|
utils.Must(copy(
|
|
fmt.Sprintf("%s/misc/wasm/wasm_exec.js", build.Default.GOROOT),
|
|
filepath.Join(publicDir, "go_wasm_exec.js"),
|
|
))
|
|
}
|
|
|
|
func run(cmd *exec.Cmd) {
|
|
output, err := cmd.CombinedOutput()
|
|
fmt.Print(string(output))
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
if exit, ok := err.(*exec.ExitError); ok {
|
|
os.Exit(exit.ExitCode())
|
|
}
|
|
}
|
|
}
|
|
|
|
func copy(src string, dst string) error {
|
|
s, err := os.Open(src)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer s.Close()
|
|
|
|
d, err := os.Create(dst)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if _, err := io.Copy(d, s); err != nil {
|
|
d.Close()
|
|
return err
|
|
}
|
|
|
|
return d.Close()
|
|
}
|