1 /*
2  * Copyright (c) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #ifndef ECMASCRIPT_AOT_VERSION_H
16 #define ECMASCRIPT_AOT_VERSION_H
17 
18 #include "ecmascript/base/file_header.h"
19 
20 namespace panda::ecmascript {
21 class AOTFileVersion {
22 public:
23     AOTFileVersion() = delete;
24     // List of historical versions for *.an / *.ai
25     // Release Version           Snapshot Version
26     //     3.2                      0.0.0.x
27     //     4.0                      4.0.0.x
28     static constexpr base::FileHeaderBase::VersionType AN_VERSION = {4, 0, 0, 9};
29     static constexpr bool AN_STRICT_MATCH = true;
30     static constexpr base::FileHeaderBase::VersionType AI_VERSION = {4, 0, 0, 6};
31     static constexpr bool AI_STRICT_MATCH = true;
32     constexpr static const int VERSION_MULTIPLE_SIZE = 2;
GetAOTVersion()33     static PUBLIC_API std::string GetAOTVersion()
34     {
35         return base::FileHeaderBase::ConvToStr(AN_VERSION);
36     }
CheckAOTVersion(const std::string& oldVersion)37     static PUBLIC_API bool CheckAOTVersion(const std::string& oldVersion)
38     {
39         std::optional<base::FileHeaderBase::VersionType> oldVersionFormat =
40             base::FileHeaderBase::strToVersion(oldVersion);
41         if (oldVersionFormat) {
42             return base::FileHeaderBase::VerifyVersionWithoutFile(AN_VERSION, *oldVersionFormat);
43         }
44         return true;
45     }
46 };
47 
48 extern "C" int32_t GetAOTVersion(std::string &aotVersion);
49 }  // namespace panda::ecmascript
50 #endif  // ECMASCRIPT_AOT_VERSION_H
51