|  | # Copyright lowRISC contributors. | 
|  | # Licensed under the Apache License, Version 2.0, see LICENSE for details. | 
|  | # SPDX-License-Identifier: Apache-2.0 | 
|  |  | 
|  | cargo = find_program('cargo', required: false, disabler: true) | 
|  |  | 
|  | build_type = 'release' | 
|  | build_dir = meson.current_build_dir() | 
|  | manifest_path = meson.current_source_dir() / 'Cargo.toml' | 
|  |  | 
|  | # CARGO FLAGS: | 
|  | # These flags will only apply to the final binary, and won't get propogated | 
|  | # to the dependency crate builds. | 
|  | cargo_flags_array = [ | 
|  | 'manifest-path=' + manifest_path, | 
|  | 'target-dir=' + build_dir, | 
|  | build_type, | 
|  | ] | 
|  |  | 
|  | cargo_flags = '' | 
|  | foreach flag : cargo_flags_array | 
|  | cargo_flags += '--' + flag + ' ' | 
|  | endforeach | 
|  |  | 
|  | # RUSTFLAGS: | 
|  | # These flags will apply to all the dependencies, as well as the final | 
|  | # binary. Linker and linker flavor amongst other things can be passed through | 
|  | # these flags. | 
|  | rust_flags = '' | 
|  |  | 
|  | # The cargo invocation script. | 
|  | cargo_invoke_cmd = meson.source_root() / 'util/invoke_cargo.sh' | 
|  |  | 
|  | # Note: the opentitantool depends on opentitanlib. This dependency is handled | 
|  | # by cargo itself but perhaps should be handled by the build system. | 
|  | opentitantool = custom_target( | 
|  | 'opentitantool', | 
|  | command: [ | 
|  | cargo_invoke_cmd, | 
|  | cargo, | 
|  | cargo_flags, | 
|  | rust_flags, | 
|  | meson.source_root(), | 
|  | meson.build_root(), | 
|  | ], | 
|  | depend_files: [ | 
|  | cargo_invoke_cmd, | 
|  | manifest_path, | 
|  | ], | 
|  | output: '.', | 
|  | console: true, | 
|  | build_always_stale: true, | 
|  | build_by_default: true, | 
|  | ) | 
|  |  | 
|  | opentitantool_export = custom_target( | 
|  | 'opentitantool_export', | 
|  | command: ['cp', '@INPUT@' / build_type / 'opentitantool', '@OUTPUT@'], | 
|  | input: opentitantool, | 
|  | output: 'opentitantool', | 
|  | build_always_stale: true, | 
|  | build_by_default: true, | 
|  | ) |