aboutsummaryrefslogtreecommitdiff
path: root/libbuild2/cc
AgeCommit message (Collapse)AuthorFilesLines
2024-02-26Add ability to serialize compilation/linking in cc rulesBoris Kolpackov4-8/+43
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-22Detect dependency cycles in *.export.libsBoris Kolpackov1-0/+5
Fixes GH issue #362.
2024-02-22Detect non-cc::link_rule libraries not marked with cc.type=ccBoris Kolpackov1-4/+11
Fixes GH issue #368.
2024-02-22Deal with libs{} being member of group in windows_rpath_timestamp()Boris Kolpackov1-1/+14
Fixes GH issue #366.
2024-02-15Add fsdir{} duplicate suppression in more placesBoris Kolpackov2-2/+9
2024-02-06Fix bunch of maybe used uninitialized warningsBoris Kolpackov2-2/+3
2024-02-02Handle unseparated `rc` and `git` suffixes in Clang version (GH issue #360)Boris Kolpackov1-2/+38
2024-01-29Fix pkgconfig_load() to set common poptions for lib{} target groupKaren Arutyunov1-6/+47
2024-01-11Properly split injected ad hoc group member name in regex pattern ruleBoris Kolpackov1-1/+2
2024-01-10Add ability to specify alternative sysroot for pkg-config files (GC issue #59)Boris Kolpackov2-4/+65
Specifically, the new config.cc.pkgconfig.sysroot variable provides roughly equivalent functionality to PKG_CONFIG_SYSROOT_DIR in pkg-config. For details and limitations, see "Rewriting Installed Libraries System Root (sysroot)" in the manual for details.
2024-01-10Fix bunch of typosBoris Kolpackov4-6/+6
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).
2024-01-08Allow specifying compiler mode options in buildfileBoris Kolpackov1-7/+20
Now the configured mode options are appended to buildfile-specified (which must be specified before loading the guess module). In particular, this ability to specify the compiler mode in a buildfile is useful in embedded development where the project may need to hardcode things like -target, -nostdinc, etc. For example: cxx.std = 20 cxx.mode = -target riscv32-unknown-unknown -nostdinc using cxx
2024-01-08Handle absent paths in cc::gcc_header_search_dirs() (e.g., due to -nostdinc)Boris Kolpackov1-8/+17
2024-01-08Add {bin,c,cxx}.types submodules that only register target typesBoris Kolpackov1-41/+2
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-12Work around unexecuted member for installed libraries issueBoris Kolpackov2-7/+60
See comment for the long-term plan.
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 Kolpackov5-113/+106
2023-12-04Don't match predefs rule for unsupported compiler/versionBoris Kolpackov1-1/+24
2023-12-03Reimplement search_existing() functions via target_type::searchBoris Kolpackov2-2/+2
This allows us to automatically get the target type-specific behavior with regards to the out_only semantics (added in the previous commit) instead of passing it explicitly from each call site.
2023-12-03Search in src for existing prerequisites with unspecified outBoris Kolpackov1-3/+3
2023-11-29Add rule for extracting C and C++ predefsBoris Kolpackov4-2/+412
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-22Fix cc::link_rule and cc::install_rule to recognize S{} even in C++Boris Kolpackov2-20/+20
Failed that, a C++ link rule cannot match a dependency with S{} prerequisites.
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 Kolpackov2-7/+7
2023-11-22Add support for `import std` in Clang 17 or later with libc++Boris Kolpackov5-116/+7008
2023-11-17Undo remap of Apple Clang 14.0.3 and 15.0.0 to vanilla Clang 14.0 and 15.0Boris Kolpackov1-5/+7
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-14Remap Apple Clang 14.0.3 and 15.0.0 to vanilla Clang 14.0 and 15.0Boris Kolpackov1-6/+14
Lately, we started seeing __LIBCPP_VERSION values like 15.0.6 or 16.0.2 which would suggest the base is 15.0.5 or 16.0.1. But that assumption did not check out with the actual usage. For example, vanilla Clang 16 should no longer require -fmodules-ts but the Apple's version (that is presumably based on it) still does. So the theory here is that Apple upgrades to newer libc++ while keeping the old compiler. Which means we must be more conservative and assume something like 15.0.6 is still 14-based.
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-09Minor fix to diagnosticsBoris Kolpackov1-1/+1
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-06Fix C-comment scanning bug in cc::lexerBoris Kolpackov2-10/+12
2023-11-03Generalize and export cc::lexerBoris Kolpackov4-16/+29
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-11-01Handle match options for post hoc libs{} prerequisites in cc::install_ruleBoris Kolpackov2-0/+78
2023-11-01Use match options for runtime/buildtime distinction when installing librariesBoris Kolpackov3-67/+393
Specifically, now, if a library is installed solely as a prerequisite of an executable (potentially recursively), then only its runtime files are installed omitting everything buildtime-related (static/import libraries, non-versioned symlinks for shared libraries, pkg-config files, headers, etc). If you are familiar with the runtime and -dev/-devel package splits for libraries in Debian/Fedora, this is an analogous semantics.
2023-11-01Undo "Don't install static library prerequisites of executable"Boris Kolpackov2-26/+1
This turned out not to be always correct since a static library can have prerequisites that it requires at runtime (see the libca-certificates-curl for an example). The new plan is to split static/shared library installation into run-time and build-time parts using the new match options mechanism.
2023-09-25Treat -liconv on Mac OS as systemBoris Kolpackov1-1/+5