xref: /aosp_15_r20/external/cronet/build/config/siso/nasm_scandeps.star (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker# -*- bazel-starlark -*-
2*6777b538SAndroid Build Coastguard Worker# Copyright 2023 The Chromium Authors
3*6777b538SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
4*6777b538SAndroid Build Coastguard Worker# found in the LICENSE file.
5*6777b538SAndroid Build Coastguard Worker"""Siso configuration for nasm scandeps.
6*6777b538SAndroid Build Coastguard Worker
7*6777b538SAndroid Build Coastguard Worker- https://chromium.googlesource.com/chromium/deps/nasm
8*6777b538SAndroid Build Coastguard Worker
9*6777b538SAndroid Build Coastguard Workergn
10*6777b538SAndroid Build Coastguard Worker- https://chromium.googlesource.com/chromium/deps/nasm/+/refs/heads/main/nasm_assemble.gni
11*6777b538SAndroid Build Coastguard Worker
12*6777b538SAndroid Build Coastguard Workersample command line:
13*6777b538SAndroid Build Coastguard Worker  command = python3 ../../build/gn_run_binary.py nasm -DPIC -felf64 -P ../../third_party/dav1d/config/linux/x64/config.asm -I../../third_party/dav1d/libdav1d/src// -I../../third_party/dav1d/config/linux/x64/ -I./ -I../../ -Igen/ -DSTACK_ALIGNMENT=16 -MD obj/third_party/dav1d/dav1d_asm/${source_name_part}.o.d -o obj/third_party/dav1d/dav1d_asm/${source_name_part}.o ${in}
14*6777b538SAndroid Build Coastguard Worker
15*6777b538SAndroid Build Coastguard Worker"""
16*6777b538SAndroid Build Coastguard Worker
17*6777b538SAndroid Build Coastguard Workerload("@builtin//struct.star", "module")
18*6777b538SAndroid Build Coastguard Workerload("@builtin//path.star", "path")
19*6777b538SAndroid Build Coastguard Worker
20*6777b538SAndroid Build Coastguard Workerdef __scan_input(ctx, src, inc_dirs):
21*6777b538SAndroid Build Coastguard Worker    inputs = [src]
22*6777b538SAndroid Build Coastguard Worker    curdir = path.dir(src)
23*6777b538SAndroid Build Coastguard Worker    include_directive_len = len("%include \"")
24*6777b538SAndroid Build Coastguard Worker    for line in str(ctx.fs.read(src)).split("\n"):
25*6777b538SAndroid Build Coastguard Worker        if not line.startswith("%include \""):
26*6777b538SAndroid Build Coastguard Worker            continue
27*6777b538SAndroid Build Coastguard Worker        fname = line[include_directive_len:]
28*6777b538SAndroid Build Coastguard Worker        i = fname.index("\"")
29*6777b538SAndroid Build Coastguard Worker        fname = fname[:i]
30*6777b538SAndroid Build Coastguard Worker        for d in [curdir] + inc_dirs:
31*6777b538SAndroid Build Coastguard Worker            pathname = path.join(d, fname)
32*6777b538SAndroid Build Coastguard Worker            if ctx.fs.exists(pathname):
33*6777b538SAndroid Build Coastguard Worker                inputs.extend(__scan_input(ctx, pathname, inc_dirs))
34*6777b538SAndroid Build Coastguard Worker                break
35*6777b538SAndroid Build Coastguard Worker    return inputs
36*6777b538SAndroid Build Coastguard Worker
37*6777b538SAndroid Build Coastguard Workerdef __scandeps(ctx, cmd):
38*6777b538SAndroid Build Coastguard Worker    nasm_args = []
39*6777b538SAndroid Build Coastguard Worker    for i, arg in enumerate(cmd.args):
40*6777b538SAndroid Build Coastguard Worker        if path.base(arg) == "nasm":
41*6777b538SAndroid Build Coastguard Worker            nasm_args = cmd.args[i + 1:]
42*6777b538SAndroid Build Coastguard Worker            break
43*6777b538SAndroid Build Coastguard Worker    inc_dirs = []
44*6777b538SAndroid Build Coastguard Worker    skip = False
45*6777b538SAndroid Build Coastguard Worker    flag = ""
46*6777b538SAndroid Build Coastguard Worker    sources = []
47*6777b538SAndroid Build Coastguard Worker    for i, arg in enumerate(nasm_args):
48*6777b538SAndroid Build Coastguard Worker        if flag == "-I":
49*6777b538SAndroid Build Coastguard Worker            inc_dirs.append(ctx.fs.canonpath(arg))
50*6777b538SAndroid Build Coastguard Worker            flag = ""
51*6777b538SAndroid Build Coastguard Worker            continue
52*6777b538SAndroid Build Coastguard Worker        elif flag == "-P":
53*6777b538SAndroid Build Coastguard Worker            sources.append(ctx.fs.canonpath(arg))
54*6777b538SAndroid Build Coastguard Worker            flag = ""
55*6777b538SAndroid Build Coastguard Worker            continue
56*6777b538SAndroid Build Coastguard Worker        elif skip:
57*6777b538SAndroid Build Coastguard Worker            skip = False
58*6777b538SAndroid Build Coastguard Worker            continue
59*6777b538SAndroid Build Coastguard Worker        elif arg == "-o":
60*6777b538SAndroid Build Coastguard Worker            skip = True
61*6777b538SAndroid Build Coastguard Worker            continue
62*6777b538SAndroid Build Coastguard Worker        elif arg == "-MD":
63*6777b538SAndroid Build Coastguard Worker            skip = True
64*6777b538SAndroid Build Coastguard Worker            continue
65*6777b538SAndroid Build Coastguard Worker        elif arg == "-I":
66*6777b538SAndroid Build Coastguard Worker            flag = arg
67*6777b538SAndroid Build Coastguard Worker            continue
68*6777b538SAndroid Build Coastguard Worker        elif arg == "-P":
69*6777b538SAndroid Build Coastguard Worker            flag = arg
70*6777b538SAndroid Build Coastguard Worker            continue
71*6777b538SAndroid Build Coastguard Worker        elif arg.startswith("-I"):
72*6777b538SAndroid Build Coastguard Worker            inc_dirs.append(ctx.fs.canonpath(arg[2:]))
73*6777b538SAndroid Build Coastguard Worker            continue
74*6777b538SAndroid Build Coastguard Worker        elif arg.startswith("-P"):
75*6777b538SAndroid Build Coastguard Worker            sources.append(ctx.fs.canonpath(arg[2:]))
76*6777b538SAndroid Build Coastguard Worker            continue
77*6777b538SAndroid Build Coastguard Worker        elif arg.startswith("-"):
78*6777b538SAndroid Build Coastguard Worker            continue
79*6777b538SAndroid Build Coastguard Worker        sources.append(ctx.fs.canonpath(arg))
80*6777b538SAndroid Build Coastguard Worker    inputs = []
81*6777b538SAndroid Build Coastguard Worker    for src in sources:
82*6777b538SAndroid Build Coastguard Worker        inputs.extend(__scan_input(ctx, src, inc_dirs))
83*6777b538SAndroid Build Coastguard Worker    return inputs
84*6777b538SAndroid Build Coastguard Worker
85*6777b538SAndroid Build Coastguard Workernasm_scandeps = module(
86*6777b538SAndroid Build Coastguard Worker    "nasm_scandeps",
87*6777b538SAndroid Build Coastguard Worker    scandeps = __scandeps,
88*6777b538SAndroid Build Coastguard Worker)
89