aboutsummaryrefslogtreecommitdiff
path: root/libbuild2/cc
AgeCommit message (Collapse)AuthorFilesLines
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
2023-09-21Fix bug in previous commitBoris Kolpackov1-1/+1
2023-09-21Don't install static library prerequisites of executableBoris Kolpackov2-1/+32
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-09-08Manually extract library search paths from LIBRARY_PATH for ClangBoris Kolpackov4-70/+90
Unlike GCC, Clang does not incorporate the LIBRARY_PATH environment variable value into the -print-search-dirs output.
2023-09-07Search for .tbd in addition to .dylib in Mac OSBoris Kolpackov1-0/+25
Besides .dylib, Mac OS now also has "text-based stub libraries" that use the .tbd extension. They appear to be similar to Windows import libraries and contain information such as the location of the .dylib library, its symbols, etc. For example, there is /Library/.../MacOSX13.3.sdk/usr/lib/libsqlite3.tbd which points to /usr/lib/libsqlite3.dylib (but which itself is invisible/inaccessible, presumably for security). Note that for now we are treating the .tbd library as the shared library but could probably do the more elaborate dance with ad hoc members like on Windows if really necessary.
2023-09-07Add implied .../MacOSX*.sdk/usr/lib/ to system library search directoriesBoris Kolpackov1-7/+22
2023-08-29Add diagnostics color support on Windows (GH issue #312)Boris Kolpackov1-8/+39
Note that currently this has to be enabled with an explicit --diag-color option. In the future the plan is to enable it by default if supported.
2023-08-22Consider *_inc{} target types as headers for rule match purposesBoris Kolpackov5-18/+24
2023-08-22Add abstract c_inc{} and cxx_inc{} target typesBoris Kolpackov2-0/+32
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-31Add CCC_OVERRIDE_OPTIONS to list of Clang env vars to track/saveBoris Kolpackov1-2/+5
2023-07-24Add setupapi.lib to list of Windows system librariesBoris Kolpackov1-0/+1
2023-06-28Minor tweaks and cleanupsBoris Kolpackov1-0/+3
2023-06-22Filter out subsequent occurrences of library itself in .pc files (GH issue #283)Boris Kolpackov1-18/+28
Failed that we will end up with a dependency cycle.
2023-06-22Omit -Wno-gnu-line-marker for Apple Clang 14.0.3Boris Kolpackov1-2/+9
2023-06-19Update Apple Clang to vanilla Clang version mappingBoris Kolpackov1-21/+27
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-06-02Fix data race in library metadata protocol logicBoris Kolpackov2-4/+9
2023-04-18Add support for Assembler with C Preprocessor (.S) compilationBoris Kolpackov7-41/+103
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 Kolpackov4-32/+53
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 Kolpackov2-6/+6
This is used by bpkg to detect forwarded configurations without incurring the full context creation overhead.
2023-04-04Add support for installation filtering (GH issue #147)Boris Kolpackov1-2/+2