diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2020-03-08 19:07:32 +0900 |
|---|---|---|
| committer | GitHub <[email protected]> | 2020-03-08 19:07:32 +0900 |
| commit | 5bf5a2cc6e9e78cb84118c08dd9498bbe854e7cb (patch) | |
| tree | 29dd4d453a56ab0a091b1996f11a8b92727e885f | |
| parent | 1cc270f0ccad71356bc1cdee7ffc7db4bf106afa (diff) | |
| parent | e15e6e761edc33d9e1b315738bdc788654e06428 (diff) | |
| download | mruby-5bf5a2cc6e9e78cb84118c08dd9498bbe854e7cb.tar.gz mruby-5bf5a2cc6e9e78cb84118c08dd9498bbe854e7cb.zip | |
Merge pull request #4953 from Reckordp/BuildAndroid
Some rule to CrossBuild Android
| -rw-r--r-- | AUTHORS | 2 | ||||
| -rw-r--r-- | mrbgems/mruby-io/mrbgem.rake | 18 | ||||
| -rw-r--r-- | mrbgems/mruby-socket/mrbgem.rake | 16 | ||||
| -rw-r--r-- | tasks/toolchains/android.rake | 47 |
4 files changed, 75 insertions, 8 deletions
@@ -43,5 +43,3 @@ of this list. YAMAMOTO Masaya KOBAYASHI Shuji RIZAL Reckordp - - diff --git a/mrbgems/mruby-io/mrbgem.rake b/mrbgems/mruby-io/mrbgem.rake index bd20f6d20..80835df9c 100644 --- a/mrbgems/mruby-io/mrbgem.rake +++ b/mrbgems/mruby-io/mrbgem.rake @@ -7,9 +7,21 @@ MRuby::Gem::Specification.new('mruby-io') do |spec| case RUBY_PLATFORM when /mingw|mswin|msys/ - spec.linker.libraries += ['Ws2_32'] - #spec.cc.include_paths += ["C:/Windows/system/include"] - spec.linker.library_paths += ["C:/Windows/system"] + really_for_window = true + + if build.kind_of?(MRuby::CrossBuild) + if %w(x86_64-w64-mingw32 i686-w64-mingw32).include?(build.host_target) + really_for_window = true + else + really_for_window = false + end + end + + if really_for_window + spec.linker.libraries += ['Ws2_32'] + #spec.cc.include_paths += ["C:/Windows/system/include"] + spec.linker.library_paths += ["C:/Windows/system"] + end end if build.kind_of?(MRuby::CrossBuild) && %w(x86_64-w64-mingw32 i686-w64-mingw32).include?(build.host_target) spec.linker.libraries += ['ws2_32'] diff --git a/mrbgems/mruby-socket/mrbgem.rake b/mrbgems/mruby-socket/mrbgem.rake index 24d6f953d..c538433e9 100644 --- a/mrbgems/mruby-socket/mrbgem.rake +++ b/mrbgems/mruby-socket/mrbgem.rake @@ -8,8 +8,20 @@ MRuby::Gem::Specification.new('mruby-socket') do |spec| # If Windows, use winsock if ( /mswin|mingw|win32/ =~ RUBY_PLATFORM ) then - spec.linker.libraries << "wsock32" - spec.linker.libraries << "ws2_32" + really_for_window = true + + if build.kind_of?(MRuby::CrossBuild) + if %w(x86_64-w64-mingw32 i686-w64-mingw32).include?(build.host_target) + really_for_window = true + else + really_for_window = false + end + end + + if really_for_window + spec.linker.libraries << "wsock32" + spec.linker.libraries << "ws2_32" + end end spec.add_dependency('mruby-io', :core => 'mruby-io') diff --git a/tasks/toolchains/android.rake b/tasks/toolchains/android.rake index 0ac4d000c..2368b93b5 100644 --- a/tasks/toolchains/android.rake +++ b/tasks/toolchains/android.rake @@ -10,6 +10,7 @@ class MRuby::Toolchain::Android ~/Android/Sdk/ndk-bundle %LOCALAPPDATA%/Android/android-sdk/ndk-bundle %LOCALAPPDATA%/Android/android-ndk + %LOCALAPPDATA%/Android/Sdk/ndk/* ~/Library/Android/sdk/ndk-bundle ~/Library/Android/ndk } @@ -40,6 +41,19 @@ Set ANDROID_PLATFORM environment variable or set :platform parameter end end + class SysrootNotReady < StandardError + def message + <<-EOM +Couldn't find standard header files +Please Move/Copy important file inside + <NDK_HOME>/sysroot/usr/include/ +to + <NDK_HOME>/platforms/<ANDROID_VERSION>/<ARCH>/usr/include/ +Higher NDK version will be use. + EOM + end + end + attr_reader :params def initialize(params) @@ -74,6 +88,25 @@ Set ANDROID_PLATFORM environment variable or set :platform parameter path.gsub! '%LOCALAPPDATA%', ENV['LOCALAPPDATA'] || '%LOCALAPPDATA%' path.gsub! '\\', '/' path.gsub! '~', Dir.home || '~' + path.gsub!('*') do + next nil unless path[-1] == "*" + dirs = Dir.glob(path).collect do |d| + m = d.match(/(\d+)\.(\d+)\.(\d+)$/) + m ? [m[1], m[2], m[3]].collect { |v| v.to_i } : nil + end + dirs.compact! + dirs.sort! do |before, after| + f = 0 + if (f = (after.first <=> before.first)) != 0 + next f + elsif (f = (after[1] <=> before[1])) != 0 + next f + else + next after.last <=> before.last + end + end + dirs.empty? ? nil.to_s : dirs.first.join(".") + end File.directory?(path) } || raise(AndroidNDKHomeNotFound) ) @@ -146,7 +179,8 @@ Set ANDROID_PLATFORM environment variable or set :platform parameter end def sysroot - @sysroot ||= home_path.join('platforms', platform, + return @sysroot if @sysroot + sysroot_path = home_path.join('platforms', platform, case arch when /armeabi/ then 'arch-arm' when /arm64-v8a/ then 'arch-arm64' @@ -156,6 +190,11 @@ Set ANDROID_PLATFORM environment variable or set :platform parameter when /mips/ then 'arch-mips' end ).to_s + if Dir.exist?(File.join(sysroot_path, "usr", "include")) + return @sysroot = sysroot_path + else + raise(SysrootNotReady) + end end def platform @@ -259,6 +298,12 @@ Set ANDROID_PLATFORM environment variable or set :platform parameter def cflags flags = [] + case RUBY_PLATFORM + when /mswin|mingw|win32/ + # Build for Android dont need window flag + flags += %W(-U_WIN32 -U_WIN64) + end + flags += %W(-MMD -MP -D__android__ -DANDROID --sysroot="#{sysroot}") flags += ctarget case toolchain |
