am 5fa90218: am f7ffcaa7: Merge "Build the split-select tool without C++11 support" into lmp-mr1-dev

* commit '5fa9021822577f1e4676db49a6b5cb5d36e4614a':
  Build the split-select tool without C++11 support
This commit is contained in:
Adam Lesinski
2014-11-04 02:20:47 +00:00
committed by Android Git Automerger
11 changed files with 210 additions and 121 deletions

View File

@@ -14,9 +14,11 @@
* limitations under the License. * limitations under the License.
*/ */
#ifndef __AAPT_UTIL_H #ifndef H_AAPT_UTIL
#define __AAPT_UTIL_H #define H_AAPT_UTIL
#include <utils/KeyedVector.h>
#include <utils/SortedVector.h>
#include <utils/String8.h> #include <utils/String8.h>
#include <utils/Vector.h> #include <utils/Vector.h>
@@ -25,6 +27,38 @@ namespace AaptUtil {
android::Vector<android::String8> split(const android::String8& str, const char sep); android::Vector<android::String8> split(const android::String8& str, const char sep);
android::Vector<android::String8> splitAndLowerCase(const android::String8& str, const char sep); android::Vector<android::String8> splitAndLowerCase(const android::String8& str, const char sep);
template <typename KEY, typename VALUE>
void appendValue(android::KeyedVector<KEY, android::Vector<VALUE> >& keyedVector,
const KEY& key, const VALUE& value);
template <typename KEY, typename VALUE>
void appendValue(android::KeyedVector<KEY, android::SortedVector<VALUE> >& keyedVector,
const KEY& key, const VALUE& value);
//
// Implementations
//
template <typename KEY, typename VALUE>
void appendValue(android::KeyedVector<KEY, android::Vector<VALUE> >& keyedVector,
const KEY& key, const VALUE& value) {
ssize_t idx = keyedVector.indexOfKey(key);
if (idx < 0) {
idx = keyedVector.add(key, android::Vector<VALUE>());
}
keyedVector.editValueAt(idx).add(value);
}
template <typename KEY, typename VALUE>
void appendValue(android::KeyedVector<KEY, android::SortedVector<VALUE> >& keyedVector,
const KEY& key, const VALUE& value) {
ssize_t idx = keyedVector.indexOfKey(key);
if (idx < 0) {
idx = keyedVector.add(key, android::SortedVector<VALUE>());
}
keyedVector.editValueAt(idx).add(value);
}
} // namespace AaptUtil } // namespace AaptUtil
#endif // __AAPT_UTIL_H #endif // H_AAPT_UTIL

View File

