1*7594170eSAndroid Build Coastguard WorkerShBinaryInfo = provider( 2*7594170eSAndroid Build Coastguard Worker "Info needed for sh_binary modules", 3*7594170eSAndroid Build Coastguard Worker fields = { 4*7594170eSAndroid Build Coastguard Worker "sub_dir": "Optional subdirectory to install into", 5*7594170eSAndroid Build Coastguard Worker "filename": "Optional name for the installed file", 6*7594170eSAndroid Build Coastguard Worker }, 7*7594170eSAndroid Build Coastguard Worker) 8*7594170eSAndroid Build Coastguard Worker 9*7594170eSAndroid Build Coastguard Workerdef sh_binary( 10*7594170eSAndroid Build Coastguard Worker name, 11*7594170eSAndroid Build Coastguard Worker srcs, 12*7594170eSAndroid Build Coastguard Worker sub_dir = None, 13*7594170eSAndroid Build Coastguard Worker filename = None, 14*7594170eSAndroid Build Coastguard Worker tags = [], 15*7594170eSAndroid Build Coastguard Worker **kwargs): 16*7594170eSAndroid Build Coastguard Worker "Bazel macro to correspond with the sh_binary Soong module." 17*7594170eSAndroid Build Coastguard Worker 18*7594170eSAndroid Build Coastguard Worker internal_name = name + "_internal" 19*7594170eSAndroid Build Coastguard Worker native.sh_binary( 20*7594170eSAndroid Build Coastguard Worker name = internal_name, 21*7594170eSAndroid Build Coastguard Worker srcs = srcs, 22*7594170eSAndroid Build Coastguard Worker tags = ["manual"], 23*7594170eSAndroid Build Coastguard Worker **kwargs 24*7594170eSAndroid Build Coastguard Worker ) 25*7594170eSAndroid Build Coastguard Worker 26*7594170eSAndroid Build Coastguard Worker # We need this wrapper rule around native.sh_binary in order to provide extra 27*7594170eSAndroid Build Coastguard Worker # attributes such as filename and sub_dir that are useful when building apex. 28*7594170eSAndroid Build Coastguard Worker _sh_binary_combiner( 29*7594170eSAndroid Build Coastguard Worker name = name, 30*7594170eSAndroid Build Coastguard Worker sub_dir = sub_dir, 31*7594170eSAndroid Build Coastguard Worker filename = filename, 32*7594170eSAndroid Build Coastguard Worker dep = internal_name, 33*7594170eSAndroid Build Coastguard Worker tags = tags, 34*7594170eSAndroid Build Coastguard Worker ) 35*7594170eSAndroid Build Coastguard Worker 36*7594170eSAndroid Build Coastguard Workerdef _sh_binary_combiner_impl(ctx): 37*7594170eSAndroid Build Coastguard Worker dep = ctx.attr.dep[DefaultInfo] 38*7594170eSAndroid Build Coastguard Worker output = ctx.outputs.executable 39*7594170eSAndroid Build Coastguard Worker 40*7594170eSAndroid Build Coastguard Worker ctx.actions.run_shell( 41*7594170eSAndroid Build Coastguard Worker outputs = [output], 42*7594170eSAndroid Build Coastguard Worker inputs = [dep.files_to_run.executable], 43*7594170eSAndroid Build Coastguard Worker command = "cp %s %s" % (dep.files_to_run.executable.path, output.path), 44*7594170eSAndroid Build Coastguard Worker mnemonic = "CopyNativeShBinary", 45*7594170eSAndroid Build Coastguard Worker ) 46*7594170eSAndroid Build Coastguard Worker 47*7594170eSAndroid Build Coastguard Worker files = depset(direct = [output], transitive = [dep.files]) 48*7594170eSAndroid Build Coastguard Worker 49*7594170eSAndroid Build Coastguard Worker return [ 50*7594170eSAndroid Build Coastguard Worker DefaultInfo( 51*7594170eSAndroid Build Coastguard Worker files = files, 52*7594170eSAndroid Build Coastguard Worker runfiles = ctx.runfiles().merge(dep.data_runfiles).merge(dep.default_runfiles), 53*7594170eSAndroid Build Coastguard Worker executable = output, 54*7594170eSAndroid Build Coastguard Worker ), 55*7594170eSAndroid Build Coastguard Worker ShBinaryInfo( 56*7594170eSAndroid Build Coastguard Worker sub_dir = ctx.attr.sub_dir, 57*7594170eSAndroid Build Coastguard Worker filename = ctx.attr.filename, 58*7594170eSAndroid Build Coastguard Worker ), 59*7594170eSAndroid Build Coastguard Worker ] 60*7594170eSAndroid Build Coastguard Worker 61*7594170eSAndroid Build Coastguard Worker_sh_binary_combiner = rule( 62*7594170eSAndroid Build Coastguard Worker implementation = _sh_binary_combiner_impl, 63*7594170eSAndroid Build Coastguard Worker attrs = { 64*7594170eSAndroid Build Coastguard Worker "sub_dir": attr.string(), 65*7594170eSAndroid Build Coastguard Worker "filename": attr.string(), 66*7594170eSAndroid Build Coastguard Worker "dep": attr.label(mandatory = True), 67*7594170eSAndroid Build Coastguard Worker }, 68*7594170eSAndroid Build Coastguard Worker provides = [ShBinaryInfo], 69*7594170eSAndroid Build Coastguard Worker executable = True, 70*7594170eSAndroid Build Coastguard Worker doc = "Wrapper rule around native.sh_binary to provide extra attributes", 71*7594170eSAndroid Build Coastguard Worker) 72