aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2021-06-08Implement ad hoc regex pattern rule supportBoris Kolpackov29-383/+1644
An ad hoc pattern rule consists of a pattern that mimics a dependency declaration followed by one or more recipes. For example: exe{~'/(.*)/'}: cxx{~'/\1/'} {{ $cxx.path -o $path($>) $path($<[0]) }} If a pattern matches a dependency declaration of a target, then the recipe is used to perform the corresponding operation on this target. For example, the following dependency declaration matches the above pattern which means the rule's recipe will be used to update this target: exe{hello}: cxx{hello} While the following declarations do not match the above pattern: exe{hello}: c{hello} # Type mismatch. exe{hello}: cxx{howdy} # Name mismatch. On the left hand side of `:` in the pattern we can have a single target or an ad hoc target group. The single target or the first (primary) ad hoc group member must be a regex pattern (~). The rest of the ad hoc group members can be patterns or substitutions (^). For example: <exe{~'/(.*)/'} file{^'/\1.map/'}>: cxx{~'/\1/'} {{ $cxx.path -o $path($>[0]) "-Wl,-Map=$path($>[1])" $path($<[0]) }} On the left hand side of `:` in the pattern we have prerequisites which can be patterns, substitutions, or non-patterns. For example: <exe{~'/(.*)/'} file{^'/\1.map/'}>: cxx{~'/\1/'} hxx{^'/\1/'} hxx{common} {{ $cxx.path -o $path($>[0]) "-Wl,-Map=$path($>[1])" $path($<[0]) }} Substitutions on the left hand side of `:` and substitutions and non-patterns on the right hand side are added to the dependency declaration. For example, given the above rule and dependency declaration, the effective dependency is going to be: <exe{hello} file{hello.map>: cxx{hello} hxx{hello} hxx{common}
2021-06-02Redo fallback reverse operation machinery in ad hoc recipesBoris Kolpackov7-64/+78
2021-05-31Only pass target to recipe_text() if recipe is not sharedBoris Kolpackov10-42/+88
2021-05-28Fix few Windows/VC compatibility issuesBoris Kolpackov2-6/+6
2021-05-28Add support for regex-based target type/pattern specific variablesBoris Kolpackov14-261/+710
This is in addition to the already supported path-based target type/pattern specific variables. For example: hxx{*}: x = y # path-based hxx{~/.*/}: x = y # regex-based
2021-05-28Recognize quoting of first character in tokenBoris Kolpackov7-55/+118
Use this to relax the pattern inclusion/exclusion syntax to only require unquoted +/-.
2021-05-28Ban conversion of patterns to valuesBoris Kolpackov9-113/+137
Also improve conversion diagnostic.
2021-05-28Add pattern_mode::ignore and use in appropriate placesBoris Kolpackov5-25/+35
2021-05-28Tie loose ends in target type/pattern-specific matchingBoris Kolpackov7-42/+119
2021-05-28Clean default target type extension logicBoris Kolpackov5-22/+83
2021-05-28Make notion of name pattern explicit, fix various related loose endsBoris Kolpackov13-145/+285
2021-05-25Add dbgeng.lib to list of Windows system librariesBoris Kolpackov1-0/+1
2021-05-14Add synchronization.lib to the list of Windows system librariesBoris Kolpackov1-19/+21
2021-05-13Rename sys_inc_dirs to sys_hdr_dirs for consistencyBoris Kolpackov12-78/+78
2021-05-13Add ${c,cxx}.find_system_{header,library}() functionsBoris Kolpackov8-4/+241
2021-05-13Extract MSVC header/library search paths from INCLUDE/LIB envvarsBoris Kolpackov1-29/+48
2021-05-13Rearrange inline function definitions to make MinGW GCC happyBoris Kolpackov2-4/+9
2021-05-13Do lazy allocation of shadow task queuesBoris Kolpackov3-7/+11
2021-05-13Don't both mark the scheduler queue and enter sub-phaseBoris Kolpackov2-19/+2
2021-05-12Deal with helper thread starvation during phase switchingBoris Kolpackov6-46/+261
The implemented solution entails shadowing old phase queues so that helpers don't pick up old phase tasks and boosting the max_threads count so that we can create more helpers if all the existing ones are stuck in the old phase.
2021-05-12Keep phase locked while working own queueBoris Kolpackov8-43/+87
2021-05-07Various improvements and clarifications in metadata handlingBoris Kolpackov2-45/+85
2021-05-06See through utility libraries when looking for module interfacesBoris Kolpackov2-92/+117
2021-05-06Propagate complete match rules from utility libraries in link ruleBoris Kolpackov2-80/+82
This makes sure mixed-language (e.g., C and C++) utility libraries behave as expected.
2021-05-06Fix default Clang C++ compiler name mis-guessBoris Kolpackov1-1/+1
2021-05-05Deactivate when blocked on load phase mutexBoris Kolpackov1-2/+12
This turned out to be important when building in multiple contexts that share the scheduler (e.g., main and module/recipe build context). In this case we need an accurate active thread count in order to decide when to start an extra helper thread past max_active.
2021-05-04Add config.install.root with data_root/etc/ defaultBoris Kolpackov2-0/+4
2021-05-04Replace int_ with intf_ and imp_ with impl_ in namesBoris Kolpackov15-45/+45
2021-05-04Handle duplicate suppression of multi-element libraries (-l foo)Boris Kolpackov7-150/+305
See GitHub issue #114 for context.
2021-05-03Allow unseparated scope-qualified variable assignment and expansionBoris Kolpackov2-6/+59
2021-04-26Detect and diagnose presence of certain GCC environment variablesBoris Kolpackov2-8/+14
Their presence is incompatible with what we are doing.
2021-04-22Add <version> install directory substitution in addition to <project>Boris Kolpackov2-8/+23
2021-04-22Incorporate project environment checksum into cc::compiler_info cache keyBoris Kolpackov8-3/+60
2021-04-22Add another hash/save_environment() overloadBoris Kolpackov4-2/+33
2021-04-22Document use of depdb-env for manually tracking changes to environmentBoris Kolpackov1-0/+18
2021-04-21Add buildscript depdb builtin 'env' commandKaren Arutyunov7-18/+127
2021-04-20Detect environment changes in ad hoc recipesBoris Kolpackov9-37/+101
2021-04-20Track changes to environment in cc rulesBoris Kolpackov10-6/+134
2021-04-20Disable bunch of bogus GCC warningsBoris Kolpackov3-3/+4
2021-04-16Handle hermetic configurations in ~host and ~build2Boris Kolpackov2-14/+29
Specifically, we keep config.config.environment but strip config.config.hermetic. Also update the INSTALL file.
2021-04-15Disable modules support in VC 16.8 and later due to options changeBoris Kolpackov1-2/+5
See GitHub issue #134 for background.
2021-04-09Adjust to butl::process::quite_argument() interface changeBoris Kolpackov1-1/+1
2021-04-09Fix bug in configure meta-operation implementationBoris Kolpackov1-1/+1
2021-04-09Document hermetic build configuration supportBoris Kolpackov4-15/+201
2021-04-07Register environment variables for hermetic build configurationsBoris Kolpackov22-20/+433
2021-04-04Add base functionality for hermetic build configurationshermeticBoris Kolpackov7-112/+345
2021-04-02Add support for propagating project environmentBoris Kolpackov13-54/+254
2021-03-26Implement config.config.environment storageBoris Kolpackov5-99/+252
2021-03-22Fix tests to work for compressed file cache entriesBoris Kolpackov1-1/+1
2021-03-22Fix bug in file cache logic (compression disabled)Boris Kolpackov1-0/+2