aboutsummaryrefslogtreecommitdiff
path: root/libbuild2/cc
AgeCommit message (Collapse)AuthorFilesLines
2021-06-30Move symbol exporting .def file rule to bin.def module, add support for MinGWBoris Kolpackov1-2/+4
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 Kolpackov2-6/+9
2021-06-08Implement ad hoc regex pattern rule supportBoris Kolpackov1-1/+1
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-07Strip partition part from module name when forming imported partition nameBoris Kolpackov3-14/+22
2021-05-28Tie loose ends in target type/pattern-specific matchingBoris Kolpackov1-5/+7
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 Kolpackov10-70/+70
2021-05-13Add ${c,cxx}.find_system_{header,library}() functionsBoris Kolpackov7-3/+240
2021-05-13Extract MSVC header/library search paths from INCLUDE/LIB envvarsBoris Kolpackov1-29/+48
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-04Replace int_ with intf_ and imp_ with impl_ in namesBoris Kolpackov5-16/+16
2021-05-04Handle duplicate suppression of multi-element libraries (-l foo)Boris Kolpackov7-150/+305
See GitHub issue #114 for context.
2021-04-26Detect and diagnose presence of certain GCC environment variablesBoris Kolpackov1-1/+8
Their presence is incompatible with what we are doing.
2021-04-22Incorporate project environment checksum into cc::compiler_info cache keyBoris Kolpackov3-1/+24
2021-04-22Add another hash/save_environment() overloadBoris Kolpackov1-2/+2
2021-04-20Detect environment changes in ad hoc recipesBoris Kolpackov1-3/+2
2021-04-20Track changes to environment in cc rulesBoris Kolpackov5-5/+33
2021-04-09Adjust to butl::process::quite_argument() interface changeBoris Kolpackov1-1/+1
2021-04-07Register environment variables for hermetic build configurationsBoris Kolpackov4-6/+112
2021-03-20Don't create file cache entry for non-existent .ii fileBoris Kolpackov1-1/+7
2021-03-19Redo entering of src directories into scope_mapBoris Kolpackov1-10/+20
2021-03-18Move file_cache::write:close() call to correct place in cc::compile_ruleBoris Kolpackov1-7/+5
2021-03-16Define intermediate build results file cache interfaceBoris Kolpackov2-44/+91
2021-03-13Tighten Clang detection not to misdetect GCC built with ClangBoris Kolpackov1-1/+8
GitHub issue #136.
2021-03-09Remove stray trailing whitespaces from diagnosticsBoris Kolpackov1-1/+1
2021-02-11Improve module name to file name matching logicBoris Kolpackov1-9/+38
2021-02-11Use lib{} group for installed libraries in make_header_sidebuild()Boris Kolpackov1-23/+18
2021-02-11Generalize process_libraries() to allow no picking installed library memberBoris Kolpackov6-81/+107
2021-02-09Allow overriding cxx.features.modules with config.cxx.features.modulesBoris Kolpackov1-2/+4
2021-02-09Minor simplificationBoris Kolpackov2-5/+5
2021-02-08Get rid of unused lambda captureBoris Kolpackov1-1/+1
2021-02-08Enter scope src directories into scope mapBoris Kolpackov1-14/+6
2021-02-03Propagate relevant options/prerequisites to header unit sidebuildsBoris Kolpackov5-33/+216
2021-01-30Add std::{map, multimap} to types.hxxBoris Kolpackov4-6/+1
Seeing that std::map is becoming a common Buildfile variable type.
2021-01-30Rework include translation supportBoris Kolpackov13-182/+876
See the config.cxx.translate_include variable documentation in cxx/init.cxx for details.
2021-01-22Redo bin.lib.version not to require empty keyBoris Kolpackov1-3/+9
2021-01-21Use target name to derive binless library -l-nameBoris Kolpackov2-6/+22
2021-01-11Use link.exe /LIB rather than /DUMP approach to detect library typeBoris Kolpackov1-25/+27
This approach works for both link.exe and lld-link which does not support /DUMP. We now also issue a warning if we were unable to detect the library type.
2021-01-11Add extra diagnostics around pkg-config library resolutionBoris Kolpackov1-6/+24
2021-01-08Add noteBoris Kolpackov1-0/+7
2020-12-15Cache more results of executing programs (compilers, etc)Boris Kolpackov2-36/+69
2020-12-14Fix bug in create_new_target_locked()Karen Arutyunov2-3/+3
2020-12-14Fix incorrect assert in conditionBoris Kolpackov1-2/+2
2020-12-11Minor module mapper fixesBoris Kolpackov2-17/+26
2020-12-11Add $cxx.obj_modules() which returns object files for binless modulesBoris Kolpackov2-11/+110
2020-12-11Add support for module interface-only librariesBoris Kolpackov7-63/+238
Also suppress generation of the object file in cases where we don't need it.
2020-12-08Update pkg-config modules serialization format to handle partitionsBoris Kolpackov1-4/+27