tor-browser

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

cros.star (15588B)


      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 ChromeOS builds."""
      6 
      7 load("@builtin//lib/gn.star", "gn")
      8 load("@builtin//path.star", "path")
      9 load("@builtin//struct.star", "module")
     10 load("./config.star", "config")
     11 
     12 def __cros_gn_args(ctx):
     13     """Returns all CrOS specific toolchain and sysroot GN args."""
     14     if not "args.gn" in ctx.metadata:
     15         print("no args.gn")
     16         return {}
     17     gn_args = gn.args(ctx)
     18     if gn_args.get("target_os") != '"chromeos"':
     19         return {}
     20 
     21     cros_args = {}
     22     for arg in [
     23         "cros_target_ar",
     24         "cros_target_cc",
     25         "cros_target_cxx",
     26         "cros_target_ld",
     27         "cros_target_nm",
     28         "cros_target_readelf",
     29         "cros_nacl_helper_arm32_ar",
     30         "cros_nacl_helper_arm32_cc",
     31         "cros_nacl_helper_arm32_cxx",
     32         "cros_nacl_helper_arm32_ld",
     33         "cros_nacl_helper_arm32_readelf",
     34         "cros_nacl_helper_arm32_sysroot",
     35         "target_sysroot",
     36     ]:
     37         if arg not in gn_args:
     38             print("no " + arg)
     39             continue
     40         fp = ctx.fs.canonpath(gn_args.get(arg).strip('"'))
     41         cros_args[arg] = fp
     42         if arg == "cros_target_cxx":
     43             cros_args["cros_toolchain"] = path.dir(path.dir(fp))
     44         if arg == "cros_nacl_helper_arm32_cxx":
     45             cros_args["cros_nacl_helper_arm32_toolchain"] = path.dir(path.dir(fp))
     46     return cros_args
     47 
     48 def __filegroups(ctx):
     49     fg = {}
     50     cros_args = __cros_gn_args(ctx)
     51     for toolchain in [
     52         cros_args.get("cros_toolchain"),
     53         cros_args.get("cros_nacl_helper_arm32_toolchain"),
     54     ]:
     55         if not toolchain:
     56             continue
     57         print("toolchain = %s" % toolchain)
     58         fg[toolchain + ":headers"] = {
     59             "type": "glob",
     60             # TODO: Avoid using "*" to include only required files.
     61             "includes": ["*"],
     62         }
     63         fg[path.join(toolchain, "bin") + ":llddeps"] = {
     64             "type": "glob",
     65             "includes": [
     66                 "*lld*",
     67                 "*clang*",
     68                 "llvm-nm*",
     69                 "llvm-readelf*",
     70                 "llvm-readobj*",
     71             ],
     72         }
     73         fg[path.join(toolchain, "usr/bin") + ":llddeps"] = {
     74             "type": "glob",
     75             "includes": [
     76                 "*lld*",
     77                 "*clang*",
     78                 "sysroot_wrapper*",
     79                 "llvm-nm*",
     80                 "llvm-readelf*",
     81                 "llvm-readobj*",
     82             ],
     83         }
     84         fg[path.join(toolchain, "lib") + ":libs"] = {
     85             "type": "glob",
     86             "includes": ["*.so", "*.so.*", "*.a", "*.o"],
     87         }
     88         fg[path.join(toolchain, "lib64") + ":libs"] = {
     89             "type": "glob",
     90             "includes": ["*.so", "*.so.*", "*.a", "*.o"],
     91         }
     92         fg[path.join(toolchain, "usr/lib64") + ":libs"] = {
     93             "type": "glob",
     94             "includes": ["*.so", "*.so.*", "*.a", "*.o", "cfi_ignorelist.txt"],
     95         }
     96         fg[path.join(toolchain, "usr/armv7a-cros-linux-gnueabihf") + ":libs"] = {
     97             "type": "glob",
     98             "includes": ["*.so", "*.so.*", "*.a", "*.o"],
     99         }
    100         fg[path.join(toolchain, "usr/bin") + ":clang"] = {
    101             "type": "glob",
    102             "includes": [
    103                 "*clang*",
    104                 "sysroot_wrapper.hardened.ccache*",
    105             ],
    106         }
    107 
    108     for sysroot in [
    109         cros_args.get("target_sysroot"),
    110         cros_args.get("cros_nacl_helper_arm32_sysroot"),
    111     ]:
    112         if not sysroot:
    113             continue
    114         print("sysroot = %s" % sysroot)
    115         fg[path.join(sysroot, "usr/include") + ":include"] = {
    116             "type": "glob",
    117             "includes": ["*"],
    118             # needs bits/stab.def, c++/*
    119         }
    120         fg[path.join(sysroot, "usr/lib") + ":headers"] = {
    121             "type": "glob",
    122             "includes": ["*.h", "crtbegin.o"],
    123         }
    124         fg[path.join(sysroot, "usr/lib64") + ":headers"] = {
    125             "type": "glob",
    126             "includes": ["*.h"],
    127         }
    128         fg[sysroot + ":libs"] = {
    129             "type": "glob",
    130             "includes": ["*.so", "*.so.*", "*.a", "*.o"],
    131         }
    132     print(fg)
    133     return fg
    134 
    135 def __step_config(ctx, step_config):
    136     cros_args = __cros_gn_args(ctx)
    137     toolchain = cros_args.get("cros_toolchain")
    138     cros_nacl_helper_arm32_toolchain = cros_args.get("cros_nacl_helper_arm32_toolchain")
    139     cros_nacl_helper_arm32_sysroot = cros_args.get("cros_nacl_helper_arm32_sysroot")
    140     sysroot = cros_args.get("target_sysroot")
    141     if not (toolchain and sysroot):
    142         return step_config
    143 
    144     cros_target_cxx = cros_args.get("cros_target_cxx")
    145     if cros_target_cxx:
    146         step_config["rules"].extend([
    147             {
    148                 "name": "clang-cros/cxx",
    149                 "action": "(.*_)?cxx",
    150                 "command_prefix": path.join("../../", cros_target_cxx),
    151                 "remote": True,
    152                 # fast-deps is not safe with cros toolchain. crbug.com/391160876
    153                 "no_fast_deps": True,
    154                 "canonicalize_dir": True,
    155                 "timeout": "5m",
    156             },
    157         ])
    158 
    159     cros_target_cc = cros_args.get("cros_target_cc")
    160     if cros_target_cxx:
    161         step_config["rules"].extend([
    162             {
    163                 "name": "clang-cros/cc",
    164                 "action": "(.*_)?cc",
    165                 "command_prefix": path.join("../../", cros_target_cc),
    166                 "remote": True,
    167                 # fast-deps is not safe with cros toolchain. crbug.com/391160876
    168                 "no_fast_deps": True,
    169                 "canonicalize_dir": True,
    170                 "timeout": "5m",
    171             },
    172         ])
    173 
    174     cros_target_ar = cros_args.get("cros_target_ar")
    175     if cros_target_ar:
    176         step_config["rules"].extend([
    177             {
    178                 "name": "clang-cros/alink/llvm-ar",
    179                 # Other alink steps should use clang/alink/llvm-ar rule or a
    180                 # nacl rule.
    181                 "action": "(target_with_system_allocator_)?alink",
    182                 "inputs": [
    183                     cros_target_ar,
    184                 ],
    185                 "exclude_input_patterns": [
    186                     "*.cc",
    187                     "*.h",
    188                     "*.js",
    189                     "*.pak",
    190                     "*.py",
    191                 ],
    192                 "handler": "lld_thin_archive",
    193                 "remote": config.get(ctx, "remote-link"),
    194                 "canonicalize_dir": True,
    195                 "timeout": "5m",
    196                 "platform_ref": "large",
    197                 "accumulate": True,
    198             },
    199         ])
    200         step_config["input_deps"].update({
    201             cros_target_ar: [
    202                 path.join(toolchain, "bin/llvm-ar.elf"),
    203                 path.join(toolchain, "lib") + ":libs",
    204                 path.join(toolchain, "usr/lib64") + ":libs",
    205             ],
    206         })
    207 
    208     cros_nacl_helper_arm32_cxx = cros_args.get("cros_nacl_helper_arm32_cxx")
    209     if cros_nacl_helper_arm32_cxx:
    210         step_config["rules"].extend([
    211             {
    212                 "name": "clang-cros/nacl_helper_arm32_cxx",
    213                 "action": "nacl_helper_arm32_cxx",
    214                 "command_prefix": path.join("../../", cros_nacl_helper_arm32_cxx),
    215                 "remote": True,
    216                 "canonicalize_dir": True,
    217                 "timeout": "5m",
    218             },
    219         ])
    220 
    221     cros_nacl_helper_arm32_cc = cros_args.get("cros_nacl_helper_arm32_cc")
    222     if cros_nacl_helper_arm32_cxx:
    223         step_config["rules"].extend([
    224             {
    225                 "name": "clang-cros/nacl_helper_arm32_cc",
    226                 "action": "nacl_helper_arm32_cc",
    227                 "command_prefix": path.join("../../", cros_nacl_helper_arm32_cc),
    228                 "remote": True,
    229                 "canonicalize_dir": True,
    230                 "timeout": "5m",
    231             },
    232         ])
    233 
    234     cros_nacl_helper_arm32_ar = cros_args.get("cros_nacl_helper_arm32_ar")
    235     if cros_nacl_helper_arm32_ar:
    236         step_config["rules"].extend([
    237             {
    238                 "name": "clang-cros/alink/nacl_helper_arm32_llvm-ar",
    239                 # Other alink steps should use clang/alink/llvm-ar rule or a
    240                 # nacl rule.
    241                 "action": "nacl_helper_arm32_alink",
    242                 "inputs": [
    243                     cros_nacl_helper_arm32_ar,
    244                 ],
    245                 "exclude_input_patterns": [
    246                     "*.cc",
    247                     "*.h",
    248                     "*.js",
    249                     "*.pak",
    250                     "*.py",
    251                 ],
    252                 "handler": "lld_thin_archive",
    253                 "remote": config.get(ctx, "remote-link"),
    254                 "canonicalize_dir": True,
    255                 "timeout": "5m",
    256                 "platform_ref": "large",
    257                 "accumulate": True,
    258             },
    259         ])
    260         step_config["input_deps"].update({
    261             cros_nacl_helper_arm32_ar: [
    262                 path.join(cros_nacl_helper_arm32_toolchain, "bin/llvm-ar.elf"),
    263                 path.join(cros_nacl_helper_arm32_toolchain, "lib") + ":libs",
    264                 path.join(cros_nacl_helper_arm32_toolchain, "usr/lib64") + ":libs",
    265             ],
    266         })
    267 
    268     step_config["rules"].extend([
    269         {
    270             "name": "clang-cros/solink/gcc_solink_wrapper",
    271             "action": "(target_with_system_allocator_)?solink",
    272             "command_prefix": "\"python3\" \"../../build/toolchain/gcc_solink_wrapper.py\"",
    273             "inputs": [
    274                 "build/toolchain/gcc_solink_wrapper.py",
    275                 path.join(toolchain, "bin/ld.lld"),
    276             ],
    277             "exclude_input_patterns": [
    278                 "*.cc",
    279                 "*.h",
    280                 "*.js",
    281                 "*.pak",
    282                 "*.py",
    283             ],
    284             "remote": config.get(ctx, "remote-link"),
    285             # TODO: Do not use absolute paths for custom toolchain/sysroot GN
    286             # args.
    287             "input_root_absolute_path": True,
    288             "platform_ref": "large",
    289             "timeout": "2m",
    290         },
    291         {
    292             "name": "clang-cros/link/gcc_link_wrapper",
    293             "action": "(target_with_system_allocator_)?link",
    294             "command_prefix": "\"python3\" \"../../build/toolchain/gcc_link_wrapper.py\"",
    295             "handler": "clang_link",
    296             "inputs": [
    297                 "build/toolchain/gcc_link_wrapper.py",
    298                 path.join(toolchain, "bin/ld.lld"),
    299             ],
    300             "exclude_input_patterns": [
    301                 "*.cc",
    302                 "*.h",
    303                 "*.js",
    304                 "*.pak",
    305                 "*.py",
    306             ],
    307             "remote": config.get(ctx, "remote-link"),
    308             "canonicalize_dir": True,
    309             "platform_ref": "large",
    310             "timeout": "10m",
    311         },
    312     ])
    313     step_config["input_deps"].update({
    314         sysroot + ":headers": [
    315             path.join(sysroot, "usr/include") + ":include",
    316             path.join(sysroot, "usr/lib") + ":headers",
    317             path.join(sysroot, "usr/lib64") + ":headers",
    318         ],
    319         path.join(toolchain, "bin/llvm-ar"): [
    320             path.join(toolchain, "bin/llvm-ar.elf"),
    321             path.join(toolchain, "lib") + ":libs",
    322             path.join(toolchain, "usr/lib64") + ":libs",
    323         ],
    324         path.join(toolchain, "bin/ld.lld"): [
    325             path.join(toolchain, "bin:llddeps"),
    326             path.join(toolchain, "lib") + ":libs",
    327             path.join(toolchain, "lib64") + ":libs",
    328             path.join(toolchain, "usr/bin:clang"),
    329             path.join(toolchain, "usr/lib64") + ":libs",
    330             sysroot + ":libs",
    331         ],
    332         toolchain + ":link": [
    333             path.join(toolchain, "bin") + ":llddeps",
    334             path.join(toolchain, "lib") + ":libs",
    335             path.join(toolchain, "lib64") + ":libs",
    336             path.join(toolchain, "usr/bin") + ":llddeps",
    337             path.join(toolchain, "usr/lib64") + ":libs",
    338         ],
    339         sysroot + ":link": [
    340             sysroot + ":libs",
    341         ],
    342     })
    343 
    344     if cros_nacl_helper_arm32_toolchain and cros_nacl_helper_arm32_sysroot:
    345         step_config["rules"].extend([
    346             {
    347                 "name": "clang-cros/nacl_helper_arm32_solink/gcc_solink_wrapper",
    348                 "action": "nacl_helper_arm32_solink",
    349                 "command_prefix": "\"python3\" \"../../build/toolchain/gcc_solink_wrapper.py\"",
    350                 "inputs": [
    351                     "build/toolchain/gcc_solink_wrapper.py",
    352                     path.join(cros_nacl_helper_arm32_toolchain, "bin/ld.lld"),
    353                 ],
    354                 "exclude_input_patterns": [
    355                     "*.cc",
    356                     "*.h",
    357                     "*.js",
    358                     "*.pak",
    359                     "*.py",
    360                 ],
    361                 "remote": config.get(ctx, "remote-link"),
    362                 # TODO: Do not use absolute paths for custom toolchain/sysroot GN
    363                 # args.
    364                 "input_root_absolute_path": True,
    365                 "platform_ref": "large",
    366                 "timeout": "2m",
    367             },
    368             {
    369                 "name": "clang-cros/nacl_helper_arm32_link/gcc_link_wrapper",
    370                 "action": "nacl_helper_arm32_link",
    371                 "command_prefix": "\"python3\" \"../../build/toolchain/gcc_link_wrapper.py\"",
    372                 "handler": "clang_link",
    373                 "inputs": [
    374                     "build/toolchain/gcc_link_wrapper.py",
    375                     path.join(cros_nacl_helper_arm32_toolchain, "bin/ld.lld"),
    376                 ],
    377                 "exclude_input_patterns": [
    378                     "*.cc",
    379                     "*.h",
    380                     "*.js",
    381                     "*.pak",
    382                     "*.py",
    383                 ],
    384                 "remote": config.get(ctx, "remote-link"),
    385                 "canonicalize_dir": True,
    386                 "platform_ref": "large",
    387                 "timeout": "10m",
    388             },
    389         ])
    390         step_config["input_deps"].update({
    391             cros_nacl_helper_arm32_sysroot + ":headers": [
    392                 path.join(cros_nacl_helper_arm32_sysroot, "usr/include") + ":include",
    393                 path.join(cros_nacl_helper_arm32_sysroot, "usr/lib") + ":headers",
    394                 path.join(cros_nacl_helper_arm32_sysroot, "usr/lib64") + ":headers",
    395             ],
    396             path.join(cros_nacl_helper_arm32_toolchain, "bin/llvm-ar"): [
    397                 path.join(cros_nacl_helper_arm32_toolchain, "bin/llvm-ar.elf"),
    398                 path.join(cros_nacl_helper_arm32_toolchain, "lib") + ":libs",
    399                 path.join(cros_nacl_helper_arm32_toolchain, "usr/lib64") + ":libs",
    400             ],
    401             path.join(cros_nacl_helper_arm32_toolchain, "bin/ld.lld"): [
    402                 path.join(cros_nacl_helper_arm32_toolchain, "bin:llddeps"),
    403                 path.join(cros_nacl_helper_arm32_toolchain, "lib") + ":libs",
    404                 path.join(cros_nacl_helper_arm32_toolchain, "lib64") + ":libs",
    405                 path.join(cros_nacl_helper_arm32_toolchain, "usr/bin:clang"),
    406                 path.join(cros_nacl_helper_arm32_toolchain, "usr/lib64") + ":libs",
    407                 path.join(cros_nacl_helper_arm32_toolchain, "usr/armv7a-cros-linux-gnueabihf") + ":libs",
    408                 path.join(cros_nacl_helper_arm32_toolchain, "lib64") + ":libs",
    409                 cros_nacl_helper_arm32_sysroot + ":libs",
    410             ],
    411         })
    412 
    413     return step_config
    414 
    415 cros = module(
    416     "cros",
    417     filegroups = __filegroups,
    418     handlers = {},
    419     step_config = __step_config,
    420 )