mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Merge pull request #3222 from AltimitSystems/android.rake-ndk-clang
Android mips/mips64 support
This commit is contained in:
@@ -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,6 +60,41 @@ Set ANDROID_PLATFORM environment variable or set :platform parameter
|
||||
when /mips/ then 'mipsel-linux-android-'
|
||||
end + command
|
||||
|
||||
gcc_toolchain_path.join('bin', command).to_s
|
||||
end
|
||||
end
|
||||
|
||||
def bin(command)
|
||||
command = command.to_s
|
||||
toolchain_path.join('bin', command).to_s
|
||||
end
|
||||
|
||||
def home_path
|
||||
@home_path ||= Pathname(
|
||||
params[:ndk_home] ||
|
||||
ENV['ANDROID_NDK_HOME'] ||
|
||||
DEFAULT_NDK_HOMES.find { |path|
|
||||
path.gsub! '%LOCALAPPDATA%', ENV['LOCALAPPDATA'] || '%LOCALAPPDATA%'
|
||||
path.gsub! '\\', '/'
|
||||
path.gsub! '~', Dir.home || '~'
|
||||
File.directory?(path)
|
||||
} || raise(AndroidNDKHomeNotFound)
|
||||
)
|
||||
end
|
||||
|
||||
def toolchain
|
||||
@toolchain ||= params.fetch(:toolchain){ DEFAULT_TOOLCHAIN }
|
||||
end
|
||||
|
||||
def toolchain_path
|
||||
@toolchain_path ||= case toolchain
|
||||
when :clang
|
||||
home_path.join('toolchains', 'llvm' , 'prebuilt', host_platform)
|
||||
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-'
|
||||
@@ -75,37 +114,9 @@ Set ANDROID_PLATFORM environment variable or set :platform parameter
|
||||
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
|
||||
@gcc_toolchain_path = home_path.join('toolchains', prefix + gcc_toolchain_version.to_s, 'prebuilt', host_platform)
|
||||
end
|
||||
end
|
||||
|
||||
def bin(command)
|
||||
command = command.to_s
|
||||
toolchain_path.join('bin', command).to_s
|
||||
end
|
||||
|
||||
def home_path
|
||||
@home_path ||= Pathname(
|
||||
params[:ndk_home] ||
|
||||
ENV['ANDROID_NDK_HOME'] ||
|
||||
DEFAULT_NDK_HOMES.find { |path|
|
||||
path.gsub! '%LOCALAPPDATA%', ENV['LOCALAPPDATA'] || '%LOCALAPPDATA%'
|
||||
path.gsub! '\\', '/'
|
||||
File.directory?(path)
|
||||
} || raise(AndroidNDKHomeNotFound)
|
||||
)
|
||||
end
|
||||
|
||||
def toolchain
|
||||
@toolchain ||= params.fetch(:toolchain){ DEFAULT_TOOLCHAIN }
|
||||
end
|
||||
|
||||
def toolchain_path
|
||||
@toolchain_path ||= case toolchain
|
||||
when :clang
|
||||
home_path.join('toolchains', 'llvm' , 'prebuilt', host_platform)
|
||||
end
|
||||
@gcc_toolchain_path
|
||||
end
|
||||
|
||||
def host_platform
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user