aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2021-08-03Fix incorrect assumption in amalgamation discovery logicBoris Kolpackov1-8/+10
2021-08-03Regenerate options parsing filesBoris Kolpackov6-41/+209
2021-08-02Print list of bootstrapped modules in info meta-operationBoris Kolpackov1-1/+10
2021-07-30Fix issue in amalgamation discoveryBoris Kolpackov1-41/+53
2021-07-23Remove duplicate friend declaration to make GCC 4.9 happyBoris Kolpackov1-2/+0
2021-07-23Reserve variable names/components that start with underscore to build2 coreBoris Kolpackov3-15/+44
2021-07-22Change manifest builds value from all to hostBoris Kolpackov1-1/+1
2021-07-22Adjust Emscripten Clang version to account for unreleased snapshotsBoris Kolpackov1-1/+17
2021-07-22Add note on new /std:c11 and /std:c17 MSVC optionsBoris Kolpackov1-0/+5
2021-07-22Update C++ standard mapping for latest versions of compilersBoris Kolpackov1-17/+31
2021-07-20Map Apple Clang version 12.0.5 to vanilla Clang 10.0.0Boris Kolpackov1-16/+19
2021-07-08Also disable GCC -Wstringop-overread in testsBoris Kolpackov1-1/+2
2021-07-07Disable GCC -Wstringop-overread (false positives in GCC 11, bug 101361)Boris Kolpackov1-1/+2
2021-07-06Clear errno before calling strto*() functionsBoris Kolpackov1-0/+1
2021-07-01Suppress duplicate libraries in pkg-config filesBoris Kolpackov3-46/+89
2021-07-01Handle GCC versions in 9.2-win32 form (GitHub issue #156)Boris Kolpackov1-25/+19
2021-06-30Complete nm detectionBoris Kolpackov2-7/+22
2021-06-30Move symbol exporting .def file rule to bin.def module, add support for MinGWBoris Kolpackov4-155/+288
The bin.def module is automatically loaded by the c and cxx modules for the *-win32-msvc target architecture. This allows automatically exporting all symbols for all Windows targets using the following setup (showing for cxx in this example): lib{foo}: libul{foo}: {hxx cxx}{**} ... lib{foo}: def{foo}: include = ($cxx.target.system == 'win32-msvc') def{foo}: libul{foo} if ($cxx.target.system == 'mingw32') cxx.loptions += -Wl,--export-all-symbols That is, we use the .def file generation for MSVC and the built-in support (--export-all-symbols) for MinGW. But it is also possible to use the .def file generation for MinGW. In this case we need to explicitly load the bin.def module (which should be done after loading c or cxx) and using the following setup: using bin.def # In root.build. lib{foo}: libul{foo}: {hxx cxx}{**} ... lib{foo}: def{foo}: include = ($cxx.target.class == 'windows') def{foo}: libul{foo}
2021-06-21Add support for automatic generation of symbol exporting .def fileBoris Kolpackov13-19/+926
2021-06-09Fix cxx pattern rule testBoris Kolpackov3-7/+13
2021-06-08Redo low verbosity diagnostic deduction to use scope instead of targetBoris Kolpackov10-96/+58
2021-06-08Get rid of special *{} wildcard target type notation in target type/patternsBoris Kolpackov5-31/+24
Explicit target{} should be used instead. Also, in this context, absent target type is now treated as file{} rather than target{}, for consistency with all other cases.
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-08Redo fallback reverse operation machinery in ad hoc recipesBoris Kolpackov7-64/+78
2021-06-08Only pass target to recipe_text() if recipe is not sharedBoris Kolpackov10-42/+88
2021-06-07Strip partition part from module name when forming imported partition nameBoris Kolpackov3-14/+22
2021-06-03Fix crashing on test command output regex match failureKaren Arutyunov1-16/+42
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.