X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fandroidtools.cpp;h=eeb6edf532d379948739e5efde7ee3b028c6bc06;hb=HEAD;hp=1042595fd9423802006136791e0ab9cf0587f40a;hpb=24b18c22c2b57bf7dc4ac024aca97f9c197445ec;p=builder.git diff --git a/source/androidtools.cpp b/source/androidtools.cpp deleted file mode 100644 index 1042595..0000000 --- a/source/androidtools.cpp +++ /dev/null @@ -1,117 +0,0 @@ -#include -#include -#include -#include -#include "androidccompiler.h" -#include "androidcxxcompiler.h" -#include "androidlinker.h" -#include "androidtools.h" -#include "architecture.h" -#include "builder.h" - -using namespace std; -using namespace Msp; - -AndroidTools::AndroidTools(Builder &builder, const Architecture &arch): - ndk(builder, arch) -{ - add_tool(new AndroidCCompiler(builder, arch, ndk)); - add_tool(new AndroidCxxCompiler(builder, arch, ndk)); - add_tool(new AndroidLinker(builder, arch, ndk)); -} - - -AndroidNdk::AndroidNdk(Builder &b, const Architecture &a): - builder(b), - architecture(a) -{ - if(const char *env_ndk_root = getenv("ANDROID_NDK_ROOT")) - ndk_root = env_ndk_root; - else - throw runtime_error("ANDROID_NDK_ROOT must be set"); - - find_toolchain_dir(); - find_platform_dir(); -} - -void AndroidNdk::find_toolchain_dir() -{ - FS::Path toolchains_dir = ndk_root/"toolchains"; - list toolchains = list_files(toolchains_dir); - - string prefix = architecture.get_cross_prefix()+"-"; - string use_toolchain; - unsigned latest_version = 0; - for(list::const_iterator i=toolchains.begin(); i!=toolchains.end(); ++i) - if(!i->compare(0, prefix.size(), prefix)) - { - string version_str = i->substr(prefix.size()); - string compiler = "gcc"; - if(!isdigit(version_str[0])) - { - unsigned j; - for(j=1; (j version_parts = split(version_str, '.'); - unsigned version = (lexical_cast(version_parts[0])<<8); - if(version_parts.size()>1) - version += lexical_cast(version_parts[1]); - - if(version>latest_version) - { - use_toolchain = *i; - latest_version = version; - } - } - - if(use_toolchain.empty()) - throw runtime_error("No applicable toolchains found"); - - const Architecture &native_arch = builder.get_native_arch(); - - FS::Path tc_archs_dir = toolchains_dir/use_toolchain/"prebuilt"; - string use_arch = native_arch.best_match(list_files(tc_archs_dir)); - - if(use_arch.empty()) - throw runtime_error("No matching toolchain found"); - - bin_dir = toolchains_dir/use_toolchain/"prebuilt"/use_arch/"bin"; -} - -void AndroidNdk::find_platform_dir() -{ - FS::Path platforms_dir = ndk_root/"platforms"; - list platforms = list_files(platforms_dir); - - string use_platform; - unsigned highest_level = 0; - for(list::const_iterator i=platforms.begin(); i!=platforms.end(); ++i) - if(!i->compare(0, 8, "android-")) - { - unsigned level = lexical_cast(i->substr(8)); - if(level>highest_level) - { - use_platform = *i; - highest_level = level; - } - } - - if(use_platform.empty()) - throw runtime_error("No applicable platforms found"); - - list platform_archs = list_filtered(platforms_dir/use_platform, "^arch-"); - for(list::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()) - throw runtime_error("No matching platform found"); - - platform_sysroot = platforms_dir/use_platform/use_arch; -}