aboutsummaryrefslogtreecommitdiff
path: root/libbuild2
AgeCommit message (Collapse)AuthorFilesLines
2021-08-12Add ${c,cxx}.deduplicate_export_libs() functionBoris Kolpackov4-0/+154
This function deduplicates interface library dependencies by removing libraries that are also interface dependencies of the specified libraries. This can result in significantly better build performance for heavily interface-interdependent library families (for example, like Boost). Typical usage: import intf_libs = ... import intf_libs += ... ... import intf_libs += ... intf_libs = $cxx.deduplicate_export_libs($intf_libs)
2021-08-12Avoid duplication in Libs/Libs.private in generated .pc filesBoris Kolpackov3-23/+69
2021-08-11Optimize process_libraries() some moreBoris Kolpackov5-23/+59
2021-08-10Complete process_libraries() duplicate suppression workBoris Kolpackov5-69/+114
2021-08-09Use parse_variable_name() in parse_import(), parse_config()Boris Kolpackov2-15/+22
2021-08-09Make variable assignment mandatory in import directiveBoris Kolpackov1-125/+52
In return we get the ability to specify value attributes.
2021-08-09Merge library hashing and collection into single traversal passBoris Kolpackov4-230/+106
It turns out this is a lot faster on deeply-dependent libraries like Boost while not having any noticeable differences for "sane" projects.
2021-08-09Print pkgconfig_save() command at verbosity 1 since can take longBoris Kolpackov1-1/+6
2021-08-05Implement traversal pruning in process_libraries()Boris Kolpackov8-421/+503
2021-08-05Add resolved library cache, use in cc::process_libraries()Boris Kolpackov2-9/+74
2021-08-05Avoid normalizing likely already normalized directories in search_existing()Boris Kolpackov1-1/+8
2021-08-04Take into account file-base'ness in ad hoc buildscript recipesBoris Kolpackov10-19/+76
2021-08-03Fix incorrect assumption in amalgamation discovery logicBoris Kolpackov1-8/+10
2021-08-03Regenerate options parsing filesBoris Kolpackov3-14/+90
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-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-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