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
- It is not possible to specify
link_wholeas part ofdeclare_dependency()call and make executable link with plugin if it is static library. - It is not possible to use shared library with link_whole. So if you use
library()and let user specifydefault_libraryoption, you can't consistently use result. - 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_wholetodeclare_dependency(). Semantics is identical tolink_with. - Allow use of shared libraries in
link_wholeand 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 todeclare_dependency()as well.
Caveat
I did not take any other systems or compilers but Linux/GCC/Clang into consideration. Looking for input.