/*
 * Copyright (c) 2025 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.
 */

#ifndef OHOS_ARKCOMPILER_AOT_ARGS_LIST_H
#define OHOS_ARKCOMPILER_AOT_ARGS_LIST_H

#include <string>
#include <unordered_set>

namespace OHOS::ArkCompiler {

constexpr const char* AOT_EXE = "/system/bin/ark_aot_compiler";
constexpr const char* STATIC_AOT_EXE = "/system/bin/ark_aot";

std::unordered_set<std::string> aotArgsList {
    "aot-file",
    "ark-properties",
    "ark-bundleName",
    "asm-interpreter",
    "asm-opcode-disable-range",
    "builtins-lazy",
    "compiler-log",
    "compiler-log-methods",
    "compiler-log-snapshot",
    "compiler-log-time",
    "compiler-type-threshold",
    "enable-ark-tools",
    "compiler-trace-bc",
    "compiler-trace-deopt",
    "compiler-trace-inline",
    "compiler-trace-value-numbering",
    "compiler-trace-instruction-combine",
    "compiler-max-inline-bytecodes",
    "compiler-min-inline-call-frequency",
    "compiler-max-inline-depth-small",
    "compiler-max-inline-depth-large",
    "compiler-max-inline-count",
    "compiler-max-inline-size-large",
    "compiler-deopt-threshold",
    "compiler-device-state",
    "compiler-thermal-level",
    "compiler-stress-deopt",
    "compiler-opt-code-profiler",
    "compiler-opt-bc-range",
    "compiler-opt-bc-range-help",
    "enable-force-gc",
    "enable-ic",
    "enable-runtime-stat",
    "compiler-opt-constant-folding",
    "compiler-opt-array-bounds-check-elimination",
    "compiler-opt-type-lowering",
    "compiler-opt-early-elimination",
    "compiler-opt-later-elimination",
    "compiler-opt-instr-combine",
    "compiler-opt-string",
    "compiler-opt-value-numbering",
    "compiler-opt-new-value-numbering",
    "compiler-opt-inlining",
    "compiler-opt-pgotype",
    "compiler-opt-track-field",
    "entry-point",
    "force-full-gc",
    "force-shared-gc-frequency",
    "gc-thread-num",
    "heap-size-limit",
    "icu-data-path",
    "enable-worker",
    "log-components",
    "log-debug",
    "log-error",
    "log-fatal",
    "log-info",
    "log-level",
    "log-warning",
    "gc-long-paused-time",
    "compiler-opt-max-method",
    "compiler-module-methods",
    "max-unmovable-space",
    "merge-abc",
    "enable-context",
    "compiler-opt-level",
    "reloc-mode",
    "serializer-buffer-size-limit",
    "startup-time",
    "stub-file",
    "compiler-target-triple",
    "enable-print-execute-time",
    "enable-pgo-profiler",
    "enable-mutant-array",
    "enable-elements-kind",
    "compiler-pgo-profiler-path",
    "compiler-pgo-hotness-threshold",
    "compiler-pgo-save-min-interval",
    "compiler-verify-vtable",
    "compiler-select-methods",
    "compiler-skip-methods",
    "target-compiler-mode",
    "hap-path",
    "hap-abc-offset",
    "hap-abc-size",
    "compiler-no-check",
    "compiler-pipeline-host-aot",
    "compiler-fast-compile",
    "compiler-opt-loop-peeling",
    "compiler-opt-array-onheap-check",
    "compiler-pkg-info",
    "compiler-external-pkg-info",
    "compiler-enable-external-pkg",
    "compiler-framework-abc-path",
    "compiler-enable-lexenv-specialization",
    "compiler-enable-native-inline",
    "compiler-enable-lowering-builtin",
    "compiler-enable-litecg",
    "compiler-enable-jit",
    "compiler-enable-osr",
    "compiler-trace-jit",
    "compiler-jit-hotness-threshold",
    "compiler-osr-hotness-threshold",
    "compiler-force-jit-compile-main",
    "compiler-enable-jit-pgo",
    "compiler-enable-aot-pgo",
    "compiler-enable-framework-aot",
    "compiler-enable-profile-dump",
    "compiler-typed-op-profiler",
    "compiler-opt-branch-profiling",
    "test-assert",
    "compiler-methods-range",
    "compiler-codegen-options",
    "compiler-opt-escape-analysis",
    "compiler-trace-escape-analysis",
    "compiler-opt-induction-variable",
    "compiler-trace-induction-variable",
    "compiler-memory-analysis",
    "compiler-check-pgo-version",
    "compiler-enable-baselinejit",
    "compiler-baselinejit-hotness-threshold",
    "compiler-force-baselinejit-compile-main",
    "compiler-baseline-pgo",
    "compiler-trace-builtins",
    "hap-fd",
};

std::unordered_set<std::string> staticAOTArgsList {
    "boot-panda-files",
    "paoc-panda-files",
    "paoc-output",
    "load-runtimes",
    "paoc-use-cha",
};

std::vector<std::string> staticAOTDefaultArgs {
    "--load-runtimes=ets",
    "--compiler-enable-fast-interop=false",
    "--compiler-lower-boxed-boolean=false",
    "--paoc-zip-panda-file=ets/modules_static.abc",
    "--paoc-generate-symbols=true"
};

std::vector<std::string> staticFrameworkAOTDefaultArgs {
    "--load-runtimes=ets",
    "--compiler-enable-fast-interop=false",
    "--compiler-lower-boxed-boolean=false",
    "--paoc-generate-symbols=true"
};

} // namespace OHOS::ArkCompiler
#endif // OHOS_ARKCOMPILER_AOT_ARGS_LIST_H