{"id":18841925,"url":"https://github.com/diskuv/dkml-workflows","last_synced_at":"2025-07-07T14:32:58.009Z","repository":{"id":41287564,"uuid":"481075497","full_name":"diskuv/dkml-workflows","owner":"diskuv","description":"GitLab CI/CD and GitHub Action workflows used by and with DkML tooling","archived":false,"fork":false,"pushed_at":"2024-09-12T03:40:14.000Z","size":2187,"stargazers_count":8,"open_issues_count":2,"forks_count":1,"subscribers_count":1,"default_branch":"v1","last_synced_at":"2025-04-14T07:45:45.285Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/diskuv.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-04-13T04:52:53.000Z","updated_at":"2024-09-12T03:40:23.000Z","dependencies_parsed_at":"2023-01-31T11:01:24.905Z","dependency_job_id":"9f81d0ea-20db-42e4-a02f-65d26b551e71","html_url":"https://github.com/diskuv/dkml-workflows","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/diskuv/dkml-workflows","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/diskuv%2Fdkml-workflows","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/diskuv%2Fdkml-workflows/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/diskuv%2Fdkml-workflows/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/diskuv%2Fdkml-workflows/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/diskuv","download_url":"https://codeload.github.com/diskuv/dkml-workflows/tar.gz/refs/heads/v1","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/diskuv%2Fdkml-workflows/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264092012,"owners_count":23556217,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-08T02:53:03.004Z","updated_at":"2025-07-07T14:32:57.955Z","avatar_url":"https://github.com/diskuv.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# dkml-workflows\n\nGitLab CI/CD, GitHub Actions and desktop scripts to setup DkML compilers. DkML helps you distribute native OCaml applications on the most common operating systems.\n\nTable of Contents:\n\n- [dkml-workflows](#dkml-workflows)\n  - [Configure your project](#configure-your-project)\n    - [`ci/build-test.sh`](#cibuild-testsh)\n  - [Examples](#examples)\n  - [Using the GitLab CI/CD backend](#using-the-gitlab-cicd-backend)\n  - [Using the GitHub Actions backend](#using-the-github-actions-backend)\n  - [Using the Personal Computer backend](#using-the-personal-computer-backend)\n    - [Windows backend](#windows-backend)\n    - [macOS backend](#macos-backend)\n    - [Linux backends](#linux-backends)\n  - [Distributing your executable](#distributing-your-executable)\n    - [Distributing your Windows executables](#distributing-your-windows-executables)\n  - [Advanced Usage](#advanced-usage)\n    - [Job Inputs](#job-inputs)\n      - [SKIP\\_OPAM\\_MODIFICATIONS](#skip_opam_modifications)\n      - [SECONDARY\\_SWITCH](#secondary_switch)\n      - [CACHE\\_PREFIX](#cache_prefix)\n      - [PRIMARY\\_SWITCH\\_SKIP\\_INSTALL](#primary_switch_skip_install)\n    - [Matrix Variables](#matrix-variables)\n      - [gl\\_image](#gl_image)\n      - [gh\\_os](#gh_os)\n      - [opam\\_root](#opam_root)\n      - [vsstudio\\_hostarch](#vsstudio_hostarch)\n      - [vsstudio\\_arch](#vsstudio_arch)\n      - [vsstudio\\_(others)](#vsstudio_others)\n      - [ocaml\\_options](#ocaml_options)\n  - [Sponsor](#sponsor)\n\nThis project gives you:\n\n- \"`compilers`\" workflow scripts to build and automatically create releases of OCaml native executables\n\nOther types of workflow scripts may be added in the future.\n\nIn contrast to the conventional [setup-ocaml](https://github.com/marketplace/actions/set-up-ocaml) GitHub Action:\n\n| `compilers`                          | `setup-ocaml`             | Consequence                                                                                                                                                                                                                                                                                               |\n| ------------------------------------ | ------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| dkml-base-compiler                   | ocaml-base-compiler       | `compilers` **only supports 4.14.2 today**. `setup-ocaml` supports all versions and variants of OCaml including OCaml 5                                                                                                                                                                                   |\n| GitHub Local Action                  | GitHub Marketplace Action | `compilers` uses local scripts to implement the GitHub build logic, while `setup-ocaml` is distributed through GitHub Marketplace which is easier to use                                                                                                                                                  |\n| GitLab CI/CD Local Include           | *not supported*           | `compilers` supports GitLab CI/CD                                                                                                                                                                                                                                                                         |\n| Personal Computer Scripts            | *not supported*           | `compilers` can generates scripts to simulate CI on your personal computer for troubleshooting                                                                                                                                                                                                            |\n| MSVC + MSYS2                         | GCC + Cygwin              | On Windows `compilers` can let your native code use ordinary Windows libraries without ABI conflicts. You can also distribute your executables without the license headache of redistributing or statically linking `libgcc_s_seh` and `libstdc++`                                                        |\n| dkml-base-compiler                   | ocaml-base-compiler       | On macOS, `compilers` cross-compiles to ARM64 with `dune -x darwin_arm64`                                                                                                                                                                                                                                 |\n| CentOS 7 and Linux distros from 2014 | Latest Ubuntu             | On Linux, `compilers` builds with an old GLIBC. `compilers` dynamically linked Linux executables will be highly portable as GLIBC compatibility issues should be rare, and compatible with the unmodified LGPL license used by common OCaml dependencies like [GNU MP](https://gmplib.org/manual/Copying) |\n| 1 yrs                                | 4 yrs                     | `setup-ocaml` is officially supported and well-tested.                                                                                                                                                                                                                                                    |\n| Some pinned packages                 | No packages pinned        | `compilers`, for some packages, must pin the version so that cross-platform patches (especially for Windows) are available. With `setup-ocaml` you are free to use any version of any package                                                                                                             |\n| diskuv/diskuv-opam-repository        | fdopen/opam-repository    | Custom patches for Windows are sometimes needed. `compilers` uses a much smaller set of patches. `setup-ocaml` uses a large but deprecated set of patches.                                                                                                                                                |\n\n\u003e Put simply, use the `compilers` workflows when you are distributing executables or libraries to the public. Use `setup-ocaml` for all other needs.\n\nThe `compilers` workflows will setup the following OCaml build environments for you:\n\n| ABIs                         | Native `ocamlopt` compiler supports building executables for the following operating systems:                                            |\n| ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |\n| `win32-windows_x86`          | 32-bit Windows [1] for Intel/AMD CPUs                                                                                                    |\n| `win32-windows_x86_64`       | 64-bit Windows [1] for Intel/AMD CPUs                                                                                                    |\n| `macos-darwin_all`           | 64-bit macOS for Intel and Apple Silicon CPUs. Using `dune -x darwin_arm64` will cross-compile [2] to both; otherwise defaults to Intel. |\n| `manylinux2014-linux_x86`    | 32-bit Linux: CentOS 7, CentOS 8, Fedora 32+, Mageia 8+, openSUSE 15.3+, Photon OS 4.0+ (3.0+ with updates), Ubuntu 20.04+               |\n| `manylinux2014-linux_x86_64` | 64-bit Linux: CentOS 7, CentOS 8, Fedora 32+, Mageia 8+, openSUSE 15.3+, Photon OS 4.0+ (3.0+ with updates), Ubuntu 20.04+               |\n\n\u003e **[1]** See [Distributing your Windows executables](#distributing-your-windows-executables) for further details\n\u003e\n\u003e **[2]** Cross-compiling typically requires that you use Dune to build all your OCaml package dependencies.\n\u003e [opam monorepo](https://github.com/ocamllabs/opam-monorepo#readme) makes it easy to do exactly that.\n\u003e Alternatively you can directly use [findlib toolchains](http://projects.camlcity.org/projects/dl/findlib-1.9.3/doc/ref-html/r865.html).\n\nYou can follow the sections on this page, or you can copy one of the examples:\n\n| Example                                                                                      | Who For                                                                                                                                         |\n| -------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |\n| [dkml-workflows-regular-example](https://github.com/diskuv/dkml-workflows-regular-example)   | Everybody else                                                                                                                                  |\n| [dkml-workflows-monorepo-example](https://github.com/diskuv/dkml-workflows-monorepo-example) | **Not ready for public use yet!**\u003cbr\u003eYou want to cross-compile ARM64 on Mac Intel.\u003cbr\u003eYou are building [Mirage unikernels](https://mirage.io/). |\n\nFor news about DkML,\n[![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/diskuv.svg?style=social\u0026label=Follow%20%40diskuv)](https://twitter.com/diskuv) on Twitter.\n\n## Configure your project\n\nFIRST, let's ensure you have a `./dk` in your project ...\n\n- On Windows **PowerShell**, macOS and desktop Linux:\n\n  ```sh\n  git clone https://gitlab.com/diskuv/dktool.git\n  dktool/dk user.dkml.wrapper.upgrade HERE\n  ./dk dkml.wrapper.upgrade DONE\n  ```\n\n- Or in Windows **Command Prompt**:\n\n  ```dosbatch\n  git clone https://gitlab.com/diskuv/dktool.git\n  dktool\\dk user.dkml.wrapper.upgrade HERE\n  .\\dk dkml.wrapper.upgrade DONE\n  ```\n\nSECOND, create the scaffolding files with **one** of the following options ...\n\n```sh\n# FYI: You can get help to see what will happen with:\n#         ./dk dkml.workflow.compilers HELP\n\n# If you want GitHub scripts\n./dk dkml.workflow.compilers CI GitHub\n\n# If you want GitHub scripts, but only for Windows CI\n./dk dkml.workflow.compilers CI GitHub OS Windows\n\n# If you want just GitLab script\n./dk dkml.workflow.compilers CI GitLab\n```\n\nand then commit the new files that were created ....\n\n```sh\ngit add -A\ngit update-index --chmod=+x ./dk ci/build-test.sh\ngit commit -m \"ci: DkML compilers\"\n```\n\n### `ci/build-test.sh`\n\nThe `./dk dkml.workflow.compilers ...` command will have created a `ci/build-test.sh` POSIX shell script for you if it wasn't present already.\n\nYour build logic will be inside the `ci/build-test.sh` script. This will work even on Windows; just be careful on Windows that you save the shell script with **LF line endings (not CRLF), and use UTF-8 encoding**.\n\nThe [Examples](#examples) section has comprehensive examples.\n\n*The script does not need to be named `ci/build-test.sh`. However the documentation and the auto-generated scripts (which you can change) assumes that filename.*\n\n## Examples\n\nThe full list of examples is:\n\n| Example                                                                                      | Who For                                                                                                                                         |\n| -------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |\n| [dkml-workflows-monorepo-example](https://github.com/diskuv/dkml-workflows-monorepo-example) | **Not ready for public use yet!**\u003cbr\u003eYou want to cross-compile ARM64 on Mac Intel.\u003cbr\u003eYou are building [Mirage unikernels](https://mirage.io/). |\n| [dkml-workflows-regular-example](https://github.com/diskuv/dkml-workflows-regular-example)   | Everybody else                                                                                                                                  |\n\n## Using the GitLab CI/CD backend\n\n\u003e macOS runners are not available in the GitLab CI/CD shared fleet unless\n\u003e you apply and are approved at\n\u003e \u003chttps://gitlab.com/gitlab-com/runner-saas-macos-access-requests/-/issues/new\u003e. More details are\n\u003e available at \u003chttps://gitlab.com/gitlab-com/runner-saas-macos-access-requests/-/blob/main/README.md\u003e\n\u003e\n\u003e This documentation assumes you have not been approved. Look inside .gitlab-ci.yml\n\u003e and uncomment the macos:build section once you have been approved for macOS.\n\nThe [Examples](#examples) include more features, like the uploading and releasing of your built artifacts.\n\n## Using the GitHub Actions backend\n\nThe [Examples](#examples) include more features, like the uploading and releasing of your built artifacts.\n\n## Using the Personal Computer backend\n\nThis backend is meant for troubleshooting when a GitLab CI/CD or GitHub Actions\nbackend fails to build your code. You can do the build locally!\n\n\u003e Tip: The Linux backend can be run from macOS and Windows PCs because it\n\u003e uses Docker.\n\n### Windows backend\n\nOn Windows in PowerShell run:\n\n```powershell\n./dk dkml.workflow.compilers CI Desktop OS Windows\n\u0026 .ci\\dkml-compilers\\pc\\setup-dkml-windows_x86_64.ps1\n```\n\nYou can use `\u0026 .ci\\dkml-compilers\\pc\\setup-dkml-windows_x86.ps1` for 32-bit Windows\nbuilds.\n\nAfter running the `.ps1` script you will see instructions for running\nOpam commands in your PowerShell terminal.\n\nTo see all of the advanced options that can be set, use:\n\n```powershell\nget-help .ci\\dkml-compilers\\pc\\setup-dkml-windows_x86_64.ps1 -Full\n```\n\nSee [Advanced Usage: Job Inputs](#job-inputs) for some of the advanced options that\ncan be set.\n\n### macOS backend\n\nRun:\n\n```bash\n./dk dkml.workflow.compilers CI Desktop OS Darwin\n\n# PICK EITHER:\n#      macOS/Intel (or macOS/ARM64 with Rosetta emulator)\nsh .ci/dkml-compilers/pc/setup-dkml-darwin_x86_64.sh\n# -OR- macOS/ARM64\nsh .ci/dkml-compilers/pc/setup-dkml-darwin_arm64.sh\n```\n\nTo see all of the advanced options that can be set, use:\n\n```powershell\nsh .ci/dkml-compilers/pc/setup-dkml-darwin_arm64.sh -h\n```\n\nSee [Advanced Usage: Job Inputs](#job-inputs) for some of the advanced options that\ncan be set.\n\n### Linux backends\n\nRun one of:\n\n```bash\n./dk dkml.workflow.compilers CI Desktop OS Linux\n\n# PICK EITHER:\n#   Linux on 64-bit Intel/AMD. Docker is required.\n#   - Running this from macOS/Intel with Docker or macOS/Silicon with Docker will also work\n#   - Running this using with-dkml.exe on Windows with Docker will also work\n#     (the normal Linux containers host, not the Windows containers host). The\n#     easiest is using 'with-dkml sh ...' if you have DkML. You can also\n#     download MSYS2 from https://www.msys2.org/#installation, or Cygwin, and then\n#     run MSYS2 or Cygwin, but you must make sure that 'docker' is in your PATH\n#     (ex. export PATH='/c/Program Files/Docker/Docker/resources/bin':\"$PATH\").\nsh .ci/dkml-compilers/pc/setup-dkml-linux_x86_64.sh\n# -OR-\n#   Linux on 32-bit Intel/AMD. Docker is required.\n#   - Running this from macOS/Intel should also work (not tested). macOS/Silicon will not work.\n#   - Running this on Windows should also work using the same guidance as\n#     on Linux 64-bit. Has not been tested\nsh .ci/dkml-compilers/pc/setup-dkml-linux_x86.sh\n```\n\nTo see all of the advanced options that can be set, use:\n\n```powershell\nsh .ci/dkml-compilers/pc/setup-dkml-linux_x86_64.sh -h\n```\n\nSee [Advanced Usage: Job Inputs](#job-inputs) for some of the advanced options that\ncan be set.\n\n## Distributing your executable\n\n### Distributing your Windows executables\n\nSince your executable has been compiled with the Microsoft Visual Studio\nCompiler (MSVC), your executable will require that the Visual Studio\nRuntime (`vcruntime140.dll`) is available on your end-user's machine.\n\nIf your end-user recently purchased a Windows machine the Visual C++ Redistributable\nwill not be present; they would see the following if they tried to run your\nexecutable:\n\n![vcruntime140.dll is missing](images/vcruntime140_missing.png)\n\n`vcruntime140.dll` and other DLLs that are linked into your executable\nby Visual Studio are available as part of the\n[Visual C++ Redistributable Packages](https://docs.microsoft.com/en-us/cpp/windows/redistributing-visual-cpp-files).\n\nAs of April 2022 the Redistributable Packages only support Windows Vista, 7,\n8.1, 10, and 11. Windows XP is **not** supported.\n\nTo get the Redistributable Packages onto your end-user's\nmachine, do one of the following:\n\n1. Ask your end-user to download from one of the links on [Microsoft Visual C++ Redistributable latest supported downloads](https://docs.microsoft.com/en-US/cpp/windows/latest-supported-vc-redist). The end-user will need Administrator privileges.\n2. Bundle your executable inside a standard Windows installer (NSIS, Wix, etc.). You can see NSIS instructions below. The end-user will need Administrator privileges.\n3. Ask your user to download `vcruntime140.dll` and place it in the same\n   directory as your executable. This is not recommended because Windows Update\n   will not be able to apply any security updates to your locally deployed\n   `vcruntime140.dll`.\n\n---\n\nIf you choose option 2 and are using NSIS as your Windows installer, you can add\nthe following NSIS section to your NSIS configuration:\n\n```nsis\nSection \"Visual C++ Redistributable Packages\"\n  SetOutPath \"$INSTDIR\"\n  !include \"x64.nsh\"\n  ${If} ${IsNativeAMD64}\n    File \"C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Redist\\MSVC\\14.29.30133\\vc_redist.x64.exe\"\n    ExecWait '\"$INSTDIR\\vc_redist.x64.exe\" /install /passive'\n    Delete \"$INSTDIR\\vc_redist.x64.exe\"\n  ${ElseIf} ${IsNativeARM64}\n    File \"C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Redist\\MSVC\\14.29.30133\\vc_redist.arm64.exe\"\n    ExecWait '\"$INSTDIR\\vc_redist.arm64.exe\" /install /passive'\n    Delete \"$INSTDIR\\vc_redist.arm64.exe\"\n  ${ElseIf} ${IsNativeIA32}\n    File \"C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Redist\\MSVC\\14.29.30133\\vc_redist.x86.exe\"\n    ExecWait '\"$INSTDIR\\vc_redist.x86.exe\" /install /passive'\n    Delete \"$INSTDIR\\vc_redist.x86.exe\"\n  ${Else}\n    Abort \"Unsupported CPU architecture!\"\n  ${EndIf}\nSectionEnd\n```\n\nWhen you run the `makensis.exe` NSIS compiler the specified `File` must be\npresent on the `makensis.exe` machine. Make sure you have set it correctly!\nIf the NSIS compiler is running\nas part of the GitHub Actions, you can\nlook at the output of setup-dkml.yml's step\n\"Capture Visual Studio compiler environment (2/2)\"; the directory will be\nthe `VCToolsRedistDir` environment variable. The `VCToolsRedistDir` environment\nvariable will also be available to use as\n`opamrun exec -- sh -c 'echo $VCToolsRedistDir'`\n\n## Advanced Usage\n\n### Job Inputs\n\n#### SKIP_OPAM_MODIFICATIONS\n\nWhen set to `true` (the default is `false`) the opam root will not be\ncreated or modified.\n\nThe `cmdrun` script will be available for you to create your\nown opam root and switches. The commands you run will have access to\nthe correct `OPAMROOT` environment variable for the platform, and a proper\nMSVC environment on Windows, and run within a working dockcross container\nfor Linux.\n\nThe `opamrun` script will still be available, but it should only be used if\nyou have already initialized (created) the opam root.\n\n#### SECONDARY_SWITCH\n\nWhen set to `true` the scripts will CI jobs will create the `two` switch in addition to the always present `dkml` switch.\n\nWhen using the secondary switch, be sure to use `--switch dkml` or `--switch two` in *all* of your `opamrun` commands.\n\nFor example, use `opamrun install --switch dkml dune` rather than `opamrun install dune`.\n\n#### CACHE_PREFIX\n\nThe prefix of the cache keys.\n\n#### PRIMARY_SWITCH_SKIP_INSTALL\n\nWhen set to `true` no dkml-base-compiler will be installed in the `dkml` switch.\n\n### Matrix Variables\n\n#### gl_image\n\nThe GitLab virtual machine image for macOS. Examples: `macos-11-xcode-12`.\n\nLinux always uses a [Docker-in-Docker image](https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#use-docker-in-docker).\n\n#### gh_os\n\nThe GitHub Actions operating system.\n\n#### opam_root\n\nOPAMROOT must be a subdirectory of GITHUB_WORKSPACE if running in\ndockcross so that the Opam root (and switch) is visible in both the\nparent and Docker context. Always specify this form as a relative\npath under GITHUB_WORKSPACE.\n\nWhen not using dockcross, it should be an absolute path to a\ndirectory with a short length to minimize the 260 character\nlimit on Windows (macOS/XCode also has some small limit).\n\nCAUTION: The opam_root MUST be in sync with outputs.import_func!\n\n#### vsstudio_hostarch\n\nOnly needed if `gh_os: windows-*`. The ARCH in\n`vsdevcmd.bat -host_arch=ARCH`. Example: x64.\n\nIf you have a 64-bit Intel machine you should not use x86 because\n_WIN64 will be defined (see \u003chttps://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros?view=msvc-170\u003e)\nwhich is based on the host machine architecture (unless you explicitly\ncross-compile with different ARCHs; that is, -host_arch=x64 -arch=x75).\nConfer: \u003chttps://docs.microsoft.com/en-us/cpp/build/building-on-the-command-line?view=msvc-170#use-the-developer-tools-in-an-existing-command-window\u003e\n\nIf you see ppx problems with missing _BitScanForward64 then\n\u003chttps://github.com/janestreet/base/blob/8993e35ba2e83e5020b2deb548253ef1e4a699d4/src/int_math_stubs.c#L25-L32\u003e\nhas been compiled with the wrong host architecture.\n\n#### vsstudio_arch\n\nOnly needed if `gh_os: windows-*`. The ARCH in\n`vsdevcmd.bat -arch=ARCH`. Example: x86.\nConfer: \u003chttps://docs.microsoft.com/en-us/cpp/build/building-on-the-command-line?view=msvc-170#use-the-developer-tools-in-an-existing-command-window\u003e\n\n#### vsstudio_(others)\n\nHardcodes details about Visual Studio rather than let DkML discover\na compatible Visual Studio installation.\n\nExample:\n\n```yaml\nvsstudio_dir: 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Enterprise'\nvsstudio_vcvarsver: '14.16'\nvsstudio_winsdkver: '10.0.18362.0'\nvsstudio_msvspreference: 'VS16.5'\nvsstudio_cmakegenerator: 'Visual Studio 16 2019'\n```\n\n#### ocaml_options\n\nSpace separated list of `ocaml-option-*` packages.\n\nUse 32-bit installers when possible for maximum portability of\nOCaml bytecode. Linux has difficulty with 32-bit (needs gcc-multilib, etc.)\nmacos is only the major platform without 32-bit.\n\nYou don't need to include `ocaml-option-32bit` because it is auto\nchosen when the target ABI ends with x86.\n\n## Sponsor\n\n\u003ca href=\"https://ocaml-sf.org\"\u003e\n\u003cimg align=\"left\" alt=\"OCSF logo\" src=\"https://ocaml-sf.org/assets/ocsf_logo.svg\"/\u003e\n\u003c/a\u003e\n\nThanks to the [OCaml Software Foundation](https://ocaml-sf.org)\nfor economic support to the development of DkML.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdiskuv%2Fdkml-workflows","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdiskuv%2Fdkml-workflows","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdiskuv%2Fdkml-workflows/lists"}