mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 04:12:43 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			77 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| # Defines compiled_action().
 | |
| #
 | |
| # compiled_action() is like action(), except that it runs a built binary
 | |
| # instead of a script.
 | |
| #
 | |
| # Parameters:
 | |
| #
 | |
| #   tool (required)
 | |
| #       [label] Label of the tool to run. This should be an executable, and
 | |
| #       this label should not include a toolchain (anything in parens). This
 | |
| #       tool will be built for the host.
 | |
| #
 | |
| #   outputs (required)
 | |
| #       [list of files] Same meaning as for action().
 | |
| #
 | |
| #   args (required)
 | |
| #       [list of strings] Flags to pass to the built binary. Almost identical
 | |
| #       to action()'s `args`, except that `tool` is implicitly added as first
 | |
| #       element.
 | |
| #
 | |
| #   depfile
 | |
| #   inputs
 | |
| #   public_configs
 | |
| #   visibility   (all optional)
 | |
| #       Same meaning as for action().
 | |
| #
 | |
| # Example use:
 | |
| #
 | |
| #   compiled_action("run_my_tool") {
 | |
| #     tool = "//tools/something:mytool"
 | |
| #     inputs = [ "my_input_file.txt" ]
 | |
| #     outputs = [ "$target_gen_dir/mysource.inc" ]
 | |
| #     args = [
 | |
| #       rebase_path(inputs[0], root_build_dir),
 | |
| #       rebase_path(outputs[0], root_build_dir),
 | |
| #     ]
 | |
| #   }
 | |
| #
 | |
| # You would typically declare your tool like this:
 | |
| #   if (host_toolchain == current_toolchain) {
 | |
| #     executable("mytool") {
 | |
| #       ...
 | |
| #     }
 | |
| #   }
 | |
| # The if statement around the executable is optional. It means "I only care
 | |
| # about this target in the host toolchain". Usually this is what you want, and
 | |
| # saves unnecessarily compiling your tool for the target platform. If you
 | |
| # need a target build of your tool as well, omit the if statement.
 | |
| 
 | |
| template("compiled_action") {
 | |
|   assert(defined(invoker.args), "must set 'args' in $target_name")
 | |
|   assert(defined(invoker.outputs), "must set 'outputs' in $target_name")
 | |
|   assert(defined(invoker.tool), "must set 'tool' in $target_name")
 | |
|   assert(!defined(invoker.sources),
 | |
|          "use 'inputs' instead of 'sources' in $target_name")
 | |
| 
 | |
|   action(target_name) {
 | |
|     forward_variables_from(invoker,
 | |
|                            [
 | |
|                              "depfile",
 | |
|                              "inputs",
 | |
|                              "outputs",
 | |
|                              "public_configs",
 | |
|                              "testonly",
 | |
|                              "visibility",
 | |
|                            ])
 | |
|     host_tool = invoker.tool + "($host_toolchain)"
 | |
|     host_executable = get_label_info(host_tool, "root_out_dir") + "/bin/" +
 | |
|                       get_label_info(host_tool, "name")
 | |
|     deps = [ host_tool ]
 | |
|     if (defined(invoker.deps)) {
 | |
|       deps += invoker.deps
 | |
|     }
 | |
|     script = "//Meta/gn/build/run_compiled_binary.py"
 | |
|     args = [ rebase_path(host_executable, root_build_dir) ] + invoker.args
 | |
|   }
 | |
| }
 | 
