tor-browser

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

clang_unix.star (15397B)


      1 # -*- bazel-starlark -*-
      2 # Copyright 2024 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/unix."""
      6 
      7 load("@builtin//path.star", "path")
      8 load("@builtin//struct.star", "module")
      9 load("./android.star", "android")
     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("./win_sdk.star", "win_sdk")
     14 
     15 def __clang_compile_coverage(ctx, cmd):
     16     clang_command = clang_code_coverage_wrapper.run(ctx, list(cmd.args))
     17     ctx.actions.fix(args = clang_command)
     18 
     19 def __clang_link(ctx, cmd):
     20     if not config.get(ctx, "remote-link"):
     21         return
     22     inputs = []
     23     sysroot = ""
     24     target = ""
     25     args = cmd.args
     26     if args[0] == "/bin/sh":
     27         args = args[2].split(" ")
     28     for i, arg in enumerate(args):
     29         if i == 0 and not "python3" in arg:
     30             clang_base = ctx.fs.canonpath(path.dir(path.dir(arg)))
     31             inputs.append(clang_base + ":link")
     32             continue
     33         if i == 1:
     34             driver = ctx.fs.canonpath(arg)  # driver script
     35             if ctx.fs.exists(driver):
     36                 inputs.append(driver + ":link")
     37             continue
     38         if arg.startswith("--sysroot="):
     39             sysroot = arg.removeprefix("--sysroot=")
     40             sysroot = ctx.fs.canonpath(sysroot)
     41             inputs.append(sysroot + ":link")
     42         elif arg == "-isysroot":
     43             sysroot = ctx.fs.canonpath(args[i + 1])
     44             inputs.append(sysroot + ":link")
     45         elif arg.startswith("--target="):
     46             target = arg.removeprefix("--target=")
     47         elif arg.startswith("-L"):
     48             lib_path = ctx.fs.canonpath(arg.removeprefix("-L"))
     49             inputs.append(lib_path + ":link")
     50         elif arg.startswith("-Wl,-exported_symbols_list,"):
     51             export_path = ctx.fs.canonpath(arg.removeprefix("-Wl,-exported_symbols_list,"))
     52             inputs.append(export_path)
     53         elif arg == "-sectcreate":
     54             # -sectcreate <arg1> <arg2> <arg3>
     55             inputs.append(ctx.fs.canonpath(args[i + 3]))
     56         elif arg.startswith("-Wcrl,"):
     57             crls = arg.removeprefix("-Wcrl,").split(",")
     58             if len(crls) == 2:
     59                 crl = ctx.fs.canonpath(crls[1])
     60                 if ctx.fs.exists(crl):
     61                     inputs.append(crl + ":link")
     62         elif arg == "--":
     63             clang_base = ctx.fs.canonpath(path.dir(path.dir(cmd.args[i + 1])))
     64             inputs.append(clang_base + ":link")
     65 
     66     for arch in android.archs:
     67         if target.startswith(arch):
     68             android_ver = target.removeprefix(arch)
     69             inputs.extend([
     70                 sysroot + "/usr/lib/" + arch + "/" + android_ver + ":link",
     71             ])
     72             break
     73 
     74     ctx.actions.fix(inputs = cmd.inputs + inputs)
     75 
     76 __handlers = {
     77     "clang_compile_coverage": __clang_compile_coverage,
     78     "clang_link": __clang_link,
     79 }
     80 
     81 def __rules(ctx):
     82     gn_logs_data = gn_logs.read(ctx)
     83     input_root_absolute_path = gn_logs_data.get("clang_need_input_root_absolute_path") == "true"
     84     input_root_absolute_path_for_objc = gn_logs_data.get("clang_need_input_root_absolute_path_for_objc") == "true"
     85 
     86     canonicalize_dir = not input_root_absolute_path
     87     canonicalize_dir_for_objc = not input_root_absolute_path_for_objc
     88 
     89     rules = []
     90     if win_sdk.enabled(ctx):
     91         rules.extend([
     92             {
     93                 "name": "clang-cl/cxx",
     94                 "action": "(.*_)?cxx",
     95                 "command_prefix": "../../third_party/llvm-build/Release+Asserts/bin/clang-cl ",
     96                 "inputs": [
     97                     "third_party/llvm-build/Release+Asserts/bin/clang-cl",
     98                 ],
     99                 "exclude_input_patterns": ["*.stamp"],
    100                 "remote": True,
    101                 "input_root_absolute_path": input_root_absolute_path,
    102                 "canonicalize_dir": canonicalize_dir,
    103                 "timeout": "2m",
    104             },
    105             {
    106                 "name": "clang-cl/cc",
    107                 "action": "(.*_)?cc",
    108                 "command_prefix": "../../third_party/llvm-build/Release+Asserts/bin/clang-cl ",
    109                 "inputs": [
    110                     "third_party/llvm-build/Release+Asserts/bin/clang-cl",
    111                 ],
    112                 "exclude_input_patterns": ["*.stamp"],
    113                 "remote": True,
    114                 "input_root_absolute_path": input_root_absolute_path,
    115                 "canonicalize_dir": canonicalize_dir,
    116                 "timeout": "2m",
    117             },
    118             {
    119                 "name": "lld-link/alink",
    120                 "action": "(.*_)?alink",
    121                 "command_prefix": "../../third_party/llvm-build/Release+Asserts/bin/lld-link /lib",
    122                 "handler": "lld_thin_archive",
    123                 "remote": False,
    124                 "accumulate": True,
    125             },
    126             {
    127                 "name": "lld-link/solink",
    128                 "action": "(.*_)?solink",
    129                 "command_prefix": "../../third_party/llvm-build/Release+Asserts/bin/lld-link",
    130                 "handler": "lld_link",
    131                 "inputs": [
    132                     "third_party/llvm-build/Release+Asserts/bin/lld-link",
    133                     win_sdk.toolchain_dir(ctx) + ":libs",
    134                 ],
    135                 "exclude_input_patterns": [
    136                     "*.cc",
    137                     "*.h",
    138                     "*.js",
    139                     "*.pak",
    140                     "*.py",
    141                 ],
    142                 "remote": config.get(ctx, "remote-link"),
    143                 "platform_ref": "large",
    144                 "input_root_absolute_path": input_root_absolute_path,
    145                 "canonicalize_dir": canonicalize_dir,
    146                 "timeout": "2m",
    147             },
    148             {
    149                 "name": "lld-link/solink_module",
    150                 "action": "(.*_)?solink_module",
    151                 "command_prefix": "../../third_party/llvm-build/Release+Asserts/bin/lld-link",
    152                 "handler": "lld_link",
    153                 "inputs": [
    154                     "third_party/llvm-build/Release+Asserts/bin/lld-link",
    155                     win_sdk.toolchain_dir(ctx) + ":libs",
    156                 ],
    157                 "exclude_input_patterns": [
    158                     "*.cc",
    159                     "*.h",
    160                     "*.js",
    161                     "*.pak",
    162                     "*.py",
    163                 ],
    164                 "remote": config.get(ctx, "remote-link"),
    165                 "platform_ref": "large",
    166                 "input_root_absolute_path": input_root_absolute_path,
    167                 "canonicalize_dir": canonicalize_dir,
    168                 "timeout": "2m",
    169             },
    170             {
    171                 "name": "lld-link/link",
    172                 "action": "(.*_)?link",
    173                 "command_prefix": "../../third_party/llvm-build/Release+Asserts/bin/lld-link",
    174                 "handler": "lld_link",
    175                 "inputs": [
    176                     "third_party/llvm-build/Release+Asserts/bin/lld-link",
    177                     win_sdk.toolchain_dir(ctx) + ":libs",
    178                 ],
    179                 "exclude_input_patterns": [
    180                     "*.cc",
    181                     "*.h",
    182                     "*.js",
    183                     "*.pak",
    184                     "*.py",
    185                 ],
    186                 "remote": config.get(ctx, "remote-link"),
    187                 "platform_ref": "large",
    188                 "input_root_absolute_path": input_root_absolute_path,
    189                 "canonicalize_dir": canonicalize_dir,
    190                 "timeout": "2m",
    191             },
    192         ])
    193 
    194     rules.extend([
    195         {
    196             "name": "clang/cxx",
    197             "action": "(.*_)?cxx",
    198             "command_prefix": "../../third_party/llvm-build/Release+Asserts/bin/clang++ ",
    199             "inputs": [
    200                 "third_party/llvm-build/Release+Asserts/bin/clang++",
    201             ],
    202             "exclude_input_patterns": ["*.stamp"],
    203             "remote": True,
    204             "input_root_absolute_path": input_root_absolute_path,
    205             "canonicalize_dir": canonicalize_dir,
    206             "timeout": "2m",
    207         },
    208         {
    209             "name": "clang/cxx_module",
    210             "action": "(.*_)?cxx_module",
    211             "command_prefix": "../../third_party/llvm-build/Release+Asserts/bin/clang++ ",
    212             "inputs": [
    213                 "third_party/llvm-build/Release+Asserts/bin/clang++",
    214             ],
    215             "exclude_input_patterns": ["*.stamp"],
    216             "remote": True,
    217             "input_root_absolute_path": input_root_absolute_path,
    218             "canonicalize_dir": canonicalize_dir,
    219             "timeout": "2m",
    220         },
    221         {
    222             "name": "clang/cc",
    223             "action": "(.*_)?cc",
    224             "command_prefix": "../../third_party/llvm-build/Release+Asserts/bin/clang ",
    225             "inputs": [
    226                 "third_party/llvm-build/Release+Asserts/bin/clang",
    227             ],
    228             "exclude_input_patterns": ["*.stamp"],
    229             "remote": True,
    230             "input_root_absolute_path": input_root_absolute_path,
    231             "canonicalize_dir": canonicalize_dir,
    232             "timeout": "2m",
    233         },
    234         {
    235             "name": "clang/objcxx",
    236             "action": "(.*_)?objcxx",
    237             "command_prefix": "../../third_party/llvm-build/Release+Asserts/bin/clang++",
    238             "inputs": [
    239                 "third_party/llvm-build/Release+Asserts/bin/clang++",
    240             ],
    241             "exclude_input_patterns": ["*.stamp"],
    242             "remote": True,
    243             "timeout": "2m",
    244             "input_root_absolute_path": input_root_absolute_path_for_objc,
    245             "canonicalize_dir": canonicalize_dir_for_objc,
    246         },
    247         {
    248             "name": "clang/objc",
    249             "action": "(.*_)?objc",
    250             "command_prefix": "../../third_party/llvm-build/Release+Asserts/bin/clang",
    251             "inputs": [
    252                 "third_party/llvm-build/Release+Asserts/bin/clang",
    253             ],
    254             "exclude_input_patterns": ["*.stamp"],
    255             "remote": True,
    256             "timeout": "2m",
    257             "input_root_absolute_path": input_root_absolute_path_for_objc,
    258             "canonicalize_dir": canonicalize_dir_for_objc,
    259         },
    260         {
    261             "name": "clang/asm",
    262             "action": "(.*_)?asm",
    263             "command_prefix": "../../third_party/llvm-build/Release+Asserts/bin/clang",
    264             "inputs": [
    265                 "third_party/llvm-build/Release+Asserts/bin/clang",
    266             ],
    267             "remote": config.get(ctx, "cog"),
    268             "input_root_absolute_path": input_root_absolute_path,
    269             "canonicalize_dir": canonicalize_dir,
    270             "timeout": "2m",
    271         },
    272         {
    273             "name": "clang-coverage/cxx",
    274             "action": "(.*_)?cxx",
    275             "command_prefix": "\"python3\" ../../build/toolchain/clang_code_coverage_wrapper.py",
    276             "inputs": [
    277                 "third_party/llvm-build/Release+Asserts/bin/clang++",
    278             ],
    279             "exclude_input_patterns": ["*.stamp"],
    280             "handler": "clang_compile_coverage",
    281             "remote": True,
    282             "input_root_absolute_path": input_root_absolute_path,
    283             "canonicalize_dir": canonicalize_dir,
    284             "timeout": "2m",
    285         },
    286         {
    287             "name": "clang-coverage/cc",
    288             "action": "(.*_)?cc",
    289             "command_prefix": "\"python3\" ../../build/toolchain/clang_code_coverage_wrapper.py",
    290             "inputs": [
    291                 "third_party/llvm-build/Release+Asserts/bin/clang",
    292             ],
    293             "exclude_input_patterns": ["*.stamp"],
    294             "handler": "clang_compile_coverage",
    295             "remote": True,
    296             "input_root_absolute_path": input_root_absolute_path,
    297             "canonicalize_dir": canonicalize_dir,
    298             "timeout": "2m",
    299         },
    300         {
    301             "name": "clang-coverage/objcxx",
    302             "action": "(.*_)?objcxx",
    303             "command_prefix": "\"python3\" ../../build/toolchain/clang_code_coverage_wrapper.py",
    304             "inputs": [
    305                 "third_party/llvm-build/Release+Asserts/bin/clang++",
    306             ],
    307             "exclude_input_patterns": ["*.stamp"],
    308             "handler": "clang_compile_coverage",
    309             "remote": True,
    310             "timeout": "2m",
    311             "input_root_absolute_path": input_root_absolute_path_for_objc,
    312             "canonicalize_dir": canonicalize_dir_for_objc,
    313         },
    314         {
    315             "name": "clang-coverage/objc",
    316             "action": "(.*_)?objc",
    317             "command_prefix": "\"python3\" ../../build/toolchain/clang_code_coverage_wrapper.py",
    318             "inputs": [
    319                 "third_party/llvm-build/Release+Asserts/bin/clang",
    320             ],
    321             "exclude_input_patterns": ["*.stamp"],
    322             "handler": "clang_compile_coverage",
    323             "remote": True,
    324             "timeout": "2m",
    325             "input_root_absolute_path": input_root_absolute_path_for_objc,
    326             "canonicalize_dir": canonicalize_dir_for_objc,
    327         },
    328         {
    329             "name": "clang/alink/llvm-ar",
    330             "action": "(.*_)?alink",
    331             "inputs": [
    332                 # TODO: crbug.com/316267242 - Add inputs to GN config.
    333                 "third_party/llvm-build/Release+Asserts/bin/llvm-ar",
    334             ],
    335             "exclude_input_patterns": [
    336                 "*.cc",
    337                 "*.h",
    338                 "*.js",
    339                 "*.pak",
    340                 "*.py",
    341                 "*.stamp",
    342             ],
    343             "handler": "lld_thin_archive",
    344             "remote": config.get(ctx, "remote-link"),
    345             "canonicalize_dir": True,
    346             "timeout": "2m",
    347             "platform_ref": "large",
    348             "accumulate": True,
    349         },
    350         {
    351             "name": "clang/solink",
    352             "action": "(.*_)?solink",
    353             "handler": "clang_link",
    354             "exclude_input_patterns": [
    355                 "*.cc",
    356                 "*.h",
    357                 "*.js",
    358                 "*.pak",
    359                 "*.py",
    360                 "*.stamp",
    361             ],
    362             "remote": config.get(ctx, "remote-link"),
    363             "restat_content": True,
    364             "canonicalize_dir": True,
    365             "platform_ref": "large",
    366             "timeout": "4m",
    367         },
    368         {
    369             "name": "clang/solink_module",
    370             "action": "(.*)?solink_module",
    371             "handler": "clang_link",
    372             "exclude_input_patterns": [
    373                 "*.cc",
    374                 "*.h",
    375                 "*.js",
    376                 "*.pak",
    377                 "*.py",
    378                 "*.stamp",
    379             ],
    380             "remote": config.get(ctx, "remote-link"),
    381             "canonicalize_dir": True,
    382             "platform_ref": "large",
    383             "timeout": "4m",
    384         },
    385         {
    386             "name": "clang/link",
    387             "action": "(.*_)?link",
    388             "handler": "clang_link",
    389             "exclude_input_patterns": [
    390                 "*.cc",
    391                 "*.h",
    392                 "*.js",
    393                 "*.pak",
    394                 "*.py",
    395                 "*.stamp",
    396             ],
    397             "remote": config.get(ctx, "remote-link"),
    398             "canonicalize_dir": True,
    399             "platform_ref": "large",
    400             "timeout": "10m",
    401         },
    402     ])
    403     return rules
    404 
    405 clang_unix = module(
    406     "clang_unix",
    407     handlers = __handlers,
    408     rules = __rules,
    409 )