aboutsummaryrefslogtreecommitdiff
path: root/libbuild2
AgeCommit message (Collapse)AuthorFilesLines
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 Kolpackov2-1/+6
2021-06-08Redo low verbosity diagnostic deduction to use scope instead of targetBoris Kolpackov9-51/+38
2021-06-08Get rid of special *{} wildcard target type notation in target type/patternsBoris Kolpackov4-30/+23
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 Kolpackov26-381/+1565
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 Kolpackov9-22/+43
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 Kolpackov12-222/+583
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 Kolpackov6-111/+132
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 Kolpackov1-0/+2
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 Kolpackov1-6/+41
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 Kolpackov1-5/+20
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-21Add buildscript depdb builtin 'env' commandKaren Arutyunov6-18/+65
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 Kolpackov1-3/+0
2021-04-16Handle hermetic configurations in ~host and ~build2Boris Kolpackov1-9/+14
Specifically, we keep config.config.environment but strip config.config.hermetic. Also update the INSTALL file.