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
20namespace panda::ecmascript {
21class AOTFileVersion {
22public:
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;
33    static PUBLIC_API std::string GetAOTVersion()
34    {
35        return base::FileHeaderBase::ConvToStr(AN_VERSION);
36    }
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
48extern "C" int32_t GetAOTVersion(std::string &aotVersion);
49}  // namespace panda::ecmascript
50#endif  // ECMASCRIPT_AOT_VERSION_H
51