Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dune expects .so files generated even when shared libraries are not supported #1051

Closed
aantron opened this issue Jul 25, 2018 · 5 comments · Fixed by #1165 or ocaml/opam-repository#12622

Comments

@aantron
Copy link
Collaborator

aantron commented Jul 25, 2018

See ocsigen/lwt#599. @rgrinberg, can you move the most relevant details into a comment on this issue?

@rgrinberg
Copy link
Member

My idea consists of 2 parts:

  • Add a mechanism for customizing compiler flags in a "global" way via workspace files: Customize workspace via environment variable #1053. This will make it possible to inject flags such as -static whenever such a need arises instead of relying on editing $ ocamlc - config

  • Adding a flag to the env stanza to disable .so targets. Here, there's a bit of uncertainty on how to proceed. We could have a crude no_shared_objects flag, or we could have a field like (default_targets (:standard \ shared_objects)) if we want something more extensible.

Given both of these points, it will be possible to solve this problem for Lwt (and any other lib) by passing a workspace file that adds -static to :standard, and disables the generation of .so rules. We could have a high level, combined option to do both at once, since many users will not create about these details.

cc @avsm and @mghallin who are both users that I think are interested in an easy way of creating static binaries.

@aantron
Copy link
Collaborator Author

aantron commented Jul 25, 2018

Also ccing @gruenewa and @lvicentesanchez from the original Lwt issue.

@ghost
Copy link

ghost commented Jul 30, 2018

Is the issue that when the OCaml compiler is not configured to support shared library, then ocamlmklib won't produce a .so while dune expects that it will?

@rgrinberg
Copy link
Member

@diml yeah, that's the gist of it.

@ghost
Copy link

ghost commented Jul 30, 2018

Ok. We can determine whether the compiler support shared libraries by looking for SUPPORTS_SHARED_LIBRARIES in the Makefile.config file installed by ocaml in ocamlc -where.

Dune already supports a (no_dynlink) field for libraries, so I believe that all that needs to be done is mimic the behavior of (no_dynlink) systematically when SUPPORT_SHARED_LIBRARIES is set to false.

@ghost ghost closed this as completed in #1165 Aug 22, 2018
rgrinberg added a commit to rgrinberg/opam-repository that referenced this issue Sep 14, 2018
CHANGES:

- Ignore stderr output when trying to find out the number of jobs
  available (ocaml/dune#1118, fix ocaml/dune#1116, @diml)

- Fix error message when the source directory of `copy_files` does not exist.
  (ocaml/dune#1120, fix ocaml/dune#1099, @emillon)

- Highlight error locations in error messages (ocaml/dune#1121, @emillon)

- Display actual stanza when package is ambiguous (ocaml/dune#1126, fix ocaml/dune#1123, @emillon)

- Add `dune unstable-fmt` to format `dune` files. The interface and syntax are
  still subject to change, so use with caution. (ocaml/dune#1130, fix ocaml/dune#940, @emillon)

- Improve error message for `dune utop` without a library name (ocaml/dune#1154, fix
  ocaml/dune#1149, @emillon)

- Fix parsing `ocamllex` stanza in jbuild files (ocaml/dune#1150, @rgrinberg)

- Highlight multi-line errors (ocaml/dune#1131, @anuragsoni)

- Do no try to generate shared libraries when this is not supported by
  the OS (ocaml/dune#1165, fix ocaml/dune#1051, @diml)

- Fix `Flags.write_{sexp,lines}` in configurator by avoiding the use of
  `Stdune.Path` (ocaml/dune#1175, fix ocaml/dune#1161, @rgrinberg)

- Add support for `findlib.dynload`: when linking an executable using
  `findlib.dynload`, automatically record linked in libraries and
  findlib predicates (ocaml/dune#1172, @bobot)

- Add support for promoting a selected list of files (ocaml/dune#1192, @diml)

- Add an emacs mode providing helpers to promote correction files
  (ocaml/dune#1192, @diml)

- Improve message suggesting to remove parentheses (ocaml/dune#1196, fix ocaml/dune#1173, @emillon)

- Add `(wrapped (transition "..message.."))` as an option that will generate
  wrapped modules but keep unwrapped modules with a deprecation message to
  preserve compatibility. (ocaml/dune#1188, fix ocaml/dune#985, @rgrinberg)

- Fix the flags passed to the ppx rewriter when using `staged_pps` (ocaml/dune#1218, @diml)

- Add `(env var)` to add a dependency to an environment variable.
  (ocaml/dune#1186, @emillon)

- Add a simple version of a polling mode: `dune build -w` keeps
  running and restarts the build when something change on the
  filesystem (ocaml/dune#1140, @kodek16)

- Cleanup the way we detect the library search path. We no longer call
  `opam config var lib` in the default build context (ocaml/dune#1226, @diml)

- Make test stanzas honor the -p flag. (ocaml/dune#1236, fix ocaml/dune#1231, @emillon)

- Test stanzas take an optional (action) field to customize how they run (ocaml/dune#1248,
  ocaml/dune#1195, @emillon)

- Add support for private modules via the `private_modules` field (ocaml/dune#1241, fix
  ocaml/dune#427, @rgrinberg)

- Add support for passing arguments to the OCaml compiler via a
  response file when the list of arguments is too long (ocaml/dune#1256, @diml)

- Do not print diffs by default when running inside dune (ocaml/dune#1260, @diml)

- Interpret `$ dune build dir` as building the default alias in `dir`. (ocaml/dune#1259,
  @rgrinberg)

- Make the `dynlink` library available without findlib installed (ocaml/dune#1270, fix
  ocaml/dune#1264, @rgrinberg)
This issue was closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
2 participants