aboutsummaryrefslogtreecommitdiff
path: root/libbuild2/cc/compile-rule.cxx
AgeCommit message (Collapse)AuthorFilesLines
2024-02-26Add ability to serialize compilation/linking in cc rulesBoris Kolpackov1-0/+10
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-02-15Add fsdir{} duplicate suppression in more placesBoris Kolpackov1-1/+2
2024-01-09Disable use of -frewrite-includes for assembler with preprocessor filesBoris Kolpackov1-3/+24
With -frewrite-includes Clang has issues with correctly tracking location information (manifests itself as wrong line numbers in debug info, for example). The result also appears to reference the .Si file instead of the original source file for some reason. While at it also omit trying to scan such files since that can be hazardous (such files sometimes use `#`-style comments).
2023-12-14Allow enabling C++ modules for C++20 and later std.cxx valuesBoris Kolpackov1-1/+7
2023-12-14Cleanup old code for C++ modules support in ClangBoris Kolpackov1-106/+2
2023-12-13Fix another instance of module name not being assigned due to deferred failureBoris Kolpackov1-10/+17
2023-12-08Workaround bogus initialized variable warningBoris Kolpackov1-1/+1
2023-12-07Fix bug that led to duplication of module import informationBoris Kolpackov1-1/+7
2023-12-07Add support for compiling MSVC standard library modulesBoris Kolpackov1-41/+144
2023-12-07C++20 named modules support for MSVC, take 2Boris Kolpackov1-101/+77
2023-12-03Search in src for existing prerequisites with unspecified outBoris Kolpackov1-3/+3
2023-11-29Add rule for extracting C and C++ predefsBoris Kolpackov1-0/+6
2023-11-29Minor cleanups in cc::compile_ruleBoris Kolpackov1-6/+3
2023-11-29Complete earlier fix for modules support in ClangBoris Kolpackov1-5/+2
2023-11-27Fix minor incompatibility with C++14Boris Kolpackov1-1/+1
2023-11-27Tweak module name from file name guessing logicBoris Kolpackov1-2/+41
As a heuristics, prefer shorter but exact partition name matches to longer but partial.
2023-11-22Deal with lack of module information due to deferred failureBoris Kolpackov1-9/+17
2023-11-22Fix incorrect _LIBCPP_VERSION macro name in commentsBoris Kolpackov1-1/+1
2023-11-22Add support for `import std` in Clang 17 or later with libc++Boris Kolpackov1-110/+208
2023-11-16Extend comment on Clang's -fmodules-embed-all-files useBoris Kolpackov1-0/+6
2023-11-15Switch from two-step module compilation to -fmodule-output for ClangBoris Kolpackov1-0/+35
2023-11-14Fix module sidebuild logic for ClangBoris Kolpackov1-10/+16
2023-11-09Fix more issues with C++20 named modules support in ClangBoris Kolpackov1-20/+10
2023-11-06Fix basic issues with C++20 named modules support in ClangBoris Kolpackov1-12/+5
Note that modules support now require Clang 16 or later.
2023-11-01Fix incorrect fsdir_rule::perform_update_direct() callsBoris Kolpackov1-1/+1
Also make fsdir_rule::perform_{update,clean}_direct() harder to misuse.
2023-09-11Invoke Clang to produce object files for module partitions similar to interfacesSwat SomeBug1-2/+7
Module interface and implementation partitions are like module interfaces so it's not surprising they require similar compilation steps. See GH PR #328 for background.
2023-08-22Consider *_inc{} target types as headers for rule match purposesBoris Kolpackov1-4/+4
2023-06-22Omit -Wno-gnu-line-marker for Apple Clang 14.0.3Boris Kolpackov1-2/+9
2023-06-14Use dry_run_option instead of dry_run during matchBoris Kolpackov1-1/+1
2023-06-13Disable -Wgnu-line-marker in Clang 15 triggered by -frewrite-includesBoris Kolpackov1-6/+43
See llvm-project issue 63284 for details.
2023-06-07Implement GCC module mapper protocol quoting/escaping (GH issues #203, #228)Boris Kolpackov1-14/+223
2023-06-05Remap Clang -Wunqualified-std-cast-call warning to -Wextra (GH issue #259)Boris Kolpackov1-0/+40
2023-06-02Fix another race in library metadata protocol logicBoris Kolpackov1-0/+8
2023-04-18Add support for Assembler with C Preprocessor (.S) compilationBoris Kolpackov1-31/+42
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-6/+7
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-4/+4
This is used by bpkg to detect forwarded configurations without incurring the full context creation overhead.
2022-12-09Enable diagnostics color in GCC and ClangBoris Kolpackov1-2/+24
2022-11-25Fix diag buffer opining logic in cc::compile_ruleBoris Kolpackov1-5/+11
2022-11-23Rework diag_buffer interface to facilitate correct destruction orderBoris Kolpackov1-21/+24
2022-11-22Add support for Objective-C/C++ compilation in cc moduleBoris Kolpackov1-22/+32
2022-11-16Initial low verbosity diagnostics reworkBoris Kolpackov1-1/+1
2022-11-08Make process exit diagnostics consistentBoris Kolpackov1-4/+4
In particular, we now always print error message on non-0 exit except in cases where such exit is ignored.
2022-11-08Work around suspected GCC 12 mis-compilation (bug #107555)Boris Kolpackov1-14/+22
2022-11-08Allow passing fail diag record to diag_buffer::close()Boris Kolpackov1-11/+4
2022-11-08Tighten args const-ness in the run*() function familyBoris Kolpackov1-4/+0
2022-11-08Rework header dependency extraction with diagnostics bufferingBoris Kolpackov1-245/+412
2022-11-08More work on child process diagnostics bufferingBoris Kolpackov1-5/+4
2022-10-27Suppress (potential) bogus GCC 12 -Wrestrict warningsBoris Kolpackov1-3/+3
2022-10-27Initial work on child process diagnostics bufferingBoris Kolpackov1-36/+55
Currently this is implemented for C/C++ compile and link rules.
2022-10-10Preparatory work for public/private variable distinctionBoris Kolpackov1-0/+4
We still always use the public var_pool from context but where required, all access now goes through scope::var_pool().