aboutsummaryrefslogtreecommitdiff
path: root/libbuild2/cc/link-rule.cxx
AgeCommit message (Collapse)AuthorFilesLines
2023-04-10Fix inconsistent /usr/local/{include,lib} searchBoris Kolpackov1-10/+9
In particular, we were adding -L/usr/local/lib which means it is considered before built-in directories (/usr/lib, etc) but in our own library search code we were considering it after (because we were storing it at the end of sys_lib_dirs). Now in both sys_{hdr,lib}_dirs we store /usr/local/{include,lib} after mode and before built-in directories. Note that as part of this fix we now pass -isystem /usr/local/include instead of -idirafter (which is consistent with the -L behavior and also the customarily expected semantics).
2023-04-05Allow creating context with bare minimum of initializationsBoris Kolpackov1-2/+2
This is used by bpkg to detect forwarded configurations without incurring the full context creation overhead.
2023-03-22Initial work on relocatable install: config.install.relocatable and rpathBoris Kolpackov1-2/+66
2022-12-09Enable diagnostics color in GCC and ClangBoris Kolpackov1-0/+2
2022-11-30Diagnose absence of import library after link.exe invocation (GH issue #231)Boris Kolpackov1-7/+22
If a library does not export any symbols then link.exe skips creating the import library.
2022-11-29Fix backlink logic for target groupsBoris Kolpackov1-5/+24
We used to backlink ad hoc group members both via the group and as individual members. And for explicit groups it was done only via individual members, which means it only works correctly if every member is individually updated. Now both types of groups are backlinked from the group target.
2022-11-23Rework diag_buffer interface to facilitate correct destruction orderBoris Kolpackov1-11/+13
2022-11-22Add support for Objective-C/C++ compilation in cc moduleBoris Kolpackov1-33/+46
2022-11-16Initial low verbosity diagnostics reworkBoris Kolpackov1-1/+1
2022-11-08Make process exit diagnostics consistentBoris Kolpackov1-3/+6
In particular, we now always print error message on non-0 exit except in cases where such exit is ignored.
2022-11-08Tighten args const-ness in the run*() function familyBoris Kolpackov1-4/+0
2022-11-08More work on child process diagnostics bufferingBoris Kolpackov1-16/+3
2022-10-27Initial work on child process diagnostics bufferingBoris Kolpackov1-38/+68
Currently this is implemented for C/C++ compile and link rules.
2022-10-21Add clarifying commentBoris Kolpackov1-0/+4
2022-10-10Preparatory work for public/private variable distinctionBoris Kolpackov1-1/+7
We still always use the public var_pool from context but where required, all access now goes through scope::var_pool().
2022-09-28Omit -l for binless libraries, metadata from common .pc fileBoris Kolpackov1-1/+0
Having -l options for binless (header-only) libraries makes it unusable from other build systems. But omitting them could make the metadata incomplete (for example, importable headers), so we omit that as well.
2022-08-16Improve MSVC /DEBUG option handlingBoris Kolpackov1-19/+26
Specifically, handle the /DEBUG:<value> form in addition to /DEBUG and recognize /DEBUG:NONE.
2022-07-26Disable risky sanity checkBoris Kolpackov1-1/+3
2022-07-21Fix bug in common .pc file generation logic (GitHub issue #198)Boris Kolpackov1-1/+1
2022-06-29Work around MSVC 14.3 issuesBoris Kolpackov1-2/+2
2022-06-29Make sure we generate common pkg-config file for only liba{}/libs{}Boris Kolpackov1-2/+19
2022-06-28Complete support for saving/loading library metadata to/from pkg-config filesBoris Kolpackov1-5/+21
2022-06-24Allow ad hoc rules not to list targets that are updated during matchBoris Kolpackov1-7/+11
For example, this allows a Qt moc rule not to list generated headers from libQtCore since they are pre-generated by the library.
2022-06-24Add ability to get common interface options via $x.lib_poptions()Boris Kolpackov1-3/+12
Specifically, the output target type may now be omitted for utility libraries (libul{} and libu[eas]{}). In this case, only "common interface" options will be returned for lib{} dependencies. This is primarily useful for obtaining poptions to be passed to tools other than C/C++ compilers (for example, Qt moc).
2022-06-24Match libraries before update for install prerequisites in cc::link_ruleBoris Kolpackov1-4/+11
2022-05-23Detect cross-linking and pass -rpath-link in addition to -rpathBoris Kolpackov1-7/+69
According to the GNU ld documentation (and painful practical experience), -rpath does not always imply -rpath-link for cross-linkers.
2022-05-05Recognize -pthread as king of -l in *.libsBoris Kolpackov1-2/+12
2022-05-05Allow linking libraries without any sources/headers with hintBoris Kolpackov1-3/+8
This can be useful for creating "metadata libraries".
2022-04-20Fix bug in recursively-binless detection logicBoris Kolpackov1-1/+5
2022-04-20Get rid of unnecessary move() callBoris Kolpackov1-1/+1
2022-04-19Use target recipe for auxiliary data storage during match-applyBoris Kolpackov1-16/+13
In particular, we now have separate auxiliary data storage for inner and outer operations.
2022-04-19Switch to using std::function for target::data_padBoris Kolpackov1-3/+2
2022-04-13Fix bug in previous commitBoris Kolpackov1-1/+1
2022-04-13Prune library graph traversal for recursively-binless librariesBoris Kolpackov1-22/+150
2022-04-07Rename {match,execute}() to *_sync(), add *_complete()Boris Kolpackov1-1/+1
In particular, the match() rename makes sure it doesn't clash with rule::match() which, after removal of the hint argument in simple_rule, has exactly the same signature, thus making it error-prone to calling recursively.
2022-04-06Add support for rule hintsBoris Kolpackov1-3/+3
A rule hint is a target attribute, for example: [rule_hint=cxx] exe{hello}: c{hello} Rule hints can be used to resolve ambiguity when multiple rules match the same target as well as to override an unambiguous match.
2022-03-25Store bin.whole flag in pkg-config filesBoris Kolpackov1-1/+1
2022-03-15Don't consider mtime of failed to unmatch prerequisite in ad hoc recipeBoris Kolpackov1-1/+2
2022-03-10Add reverse_execute_prerequisites() variantBoris Kolpackov1-5/+24
2022-03-10Remove update variable from source of synthesized dependencyBoris Kolpackov1-1/+14
2022-03-09Parallel implementation of update_during_match_prerequisites()Boris Kolpackov1-2/+3
2022-03-08Improve performance of update during match for multiple targetsBoris Kolpackov1-9/+5
2022-03-08Update C/C++ headers and ad hoc sources during match by defaultBoris Kolpackov1-19/+50
Essentially, all headers as well as ad hoc headers and sources are now treated by the cc::link_rule as if they had update=match unless explicit update=execute is specified.
2022-03-08Add update=execute special value for cases where it's not defaultBoris Kolpackov1-1/+1
2022-03-07Add support for update=unmatch|match to ad hoc recipesBoris Kolpackov1-4/+6
2022-03-02Add update operation-specific variable with unmatch|match additional valuesBoris Kolpackov1-10/+94
Note that the unmatch (match but do not update) and match (update during match) values are only supported by certain rules (and potentially only for certain prerequisite types). Additionally: - All operation-specific variables are now checked for false as an override for the prerequisite-specific include value. In particular, this can now be used to disable a prerequisite for update, for example: ./: exe{test}: update = false - The cc::link_rule now supports the update=match value for headers and ad hoc prerequisites. In particular, this can be used to make sure all the library headers are updated before matching any of its (or dependent's) object files.
2022-02-16Get rid of stray variableBoris Kolpackov1-2/+0
2022-02-15Fix stray logic where libue{} was still considered member of libul{}Boris Kolpackov1-10/+27
Fixes GitHub issue #179.
2022-02-10Add note on GNU ar deprecating -T in favor of --thinBoris Kolpackov1-0/+3
2022-02-09Improve commentsBoris Kolpackov1-3/+6