140e8eefbedcafc51948945647d746daaee092f16Adam Lesinski/*
240e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * Copyright (C) 2014 The Android Open Source Project
340e8eefbedcafc51948945647d746daaee092f16Adam Lesinski *
440e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * Licensed under the Apache License, Version 2.0 (the "License");
540e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * you may not use this file except in compliance with the License.
640e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * You may obtain a copy of the License at
740e8eefbedcafc51948945647d746daaee092f16Adam Lesinski *
840e8eefbedcafc51948945647d746daaee092f16Adam Lesinski *      http://www.apache.org/licenses/LICENSE-2.0
940e8eefbedcafc51948945647d746daaee092f16Adam Lesinski *
1040e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * Unless required by applicable law or agreed to in writing, software
1140e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * distributed under the License is distributed on an "AS IS" BASIS,
1240e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1340e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * See the License for the specific language governing permissions and
1440e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * limitations under the License.
1540e8eefbedcafc51948945647d746daaee092f16Adam Lesinski */
1640e8eefbedcafc51948945647d746daaee092f16Adam Lesinski
1740e8eefbedcafc51948945647d746daaee092f16Adam Lesinski#include "Abi.h"
1840e8eefbedcafc51948945647d746daaee092f16Adam Lesinski
19c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinskiusing namespace android;
20c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski
2140e8eefbedcafc51948945647d746daaee092f16Adam Lesinskinamespace split {
2240e8eefbedcafc51948945647d746daaee092f16Adam Lesinskinamespace abi {
2340e8eefbedcafc51948945647d746daaee092f16Adam Lesinski
24c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinskistatic Vector<Variant> buildVariants(Variant v1, Variant v2) {
25c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski    Vector<Variant> v;
26c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski    v.add(v1);
27c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski    v.add(v2);
28c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski    return v;
29c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski}
30c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski
31c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinskistatic Vector<Variant> buildVariants(Variant v1, Variant v2, Variant v3) {
32c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski    Vector<Variant> v;
33c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski    v.add(v1);
34c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski    v.add(v2);
35c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski    v.add(v3);
36c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski    return v;
37c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski}
38c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski
39c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinskistatic const Vector<Variant> sNoneVariants;
40c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinskistatic const Vector<Variant> sArmVariants = buildVariants(Variant_armeabi, Variant_armeabi_v7a, Variant_arm64_v8a);
41c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinskistatic const Vector<Variant> sIntelVariants = buildVariants(Variant_x86, Variant_x86_64);
42c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinskistatic const Vector<Variant> sMipsVariants = buildVariants(Variant_mips, Variant_mips64);
4340e8eefbedcafc51948945647d746daaee092f16Adam Lesinski
4440e8eefbedcafc51948945647d746daaee092f16Adam LesinskiFamily getFamily(Variant variant) {
4540e8eefbedcafc51948945647d746daaee092f16Adam Lesinski    switch (variant) {
46c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski        case Variant_none:
47c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski            return Family_none;
48c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski        case Variant_armeabi:
49c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski        case Variant_armeabi_v7a:
50c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski        case Variant_arm64_v8a:
51c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski            return Family_arm;
52c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski        case Variant_x86:
53c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski        case Variant_x86_64:
54c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski            return Family_intel;
55c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski        case Variant_mips:
56c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski        case Variant_mips64:
57c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski            return Family_mips;
5840e8eefbedcafc51948945647d746daaee092f16Adam Lesinski    }
59c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski    return Family_none;
6040e8eefbedcafc51948945647d746daaee092f16Adam Lesinski}
6140e8eefbedcafc51948945647d746daaee092f16Adam Lesinski
62c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinskiconst Vector<Variant>& getVariants(Family family) {
6340e8eefbedcafc51948945647d746daaee092f16Adam Lesinski    switch (family) {
64c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski        case Family_none:
6540e8eefbedcafc51948945647d746daaee092f16Adam Lesinski            return sNoneVariants;
66c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski        case Family_arm:
6740e8eefbedcafc51948945647d746daaee092f16Adam Lesinski            return sArmVariants;
68c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski        case Family_intel:
6940e8eefbedcafc51948945647d746daaee092f16Adam Lesinski            return sIntelVariants;
70c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski        case Family_mips:
7140e8eefbedcafc51948945647d746daaee092f16Adam Lesinski            return sMipsVariants;
7240e8eefbedcafc51948945647d746daaee092f16Adam Lesinski    }
7340e8eefbedcafc51948945647d746daaee092f16Adam Lesinski    return sNoneVariants;
7440e8eefbedcafc51948945647d746daaee092f16Adam Lesinski}
7540e8eefbedcafc51948945647d746daaee092f16Adam Lesinski
7640e8eefbedcafc51948945647d746daaee092f16Adam Lesinskiconst char* toString(Variant variant) {
7740e8eefbedcafc51948945647d746daaee092f16Adam Lesinski    switch (variant) {
78c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski        case Variant_none:
7940e8eefbedcafc51948945647d746daaee092f16Adam Lesinski            return "";
80c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski        case Variant_armeabi:
8140e8eefbedcafc51948945647d746daaee092f16Adam Lesinski            return "armeabi";
82c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski        case Variant_armeabi_v7a:
8340e8eefbedcafc51948945647d746daaee092f16Adam Lesinski            return "armeabi-v7a";
84c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski        case Variant_arm64_v8a:
8540e8eefbedcafc51948945647d746daaee092f16Adam Lesinski            return "arm64-v8a";
86c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski        case Variant_x86:
8740e8eefbedcafc51948945647d746daaee092f16Adam Lesinski            return "x86";
88c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski        case Variant_x86_64:
8940e8eefbedcafc51948945647d746daaee092f16Adam Lesinski            return "x86_64";
90c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski        case Variant_mips:
9140e8eefbedcafc51948945647d746daaee092f16Adam Lesinski            return "mips";
92c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski        case Variant_mips64:
9340e8eefbedcafc51948945647d746daaee092f16Adam Lesinski            return "mips64";
9440e8eefbedcafc51948945647d746daaee092f16Adam Lesinski    }
9540e8eefbedcafc51948945647d746daaee092f16Adam Lesinski    return "";
9640e8eefbedcafc51948945647d746daaee092f16Adam Lesinski}
9740e8eefbedcafc51948945647d746daaee092f16Adam Lesinski
9840e8eefbedcafc51948945647d746daaee092f16Adam Lesinski} // namespace abi
9940e8eefbedcafc51948945647d746daaee092f16Adam Lesinski} // namespace split
100