From 324231a733e543d2446c9f123ef6acea67539ca0 Mon Sep 17 00:00:00 2001 From: Felix Jones Date: Thu, 16 Feb 2017 15:02:10 +0000 Subject: Android toolchain separated target architecture compile flags (ctarget) from shared compile flags (cflags). Added support for custom mfpu and float-abi switches for the armeabi-v7a target. --- tasks/toolchains/android.rake | 78 ++++++++++++++++++++++++++++++++----------- 1 file changed, 59 insertions(+), 19 deletions(-) diff --git a/tasks/toolchains/android.rake b/tasks/toolchains/android.rake index 7759a3f9c..e69dbf5a6 100644 --- a/tasks/toolchains/android.rake +++ b/tasks/toolchains/android.rake @@ -186,6 +186,22 @@ Set ANDROID_PLATFORM environment variable or set :platform parameter @platform end + def armeabi_v7a_mfpu + @armeabi_v7a_mfpu ||= (params[:mfpu] || 'vfpv3-d16').to_s + end + + def armeabi_v7a_mfloat_abi + @armeabi_v7a_mfloat_abi ||= (params[:mfloat_abi] || 'softfp').to_s + end + + def no_warn_mismatch + if %W(soft softfp).include? armeabi_v7a_mfloat_abi + '' + else + ',--no-warn-mismatch' + end + end + def cc case toolchain when :gcc then bin_gcc('gcc') @@ -200,36 +216,56 @@ Set ANDROID_PLATFORM environment variable or set :platform parameter end end - def cflags + def ctarget flags = [] - flags += %W(-MMD -MP) - flags += %W(-D__android__ -DANDROID --sysroot="#{sysroot}") case toolchain when :gcc case arch - 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 /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 /x86_64/ then flags += %W(-march=x86-64) when /x86/ then flags += %W(-march=i686) - when /mips64/ then flags += %W(-march=mips64r6 -fmessage-length=0 -fpic) - when /mips/ then flags += %W(-march=mips32 -fmessage-length=0 -fpic) + when /mips64/ then flags += %W(-march=mips64r6) + when /mips/ then flags += %W(-march=mips32) 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 -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) + when /armeabi-v7a/ then flags += %W(-target armv7-none-linux-androideabi) + 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) + when /x86/ then flags += %W(-target i686-none-linux-android) + when /mips64/ then flags += %W(-target mips64el-none-linux-android) + when /mips/ then flags += %W(-target mipsel-none-linux-android) 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) + + case arch + when /armeabi-v7a/ then flags += %W(-mfpu=#{armeabi_v7a_mfpu} -mfloat-abi=#{armeabi_v7a_mfloat_abi}) + when /armeabi/ then flags += %W(-mtune=xscale -msoft-float) + when /arm64-v8a/ then flags += %W() + when /x86_64/ then flags += %W() + when /x86/ then flags += %W() + when /mips64/ then flags += %W(-fmessage-length=0) + when /mips/ then flags += %W(-fmessage-length=0) + end + + flags + end + + def cflags + flags = [] + + flags += %W(-MMD -MP -D__android__ -DANDROID --sysroot="#{sysroot}") + flags += ctarget + case toolchain + when :gcc + when :clang + flags += %W(-gcc-toolchain "#{gcc_toolchain_path.to_s}" -Wno-invalid-command-line-argument -Wno-unused-command-line-argument) + end + flags += %W(-fpic -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes) flags end @@ -246,10 +282,14 @@ Set ANDROID_PLATFORM environment variable or set :platform parameter flags = [] case toolchain + when :gcc + case arch + when /armeabi-v7a/ then flags += %W(-Wl#{no_warn_mismatch}) + 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 -Wl,--fix-cortex-a8) + when /armeabi-v7a/ then flags += %W(-target armv7-none-linux-androideabi -Wl,--fix-cortex-a8#{no_warn_mismatch}) 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) -- cgit v1.2.3 From fd08e0ea3aeeef673d3377b359ce97c41c187049 Mon Sep 17 00:00:00 2001 From: Felix Jones Date: Thu, 16 Feb 2017 15:07:18 +0000 Subject: Added example build script for Android armeabi-v7a NEON hardware FPU --- .../build_config_android_armeabi_v7a_neon_hard.rb | 28 ++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 examples/targets/build_config_android_armeabi_v7a_neon_hard.rb diff --git a/examples/targets/build_config_android_armeabi_v7a_neon_hard.rb b/examples/targets/build_config_android_armeabi_v7a_neon_hard.rb new file mode 100644 index 000000000..3788bba7f --- /dev/null +++ b/examples/targets/build_config_android_armeabi_v7a_neon_hard.rb @@ -0,0 +1,28 @@ +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-v7a-neon-hard') do |conf| + params = { + :arch => 'armeabi-v7a', + :mfpu => 'neon', + :mfloat_abi => 'hard', + :platform => 'android-24', + :toolchain => :clang, + } + toolchain :android, params + + conf.gembox 'default' +end -- cgit v1.2.3