/*
 * Copyright (C) 2017 The Android Open Source Project
 *
 * 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 DEX2OAT_OPTIONS_KEY
#error "Please #define DEX2OAT_OPTIONS_KEY before #including this file"
#define DEX2OAT_OPTIONS_KEY(...)  // Don't display errors in this file in IDEs.
#endif

// This file defines the list of keys for Dex2oatOptions.
// These can be used with Dex2oatOptions.Get/Set/etc, for example:
//         Dex2oatOptions opt; bool* dex2oat_enabled = opt.Get(Dex2oatOptions::Dex2Oat);
//
// Column Descriptions:
//                   <<Type>>             <<Key Name>>                  <<Default Value>>
//
// Default values are only used by Map::GetOrDefault(K<T>).
// If a default value is omitted here, T{} is used as the default value, which is
// almost-always the value of the type as if it was memset to all 0.
//
// Please keep the columns aligned if possible when adding new rows.
//

// Parse-able keys from the command line.
DEX2OAT_OPTIONS_KEY (CompactDexLevel,                CompactDexLevel)
DEX2OAT_OPTIONS_KEY (std::vector<std::string>,       DexFiles)
DEX2OAT_OPTIONS_KEY (std::vector<std::string>,       DexLocations)
DEX2OAT_OPTIONS_KEY (std::vector<int>,               DexFds)
DEX2OAT_OPTIONS_KEY (int,                            ZipFd)
DEX2OAT_OPTIONS_KEY (std::string,                    ZipLocation)
DEX2OAT_OPTIONS_KEY (int,                            InputVdexFd)
DEX2OAT_OPTIONS_KEY (std::string,                    InputVdex)
DEX2OAT_OPTIONS_KEY (int,                            OutputVdexFd)
DEX2OAT_OPTIONS_KEY (std::string,                    OutputVdex)
DEX2OAT_OPTIONS_KEY (int,                            DmFd)
DEX2OAT_OPTIONS_KEY (std::string,                    DmFile)
DEX2OAT_OPTIONS_KEY (std::string,                    OatFile)
DEX2OAT_OPTIONS_KEY (std::string,                    OatSymbols)
DEX2OAT_OPTIONS_KEY (Unit,                           Strip)
DEX2OAT_OPTIONS_KEY (int,                            OatFd)
DEX2OAT_OPTIONS_KEY (std::string,                    OatLocation)
DEX2OAT_OPTIONS_KEY (bool,                           Watchdog)
DEX2OAT_OPTIONS_KEY (int,                            WatchdogTimeout)
DEX2OAT_OPTIONS_KEY (unsigned int,                   Threads)
DEX2OAT_OPTIONS_KEY (ParseIntList<','>,              CpuSet)
DEX2OAT_OPTIONS_KEY (std::string,                    ImageFilename)
DEX2OAT_OPTIONS_KEY (int,                            ImageFd)
DEX2OAT_OPTIONS_KEY (ImageHeader::StorageMode,       ImageFormat)
DEX2OAT_OPTIONS_KEY (std::string,                    Passes)
DEX2OAT_OPTIONS_KEY (std::string,                    Base)  // TODO: Hex string parsing.
DEX2OAT_OPTIONS_KEY (std::string,                    BootImage)
DEX2OAT_OPTIONS_KEY (std::string,                    AndroidRoot)
DEX2OAT_OPTIONS_KEY (InstructionSet,                 TargetInstructionSet)
DEX2OAT_OPTIONS_KEY (std::string,                    TargetInstructionSetVariant)
DEX2OAT_OPTIONS_KEY (std::string,                    TargetInstructionSetFeatures)
DEX2OAT_OPTIONS_KEY (Compiler::Kind,                 Backend)
DEX2OAT_OPTIONS_KEY (std::string,                    Profile)
DEX2OAT_OPTIONS_KEY (int,                            ProfileFd)
DEX2OAT_OPTIONS_KEY (Unit,                           Host)
DEX2OAT_OPTIONS_KEY (Unit,                           DumpTiming)
DEX2OAT_OPTIONS_KEY (Unit,                           DumpPasses)
DEX2OAT_OPTIONS_KEY (Unit,                           DumpStats)
DEX2OAT_OPTIONS_KEY (linker::CopyOption,             CopyDexFiles)
DEX2OAT_OPTIONS_KEY (Unit,                           AvoidStoringInvocation)
DEX2OAT_OPTIONS_KEY (std::string,                    SwapFile)
DEX2OAT_OPTIONS_KEY (int,                            SwapFileFd)
DEX2OAT_OPTIONS_KEY (unsigned int,                   SwapDexSizeThreshold)
DEX2OAT_OPTIONS_KEY (unsigned int,                   SwapDexCountThreshold)
DEX2OAT_OPTIONS_KEY (unsigned int,                   VeryLargeAppThreshold)
DEX2OAT_OPTIONS_KEY (std::string,                    AppImageFile)
DEX2OAT_OPTIONS_KEY (int,                            AppImageFileFd)
DEX2OAT_OPTIONS_KEY (bool,                           MultiImage)
DEX2OAT_OPTIONS_KEY (std::string,                    NoInlineFrom)
DEX2OAT_OPTIONS_KEY (Unit,                           ForceDeterminism)
DEX2OAT_OPTIONS_KEY (std::string,                    ClasspathDir)
DEX2OAT_OPTIONS_KEY (std::string,                    InvocationFile)
DEX2OAT_OPTIONS_KEY (std::string,                    ClassLoaderContext)
DEX2OAT_OPTIONS_KEY (std::string,                    ClassLoaderContextFds)
DEX2OAT_OPTIONS_KEY (std::string,                    StoredClassLoaderContext)
DEX2OAT_OPTIONS_KEY (std::string,                    DirtyImageObjects)
DEX2OAT_OPTIONS_KEY (std::string,                    UpdatableBcpPackagesFile)
DEX2OAT_OPTIONS_KEY (std::vector<std::string>,       RuntimeOptions)
DEX2OAT_OPTIONS_KEY (std::string,                    CompilationReason)
DEX2OAT_OPTIONS_KEY (Unit,                           CheckLinkageConditions)
DEX2OAT_OPTIONS_KEY (Unit,                           CrashOnLinkageViolation)
DEX2OAT_OPTIONS_KEY (Unit,                           CompileIndividually)
DEX2OAT_OPTIONS_KEY (std::string,                    PublicSdk)
DEX2OAT_OPTIONS_KEY (Unit,                           ForceAllowOjInlines)
DEX2OAT_OPTIONS_KEY (std::string,                    ApexVersions)

#undef DEX2OAT_OPTIONS_KEY
