aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2023-12-07Add support for compiling MSVC standard library modulesBoris Kolpackov1-41/+144
2023-12-07C++20 named modules support for MSVC, take 2Boris Kolpackov7-135/+126
2023-12-04Clarify commentBoris Kolpackov1-4/+4
2023-12-04Don't match predefs rule for unsupported compiler/versionBoris Kolpackov1-1/+24
2023-12-04Improve parser diagnosticsBoris Kolpackov1-1/+5
2023-12-04Document c.predefs and cxx.predefs functionalityBoris Kolpackov1-6/+87
2023-12-04Support creating file symlinks with ad hoc recipesBoris Kolpackov1-6/+52
2023-12-03Support dir{}/fsdir{} idiosyncrasies in $name.*() function familyBoris Kolpackov1-0/+6
2023-12-03Reimplement search_existing() functions via target_type::searchBoris Kolpackov18-66/+91
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 Kolpackov5-23/+58
2023-12-03Make fsdir{} usable as target of ad hoc Buildscript recipesBoris Kolpackov2-3/+41
In particular, it can now be used to represent a directory symlink. For example: exe{hello}: ... fsdir{assets} fsdir{assets}: % update {{ ln -s $src_base/assets $out_base/assets }} % clean {{ rm $out_base/assets }}
2023-11-29Add rule for extracting C and C++ predefsBoris Kolpackov8-30/+518
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 Kolpackov9-118/+7033
2023-11-21Add target::append_locked() variantBoris Kolpackov2-6/+34
2023-11-17Disable modules tests for Apple ClangBoris Kolpackov1-2/+6
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-17Add pre-condition assert to target::newer()Boris Kolpackov1-0/+2
2023-11-16Fix target::group_state() for unmatched ad hoc group membersBoris Kolpackov2-4/+14
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-09Enable named modules tests for Clang 16 or later (but not on Windows)Boris Kolpackov2-6/+7
2023-11-09Fix more issues with C++20 named modules support in ClangBoris Kolpackov2-34/+19
2023-11-09Minor fix to diagnosticsBoris Kolpackov1-1/+1
2023-11-07Fix source directory/subdirectory terminology inconsistencies in manualBoris Kolpackov1-10/+10
2023-11-07Account for match options re-locking when checking if target is matchedBoris Kolpackov6-15/+49
2023-11-06Fix basic issues with C++20 named modules support in ClangBoris Kolpackov2-13/+16
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-03Work around lack of definition for static constexpr some moreBoris Kolpackov1-2/+4
2023-11-03Work around lack of definition for static constexprBoris Kolpackov1-2/+2
During bootstrap we compile in C++14 where it is not implicitly inline.
2023-11-03Fix data race in match options logicBoris Kolpackov3-10/+36
2023-11-02Add $first()/$second() pair functionsBoris Kolpackov2-1/+84
2023-11-02Minor diagnostics improvementBoris Kolpackov1-1/+1
2023-11-01Tighten/optimize cleaning of fsdir{} during matchBoris Kolpackov4-10/+37
2023-11-01Fix incorrect fsdir_rule::perform_update_direct() callsBoris Kolpackov4-18/+20
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-01Add support for adjusting match options of post hoc prerequisitesBoris Kolpackov7-46/+153
2023-11-01Use match options for runtime/buildtime distinction when installing librariesBoris Kolpackov8-201/+837
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-11-01Add notion of match optionsBoris Kolpackov16-173/+537
Now, when matching a rule, the caller may request a subset of the full functionality of performing an operation on a target. This is achieved with match options.
2023-10-26Add inject_fsdir_direct(), fsdir_rule::perform_clean_direct() functionsBoris Kolpackov4-4/+55