ocaml / dune

A composable build system for OCaml.
https://dune.build/
MIT License
1.62k stars 401 forks source link

dune build -x accepts only one toolchain while dune-workspace accepts many #10989

Open jonahbeckford opened 3 days ago

jonahbeckford commented 3 days ago

Expected Behavior

I think the arity should be the same for both.

(context (default (targets native windows android)))

should be equivalent to

dune build -x windows -x android

That means the following will break:

build: [
  ["dune" "subst"] {dev}
  [
    "dune"
    "build"
    "-p"
    name
    "-j"
    jobs

    # Dune 3.16.0 does not support more than one [-x] cross-compiling toolchain.
    "-x" {dkml-target-abi-android_arm32v7a:installed} "android_arm32v7a" {dkml-target-abi-android_arm32v7a:installed}
    "-x" {dkml-target-abi-android_arm64v8a:installed} "android_arm64v8a" {dkml-target-abi-android_arm64v8a:installed}
    "-x" {dkml-target-abi-android_x86:installed} "android_x86" {dkml-target-abi-android_x86:installed}
    "-x" {dkml-target-abi-android_x86_64:installed} "android_x86_64" {dkml-target-abi-android_x86_64:installed}
    "-x" {dkml-target-abi-darwin_arm64:installed} "darwin_arm64" {dkml-target-abi-darwin_arm64:installed}
    "-x" {dkml-target-abi-darwin_x86_64:installed} "darwin_x86_64" {dkml-target-abi-darwin_x86_64:installed}
    "-x" {dkml-target-abi-linux_x86_64:installed} "linux_x86_64" {dkml-target-abi-linux_x86_64:installed}
    "-x" {dkml-target-abi-linux_x86:installed} "linux_x86" {dkml-target-abi-linux_x86:installed}
    "-x" {dkml-target-abi-windows_arm64:installed} "windows_arm64" {dkml-target-abi-windows_arm64:installed}
    "-x" {dkml-target-abi-windows_x86:installed} "windows_x86" {dkml-target-abi-windows_x86:installed}
    "-x" {dkml-target-abi-windows_x86_64:installed} "windows_x86_64" {dkml-target-abi-windows_x86_64:installed}

    "@install"
    "@runtest" {with-test}
    "@doc" {with-doc}
  ]
]

Actual Behavior

dune: option '-x' cannot be repeated

I think the root of the problem is https://github.com/ocaml/dune/blob/57f435d02f2c01568fea9c3a7b11f74642a33322/src/dune_rules/workspace.mli#L131

Reproduction

dune build -x windows -x android in any Dune project.

Specifications

rgrinberg commented 1 day ago

Sounds like a good suggestion. Do you want to send a PR?