""" Exposes the rule v8_binary_non_pointer_compression, which forces a label to be compiled without pointer compression. """ def _v8_disable_pointer_compression(settings, attr): return { "//:v8_enable_pointer_compression": "False", } v8_disable_pointer_compression = transition( implementation = _v8_disable_pointer_compression, inputs = [], outputs = ["//:v8_enable_pointer_compression"], ) # The implementation of transition_rule: all this does is copy the # cc_binary's output to its own output and propagate its runfiles # and executable to use for "$ bazel run". # # This makes transition_rule as close to a pure wrapper of cc_binary # as possible. def _v8_binary_non_pointer_compression(ctx): binary = ctx.attr.binary[0] outfile = ctx.actions.declare_file(ctx.label.name) cc_binary_outfile = binary[DefaultInfo].files.to_list()[0] ctx.actions.run_shell( inputs = [cc_binary_outfile], outputs = [outfile], command = "cp %s %s" % (cc_binary_outfile.path, outfile.path), ) return [ DefaultInfo( executable = outfile, data_runfiles = binary[DefaultInfo].data_runfiles, ), ] # The purpose of this rule is to transition to a config where v8_target_cpu is # set to the appropriate architecture, which will remain in place through exec # transitions, so mksnapshot can for instance build on x64 but for arm64. v8_binary_non_pointer_compression = rule( implementation = _v8_binary_non_pointer_compression, attrs = { # This is the cc_binary whose deps will select() on that feature. # Note specificaly how it's configured with v8_target_cpu_transition, which # ensures that setting propagates down the graph. "binary": attr.label(cfg = v8_disable_pointer_compression), }, # Making this executable means it works with "$ bazel run". executable = True, )