mesonbuild/meson

Uniform way to link whole libraries

オープン

#3,046 opened on 2018/02/12

 (11 件のコメント) (3 件のリアクション) (1 人の担当者)Python (1,465 件のフォーク)batch import
compilersdependenciesenhancementhelp wanted

Repository metrics

Stars
 (4,978 個のスター)
PR merge metrics
 (平均マージ 139d 13h) (30d で 51 merged PRs)

説明

Use case

Let's say you have 3 libraries and executable

  • global register, it defines some storage for plugins that automatically register themselves
  • plugin that registers on initialization, can be via __attribute__((constructor)) or static initialization
  • user of the register, also links with plugin
  • executable that interacts with user but does not know about plugin directly.

There are 3 problems in meson that make it hard to deal with this

  1. It is not possible to specify link_whole as part of declare_dependency() call and make executable link with plugin if it is static library.
  2. It is not possible to use shared library with link_whole. So if you use library() and let user specify default_library option, you can't consistently use result.
  3. Shared libraries are not linked without specifying '-Wl,--no-as-needed'. But this option is not really needed for the whole project, most likely for few plugins only.

Example to demonstrate this behavior.

Proposal

  • Add link_whole to declare_dependency(). Semantics is identical to link_with.
  • Allow use of shared libraries in link_whole and add '-Wl,--no-as-needed' if shared library is used.
  • Or add another option link_always, let it accept both static and shared libraries with behavior described above, and add it to declare_dependency() as well.

Caveat

I did not take any other systems or compilers but Linux/GCC/Clang into consideration. Looking for input.

コントリビューターガイド