@@ -16,42 +16,58 @@
#include "Abi.h" #include "Abi.h"
using namespace android;
namespace split { namespace split {
namespace abi { namespace abi {
static const std::vector<Variant> sNoneVariants = {}; static Vector<Variant> buildVariants(Variant v1, Variant v2) {
static const std::vector<Variant> sArmVariants = Vector<Variant> v;
{Variant::armeabi, Variant::armeabi_v7a, Variant::arm64_v8a}; v.add(v1);
static const std::vector<Variant> sIntelVariants = {Variant::x86, Variant::x86_64}; v.add(v2);
static const std::vector<Variant> sMipsVariants = {Variant::mips, Variant::mips64}; return v;
}
static Vector<Variant> buildVariants(Variant v1, Variant v2, Variant v3) {
Vector<Variant> v;
v.add(v1);
v.add(v2);
v.add(v3);
return v;
}
static const Vector<Variant> sNoneVariants;
static const Vector<Variant> sArmVariants = buildVariants(Variant_armeabi, Variant_armeabi_v7a, Variant_arm64_v8a);
static const Vector<Variant> sIntelVariants = buildVariants(Variant_x86, Variant_x86_64);
static const Vector<Variant> sMipsVariants = buildVariants(Variant_mips, Variant_mips64);
Family getFamily(Variant variant) { Family getFamily(Variant variant) {
switch (variant) { switch (variant) {
case Variant::none: case Variant_none:
return Family::none; return Family_none;
case Variant::armeabi: case Variant_armeabi:
case Variant::armeabi_v7a: case Variant_armeabi_v7a:
case Variant::arm64_v8a: case Variant_arm64_v8a:
return Family::arm; return Family_arm;
case Variant::x86: case Variant_x86:
case Variant::x86_64: case Variant_x86_64:
return Family::intel; return Family_intel;
case Variant::mips: case Variant_mips:
case Variant::mips64: case Variant_mips64:
return Family::mips; return Family_mips;
} }
return Family::none; return Family_none;
} }
const std::vector<Variant>& getVariants(Family family) { const Vector<Variant>& getVariants(Family family) {
switch (family) { switch (family) {
case Family::none: case Family_none:
return sNoneVariants; return sNoneVariants;
case Family::arm: case Family_arm:
return sArmVariants; return sArmVariants;
case Family::intel: case Family_intel:
return sIntelVariants; return sIntelVariants;
case Family::mips: case Family_mips:
return sMipsVariants; return sMipsVariants;
} }
return sNoneVariants; return sNoneVariants;
@@ -59,21 +75,21 @@ const std::vector<Variant>& getVariants(Family family) {
const char* toString(Variant variant) { const char* toString(Variant variant) {
switch (variant) { switch (variant) {
case Variant::none: case Variant_none:
return ""; return "";
case Variant::armeabi: case Variant_armeabi:
return "armeabi"; return "armeabi";
case Variant::armeabi_v7a: case Variant_armeabi_v7a:
return "armeabi-v7a"; return "armeabi-v7a";
case Variant::arm64_v8a: case Variant_arm64_v8a:
return "arm64-v8a"; return "arm64-v8a";
case Variant::x86: case Variant_x86:
return "x86"; return "x86";
case Variant::x86_64: case Variant_x86_64:
return "x86_64"; return "x86_64";
case Variant::mips: case Variant_mips:
return "mips"; return "mips";
case Variant::mips64: case Variant_mips64:
return "mips64"; return "mips64";
} }
return ""; return "";

View File

@@ -17,31 +17,31 @@
#ifndef H_ANDROID_SPLIT_ABI #ifndef H_ANDROID_SPLIT_ABI
#define H_ANDROID_SPLIT_ABI #define H_ANDROID_SPLIT_ABI
#include <vector> #include <utils/Vector.h>
namespace split { namespace split {
namespace abi { namespace abi {
enum class Variant { enum Variant {
none = 0, Variant_none = 0,
armeabi, Variant_armeabi,
armeabi_v7a, Variant_armeabi_v7a,
arm64_v8a, Variant_arm64_v8a,
x86, Variant_x86,
x86_64, Variant_x86_64,
mips, Variant_mips,
mips64, Variant_mips64,
}; };
enum class Family { enum Family {
none, Family_none,
arm, Family_arm,
intel, Family_intel,
mips, Family_mips,
}; };
Family getFamily(Variant variant); Family getFamily(Variant variant);
const std::vector<Variant>& getVariants(Family family); const android::Vector<Variant>& getVariants(Family family);
const char* toString(Variant variant); const char* toString(Variant variant);
} // namespace abi } // namespace abi

View File

@@ -17,10 +17,6 @@
# This tool is prebuilt if we're doing an app-only build. # This tool is prebuilt if we're doing an app-only build.
ifeq ($(TARGET_BUILD_APPS)$(filter true,$(TARGET_BUILD_PDK)),) ifeq ($(TARGET_BUILD_APPS)$(filter true,$(TARGET_BUILD_PDK)),)
# TODO(adamlesinski): Enable OS X builds when I figure out how
# to build with clang and libc++
ifneq ($(HOST_OS),darwin)
# ========================================================== # ==========================================================
# Setup some common variables for the different build # Setup some common variables for the different build
# targets here. # targets here.
@@ -55,7 +51,7 @@ hostStaticLibs := \
libexpat \ libexpat \
libziparchive-host libziparchive-host
cFlags := -std=c++11 -Wall -Werror cFlags := -Wall -Werror
ifeq ($(HOST_OS),linux) ifeq ($(HOST_OS),linux)
hostLdLibs += -lrt -ldl -lpthread hostLdLibs += -lrt -ldl -lpthread
@@ -115,5 +111,4 @@ LOCAL_CFLAGS += $(cFlags)
include $(BUILD_HOST_EXECUTABLE) include $(BUILD_HOST_EXECUTABLE)
endif # Not OS X
endif # No TARGET_BUILD_APPS or TARGET_BUILD_PDK endif # No TARGET_BUILD_APPS or TARGET_BUILD_PDK

View File

@@ -16,25 +16,17 @@
#include "Grouper.h" #include "Grouper.h"
#include "aapt/AaptUtil.h"
#include "SplitDescription.h" #include "SplitDescription.h"
#include <utils/KeyedVector.h> #include <utils/KeyedVector.h>
#include <utils/Vector.h> #include <utils/Vector.h>
using namespace android; using namespace android;
using AaptUtil::appendValue;
namespace split { namespace split {
template <typename Key, typename Value>
static void addToVector(KeyedVector<Key, SortedVector<Value> >& group,
const Key& key, const Value& value) {
ssize_t idx = group.indexOfKey(key);
if (idx < 0) {
idx = group.add(key, SortedVector<Value>());
}
group.editValueAt(idx).add(value);
}
Vector<SortedVector<SplitDescription> > Vector<SortedVector<SplitDescription> >
groupByMutualExclusivity(const Vector<SplitDescription>& splits) { groupByMutualExclusivity(const Vector<SplitDescription>& splits) {
Vector<SortedVector<SplitDescription> > groups; Vector<SortedVector<SplitDescription> > groups;
@@ -43,20 +35,22 @@ groupByMutualExclusivity(const Vector<SplitDescription>& splits) {
KeyedVector<SplitDescription, SortedVector<SplitDescription> > densityGroups; KeyedVector<SplitDescription, SortedVector<SplitDescription> > densityGroups;
KeyedVector<SplitDescription, SortedVector<SplitDescription> > abiGroups; KeyedVector<SplitDescription, SortedVector<SplitDescription> > abiGroups;
KeyedVector<SplitDescription, SortedVector<SplitDescription> > localeGroups; KeyedVector<SplitDescription, SortedVector<SplitDescription> > localeGroups;
for (const SplitDescription& split : splits) { const size_t splitCount = splits.size();
for (size_t i = 0; i < splitCount; i++) {
const SplitDescription& split = splits[i];
if (split.config.density != 0) { if (split.config.density != 0) {
SplitDescription key(split); SplitDescription key(split);
key.config.density = 0; key.config.density = 0;
key.config.sdkVersion = 0; // Ignore density so we can support anydpi. key.config.sdkVersion = 0; // Ignore density so we can support anydpi.
addToVector(densityGroups, key, split); appendValue(densityGroups, key, split);
} else if (split.abi != abi::Variant::none) { } else if (split.abi != abi::Variant_none) {
SplitDescription key(split); SplitDescription key(split);
key.abi = abi::Variant::none; key.abi = abi::Variant_none;
addToVector(abiGroups, key, split); appendValue(abiGroups, key, split);
} else if (split.config.locale != 0) { } else if (split.config.locale != 0) {
SplitDescription key(split); SplitDescription key(split);
key.config.clearLocale(); key.config.clearLocale();
addToVector(localeGroups, key, split); appendValue(localeGroups, key, split);
} else { } else {
groups.add(); groups.add();
groups.editTop().add(split); groups.editTop().add(split);

View File

@@ -19,7 +19,6 @@
#include "SplitDescription.h" #include "SplitDescription.h"
#include <gtest/gtest.h> #include <gtest/gtest.h>
#include <initializer_list>
#include <utils/String8.h> #include <utils/String8.h>
#include <utils/Vector.h> #include <utils/Vector.h>
@@ -55,7 +54,11 @@ protected:
} }
void addSplit(Vector<SplitDescription>& splits, const char* str); void addSplit(Vector<SplitDescription>& splits, const char* str);
void expectHasGroupWithSplits(std::initializer_list<const char*> l); void expectHasGroupWithSplits(const char* a);
void expectHasGroupWithSplits(const char* a, const char* b);
void expectHasGroupWithSplits(const char* a, const char* b, const char* c);
void expectHasGroupWithSplits(const char* a, const char* b, const char* c, const char* d);
void expectHasGroupWithSplits(const Vector<const char*>& expectedStrs);
Vector<SortedVector<SplitDescription> > mGroups; Vector<SortedVector<SplitDescription> > mGroups;
}; };
@@ -65,39 +68,70 @@ TEST_F(GrouperTest, shouldHaveCorrectNumberOfGroups) {
} }
TEST_F(GrouperTest, shouldGroupDensities) { TEST_F(GrouperTest, shouldGroupDensities) {
expectHasGroupWithSplits({"en-rUS-sw300dp-hdpi", "en-rUS-sw300dp-xhdpi"}); expectHasGroupWithSplits("en-rUS-sw300dp-hdpi", "en-rUS-sw300dp-xhdpi");
expectHasGroupWithSplits({"en-rUS-sw600dp-hdpi", "en-rUS-sw600dp-xhdpi"}); expectHasGroupWithSplits("en-rUS-sw600dp-hdpi", "en-rUS-sw600dp-xhdpi");
expectHasGroupWithSplits({"fr-rFR-sw600dp-hdpi", "fr-rFR-sw600dp-xhdpi"}); expectHasGroupWithSplits("fr-rFR-sw600dp-hdpi", "fr-rFR-sw600dp-xhdpi");
expectHasGroupWithSplits({"hdpi", "xhdpi", "xxhdpi", "anydpi"}); expectHasGroupWithSplits("hdpi", "xhdpi", "xxhdpi", "anydpi");
} }
TEST_F(GrouperTest, shouldGroupAbi) { TEST_F(GrouperTest, shouldGroupAbi) {
expectHasGroupWithSplits({":armeabi", ":x86"}); expectHasGroupWithSplits(":armeabi", ":x86");
} }
TEST_F(GrouperTest, shouldGroupLocale) { TEST_F(GrouperTest, shouldGroupLocale) {
expectHasGroupWithSplits({"pl-rPL", "de-rDE"}); expectHasGroupWithSplits("pl-rPL", "de-rDE");
} }
TEST_F(GrouperTest, shouldGroupEachSplitIntoItsOwnGroup) { TEST_F(GrouperTest, shouldGroupEachSplitIntoItsOwnGroup) {
expectHasGroupWithSplits({"large"}); expectHasGroupWithSplits("large");
expectHasGroupWithSplits({"xlarge"}); expectHasGroupWithSplits("xlarge");
expectHasGroupWithSplits({"v7"}); expectHasGroupWithSplits("v7");
expectHasGroupWithSplits({"v8"}); expectHasGroupWithSplits("v8");
expectHasGroupWithSplits({"sw600dp"}); expectHasGroupWithSplits("sw600dp");
expectHasGroupWithSplits({"sw300dp"}); expectHasGroupWithSplits("sw300dp");
} }
// //
// Helper methods // Helper methods
// //
void GrouperTest::expectHasGroupWithSplits(std::initializer_list<const char*> l) { void GrouperTest::expectHasGroupWithSplits(const char* a) {
Vector<const char*> expected;
expected.add(a);
expectHasGroupWithSplits(expected);
}
void GrouperTest::expectHasGroupWithSplits(const char* a, const char* b) {
Vector<const char*> expected;
expected.add(a);
expected.add(b);
expectHasGroupWithSplits(expected);
}
void GrouperTest::expectHasGroupWithSplits(const char* a, const char* b, const char* c) {
Vector<const char*> expected;
expected.add(a);
expected.add(b);
expected.add(c);
expectHasGroupWithSplits(expected);
}
void GrouperTest::expectHasGroupWithSplits(const char* a, const char* b, const char* c, const char* d) {
Vector<const char*> expected;
expected.add(a);
expected.add(b);
expected.add(c);
expected.add(d);
expectHasGroupWithSplits(expected);
}
void GrouperTest::expectHasGroupWithSplits(const Vector<const char*>& expectedStrs) {
Vector<SplitDescription> splits; Vector<SplitDescription> splits;
for (const char* str : l) { const size_t expectedStrCount = expectedStrs.size();
for (size_t i = 0; i < expectedStrCount; i++) {
splits.add(); splits.add();
if (!SplitDescription::parse(String8(str), &splits.editTop())) { if (!SplitDescription::parse(String8(expectedStrs[i]), &splits.editTop())) {
ADD_FAILURE() << "Failed to parse SplitDescription " << str; ADD_FAILURE() << "Failed to parse SplitDescription " << expectedStrs[i];
return; return;
} }
} }

View File

@@ -63,7 +63,7 @@ static void help() {
class SplitSelector { class SplitSelector {
public: public:
SplitSelector() = default; SplitSelector();
SplitSelector(const Vector<SplitDescription>& splits); SplitSelector(const Vector<SplitDescription>& splits);
Vector<SplitDescription> getBestSplits(const SplitDescription& target) const; Vector<SplitDescription> getBestSplits(const SplitDescription& target) const;
@@ -75,6 +75,9 @@ private:
Vector<SortedVector<SplitDescription> > mGroups; Vector<SortedVector<SplitDescription> > mGroups;
}; };
SplitSelector::SplitSelector() {
}
SplitSelector::SplitSelector(const Vector<SplitDescription>& splits) SplitSelector::SplitSelector(const Vector<SplitDescription>& splits)
: mGroups(groupByMutualExclusivity(splits)) { : mGroups(groupByMutualExclusivity(splits)) {
} }

View File

@@ -65,12 +65,12 @@ sp<Rule> RuleGenerator::generateDensity(const Vector<int>& allDensities, size_t
sp<Rule> RuleGenerator::generateAbi(const Vector<abi::Variant>& splitAbis, size_t index) { sp<Rule> RuleGenerator::generateAbi(const Vector<abi::Variant>& splitAbis, size_t index) {
const abi::Variant thisAbi = splitAbis[index]; const abi::Variant thisAbi = splitAbis[index];
const std::vector<abi::Variant>& familyVariants = abi::getVariants(abi::getFamily(thisAbi)); const Vector<abi::Variant>& familyVariants = abi::getVariants(abi::getFamily(thisAbi));
std::vector<abi::Variant>::const_iterator start = Vector<abi::Variant>::const_iterator start =
std::find(familyVariants.begin(), familyVariants.end(), thisAbi); std::find(familyVariants.begin(), familyVariants.end(), thisAbi);
std::vector<abi::Variant>::const_iterator end = familyVariants.end(); Vector<abi::Variant>::const_iterator end = familyVariants.end();
if (index + 1 < splitAbis.size()) { if (index + 1 < splitAbis.size()) {
end = std::find(start, familyVariants.end(), splitAbis[index + 1]); end = std::find(start, familyVariants.end(), splitAbis[index + 1]);
} }
@@ -127,7 +127,7 @@ sp<Rule> RuleGenerator::generate(const SortedVector<SplitDescription>& group, si
rootRule->subrules.add(generateDensity(allDensities, densityIndex)); rootRule->subrules.add(generateDensity(allDensities, densityIndex));
} }
if (group[index].abi != abi::Variant::none) { if (group[index].abi != abi::Variant_none) {
size_t abiIndex = 0; size_t abiIndex = 0;
Vector<abi::Variant> allVariants; Vector<abi::Variant> allVariants;
allVariants.add(group[index].abi); allVariants.add(group[index].abi);

View File

@@ -25,19 +25,19 @@ using namespace android;
namespace split { namespace split {
static void expectDensityRule(const Vector<int>& densities, int density, int greaterThan, int lessThan); static void expectDensityRule(const Vector<int>& densities, int density, int greaterThan, int lessThan);
static void expectAbiRule(const Vector<abi::Variant>& abis, abi::Variant variant, static void expectAbiRule(const Vector<abi::Variant>& abis, abi::Variant variant, const char* a);
std::initializer_list<const char*> matches); static void expectAbiRule(const Vector<abi::Variant>& abis, abi::Variant variant, const char* a, const char* b);
TEST(RuleGeneratorTest, testAbiRules) { TEST(RuleGeneratorTest, testAbiRules) {
Vector<abi::Variant> abis; Vector<abi::Variant> abis;
abis.add(abi::Variant::armeabi); abis.add(abi::Variant_armeabi);
abis.add(abi::Variant::armeabi_v7a); abis.add(abi::Variant_armeabi_v7a);
abis.add(abi::Variant::x86); abis.add(abi::Variant_x86);
std::sort(abis.begin(), abis.end()); std::sort(abis.begin(), abis.end());
expectAbiRule(abis, abi::Variant::armeabi, {"armeabi"}); expectAbiRule(abis, abi::Variant_armeabi, "armeabi");
expectAbiRule(abis, abi::Variant::armeabi_v7a, {"armeabi-v7a", "arm64-v8a"}); expectAbiRule(abis, abi::Variant_armeabi_v7a, "armeabi-v7a", "arm64-v8a");
expectAbiRule(abis, abi::Variant::x86, {"x86", "x86_64"}); expectAbiRule(abis, abi::Variant_x86, "x86", "x86_64");
} }
TEST(RuleGeneratorTest, testDensityRules) { TEST(RuleGeneratorTest, testDensityRules) {
@@ -126,8 +126,7 @@ static void expectDensityRule(const Vector<int>& densities, int density, int gre
} }
} }
static void expectAbiRule(const Vector<abi::Variant>& abis, abi::Variant variant, static void expectAbiRule(const Vector<abi::Variant>& abis, abi::Variant variant, const Vector<const char*>& matches) {
std::initializer_list<const char*> matches) {
const abi::Variant* iter = std::find(abis.begin(), abis.end(), variant); const abi::Variant* iter = std::find(abis.begin(), abis.end(), variant);
if (abis.end() == iter) { if (abis.end() == iter) {
ADD_FAILURE() << abi::toString(variant) << " was not in the abi list."; ADD_FAILURE() << abi::toString(variant) << " was not in the abi list.";
@@ -143,7 +142,9 @@ static void expectAbiRule(const Vector<abi::Variant>& abis, abi::Variant variant
EXPECT_EQ(matches.size(), rule->stringArgs.size()) EXPECT_EQ(matches.size(), rule->stringArgs.size())
<< " for " << abi::toString(variant) << " rule"; << " for " << abi::toString(variant) << " rule";
for (const char* match : matches) { const size_t matchCount = matches.size();
for (size_t i = 0; i < matchCount; i++) {
const char* match = matches[i];
if (rule->stringArgs.end() == if (rule->stringArgs.end() ==
std::find(rule->stringArgs.begin(), rule->stringArgs.end(), String8(match))) { std::find(rule->stringArgs.begin(), rule->stringArgs.end(), String8(match))) {
ADD_FAILURE() << "Rule for abi " << abi::toString(variant) ADD_FAILURE() << "Rule for abi " << abi::toString(variant)
@@ -152,4 +153,17 @@ static void expectAbiRule(const Vector<abi::Variant>& abis, abi::Variant variant
} }
} }
static void expectAbiRule(const Vector<abi::Variant>& abis, abi::Variant variant, const char* a) {
Vector<const char*> matches;
matches.add(a);
expectAbiRule(abis, variant, matches);
}
static void expectAbiRule(const Vector<abi::Variant>& abis, abi::Variant variant, const char* a, const char* b) {
Vector<const char*> matches;
matches.add(a);
matches.add(b);
expectAbiRule(abis, variant, matches);
}
} // namespace split } // namespace split

View File

@@ -27,7 +27,7 @@ using namespace android;
namespace split { namespace split {
SplitDescription::SplitDescription() SplitDescription::SplitDescription()
: abi(abi::Variant::none) { : abi(abi::Variant_none) {
} }
int SplitDescription::compare(const SplitDescription& rhs) const { int SplitDescription::compare(const SplitDescription& rhs) const {
@@ -38,11 +38,11 @@ int SplitDescription::compare(const SplitDescription& rhs) const {
} }
bool SplitDescription::isBetterThan(const SplitDescription& o, const SplitDescription& target) const { bool SplitDescription::isBetterThan(const SplitDescription& o, const SplitDescription& target) const {
if (abi != abi::Variant::none || o.abi != abi::Variant::none) { if (abi != abi::Variant_none || o.abi != abi::Variant_none) {
abi::Family family = abi::getFamily(abi); abi::Family family = abi::getFamily(abi);
abi::Family oFamily = abi::getFamily(o.abi); abi::Family oFamily = abi::getFamily(o.abi);
if (family != oFamily) { if (family != oFamily) {
return family != abi::Family::none; return family != abi::Family_none;
} }
if (int(target.abi) - int(abi) < int(target.abi) - int(o.abi)) { if (int(target.abi) - int(abi) < int(target.abi) - int(o.abi)) {
@@ -53,7 +53,7 @@ bool SplitDescription::isBetterThan(const SplitDescription& o, const SplitDescri
} }
bool SplitDescription::match(const SplitDescription& o) const { bool SplitDescription::match(const SplitDescription& o) const {
if (abi != abi::Variant::none) { if (abi != abi::Variant_none) {
abi::Family family = abi::getFamily(abi); abi::Family family = abi::getFamily(abi);
abi::Family oFamily = abi::getFamily(o.abi); abi::Family oFamily = abi::getFamily(o.abi);
if (family != oFamily) { if (family != oFamily) {
@@ -69,7 +69,7 @@ bool SplitDescription::match(const SplitDescription& o) const {
String8 SplitDescription::toString() const { String8 SplitDescription::toString() const {
String8 extension; String8 extension;
if (abi != abi::Variant::none) { if (abi != abi::Variant_none) {
if (extension.isEmpty()) { if (extension.isEmpty()) {
extension.append(":"); extension.append(":");
} else { } else {
@@ -85,40 +85,40 @@ String8 SplitDescription::toString() const {
ssize_t parseAbi(const Vector<String8>& parts, const ssize_t index, ssize_t parseAbi(const Vector<String8>& parts, const ssize_t index,
SplitDescription* outSplit) { SplitDescription* outSplit) {
const ssize_t N = parts.size(); const ssize_t N = parts.size();
abi::Variant abi = abi::Variant::none; abi::Variant abi = abi::Variant_none;
ssize_t endIndex = index; ssize_t endIndex = index;
if (parts[endIndex] == "arm64") { if (parts[endIndex] == "arm64") {
endIndex++; endIndex++;
if (endIndex < N) { if (endIndex < N) {
if (parts[endIndex] == "v8a") { if (parts[endIndex] == "v8a") {
endIndex++; endIndex++;
abi = abi::Variant::arm64_v8a; abi = abi::Variant_arm64_v8a;
} }
} }
} else if (parts[endIndex] == "armeabi") { } else if (parts[endIndex] == "armeabi") {
endIndex++; endIndex++;
abi = abi::Variant::armeabi; abi = abi::Variant_armeabi;
if (endIndex < N) { if (endIndex < N) {
if (parts[endIndex] == "v7a") { if (parts[endIndex] == "v7a") {
endIndex++; endIndex++;
abi = abi::Variant::armeabi_v7a; abi = abi::Variant_armeabi_v7a;
} }
} }
} else if (parts[endIndex] == "x86") { } else if (parts[endIndex] == "x86") {
endIndex++; endIndex++;
abi = abi::Variant::x86; abi = abi::Variant_x86;
} else if (parts[endIndex] == "x86_64") { } else if (parts[endIndex] == "x86_64") {
endIndex++; endIndex++;
abi = abi::Variant::x86_64; abi = abi::Variant_x86_64;
} else if (parts[endIndex] == "mips") { } else if (parts[endIndex] == "mips") {
endIndex++; endIndex++;
abi = abi::Variant::mips; abi = abi::Variant_mips;
} else if (parts[endIndex] == "mips64") { } else if (parts[endIndex] == "mips64") {
endIndex++; endIndex++;
abi = abi::Variant::mips64; abi = abi::Variant_mips64;
} }
if (abi == abi::Variant::none && endIndex != index) { if (abi == abi::Variant_none && endIndex != index) {
return -1; return -1;
} }

View File

@@ -27,7 +27,6 @@ namespace split {
struct SplitDescription { struct SplitDescription {
SplitDescription(); SplitDescription();
SplitDescription(const SplitDescription&) = default;
ConfigDescription config; ConfigDescription config;
abi::Variant abi; abi::Variant abi;