# 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,
)
