mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
add a new feature to select the target Android platform.
This commit is contained in:
@@ -14,12 +14,15 @@ MRuby::Toolchain.new(:androideabi) do |conf|
|
||||
DEFAULT_ANDROID_TOOLCHAIN = 'gcc'
|
||||
DEFAULT_ANDROID_TARGET_ARCH = 'arm'
|
||||
DEFAULT_ANDROID_TARGET_ARCH_ABI = 'armeabi'
|
||||
DEFAULT_ANDROID_TARGET_PLATFORM = 'android-14'
|
||||
DEFAULT_GCC_VERSION = '4.6'
|
||||
DEFAULT_CLANG_VERSION = '3.1'
|
||||
GCC_COMMON_CFLAGS = %W(-ffunction-sections -funwind-tables -fstack-protector)
|
||||
GCC_COMMON_LDFLAGS = %W()
|
||||
|
||||
# An environment variable 'ANDROID_STANDALONE_TOOLCHAIN' must be set a path to toolchains.
|
||||
# 'ANDROID_STANDALONE_TOOLCHAIN' or 'ANDROID_NDK_HOME' must be set.
|
||||
ANDROID_STANDALONE_TOOLCHAIN = ENV['ANDROID_STANDALONE_TOOLCHAIN']
|
||||
SYSROOT = ENV['ANDROID_STANDALONE_TOOLCHAIN'] + '/sysroot'
|
||||
ANDROID_NDK_HOME = ENV['ANDROID_NDK_HOME']
|
||||
|
||||
ANDROID_TARGET_ARCH = ENV['ANDROID_TARGET_ARCH'] || DEFAULT_ANDROID_TARGET_ARCH
|
||||
ANDROID_TOOLCHAIN = ENV['ANDROID_TOOLCHAIN'] || DEFAULT_ANDROID_TOOLCHAIN
|
||||
@@ -36,11 +39,51 @@ MRuby::Toolchain.new(:androideabi) do |conf|
|
||||
# Notify error.
|
||||
end
|
||||
|
||||
if ANDROID_STANDALONE_TOOLCHAIN == nil then
|
||||
if RUBY_PLATFORM.include?('darwin') then
|
||||
HOST_PLATFORM = 'darwin-x86'
|
||||
elsif RUBY_PLATFORM.include('linux') then
|
||||
HOST_PLATFORM = 'linux-x86'
|
||||
elsif RUBY_PLATFORM.include('win') then
|
||||
HOST_PLATFORM = 'windows'
|
||||
else
|
||||
# Unknown host platform.
|
||||
end
|
||||
|
||||
ANDROID_TARGET_PLATFORM = ENV['ANDROID_TARGET_PLATFORM'] || DEFAULT_ANDROID_TARGET_PLATFORM
|
||||
|
||||
path_to_toolchain = ANDROID_NDK_HOME + '/toolchains/'
|
||||
path_to_sysroot = ANDROID_NDK_HOME + '/platforms/' + ANDROID_TARGET_PLATFORM
|
||||
if ANDROID_TOOLCHAIN.downcase == 'gcc' then
|
||||
case ANDROID_TARGET_ARCH.downcase
|
||||
when 'arch-arm', 'arm' then
|
||||
path_to_toolchain += 'arm-linux-androideabi-'
|
||||
path_to_sysroot += '/arch-arm'
|
||||
when 'arch-x86', 'x86' then
|
||||
path_to_toolchain += 'x86-'
|
||||
path_to_sysroot += '/arch-x86'
|
||||
when 'arch-mips', 'mips' then
|
||||
path_to_toolchain += 'mipsel-linux-android-'
|
||||
path_to_sysroot += '/arch-mips'
|
||||
else
|
||||
# Any other architecture are not supported by Android NDK.
|
||||
end
|
||||
path_to_toolchain += DEFAULT_GCC_VERSION + '/prebuilt/' + HOST_PLATFORM
|
||||
else
|
||||
path_to_toolchain += 'llvm-' + DEFAULT_CLANG_VERSION + '/prebuilt/' + HOST_PLATFORM
|
||||
end
|
||||
else
|
||||
path_to_toolchain = ANDROID_STANDALONE_TOOLCHAIN
|
||||
path_to_sysroot = ANDROID_STANDALONE_TOOLCHAIN + '/sysroot'
|
||||
end
|
||||
|
||||
SYSROOT = path_to_sysroot
|
||||
|
||||
case ANDROID_TOOLCHAIN.downcase
|
||||
when 'gcc' then
|
||||
ANDROID_CC = ANDROID_STANDALONE_TOOLCHAIN + '/bin/' + toolchain_prefix + 'gcc'
|
||||
ANDROID_LD = ANDROID_STANDALONE_TOOLCHAIN + '/bin/' + toolchain_prefix + 'gcc'
|
||||
ANDROID_AR = ANDROID_STANDALONE_TOOLCHAIN + '/bin/' + toolchain_prefix + 'ar'
|
||||
ANDROID_CC = path_to_toolchain + '/bin/' + toolchain_prefix + 'gcc'
|
||||
ANDROID_LD = path_to_toolchain + '/bin/' + toolchain_prefix + 'gcc'
|
||||
ANDROID_AR = path_to_toolchain + '/bin/' + toolchain_prefix + 'ar'
|
||||
ANDROID_CFLAGS = GCC_COMMON_CFLAGS + %W(-mandroid --sysroot=#{SYSROOT})
|
||||
ANDROID_LDFLAGS = GCC_COMMON_LDFLAGS + %W(-mandroid --sysroot=#{SYSROOT})
|
||||
when 'clang' then
|
||||
|
||||
Reference in New Issue
Block a user