summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2016-10-08 10:33:54 +0900
committerGitHub <[email protected]>2016-10-08 10:33:54 +0900
commit364761f4734ebb67c0e62531be5f1805ae9ceee6 (patch)
tree080cd7900366a033d561695ffd7c91815dc9c170
parent2d335daeeb1d50402041041c7a3531674a2e735a (diff)
parent5d2795c00d5f39c71ac0130b7befd276a2b68ee7 (diff)
downloadmruby-364761f4734ebb67c0e62531be5f1805ae9ceee6.tar.gz
mruby-364761f4734ebb67c0e62531be5f1805ae9ceee6.zip
Merge pull request #3222 from AltimitSystems/android.rake-ndk-clang
Android mips/mips64 support
-rw-r--r--tasks/toolchains/android.rake57
1 files changed, 34 insertions, 23 deletions
diff --git a/tasks/toolchains/android.rake b/tasks/toolchains/android.rake
index 376185762..61eeda8fd 100644
--- a/tasks/toolchains/android.rake
+++ b/tasks/toolchains/android.rake
@@ -5,9 +5,12 @@ class MRuby::Toolchain::Android
DEFAULT_TOOLCHAIN = :clang
DEFAULT_NDK_HOMES = %w{
- /usr/local/opt/android-ndk
/usr/local/opt/android-sdk/ndk-bundle
+ /usr/local/opt/android-ndk
%LOCALAPPDATA%/Android/android-sdk/ndk-bundle
+ %LOCALAPPDATA%/Android/android-ndk
+ ~/Library/Android/sdk/ndk-bundle
+ ~/Library/Android/ndk
}
TOOLCHAINS = [:clang] # TODO : Add gcc support
@@ -15,7 +18,8 @@ class MRuby::Toolchain::Android
ARCHITECTURES = %w{
armeabi armeabi-v7a arm64-v8a
x86 x86_64
- } # TODO : Add mips mips64 support
+ mips mips64
+ }
class AndroidNDKHomeNotFound < StandardError
def message
@@ -56,26 +60,6 @@ Set ANDROID_PLATFORM environment variable or set :platform parameter
when /mips/ then 'mipsel-linux-android-'
end + command
- prefix = case arch
- when /armeabi/ then 'arm-linux-androideabi-'
- when /arm64-v8a/ then 'aarch64-linux-android-'
- when /x86_64/ then 'x86_64-'
- when /x86/ then 'x86-'
- when /mips64/ then 'mips64el-linux-android-'
- when /mips/ then 'mipsel-linux-android-'
- end
-
- test = case arch
- when /armeabi/ then 'arm-linux-androideabi-*'
- when /arm64-v8a/ then 'aarch64-linux-android-*'
- when /x86_64/ then 'x86_64-*'
- when /x86/ then 'x86-*'
- when /mips64/ then 'mips64el-linux-android-*'
- when /mips/ then 'mipsel-linux-android-*'
- end
-
- gcc_toolchain_version = Dir[home_path.join('toolchains', test)].map{|t| t.match(/-(\d+\.\d+)$/); $1.to_f }.max
- gcc_toolchain_path = home_path.join('toolchains', prefix + gcc_toolchain_version.to_s, 'prebuilt', host_platform)
gcc_toolchain_path.join('bin', command).to_s
end
end
@@ -92,6 +76,7 @@ Set ANDROID_PLATFORM environment variable or set :platform parameter
DEFAULT_NDK_HOMES.find { |path|
path.gsub! '%LOCALAPPDATA%', ENV['LOCALAPPDATA'] || '%LOCALAPPDATA%'
path.gsub! '\\', '/'
+ path.gsub! '~', Dir.home || '~'
File.directory?(path)
} || raise(AndroidNDKHomeNotFound)
)
@@ -108,6 +93,32 @@ Set ANDROID_PLATFORM environment variable or set :platform parameter
end
end
+ def gcc_toolchain_path
+ if @gcc_toolchain_path === nil then
+ prefix = case arch
+ when /armeabi/ then 'arm-linux-androideabi-'
+ when /arm64-v8a/ then 'aarch64-linux-android-'
+ when /x86_64/ then 'x86_64-'
+ when /x86/ then 'x86-'
+ when /mips64/ then 'mips64el-linux-android-'
+ when /mips/ then 'mipsel-linux-android-'
+ end
+
+ test = case arch
+ when /armeabi/ then 'arm-linux-androideabi-*'
+ when /arm64-v8a/ then 'aarch64-linux-android-*'
+ when /x86_64/ then 'x86_64-*'
+ when /x86/ then 'x86-*'
+ when /mips64/ then 'mips64el-linux-android-*'
+ when /mips/ then 'mipsel-linux-android-*'
+ end
+
+ gcc_toolchain_version = Dir[home_path.join('toolchains', test)].map{|t| t.match(/-(\d+\.\d+)$/); $1.to_f }.max
+ @gcc_toolchain_path = home_path.join('toolchains', prefix + gcc_toolchain_version.to_s, 'prebuilt', host_platform)
+ end
+ @gcc_toolchain_path
+ end
+
def host_platform
@host_platform ||= case RUBY_PLATFORM
when /cygwin|mswin|mingw|bccwin|wince|emx/i
@@ -195,7 +206,7 @@ Set ANDROID_PLATFORM environment variable or set :platform parameter
flags += %W(-D__android__ --sysroot="#{sysroot}")
case toolchain
when :clang
- flags += %W(-gcc-toolchain #{toolchain_path.to_s})
+ flags += %W(-gcc-toolchain "#{gcc_toolchain_path.to_s}")
case arch
when /armeabi-v7a/ then flags += %W(-target armv7-none-linux-androideabi)
when /armeabi/ then flags += %W(-target armv5te-none-linux-androideabi)