tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

clang_windows.star (9206B)


      1 # -*- bazel-starlark -*-
      2 # Copyright 2023 The Chromium Authors
      3 # Use of this source code is governed by a BSD-style license that can be
      4 # found in the LICENSE file.
      5 """Siso configuration for clang-cl/windows."""
      6 
      7 load("@builtin//lib/gn.star", "gn")
      8 load("@builtin//struct.star", "module")
      9 load("./clang_all.star", "clang_all")
     10 load("./clang_code_coverage_wrapper.star", "clang_code_coverage_wrapper")
     11 load("./config.star", "config")
     12 load("./gn_logs.star", "gn_logs")
     13 load("./reproxy.star", "reproxy")
     14 load("./rewrapper_cfg.star", "rewrapper_cfg")
     15 load("./win_sdk.star", "win_sdk")
     16 
     17 def __filegroups(ctx):
     18     fg = {}
     19     fg.update(win_sdk.filegroups(ctx))
     20     fg.update(clang_all.filegroups(ctx))
     21     return fg
     22 
     23 def __clang_compile_coverage(ctx, cmd):
     24     clang_command = clang_code_coverage_wrapper.run(ctx, list(cmd.args))
     25     ctx.actions.fix(args = clang_command)
     26 
     27 __handlers = {
     28     "clang_compile_coverage": __clang_compile_coverage,
     29 }
     30 __handlers.update(clang_all.handlers)
     31 
     32 def __step_config(ctx, step_config):
     33     cfg = "buildtools/reclient_cfgs/chromium-browser-clang/rewrapper_windows.cfg"
     34     if ctx.fs.exists(cfg):
     35         reproxy_config = rewrapper_cfg.parse(ctx, cfg)
     36         largePlatform = {}
     37         for k, v in reproxy_config["platform"].items():
     38             if k.startswith("label:action"):
     39                 continue
     40             largePlatform[k] = v
     41 
     42         # no "action_large" Windows worker pool
     43         windowsWorker = True
     44         if reproxy_config["platform"]["OSFamily"] != "Windows":
     45             largePlatform["label:action_large"] = "1"
     46             windowsWorker = False
     47         step_config["platforms"].update({
     48             "clang-cl": reproxy_config["platform"],
     49             "clang-cl_large": largePlatform,
     50             "lld-link": largePlatform,
     51         })
     52         step_config["input_deps"].update(clang_all.input_deps)
     53 
     54         # when win_toolchain_dir is unknown (e.g.
     55         # missing build/win_toolchain.json), we can't run
     56         # clang-cl remotely as we can find sysroot files
     57         # under exec_root, so just run locally.
     58         # When building with ToT Clang, we can't run clang-cl
     59         # remotely, too.
     60         remote = False
     61         win_toolchain_dir = win_sdk.toolchain_dir(ctx)
     62         if win_toolchain_dir:
     63             remote = True
     64             if reproxy_config["platform"]["OSFamily"] == "Windows":
     65                 step_config["input_deps"].update({
     66                     win_toolchain_dir + ":headers": [
     67                         win_toolchain_dir + ":headers-ci",
     68                     ],
     69                 })
     70             else:
     71                 win_sdk.step_config(ctx, step_config)
     72         remote_wrapper = reproxy_config.get("remote_wrapper")
     73         input_root_absolute_path = gn_logs.read(ctx).get("clang_need_input_root_absolute_path") == "true"
     74         canonicalize_dir = not input_root_absolute_path
     75 
     76         timeout = "2m"
     77         if (not reproxy.enabled(ctx)) and windowsWorker:
     78             # use longer timeout for siso native
     79             # it takes long time for input fetch (many files in sysroot etc)
     80             timeout = "4m"
     81 
     82         step_config["rules"].extend([
     83             {
     84                 "name": "clang-cl/cxx",
     85                 "action": "(.*_)?cxx",
     86                 "command_prefix": "..\\..\\third_party\\llvm-build\\Release+Asserts\\bin\\clang-cl.exe",
     87                 "inputs": [
     88                     "third_party/llvm-build/Release+Asserts/bin/clang-cl.exe",
     89                 ],
     90                 "platform_ref": "clang-cl",
     91                 "remote": remote,
     92                 "input_root_absolute_path": input_root_absolute_path,
     93                 "canonicalize_dir": canonicalize_dir,
     94                 "remote_wrapper": remote_wrapper,
     95                 "timeout": timeout,
     96             },
     97             {
     98                 "name": "clang-cl/cc",
     99                 "action": "(.*_)?cc",
    100                 "command_prefix": "..\\..\\third_party\\llvm-build\\Release+Asserts\\bin\\clang-cl.exe",
    101                 "inputs": [
    102                     "third_party/llvm-build/Release+Asserts/bin/clang-cl.exe",
    103                 ],
    104                 "platform_ref": "clang-cl",
    105                 "remote": remote,
    106                 "input_root_absolute_path": input_root_absolute_path,
    107                 "canonicalize_dir": canonicalize_dir,
    108                 "remote_wrapper": remote_wrapper,
    109                 "timeout": timeout,
    110             },
    111             {
    112                 "name": "clang-coverage/cxx",
    113                 "action": "(.*_)?cxx",
    114                 "command_prefix": "python3.exe ../../build/toolchain/clang_code_coverage_wrapper.py",
    115                 "inputs": [
    116                     "third_party/llvm-build/Release+Asserts/bin/clang++",
    117                 ],
    118                 "handler": "clang_compile_coverage",
    119                 "platform_ref": "clang-cl",
    120                 "remote": remote,
    121                 "input_root_absolute_path": input_root_absolute_path,
    122                 "canonicalize_dir": canonicalize_dir,
    123                 "remote_wrapper": remote_wrapper,
    124                 "timeout": timeout,
    125             },
    126             {
    127                 "name": "clang-coverage/cc",
    128                 "action": "(.*_)?cc",
    129                 "command_prefix": "python3.exe ../../build/toolchain/clang_code_coverage_wrapper.py",
    130                 "inputs": [
    131                     "third_party/llvm-build/Release+Asserts/bin/clang",
    132                 ],
    133                 "handler": "clang_compile_coverage",
    134                 "platform_ref": "clang-cl",
    135                 "remote": remote,
    136                 "input_root_absolute_path": input_root_absolute_path,
    137                 "canonicalize_dir": canonicalize_dir,
    138                 "remote_wrapper": remote_wrapper,
    139                 "timeout": timeout,
    140             },
    141             {
    142                 "name": "lld-link/alink",
    143                 "action": "(.*_)?alink",
    144                 "command_prefix": "..\\..\\third_party\\llvm-build\\Release+Asserts\\bin\\lld-link.exe /lib",
    145                 "handler": "lld_thin_archive",
    146                 "remote": False,
    147                 "accumulate": True,
    148             },
    149             {
    150                 "name": "lld-link/solink",
    151                 "action": "(.*_)?solink",
    152                 "command_prefix": "..\\..\\third_party\\llvm-build\\Release+Asserts\\bin\\lld-link.exe",
    153                 "handler": "lld_link",
    154                 "inputs": [
    155                     "third_party/llvm-build/Release+Asserts/bin/lld-link.exe",
    156                     win_sdk.toolchain_dir(ctx) + ":libs",
    157                 ],
    158                 "exclude_input_patterns": [
    159                     "*.cc",
    160                     "*.h",
    161                     "*.js",
    162                     "*.pak",
    163                     "*.py",
    164                 ],
    165                 "remote": config.get(ctx, "remote-link"),
    166                 "remote_wrapper": remote_wrapper,
    167                 "platform_ref": "lld-link",
    168                 "input_root_absolute_path": input_root_absolute_path,
    169                 "canonicalize_dir": canonicalize_dir,
    170                 "timeout": "2m",
    171             },
    172             {
    173                 "name": "lld-link/solink_module",
    174                 "action": "(.*_)?solink_module",
    175                 "command_prefix": "..\\..\\third_party\\llvm-build\\Release+Asserts\\bin\\lld-link.exe",
    176                 "handler": "lld_link",
    177                 "inputs": [
    178                     "third_party/llvm-build/Release+Asserts/bin/lld-link.exe",
    179                     win_sdk.toolchain_dir(ctx) + ":libs",
    180                 ],
    181                 "exclude_input_patterns": [
    182                     "*.cc",
    183                     "*.h",
    184                     "*.js",
    185                     "*.pak",
    186                     "*.py",
    187                 ],
    188                 "remote": config.get(ctx, "remote-link"),
    189                 "remote_wrapper": remote_wrapper,
    190                 "platform_ref": "lld-link",
    191                 "input_root_absolute_path": input_root_absolute_path,
    192                 "canonicalize_dir": canonicalize_dir,
    193                 "timeout": "2m",
    194             },
    195             {
    196                 "name": "lld-link/link",
    197                 "action": "(.*_)?link",
    198                 "command_prefix": "..\\..\\third_party\\llvm-build\\Release+Asserts\\bin\\lld-link.exe",
    199                 "handler": "lld_link",
    200                 "inputs": [
    201                     "third_party/llvm-build/Release+Asserts/bin/lld-link.exe",
    202                     win_sdk.toolchain_dir(ctx) + ":libs",
    203                 ],
    204                 "exclude_input_patterns": [
    205                     "*.cc",
    206                     "*.h",
    207                     "*.js",
    208                     "*.pak",
    209                     "*.py",
    210                 ],
    211                 "remote": config.get(ctx, "remote-link"),
    212                 "remote_wrapper": remote_wrapper,
    213                 "platform_ref": "lld-link",
    214                 "input_root_absolute_path": input_root_absolute_path,
    215                 "canonicalize_dir": canonicalize_dir,
    216                 "timeout": "2m",
    217             },
    218         ])
    219     elif gn.args(ctx).get("use_remoteexec") == "true":
    220         fail("remoteexec requires rewrapper config")
    221     return step_config
    222 
    223 clang = module(
    224     "clang",
    225     step_config = __step_config,
    226     filegroups = __filegroups,
    227     handlers = __handlers,
    228 )