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

option(
  'bin_dir',
  type: 'string',
  value: 'undef',
)

option(
  'ot_version',
  type: 'string',
  value: 'undef',
)

option(
  'keep_includes',
  type: 'boolean',
  value: true,
)

option(
  'coverage',
  type: 'boolean',
  value: false,
)

option(
  'closed_source_dir',
  type: 'string',
  value: '',
)
