+ bin_dir = toolchains_dir/use_toolchain/"prebuilt"/use_arch/"bin";
+ builder.get_logger().log("tools", format("Android NDK toolchain binaries found in %s", bin_dir.str()));
+}
+
+void AndroidNdk::init_api_level(unsigned api)
+{
+ FS::Path platform_archs_dir = root/"platforms"/format("android-%d", api);
+ builder.get_logger().log("files", format("Traversing %s", platform_archs_dir.str()));
+ vector<string> platform_archs = list_filtered(platform_archs_dir, "^arch-");
+ for(vector<string>::iterator i=platform_archs.begin(); i!=platform_archs.end(); ++i)
+ i->erase(0, 5);
+ string use_arch = architecture.best_match(platform_archs);
+
+ if(use_arch.empty())
+ {
+ builder.get_logger().log("problems", "No matching Android NDK platform found");
+ return;
+ }
+
+ platform_sysroot = platform_archs_dir/("arch-"+use_arch);
+ builder.get_logger().log("tools", format("Android NDK platform sysroot is %s", platform_sysroot));
+}
+
+
+AndroidTools::AndroidTools(Builder &builder, const Architecture &arch):
+ sdk(builder),
+ ndk(builder, arch, sdk)
+{
+ const set<unsigned> &sdk_api_levels = sdk.get_supported_api_levels();
+ const set<unsigned> &ndk_api_levels = ndk.get_supported_api_levels();
+ unsigned highest_common = 0;
+ for(set<unsigned>::const_reverse_iterator 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)
+ {
+ sdk.select_api_level(highest_common);
+ ndk.select_api_level(highest_common);
+ }
+ else
+ builder.get_logger().log("problems", "No usable Android platforms found");
+
+ add_tool(new AndroidCompiler(builder, arch, "CC", ndk));
+ add_tool(new AndroidCompiler(builder, arch, "CXX", ndk));
+ add_tool(new AndroidLinker(builder, arch, ndk));
+ add_tool(new AndroidArchiver(builder, arch, ndk));
+ add_tool(new AndroidManifestGenerator(builder));
+ add_tool(new AndroidAssetPackagingTool(builder, sdk));
+ add_tool(new ApkBuilder(builder));
+ add_tool(new JarSigner(builder));