aboutsummaryrefslogtreecommitdiff
path: root/libbuild2/cc
AgeCommit message (Collapse)AuthorFilesLines
2024-08-06Add support for specifying compile options on exe/lib{} targetsBoris Kolpackov2-38/+354
It is now possible to specify compile option (*.poptions and *.coptions) on the exe/lib{} targets (we call them "binary-specific compile options"). Such options are propagated to obj/bmi{} targets that are synthesized for source prerequisites of the binary. Note that this propagation does not apply to obj/bmi{} prerequisites. For example: exe{foo}: cxx{foo} obj{common} { cxx.poptions += -DFOO } exe{bar}: cxx{bar} obj{common} { cxx.poptions += -DBAR } obj{common}: cxx{common} { cxx.poptions += -DCOMMON } In this example, cxx{foo} will be compiled with -DFOO, cxx{bar} -- with -DBAR, and cxx{common} -- with -DCOMMON. Note that if a source prerequisite is shared between several binaries, then the values of the propagated compile options (or their absence) must match. For instance, the following variant of the above example would result in an error since cxx{common} would have contradictory cxx.poptions values: exe{foo}: cxx{foo common} { cxx.poptions += -DFOO } exe{bar}: cxx{bar common} { cxx.poptions += -DBAR } As another example, here is how we can rewrite a typical library buildfile (which requires different macros to distinguish between shared/static builds) using this mechanism, in this case, to build two libraries in the same scope: ./: lib{foo}: {hxx cxx}{*-foo} ./: lib{bar}: {hxx cxx}{*-bar} cxx.poptions =+ "-I$out_root" "-I$src_root" lib{foo}: { cxx.poptions += -DFOO cxx.export.poptions = "-I$out_root" "-I$src_root" } liba{foo}: { cxx.poptions += -DLIBFOO_STATIC_BUILD cxx.export.poptions += -DLIBFOO_STATIC } libs{foo}: { cxx.poptions += -DLIBFOO_SHARED_BUILD cxx.export.poptions += -DLIBFOO_SHARED } lib{bar}: { cxx.poptions += -DBAR cxx.export.poptions = "-I$out_root" "-I$src_root" } liba{bar}: { cxx.poptions += -DLIBBAR_STATIC_BUILD cxx.export.poptions += -DLIBBAR_STATIC } libs{bar}: { cxx.poptions += -DLIBBAR_SHARED_BUILD cxx.export.poptions += -DLIBBAR_SHARED } The exact semantics of this mechanism is as-if the binary-specific compile options were set on the synthesized obj/bmi{} targets at the end of the buildfile. One nuance to keep in mind is that target type/pattern-specific assign/append/prepend specified for obj/bmi{} will not be in effect for options specified on lib/exe{}. For example: cxx.poptions += -DSCOPE obj{*}: cxx.poptions += -DTARGET exe{foo}: cxx.poptions += -DFOO Here the effective cxx.poptions for exe{foo} prerequisites will be -DSCOPE -DFOO since exe{foo} does not match the obj{*} pattern. As result, if using this mechanism, remember to include the binary target types in obj{} patterns. For example: {obj exe}{*}: cxx.poptions += -DTARGET
2024-07-31Add lookup limit to {scope,target}::lookup_original()Boris Kolpackov3-13/+13
2024-06-14Instrument header cache inconsistency assert with additional info (GH issue ↵Boris Kolpackov1-0/+14
#390)
2024-06-07Use combined -L option form for extra system search pathsBoris Kolpackov1-4/+10
The split one was just too much of an eye-sore in the logs.
2024-06-07Add comment on not adding rpath for /usr/local/libBoris Kolpackov1-0/+18
2024-06-05Improve -rpath duplicate suppression logic even moreBoris Kolpackov1-2/+11
2024-06-05Improve -rpath duplicate suppression logic some moreBoris Kolpackov1-3/+15
2024-06-05Include top-level libraries in -rpath duplicate suppression logicBoris Kolpackov1-0/+7
2024-06-04Update Apple Clang to vanilla Clang version mapping informationBoris Kolpackov1-21/+23
2024-05-15Add note on potentially mismatching cxx.std in module sidebuildsBoris Kolpackov1-0/+9
2024-05-14Add /Zc:preprocessor in experimental cxx.std mode from MSVC 17.9 (19.39)Boris Kolpackov1-1/+1
For background, see: https://developercommunity.visualstudio.com/t/Please-clarify-ifwhen-Zc:preprocessor/10537317
2024-05-13Issue better diagnostics if standard library modules not supportedBoris Kolpackov1-142/+150
2024-05-13Update std.cppm to Clang 18, add std.compat.cppmBoris Kolpackov4-80/+1087
Note that Clang 17 is not longer supported with regards to standard library modules.
2024-05-09Fixes and tweaks to diagnostics color support on Windows (GH issue #312)Boris Kolpackov1-1/+13
Specifically: - Pass -fansi-escape-codes for Clang on Windows. - Enable diagnostics color by default if already enabled on the terminal. Only try to enable it ourselves with explicit --diag-color.
2024-05-06Switch from libpkg-config to version from libbutlBoris Kolpackov1-1/+1
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