# Copyright (c) 2021-2024 Huawei Device Co., Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

module:
  name: verifier
  namespace: ark::verifier

options:
- name: boot-panda-files
  type: arg_list_t
  default:
      - $ORIGIN/../pandastdlib/arkstdlib.abc
  description: Boot panda files separated by colon
  delimiter: ":"

- name: panda-files
  type: arg_list_t
  default: []
  description: Panda files separated by colon which is not within boot-panda-files
  delimiter: ":"

- name: classes
  type: arg_list_t
  default: []
  description: Fully qualified class names to verify
  delimiter: ","

- name: methods
  type: arg_list_t
  default: []
  # TODO(romanov) describe how to specify signatures for specific overloads?
  description: >-
    Fully qualified method names to verify (if neither this nor classes are set, all classes will be verified)
  delimiter: ","

- name: load-runtimes
  type: arg_list_t
  default:
    - core
  possible_values:
    - core
    - ets
    - java
    # currently unsupported and not planned
    # - ecmascript
  description: Load specified class and intrinsic spaces and define runtime type
  delimiter: ":"

- name: log-components
  type: arg_list_t
  default:
    - all
  possible_values:
    - all
    - alloc
    - common
    - pandafile
    - memorypool
    - verifier
    - runtime
    # TODO(romanov) remove after #5987 (but keep runtime)
    - classlinker
  description: Enable logs from specified components
  delimiter: ":"

- name: log-level
  type: std::string
  default: error
  possible_values:
    - debug
    - info
    - warning
    - error
    - fatal
  description: Log level

- name: log-stream
  type: std::string
  default: std
  possible_values:
    - std
    - file
    - dummy
  description: Log level

- name: log-file
  type: std::string
  default: ""
  description: File name for file-logger

- name: limit-standard-alloc
  type: bool
  default: false
  description: Limit standard allocations usage in runtime

- name: internal-allocator-type
  type: std::string
  default: default
  possible_values:
    - panda_allocators
    - malloc
    - default
  description: >-
    Default means using malloc for Release, and panda allocators for Debug builds. If we use malloc, we will ignore
    limit-standard-alloc option.

- name: internal-memory-size-limit
  type: uint64_t
  default: 2147483648
  description: Max internal memory used by the VM

- name: print-memory-statistics
  type: bool
  default: false
  description: Enable/disable printing memory statistics in the end of the program

- name: debug-mode
  type: bool
  default: false
  description: Whether to enable debug mode

- name: perf-measure
  type: bool
  default: false
  description: Measure time for stage

- name: update-cache
  type: bool
  default: true
  description: Whether to update verification result cache

- name: verify-runtime-libraries
  type: bool
  default: false
  description: Whether to verify system files

- name: threads
  type: uint32_t
  default: 0
  description: Number of verification threads. Use 0 for the system-specific default, usually 1 thread per core

- name: config-file
  type: std::string
  default: "default"
  description: Verifier config file

- name: cache-file
  type: std::string
  default: ""
  description: Verification result cache filename (should be set if update-cache is true)

- name: gc-type
  type: std::string
  default: g1-gc
  possible_values:
    - epsilon
    - epsilon-g1
    - stw
    - gen-gc
    - g1-gc
  description: Type of used GC
