aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2021-09-13Consistently install prerequisites from any scope by defaultinstall-scopeBoris Kolpackov7-59/+67
2021-09-13Impose 16KB line length limit for regex matches in TestscriptBoris Kolpackov1-1/+14
2021-09-09Handle Emscripten -pthread modeBoris Kolpackov1-0/+15
2021-09-08Adjust to renaming of butl::fdbuf to fdstreambufBoris Kolpackov2-4/+4
2021-09-02Don't consider aliasing in variable override lookupBoris Kolpackov3-6/+13
2021-09-02Add diag_frame around export stub loadingBoris Kolpackov1-2/+11
This gives the location of the importer in case the export stub issues any diagnostics.
2021-08-25Keep mtime check always enabled on WindowsBoris Kolpackov4-9/+16
Windows is known not to guarantee monotonically increasing mtimes.
2021-08-23Clear data in target::data() modifiersBoris Kolpackov1-2/+4
Currently we may end up resetting the data during the rule ambiguity detection.
2021-08-18Fix bug in external module skipping logicBoris Kolpackov1-7/+5
2021-08-13Fix amalgamation discovery logic some moreBoris Kolpackov1-1/+5
2021-08-13Cache git status results in version moduleBoris Kolpackov4-53/+64
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-06Adapt to support for option positions added to butl::load_default_options()Karen Arutyunov1-1/+22
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 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