# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0

# Meson RISCV toolchain configuration.
#
# NOTE: If you're using a toolchain since version 20200602-1, it is likely that
#       you are using the meson toolchain configuration within the toolchain
#       install, rather than this file. This file remains mostly for legacy
#       reasons, and will eventually be removed.

[binaries]
c = '/tools/riscv/bin/riscv32-unknown-elf-gcc'
cpp = '/tools/riscv/bin/riscv32-unknown-elf-g++'
ar = '/tools/riscv/bin/riscv32-unknown-elf-ar'
ld = '/tools/riscv/bin/riscv32-unknown-elf-ld'
objdump = '/tools/riscv/bin/riscv32-unknown-elf-objdump'
objcopy = '/tools/riscv/bin/riscv32-unknown-elf-objcopy'
strip = '/tools/riscv/bin/riscv32-unknown-elf-strip'

[properties]
has_function_printf = false
c_args = [
  '-mabi=ilp32',
  '-march=rv32imc',
  '-mcmodel=medany']

[build_machine]
system = 'linux'
cpu_family = 'x86'
endian = 'little'

[host_machine]
system = 'bare metal'
cpu_family = 'riscv32'
cpu = 'ibex'
endian = 'little'
