aboutsummaryrefslogtreecommitdiff
path: root/libbuild2/cc/common.hxx
AgeCommit message (Collapse)AuthorFilesLines
2024-02-26Add ability to serialize compilation/linking in cc rulesBoris Kolpackov1-0/+1
Specifically, both the C/C++ compiler and link rules now recognize the cc.serialize boolean variable which instructs them to compiler/link serially with regards to any other recipe. This is primarily useful when compiling large translation units or linking large binaries that require so much memory that doing that in parallel with other compilation/linking jobs is likely to summon the OOM killer. For example: obj{memory-hog}: cc.serialize = true
2023-12-07C++20 named modules support for MSVC, take 2Boris Kolpackov1-3/+3
2023-08-22Consider *_inc{} target types as headers for rule match purposesBoris Kolpackov1-7/+10
2023-04-18Add support for Assembler with C Preprocessor (.S) compilationBoris Kolpackov1-2/+15
Specifically, the c module now provides the c.as-cpp submodules which can be loaded in order to register the S{} target type and enable Assembler with C Preprocessor compilation in the c compile rule. For details, refer to "Assembler with C Preprocessor Compilation" in the manual.
2023-04-10Fix inconsistent /usr/local/{include,lib} searchBoris Kolpackov1-4/+8
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).
2022-12-09Enable diagnostics color in GCC and ClangBoris Kolpackov1-0/+5
2022-12-05Skip common .pc file for binless if found but rejected binful (GH issues #235)Boris Kolpackov1-2/+5
2022-11-22Add support for Objective-C/C++ compilation in cc moduleBoris Kolpackov1-5/+24
2022-08-17Handle another "in *.export.libs but not in prerequisites" caseBoris Kolpackov1-0/+5
Also, enable this check even if proc_lib is not specified unless in the execute phase.
2022-06-28Complete support for saving/loading library metadata to/from pkg-config filesBoris Kolpackov1-5/+5
2022-06-24Allow ad hoc rules not to list targets that are updated during matchBoris Kolpackov1-0/+5
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-1/+5
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-04-15Adjust small vector limit in process_libraries()Boris Kolpackov1-3/+20
2022-04-13Add automatic interface dependency deduplication in cc::process_libraries()Boris Kolpackov1-1/+2
2022-04-06Add support for rule hintsBoris Kolpackov1-6/+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-30Infrastructure for library metadata supportBoris Kolpackov1-2/+4
2022-03-28Add ability to customize pkg-config header and library search pathsBoris Kolpackov1-0/+3
Specifically, {cc,c,cxx}.pkgconfig.{include,lib} variables specify header (-I) and library (-L) search paths to use in the generated .pc files instead of the default install.{include,lib}. Relative paths are resolved as install paths.
2021-10-07Verify libraries and targets they are linked to a for-install-compatibleBoris Kolpackov1-1/+1
2021-10-04Optimize internal scope implementationBoris Kolpackov1-8/+10
2021-10-04Add support for treating specific libraries as always internalBoris Kolpackov1-0/+6
2021-10-01Add notion of internal scope, translate external -I to -isystem or equivalentBoris Kolpackov1-0/+15
2021-08-11Optimize process_libraries() some moreBoris Kolpackov1-1/+1
2021-08-05Implement traversal pruning in process_libraries()Boris Kolpackov1-2/+2
2021-08-05Add resolved library cache, use in cc::process_libraries()Boris Kolpackov1-1/+13
2021-05-13Rename sys_inc_dirs to sys_hdr_dirs for consistencyBoris Kolpackov1-10/+10
2021-05-04Replace int_ with intf_ and imp_ with impl_ in namesBoris Kolpackov1-2/+2
2021-05-04Handle duplicate suppression of multi-element libraries (-l foo)Boris Kolpackov1-1/+3
See GitHub issue #114 for context.
2021-04-20Track changes to environment in cc rulesBoris Kolpackov1-0/+4
2021-02-11Generalize process_libraries() to allow no picking installed library memberBoris Kolpackov1-8/+8
2021-01-30Rework include translation supportBoris Kolpackov1-5/+5
See the config.cxx.translate_include variable documentation in cxx/init.cxx for details.
2020-12-11Add support for module interface-only librariesBoris Kolpackov1-0/+12
Also suppress generation of the object file in cases where we don't need it.
2020-07-16Save original compiler path/mode in {c,cxx}.config.path/modeBoris Kolpackov1-0/+2
It turns out that when propagating {c,cxx}.config in tests we don't want to propagate any options (such as *.std) that have been folded into our project's mode.
2020-07-13Fold translated *.std options into compiler mode optionsBoris Kolpackov1-4/+0
This way they are accessible in ad hoc recipes.
2020-07-01Add *.export.imp_libs to get rid of dual *.export.libs semanticsBoris Kolpackov1-0/+2
2020-05-22Fix bug in previous commitBoris Kolpackov1-1/+1
2020-05-22Make template definition available in all translation units where usedBoris Kolpackov1-1/+3
We were trying to be clever but GCC 10's IPA-SRA optimization didn't like it.
2020-04-13Add ../share/pkgconfig/ search directory by default on LinuxBoris Kolpackov1-1/+1
2020-02-07Drop copyright notice from source codeKaren Arutyunov1-1/+0
2020-02-03Add header/library search paths from compiler mode to sys_*_dirsBoris Kolpackov1-9/+19
2020-01-31Propagate installed library out (tag) when converting to nameBoris Kolpackov1-1/+2
2020-01-31Tag installed library targets with linker pathBoris Kolpackov1-2/+3
This makes sure we get different targets for different toolchains.
2019-11-05Add support for supplying MSVC IFCPATH equivalentBoris Kolpackov1-3/+5
2019-10-18Add ability to specify "compiler mode" options as part of config.{c,cxx}Boris Kolpackov1-1/+4
Such options are (normally) not overridden by buildfiles and are passed last (after cc.coptions and {c,cxx}.coptions) in the resulting command lines. They are also cross-hinted between config.c and config.cxx. For example: $ b config.cxx="g++ -m64"
2019-10-11Add support for clang-clBoris Kolpackov1-5/+15
The compiler type is `msvc`, variant `clang`.
2019-09-18Rename importable_headers variable to translatable_headersBoris Kolpackov1-4/+5
This name aligns better with the post-Cologne importable/translatable semantics.
2019-08-28Move cc build system module to separate libraryKaren Arutyunov1-0/+358