roc-lang / examples

All kinds of Roc examples
https://www.roc-lang.org/examples
Creative Commons Zero v1.0 Universal
29 stars 14 forks source link

Cross-compile Go platform #173

Closed lukewilliamboswell closed 4 months ago

lukewilliamboswell commented 4 months ago

main =

    buildGoTarget! MacosArm64

    # TODO -- why is this failing with "build constraints exclude all Go files"?
    buildGoTarget! MacosX64 

    # buildGoTarget! LinuxArm64
    # etc

    Stdout.line "DONE"

buildGoTarget : SupportedTarget -> Task {} _
buildGoTarget = \target -> 

    (goos, goarch, prebuiltBinary) = when target is
        MacosArm64 -> ("darwin", "arm64", "macos-arm64.a")
        MacosX64 -> ("darwin", "amd64", "macos-x64")
        LinuxArm64 -> ("linux", "arm64", "linux-arm64.a")
        LinuxX64 -> ("linux", "amd64", "linux-x64.a")
        WindowsArm64 -> ("windows", "arm64", "windows-arm64.a")
        WindowsX64 -> ("windows", "amd64", "windows-x64")

    Cmd.new "go"
    |> Cmd.envs [("GOOS", goos), ("GOARCH", goarch)]
    |> Cmd.args ["build", "-C", "host", "-buildmode=c-archive", "-o","libhost.a"]
    |> Cmd.status
    |> Task.mapErr! \err -> BuildErr goos goarch (Inspect.toStr err)

    Cmd.exec "cp" ["host/libhost.a", "platform/$(prebuiltBinary)"]
    |> Task.mapErr! \err -> CpErr (Inspect.toStr err)
lukewilliamboswell commented 4 months ago

Closing as not planned