aboutsummaryrefslogtreecommitdiff
path: root/libbuild2/cxx
AgeCommit message (Collapse)AuthorFilesLines
2024-05-14Map latest/experimental cxx.std values to C++26 from GCC 14 and Clang 18Boris Kolpackov1-15/+24
2024-05-14Add /Zc:preprocessor in experimental cxx.std mode from MSVC 17.9 (19.39)Boris Kolpackov1-0/+6
For background, see: https://developercommunity.visualstudio.com/t/Please-clarify-ifwhen-Zc:preprocessor/10537317
2024-05-14Map C23/C2X to /std:clatest starting from MSVC 17.9 (19.39)Boris Kolpackov1-3/+3
In particular, this option enables C23 typeof support.
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
2024-01-10Fix bunch of typosBoris Kolpackov1-2/+2
2024-01-08Add {bin,c,cxx}.types submodules that only register target typesBoris Kolpackov2-44/+137
2023-12-14Allow enabling C++ modules for C++20 and later std.cxx valuesBoris Kolpackov1-89/+236
2023-12-07C++20 named modules support for MSVC, take 2Boris Kolpackov1-20/+19
2023-11-29Add rule for extracting C and C++ predefsBoris Kolpackov2-10/+49
2023-11-09Fix more issues with C++20 named modules support in ClangBoris Kolpackov1-14/+9
2023-11-06Fix basic issues with C++20 named modules support in ClangBoris Kolpackov1-1/+11
Note that modules support now require Clang 16 or later.
2023-08-22Consider *_inc{} target types as headers for rule match purposesBoris Kolpackov1-0/+1
2023-08-22Add abstract c_inc{} and cxx_inc{} target typesBoris Kolpackov3-3/+36
These abstract base target types are meant for deriving additional target types (for example, Qt moc{}) that can be #include'd in C and C++ translation units, respectively. In particular, only such targets will be considered to reverse-lookup extensions to target types (see dyndep_rule::map_extension() for background).
2023-07-27Recognize cNN/c++NN in addition to NN in c.std/cxx.stdBoris Kolpackov1-21/+39
Also recognize 23 in addition to 2x for C23.
2023-06-22Map cxx.std=26 to -std=c++2c for GCC and ClangBoris Kolpackov1-3/+7
2023-04-21Make sure main module_functions entry is after submodulesBoris Kolpackov1-1/+1
2023-04-18Add support for Assembler with C Preprocessor (.S) compilationBoris Kolpackov1-0/+4
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.
2022-11-22Add support for Objective-C/C++ compilation in cc moduleBoris Kolpackov4-4/+79
2022-10-13Optimize by going straight to public variable pool where applicableBoris Kolpackov1-3/+6
2022-04-15Get rid of target::dynamic_type() virtual functionBoris Kolpackov1-10/+25
Instead of overriding this function, derived targets must now set the dynamic_type variable to their static_type in their constructor body.
2022-04-14Add header cache to cc::compile_rule::enter_header()Boris Kolpackov1-1/+1
2022-04-06Add support for rule hintsBoris Kolpackov2-6/+5
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-28Add ability to customize pkg-config header and library search pathsBoris Kolpackov1-0/+6
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-14Map latest to -std=c++2b from Clang 13, /std:c++20 from MSVC 16.11Boris Kolpackov1-17/+16
2021-10-04Document internal scope functionalityBoris Kolpackov1-1/+1
2021-10-04Optimize internal scope implementationBoris Kolpackov1-2/+2
2021-10-04Add support for treating specific libraries as always internalBoris Kolpackov1-1/+37
2021-10-01Add notion of internal scope, translate external -I to -isystem or equivalentBoris Kolpackov1-0/+72
2021-07-22Update C++ standard mapping for latest versions of compilersBoris Kolpackov1-17/+31
2021-05-13Rename sys_inc_dirs to sys_hdr_dirs for consistencyBoris Kolpackov1-4/+4
2021-05-04Replace int_ with intf_ and imp_ with impl_ in namesBoris Kolpackov2-6/+6
2021-04-20Track changes to environment in cc rulesBoris Kolpackov1-0/+1
2021-04-15Disable modules support in VC 16.8 and later due to options changeBoris Kolpackov1-2/+5
See GitHub issue #134 for background.
2021-02-15Cosmetic changeBoris Kolpackov1-1/+1
2021-02-09Allow overriding cxx.features.modules with config.cxx.features.modulesBoris Kolpackov1-11/+60
2021-01-30Rework include translation supportBoris Kolpackov1-8/+36
See the config.cxx.translate_include variable documentation in cxx/init.cxx for details.
2021-01-19Adjust C++20 modules enablement for GCCBoris Kolpackov1-14/+5
2021-01-14Pass /Zc:__cplusplus by default starting from VC 15.7 (GitHub issue #107)Boris Kolpackov1-0/+11
This can be overridden by passing a variant of this option as part of the compiler mode options.
2020-12-11Add support for module interface-only librariesBoris Kolpackov1-0/+2
Also suppress generation of the object file in cases where we don't need it.
2020-11-30Start adapting module mapper to latest GCC protocolBoris Kolpackov1-4/+9
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-16/+17
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-06-22Disable Clang C++20 modules support unless explicitly forcedBoris Kolpackov1-5/+11
2020-06-22Add version mapping for Apple Clang 11.0.3Boris Kolpackov1-3/+0
2020-06-12Make order of imports stable in saved host build configurationBoris Kolpackov1-0/+2
2020-06-02Add process_path_ex with program stable name and checksumBoris Kolpackov1-4/+4
2020-04-27Rework tool importation along with cli moduleBoris Kolpackov1-3/+3
Specifically, now config.<tool> (like config.cli) is handled by the import machinery (it is like a shorter alias for config.import.<tool>.<tool>.exe that we already had). And the cli module now uses that instead of custom logic. This also adds support for uniform tool metadata extraction that is handled by the import machinery. As a result, a tool that follows the "build2 way" can be imported with metadata by the buildfile and/or corresponding module without any tool-specific code or brittleness associated with parsing --version or similar outputs. See the cli tool/module for details. Finally, two new flavors of the import directive are now supported: import! triggers immediate importation skipping any rule-specific logic while import? is optional import (analogous to using?). Note that optional import is always immediate. There is also the import-specific metadata attribute which can be specified for these two import flavors in order to trigger metadata importation. For example: import? [metadata] cli = cli%exe{cli} if ($cli != [null]) info "cli version $($cli:cli.version)"
2020-03-31Switch to project variable visibility by defaultBoris Kolpackov1-22/+19
2020-02-24Work around bug in Clang 10 targeting MSVC in c++2a (LLVM bug #44956)Boris Kolpackov1-5/+24