summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-02-15 10:30:27 +0900
committerGitHub <[email protected]>2017-02-15 10:30:27 +0900
commit0376d4d4c63140abfb45d119514a7049d286c141 (patch)
treec14e915e205192f8f292cc775e24ec83a2a46c02
parentdd24f9f5cc6cc878ae00cf96ce08ae1486d8c0cb (diff)
parent5395dbfb3a1f424c6adc37b7d73d9def37e9e227 (diff)
downloadmruby-0376d4d4c63140abfb45d119514a7049d286c141.tar.gz
mruby-0376d4d4c63140abfb45d119514a7049d286c141.zip
Merge pull request #3455 from crimsonwoods/fix-android-build-script
Update android build script.
-rw-r--r--examples/targets/build_config_android_arm64-v8a.rb26
-rw-r--r--examples/targets/build_config_android_armeabi.rb26
-rw-r--r--tasks/toolchains/android.rake51
3 files changed, 93 insertions, 10 deletions
diff --git a/examples/targets/build_config_android_arm64-v8a.rb b/examples/targets/build_config_android_arm64-v8a.rb
new file mode 100644
index 000000000..6188c13ec
--- /dev/null
+++ b/examples/targets/build_config_android_arm64-v8a.rb
@@ -0,0 +1,26 @@
+MRuby::Build.new do |conf|
+
+ # Gets set by the VS command prompts.
+ if ENV['VisualStudioVersion'] || ENV['VSINSTALLDIR']
+ toolchain :visualcpp
+ else
+ toolchain :gcc
+ end
+
+ enable_debug
+
+ # include the default GEMs
+ conf.gembox 'default'
+end
+
+# Requires Android NDK r13 or later.
+MRuby::CrossBuild.new('android-arm64-v8a') do |conf|
+ params = {
+ :arch => 'arm64-v8a',
+ :platform => 'android-24',
+ :toolchain => :clang,
+ }
+ toolchain :android, params
+
+ conf.gembox 'default'
+end
diff --git a/examples/targets/build_config_android_armeabi.rb b/examples/targets/build_config_android_armeabi.rb
new file mode 100644
index 000000000..b7eb33a92
--- /dev/null
+++ b/examples/targets/build_config_android_armeabi.rb
@@ -0,0 +1,26 @@
+MRuby::Build.new do |conf|
+
+ # Gets set by the VS command prompts.
+ if ENV['VisualStudioVersion'] || ENV['VSINSTALLDIR']
+ toolchain :visualcpp
+ else
+ toolchain :gcc
+ end
+
+ enable_debug
+
+ # include the default GEMs
+ conf.gembox 'default'
+end
+
+# Requires Android NDK r13 or later.
+MRuby::CrossBuild.new('android-armeabi') do |conf|
+ params = {
+ :arch => 'armeabi',
+ :platform => 'android-24',
+ :toolchain => :clang,
+ }
+ toolchain :android, params
+
+ conf.gembox 'default'
+end
diff --git a/tasks/toolchains/android.rake b/tasks/toolchains/android.rake
index 0cc60a7a3..7759a3f9c 100644
--- a/tasks/toolchains/android.rake
+++ b/tasks/toolchains/android.rake
@@ -203,23 +203,53 @@ Set ANDROID_PLATFORM environment variable or set :platform parameter
def cflags
flags = []
- flags += %W(-D__android__ --sysroot="#{sysroot}")
+ flags += %W(-MMD -MP)
+ flags += %W(-D__android__ -DANDROID --sysroot="#{sysroot}")
case toolchain
when :gcc
- flags += %W(-mandroid)
case arch
- when /armeabi-v7a/ then flags += %W(-march=armv7-a)
- when /armeabi/ then flags += %W(-march=armv5te)
- when /arm64-v8a/ then flags += %W(-march=armv8-a)
+ when /armeabi-v7a/ then flags += %W(-march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp -fpic)
+ when /armeabi/ then flags += %W(-march=armv5te -mtune=xscale -msoft-float -fpic)
+ when /arm64-v8a/ then flags += %W(-march=armv8-a -fpic)
when /x86_64/ then flags += %W(-march=x86-64)
when /x86/ then flags += %W(-march=i686)
- when /mips64/ then flags += %W(-march=mips64)
- when /mips/ then flags += %W(-march=mips32)
+ when /mips64/ then flags += %W(-march=mips64r6 -fmessage-length=0 -fpic)
+ when /mips/ then flags += %W(-march=mips32 -fmessage-length=0 -fpic)
end
when :clang
flags += %W(-gcc-toolchain "#{gcc_toolchain_path.to_s}")
case arch
- when /armeabi-v7a/ then flags += %W(-target armv7-none-linux-androideabi)
+ when /armeabi-v7a/ then flags += %W(-target armv7-none-linux-androideabi -fpic)
+ when /armeabi/ then flags += %W(-target armv5te-none-linux-androideabi -fpic)
+ when /arm64-v8a/ then flags += %W(-target aarch64-none-linux-android -fpic)
+ when /x86_64/ then flags += %W(-target x86_64-none-linux-android -fPIC)
+ when /x86/ then flags += %W(-target i686-none-linux-android -fPIC)
+ when /mips64/ then flags += %W(-target mips64el-none-linux-android -fmessage-length=0 -fpic)
+ when /mips/ then flags += %W(-target mipsel-none-linux-android -fmessage-length=0 -fpic)
+ end
+ flags += %W(-Wno-invalid-command-line-argument -Wno-unused-command-line-argument)
+ end
+ flags += %W(-ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes)
+
+ flags
+ end
+
+ def ldflags
+ flags = []
+
+ flags += %W(--sysroot="#{sysroot}")
+
+ flags
+ end
+
+ def ldflags_before_libraries
+ flags = []
+
+ case toolchain
+ when :clang
+ flags += %W(-gcc-toolchain "#{gcc_toolchain_path.to_s}")
+ case arch
+ when /armeabi-v7a/ then flags += %W(-target armv7-none-linux-androideabi -Wl,--fix-cortex-a8)
when /armeabi/ then flags += %W(-target armv5te-none-linux-androideabi)
when /arm64-v8a/ then flags += %W(-target aarch64-none-linux-android)
when /x86_64/ then flags += %W(-target x86_64-none-linux-android)
@@ -228,10 +258,10 @@ Set ANDROID_PLATFORM environment variable or set :platform parameter
when /mips/ then flags += %W(-target mipsel-none-linux-android)
end
end
+ flags += %W(-no-canonical-prefixes)
flags
end
-
end
MRuby::Toolchain.new(:android) do |conf, params|
@@ -246,5 +276,6 @@ MRuby::Toolchain.new(:android) do |conf, params|
conf.archiver.command = android.ar
conf.linker.command = android.cc
- conf.linker.flags = []
+ conf.linker.flags = android.ldflags
+ conf.linker.flags_before_libraries = android.ldflags_before_libraries
end