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