1ca0551cfSopenharmony_ci/* 2ca0551cfSopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd. 3ca0551cfSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4ca0551cfSopenharmony_ci * you may not use this file except in compliance with the License. 5ca0551cfSopenharmony_ci * You may obtain a copy of the License at 6ca0551cfSopenharmony_ci * 7ca0551cfSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8ca0551cfSopenharmony_ci * 9ca0551cfSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10ca0551cfSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11ca0551cfSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12ca0551cfSopenharmony_ci * See the License for the specific language governing permissions and 13ca0551cfSopenharmony_ci * limitations under the License. 14ca0551cfSopenharmony_ci */ 15ca0551cfSopenharmony_ci 16ca0551cfSopenharmony_ci#ifndef OHOS_IDL_OPTION_H 17ca0551cfSopenharmony_ci#define OHOS_IDL_OPTION_H 18ca0551cfSopenharmony_ci 19ca0551cfSopenharmony_ci#include <map> 20ca0551cfSopenharmony_ci#include <string> 21ca0551cfSopenharmony_ci#include <unordered_map> 22ca0551cfSopenharmony_ci#include <set> 23ca0551cfSopenharmony_ci 24ca0551cfSopenharmony_ci#include "util/common.h" 25ca0551cfSopenharmony_ci 26ca0551cfSopenharmony_cinamespace OHOS { 27ca0551cfSopenharmony_cinamespace Idl { 28ca0551cfSopenharmony_ciclass Options { 29ca0551cfSopenharmony_cipublic: 30ca0551cfSopenharmony_ci using PkgPathMap = std::unordered_map<std::string, std::string>; 31ca0551cfSopenharmony_ci 32ca0551cfSopenharmony_ci static Options &GetInstance(); 33ca0551cfSopenharmony_ci 34ca0551cfSopenharmony_ci Options(const Options &other) = delete; 35ca0551cfSopenharmony_ci Options operator=(const Options &other) = delete; 36ca0551cfSopenharmony_ci 37ca0551cfSopenharmony_ci bool Parse(int argc, char *argv[]); 38ca0551cfSopenharmony_ci 39ca0551cfSopenharmony_ci ~Options() = default; 40ca0551cfSopenharmony_ci 41ca0551cfSopenharmony_ci struct Attribute { 42ca0551cfSopenharmony_ci Attribute() : doHitrace(false), doLog(false) {} 43ca0551cfSopenharmony_ci std::string hitraceTag; 44ca0551cfSopenharmony_ci std::string logTag; 45ca0551cfSopenharmony_ci std::string domainId; 46ca0551cfSopenharmony_ci bool doHitrace; 47ca0551cfSopenharmony_ci bool doLog; 48ca0551cfSopenharmony_ci }; 49ca0551cfSopenharmony_ci 50ca0551cfSopenharmony_ci inline bool DoShowUsage() const 51ca0551cfSopenharmony_ci { 52ca0551cfSopenharmony_ci return doShowUsage; 53ca0551cfSopenharmony_ci } 54ca0551cfSopenharmony_ci 55ca0551cfSopenharmony_ci inline bool DoShowVersion() const 56ca0551cfSopenharmony_ci { 57ca0551cfSopenharmony_ci return doShowVersion; 58ca0551cfSopenharmony_ci } 59ca0551cfSopenharmony_ci 60ca0551cfSopenharmony_ci inline bool DoCompile() const 61ca0551cfSopenharmony_ci { 62ca0551cfSopenharmony_ci return doCompile; 63ca0551cfSopenharmony_ci } 64ca0551cfSopenharmony_ci 65ca0551cfSopenharmony_ci inline bool DoDumpAST() const 66ca0551cfSopenharmony_ci { 67ca0551cfSopenharmony_ci return doDumpAST; 68ca0551cfSopenharmony_ci } 69ca0551cfSopenharmony_ci 70ca0551cfSopenharmony_ci inline bool DoDumpMetadata() const 71ca0551cfSopenharmony_ci { 72ca0551cfSopenharmony_ci return doDumpMetadata; 73ca0551cfSopenharmony_ci } 74ca0551cfSopenharmony_ci 75ca0551cfSopenharmony_ci inline bool DoSaveMetadata() const 76ca0551cfSopenharmony_ci { 77ca0551cfSopenharmony_ci return doSaveMetadata; 78ca0551cfSopenharmony_ci } 79ca0551cfSopenharmony_ci 80ca0551cfSopenharmony_ci inline bool DoGetHashKey() const 81ca0551cfSopenharmony_ci { 82ca0551cfSopenharmony_ci return doHashKey; 83ca0551cfSopenharmony_ci } 84ca0551cfSopenharmony_ci 85ca0551cfSopenharmony_ci inline bool DoGenerateCode() const 86ca0551cfSopenharmony_ci { 87ca0551cfSopenharmony_ci return doGenerateCode; 88ca0551cfSopenharmony_ci } 89ca0551cfSopenharmony_ci 90ca0551cfSopenharmony_ci inline bool DoGenerateKernelCode() const 91ca0551cfSopenharmony_ci { 92ca0551cfSopenharmony_ci return genMode == GenMode::KERNEL; 93ca0551cfSopenharmony_ci } 94ca0551cfSopenharmony_ci 95ca0551cfSopenharmony_ci inline bool DoPassthrough() const 96ca0551cfSopenharmony_ci { 97ca0551cfSopenharmony_ci return genMode == GenMode::PASSTHROUGH; 98ca0551cfSopenharmony_ci } 99ca0551cfSopenharmony_ci 100ca0551cfSopenharmony_ci inline std::set<std::string> GetSourceFiles() const 101ca0551cfSopenharmony_ci { 102ca0551cfSopenharmony_ci return sourceFiles; 103ca0551cfSopenharmony_ci } 104ca0551cfSopenharmony_ci 105ca0551cfSopenharmony_ci inline std::string GetMetadataFile() const 106ca0551cfSopenharmony_ci { 107ca0551cfSopenharmony_ci return metadataFile; 108ca0551cfSopenharmony_ci } 109ca0551cfSopenharmony_ci 110ca0551cfSopenharmony_ci inline PkgPathMap GetPackagePathMap() const 111ca0551cfSopenharmony_ci { 112ca0551cfSopenharmony_ci return packagePathMap; 113ca0551cfSopenharmony_ci } 114ca0551cfSopenharmony_ci 115ca0551cfSopenharmony_ci inline std::string GetPackage() const 116ca0551cfSopenharmony_ci { 117ca0551cfSopenharmony_ci return idlPackage; 118ca0551cfSopenharmony_ci } 119ca0551cfSopenharmony_ci 120ca0551cfSopenharmony_ci inline std::string GetGenerationDirectory() const 121ca0551cfSopenharmony_ci { 122ca0551cfSopenharmony_ci return genDir; 123ca0551cfSopenharmony_ci } 124ca0551cfSopenharmony_ci 125ca0551cfSopenharmony_ci inline std::string GetOutPutFile() const 126ca0551cfSopenharmony_ci { 127ca0551cfSopenharmony_ci return outPutFile; 128ca0551cfSopenharmony_ci } 129ca0551cfSopenharmony_ci 130ca0551cfSopenharmony_ci bool HasErrors() const; 131ca0551cfSopenharmony_ci 132ca0551cfSopenharmony_ci void ShowErrors() const; 133ca0551cfSopenharmony_ci 134ca0551cfSopenharmony_ci bool HasWarning() const; 135ca0551cfSopenharmony_ci 136ca0551cfSopenharmony_ci void ShowWarning() const; 137ca0551cfSopenharmony_ci 138ca0551cfSopenharmony_ci void ShowVersion() const; 139ca0551cfSopenharmony_ci 140ca0551cfSopenharmony_ci void ShowUsage() const; 141ca0551cfSopenharmony_ci 142ca0551cfSopenharmony_ci bool DoLogOn() const; 143ca0551cfSopenharmony_ci 144ca0551cfSopenharmony_ci bool DoLegalLog() const; 145ca0551cfSopenharmony_ci 146ca0551cfSopenharmony_ci std::string GetRootPackage(const std::string &package) const; 147ca0551cfSopenharmony_ci 148ca0551cfSopenharmony_ci std::string GetRootPath(const std::string &package) const; 149ca0551cfSopenharmony_ci 150ca0551cfSopenharmony_ci std::string GetSubPackage(const std::string &package) const; 151ca0551cfSopenharmony_ci 152ca0551cfSopenharmony_ci std::string GetPackagePath(const std::string &package) const; 153ca0551cfSopenharmony_ci 154ca0551cfSopenharmony_ci std::string GetImportFilePath(const std::string &import) const; 155ca0551cfSopenharmony_ci 156ca0551cfSopenharmony_ci inline SystemLevel GetSystemLevel() const 157ca0551cfSopenharmony_ci { 158ca0551cfSopenharmony_ci return systemLevel; 159ca0551cfSopenharmony_ci } 160ca0551cfSopenharmony_ci 161ca0551cfSopenharmony_ci inline GenMode GetGenMode() const 162ca0551cfSopenharmony_ci { 163ca0551cfSopenharmony_ci return genMode; 164ca0551cfSopenharmony_ci } 165ca0551cfSopenharmony_ci 166ca0551cfSopenharmony_ci inline Language GetLanguage() const 167ca0551cfSopenharmony_ci { 168ca0551cfSopenharmony_ci return genLanguage; 169ca0551cfSopenharmony_ci } 170ca0551cfSopenharmony_ci 171ca0551cfSopenharmony_ci inline bool DoHitraceState() const 172ca0551cfSopenharmony_ci { 173ca0551cfSopenharmony_ci return doHitrace; 174ca0551cfSopenharmony_ci } 175ca0551cfSopenharmony_ci 176ca0551cfSopenharmony_ci inline bool DoSearchKeywords() const 177ca0551cfSopenharmony_ci { 178ca0551cfSopenharmony_ci return doKeywords; 179ca0551cfSopenharmony_ci } 180ca0551cfSopenharmony_ci 181ca0551cfSopenharmony_ci inline std::string GetGenerateHitraceTag() const 182ca0551cfSopenharmony_ci { 183ca0551cfSopenharmony_ci return hitraceTag; 184ca0551cfSopenharmony_ci } 185ca0551cfSopenharmony_ci 186ca0551cfSopenharmony_ci inline std::string GetDomainId() const 187ca0551cfSopenharmony_ci { 188ca0551cfSopenharmony_ci return domainId; 189ca0551cfSopenharmony_ci } 190ca0551cfSopenharmony_ci 191ca0551cfSopenharmony_ci inline std::string GetLogTag() const 192ca0551cfSopenharmony_ci { 193ca0551cfSopenharmony_ci return logTag; 194ca0551cfSopenharmony_ci } 195ca0551cfSopenharmony_ci 196ca0551cfSopenharmony_ci inline Attribute GetAttribute() const 197ca0551cfSopenharmony_ci { 198ca0551cfSopenharmony_ci return attribute; 199ca0551cfSopenharmony_ci } 200ca0551cfSopenharmony_ci 201ca0551cfSopenharmony_ci inline InterfaceType GetInterfaceType() const 202ca0551cfSopenharmony_ci { 203ca0551cfSopenharmony_ci return interfaceType; 204ca0551cfSopenharmony_ci } 205ca0551cfSopenharmony_ciprivate: 206ca0551cfSopenharmony_ci Options() 207ca0551cfSopenharmony_ci : program(), 208ca0551cfSopenharmony_ci systemLevel(SystemLevel::INIT), 209ca0551cfSopenharmony_ci genMode(GenMode::INIT), 210ca0551cfSopenharmony_ci genLanguage(Language::CPP), 211ca0551cfSopenharmony_ci idlPackage(), 212ca0551cfSopenharmony_ci sourceFiles(), 213ca0551cfSopenharmony_ci genDir(), 214ca0551cfSopenharmony_ci packagePathMap(), 215ca0551cfSopenharmony_ci outPutFile(), 216ca0551cfSopenharmony_ci attribute(Attribute()), 217ca0551cfSopenharmony_ci doShowUsage(false), 218ca0551cfSopenharmony_ci doShowVersion(false), 219ca0551cfSopenharmony_ci doCompile(false), 220ca0551cfSopenharmony_ci doDumpAST(false), 221ca0551cfSopenharmony_ci doDumpMetadata(false), 222ca0551cfSopenharmony_ci doHashKey(false), 223ca0551cfSopenharmony_ci doGenerateCode(false), 224ca0551cfSopenharmony_ci doOutDir(false), 225ca0551cfSopenharmony_ci doKeywords(false), 226ca0551cfSopenharmony_ci doSaveMetadata(false), 227ca0551cfSopenharmony_ci doHitrace(false), 228ca0551cfSopenharmony_ci interfaceType(InterfaceType::SA) 229ca0551cfSopenharmony_ci { 230ca0551cfSopenharmony_ci } 231ca0551cfSopenharmony_ci 232ca0551cfSopenharmony_ci void SetLongOption(char op); 233ca0551cfSopenharmony_ci 234ca0551cfSopenharmony_ci bool SetSystemLevel(const std::string &system); 235ca0551cfSopenharmony_ci 236ca0551cfSopenharmony_ci bool SetGenerateMode(const std::string &mode); 237ca0551cfSopenharmony_ci 238ca0551cfSopenharmony_ci bool SetLanguage(const std::string &language); 239ca0551cfSopenharmony_ci 240ca0551cfSopenharmony_ci void SetPackage(const std::string &package); 241ca0551cfSopenharmony_ci 242ca0551cfSopenharmony_ci bool AddPackagePath(const std::string &packagePath); 243ca0551cfSopenharmony_ci 244ca0551cfSopenharmony_ci void AddSources(const std::string &sourceFile); 245ca0551cfSopenharmony_ci 246ca0551cfSopenharmony_ci void AddSourcesByDir(const std::string &dir); 247ca0551cfSopenharmony_ci 248ca0551cfSopenharmony_ci void SetOutDir(const std::string &dir); 249ca0551cfSopenharmony_ci 250ca0551cfSopenharmony_ci void SetCodePart(const std::string &part); 251ca0551cfSopenharmony_ci 252ca0551cfSopenharmony_ci bool DoLegalParam(const std::string &tag); 253ca0551cfSopenharmony_ci 254ca0551cfSopenharmony_ci bool SetHiTrace(const std::string &tag); 255ca0551cfSopenharmony_ci 256ca0551cfSopenharmony_ci bool SetLogDomainId(const std::string &id); 257ca0551cfSopenharmony_ci 258ca0551cfSopenharmony_ci bool SetLogTag(const std::string &id); 259ca0551cfSopenharmony_ci 260ca0551cfSopenharmony_ci bool SetInterfaceType(const std::string &type); 261ca0551cfSopenharmony_ci 262ca0551cfSopenharmony_ci bool DoSupportHdiType(); 263ca0551cfSopenharmony_ci 264ca0551cfSopenharmony_ci bool DoSupportSmType(); 265ca0551cfSopenharmony_ci 266ca0551cfSopenharmony_ci void SetSmDefaultOption(); 267ca0551cfSopenharmony_ci 268ca0551cfSopenharmony_ci bool CheckSmOptions(); 269ca0551cfSopenharmony_ci 270ca0551cfSopenharmony_ci bool DoSupportSaType(); 271ca0551cfSopenharmony_ci 272ca0551cfSopenharmony_ci bool CheckHdiOptions(); 273ca0551cfSopenharmony_ci 274ca0551cfSopenharmony_ci void SetHdiDefaultOption(); 275ca0551cfSopenharmony_ci 276ca0551cfSopenharmony_ci bool CheckSaOptions(); 277ca0551cfSopenharmony_ci 278ca0551cfSopenharmony_ci bool SetMetadataFile(const std::string &metadataFile); 279ca0551cfSopenharmony_ci 280ca0551cfSopenharmony_ci bool CheckOptions(); 281ca0551cfSopenharmony_ci 282ca0551cfSopenharmony_ci bool ParseSingle(int option, std::string optVal); 283ca0551cfSopenharmony_ci 284ca0551cfSopenharmony_ci bool ParseOptionWithValue(int option, std::string optVal); 285ca0551cfSopenharmony_ci 286ca0551cfSopenharmony_ci static const char *optSupportArgs; 287ca0551cfSopenharmony_ci 288ca0551cfSopenharmony_ci static constexpr int VERSION_MAJOR = 1; 289ca0551cfSopenharmony_ci static constexpr int VERSION_MINOR = 0; 290ca0551cfSopenharmony_ci 291ca0551cfSopenharmony_ci std::string program; 292ca0551cfSopenharmony_ci SystemLevel systemLevel; 293ca0551cfSopenharmony_ci GenMode genMode; 294ca0551cfSopenharmony_ci Language genLanguage; 295ca0551cfSopenharmony_ci std::string idlPackage; 296ca0551cfSopenharmony_ci std::string sourceDir; // '-D <directory>' 297ca0551cfSopenharmony_ci std::set<std::string> sourceFiles; // '-c <*.idl>' 298ca0551cfSopenharmony_ci std::string genDir; // '-d <directory>' 299ca0551cfSopenharmony_ci PkgPathMap packagePathMap; 300ca0551cfSopenharmony_ci std::string outPutFile; 301ca0551cfSopenharmony_ci std::string hitraceTag; 302ca0551cfSopenharmony_ci std::string domainId; 303ca0551cfSopenharmony_ci std::string logTag; 304ca0551cfSopenharmony_ci std::string metadataFile; 305ca0551cfSopenharmony_ci Attribute attribute; 306ca0551cfSopenharmony_ci std::string illegalOptions; 307ca0551cfSopenharmony_ci 308ca0551cfSopenharmony_ci bool doShowUsage; 309ca0551cfSopenharmony_ci bool doShowVersion; // '-v' 310ca0551cfSopenharmony_ci bool doCompile; // '-c' 311ca0551cfSopenharmony_ci bool doDumpAST; 312ca0551cfSopenharmony_ci bool doDumpMetadata; 313ca0551cfSopenharmony_ci bool doHashKey; 314ca0551cfSopenharmony_ci bool doGenerateCode; 315ca0551cfSopenharmony_ci bool doOutDir; // '-d' 316ca0551cfSopenharmony_ci bool doKeywords; // "-t" "-log-.." 317ca0551cfSopenharmony_ci bool doSaveMetadata; 318ca0551cfSopenharmony_ci bool doHitrace; 319ca0551cfSopenharmony_ci InterfaceType interfaceType; 320ca0551cfSopenharmony_ci}; 321ca0551cfSopenharmony_ci} // namespace Idl 322ca0551cfSopenharmony_ci} // namespace OHOS 323ca0551cfSopenharmony_ci 324ca0551cfSopenharmony_ci#endif // OHOS_HDIL_OPTION_H