├── README.md └── mrbgem.rake /README.md: -------------------------------------------------------------------------------- 1 | # Cross Compile on Mac OSX for mruby 2 | Cross compile osx, linux or win32 binary of mruby on Mac OSX. 3 | 4 | ## Donwload and install by mrbgems 5 | ### Donwload mrbgem 6 | ``` 7 | git clone https://github.com/matsumoto-r/mruby-cross-compile-on-mac-osx.git 8 | ``` 9 | 10 | ### add conf.gem line to `build_config.rb` 11 | ```ruby 12 | MRuby::Build.new do |conf| 13 | 14 | # ... (snip) ... 15 | 16 | # the last line of conf.gem 17 | load '/path/to/mruby-cross-compile-on-mac-osx/mrbgem.rake' 18 | end 19 | ``` 20 | 21 | ### Download and Install Cross Compiler on Mac OSX 22 | - [Cross Compiling for Win32 on MacOS X](http://crossgcc.rts-software.org/doku.php?id=compiling_for_win32) 23 | - [Cross Compiling for Linux 32 and Linux 64 on MacOS X](http://crossgcc.rts-software.org/doku.php?id=compiling_for_linux) 24 | 25 | ### Cross Compile with MRUBY_CROSS_OS Env 26 | #### for linux 27 | ``` 28 | rake MRUBY_CROSS_OS=linux 29 | ``` 30 | #### for osx 31 | ``` 32 | rake MRUBY_CROSS_OS=osx 33 | ``` 34 | #### for win32 35 | ``` 36 | rake MRUBY_CROSS_OS=win32 37 | ``` 38 | 39 | then, generate mruby binaries into `mruby/build/{linux,osx,win32}/` 40 | 41 | 42 | # License 43 | under the MIT License: 44 | 45 | * http://www.opensource.org/licenses/mit-license.php 46 | 47 | -------------------------------------------------------------------------------- /mrbgem.rake: -------------------------------------------------------------------------------- 1 | MRuby::Gem::Specification.new('mruby-cross-compile-on-mac-osx') do |spec| 2 | spec.license = 'MIT' 3 | spec.authors = 'MATSUMOTO Ryosuke' 4 | spec.version = '0.0.1' 5 | spec.summary = 'Cross compiled osx, linux, or win32 binary on Max OSX' 6 | end 7 | 8 | # TODO: support arm arch 9 | support_arch = %w[386 amd64] 10 | 11 | if ENV['MRUBY_CROSS_OS'] 12 | conf_name = ENV['MRUBY_CROSS_OS'] 13 | if ENV['MRUBY_CROSS_ARCH'] 14 | unless support_arch.include? ENV['MRUBY_CROSS_ARCH'] 15 | fail "Don't support archtecture: #{ENV['MRUBY_CROSS_ARCH']} 16 | Support architecture for linux: #{support_arch.to_s}" 17 | end 18 | conf_name += '-' + ENV['MRUBY_CROSS_ARCH'] 19 | end 20 | end 21 | 22 | # for OSX 23 | if ENV['MRUBY_CROSS_OS'] == "osx" 24 | MRuby::CrossBuild.new('osx') do |conf| 25 | 26 | toolchain :gcc 27 | 28 | MRuby.targets["host"].gems.each do |mrbgem| 29 | conf.gem mrbgem.dir 30 | end 31 | 32 | end 33 | end 34 | 35 | # for linux amd64 by default 36 | if ENV['MRUBY_CROSS_OS'] == "linux" 37 | 38 | MRuby::CrossBuild.new(conf_name) do |conf| 39 | 40 | toolchain :gcc 41 | 42 | url = 'http://crossgcc.rts-software.org/doku.php?id=compiling_for_linux' 43 | 44 | # for amr64 by default 45 | cgcc = "/usr/local/gcc-4.8.1-for-linux64/bin/x86_64-pc-linux-gcc" 46 | car = "/usr/local/gcc-4.8.1-for-linux64/bin/x86_64-pc-linux-ar" 47 | 48 | if ENV['MRUBY_CROSS_ARCH'] == "386" 49 | cgcc = "/usr/local/gcc-4.8.1-for-linux32/bin/i586-pc-linux-gcc" 50 | car = "/usr/local/gcc-4.8.1-for-linux32/bin/i586-pc-linux-ar" 51 | elsif ENV['MRUBY_CROSS_ARCH'] == "amd64" 52 | cgcc = "/usr/local/gcc-4.8.1-for-linux64/bin/x86_64-pc-linux-gcc" 53 | car = "/usr/local/gcc-4.8.1-for-linux64/bin/x86_64-pc-linux-ar" 54 | end 55 | 56 | fail "Can't find #{cgcc}. Please download compiler from #{url}" unless File.exist? cgcc 57 | fail "Can't find #{car}. Please download compiler from #{url}" unless File.exist? car 58 | 59 | MRuby.targets["host"].gems.each do |mrbgem| 60 | conf.gem mrbgem.dir 61 | end 62 | 63 | conf.cc.command = cgcc 64 | conf.cc.flags << "-static" 65 | conf.linker.command = cgcc 66 | conf.archiver.command = car 67 | 68 | end 69 | end 70 | 71 | # for win32 72 | if ENV['MRUBY_CROSS_OS'] == "win32" 73 | MRuby::CrossBuild.new('win32') do |conf| 74 | 75 | toolchain :gcc 76 | 77 | url = 'http://crossgcc.rts-software.org/doku.php?id=compiling_for_win32' 78 | cgcc = "/usr/local/gcc-4.8.0-qt-4.8.4-for-mingw32/win32-gcc/bin/i586-mingw32-gcc" 79 | car = "/usr/local/gcc-4.8.0-qt-4.8.4-for-mingw32/win32-gcc/bin/i586-mingw32-ar" 80 | 81 | fail "Can't find #{cgcc}. Please download compiler from #{url}" unless File.exist? cgcc 82 | fail "Can't find #{car}. Please download compiler from #{url}" unless File.exist? car 83 | 84 | MRuby.targets["host"].gems.each do |mrbgem| 85 | conf.gem mrbgem.dir 86 | end 87 | 88 | conf.cc.command = cgcc 89 | conf.linker.command = cgcc 90 | conf.archiver.command = car 91 | conf.exts.executable = ".exe" 92 | 93 | end 94 | end 95 | --------------------------------------------------------------------------------