X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fandroidtools.cpp;h=c5aab653c51fe3eec613412e1328daead5a2c3a8;hb=1ed833343bc83b83c5f61cbfd74423bbba677a04;hp=5ef2bec5f23b40ec3ff31a58be99d3d1189ece0e;hpb=7c2db9e2b91da953701be233336c5bfa1f3c4af0;p=builder.git diff --git a/source/androidtools.cpp b/source/androidtools.cpp index 5ef2bec..c5aab65 100644 --- a/source/androidtools.cpp +++ b/source/androidtools.cpp @@ -1,3 +1,4 @@ +#include #include #include #include @@ -43,7 +44,7 @@ AndroidDevKit::AndroidDevKit(Builder &b, const string &type, const FS::Path &def root = default_path; else { - builder.get_logger().log("problems", format("Android %s not found", type)); + builder.get_logger().log("problems", "Android %s not found", type); return; } } @@ -52,14 +53,21 @@ AndroidDevKit::AndroidDevKit(Builder &b, const string &type, const FS::Path &def if(!FS::exists(platforms_dir)) return; - builder.get_logger().log("files", format("Traversing %s", platforms_dir.str())); + builder.get_logger().log("files", "Traversing %s", platforms_dir.str()); + supported_api_levels = 0; for(const string &p: list_filtered(platforms_dir, "^android-[1-9][0-9]*$")) - supported_api_levels.insert(lexical_cast(p.substr(8))); + { + unsigned api = lexical_cast(p.substr(8)); + if(api>63) + builder.get_logger().log("problems", "API level %d is too high", api); + else + supported_api_levels |= 1< platform_archs = list_filtered(platform_archs_dir, "^arch-"); for(string &a: platform_archs) a.erase(0, 5); @@ -211,7 +219,7 @@ void AndroidNdk::init_api_level(unsigned api) } platform_sysroot = platform_archs_dir/("arch-"+use_arch); - builder.get_logger().log("tools", format("Android NDK platform sysroot is %s", platform_sysroot)); + builder.get_logger().log("tools", "Android NDK platform sysroot is %s", platform_sysroot); } @@ -219,17 +227,14 @@ AndroidTools::AndroidTools(Builder &builder, const Architecture &arch): sdk(builder), ndk(builder, arch, sdk) { - const set &sdk_api_levels = sdk.get_supported_api_levels(); - const set &ndk_api_levels = ndk.get_supported_api_levels(); - unsigned highest_common = 0; - for(auto i=sdk_api_levels.rbegin(); (!highest_common && i!=sdk_api_levels.rend()); ++i) - if(ndk_api_levels.count(*i)) - highest_common = *i; - - if(highest_common) + if(uint64_t common_api_levels = sdk.get_supported_api_levels()&ndk.get_supported_api_levels()) { - sdk.select_api_level(highest_common); - ndk.select_api_level(highest_common); + unsigned api = 0; + for(unsigned i=32; i>0; i>>=1) + api += i*!!(common_api_levels>>(api+i)); + builder.get_logger().log("tools", "Using Android API level %d", api); + sdk.select_api_level(api); + ndk.select_api_level(api); } else builder.get_logger().log("problems", "No usable Android platforms found");