From fdbfeaf533fd75143f5d3af3ec6c585b9da746c4 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Fri, 1 May 2020 07:40:38 +0900 Subject: Build process updated: You have to specify `TARGET` to specify a configuration, e.g. ``` rake TARGET=host-debug all test ``` When you port `mruby` to a new configuration: 1. copy an existing configuration under `target` directory 2. modify the new configuration file 3. build using the new configuration 4. send PR if you please --- Rakefile | 3 +- appveyor_config.rb | 46 ------- build_config.rb | 152 --------------------- examples/targets/build_config_ArduinoDue.rb | 90 ------------ examples/targets/build_config_IntelEdison.rb | 69 ---------- examples/targets/build_config_IntelGalileo.rb | 106 -------------- examples/targets/build_config_RX630.rb | 81 ----------- examples/targets/build_config_android_arm64-v8a.rb | 26 ---- examples/targets/build_config_android_armeabi.rb | 26 ---- .../build_config_android_armeabi_v7a_neon_hard.rb | 28 ---- examples/targets/build_config_chipKITMax32.rb | 86 ------------ examples/targets/build_config_dreamcast_shelf.rb | 108 --------------- lib/mruby/lockfile.rb | 2 +- target/ArduinoDue.rb | 90 ++++++++++++ target/IntelEdison.rb | 69 ++++++++++ target/IntelGalileo.rb | 106 ++++++++++++++ target/RX630.rb | 81 +++++++++++ target/android_arm64-v8a.rb | 26 ++++ target/android_armeabi.rb | 26 ++++ target/android_armeabi_v7a_neon_hard.rb | 28 ++++ target/appveyor.rb | 46 +++++++ target/bench.rb | 11 ++ target/chipKITMax32.rb | 86 ++++++++++++ target/cross-32bit.rb | 13 ++ target/dreamcast_shelf.rb | 108 +++++++++++++++ target/host-debug.rb | 24 ++++ target/host.rb | 98 +++++++++++++ target/travis.rb | 40 ++++++ tasks/benchmark.rake | 6 +- travis_config.rb | 40 ------ 30 files changed, 856 insertions(+), 865 deletions(-) delete mode 100644 appveyor_config.rb delete mode 100644 build_config.rb delete mode 100644 examples/targets/build_config_ArduinoDue.rb delete mode 100644 examples/targets/build_config_IntelEdison.rb delete mode 100644 examples/targets/build_config_IntelGalileo.rb delete mode 100644 examples/targets/build_config_RX630.rb delete mode 100644 examples/targets/build_config_android_arm64-v8a.rb delete mode 100644 examples/targets/build_config_android_armeabi.rb delete mode 100644 examples/targets/build_config_android_armeabi_v7a_neon_hard.rb delete mode 100644 examples/targets/build_config_chipKITMax32.rb delete mode 100644 examples/targets/build_config_dreamcast_shelf.rb create mode 100644 target/ArduinoDue.rb create mode 100644 target/IntelEdison.rb create mode 100644 target/IntelGalileo.rb create mode 100644 target/RX630.rb create mode 100644 target/android_arm64-v8a.rb create mode 100644 target/android_armeabi.rb create mode 100644 target/android_armeabi_v7a_neon_hard.rb create mode 100644 target/appveyor.rb create mode 100644 target/bench.rb create mode 100644 target/chipKITMax32.rb create mode 100644 target/cross-32bit.rb create mode 100644 target/dreamcast_shelf.rb create mode 100644 target/host-debug.rb create mode 100644 target/host.rb create mode 100644 target/travis.rb delete mode 100644 travis_config.rb diff --git a/Rakefile b/Rakefile index ce3da1d9a..6ccdcd958 100644 --- a/Rakefile +++ b/Rakefile @@ -14,7 +14,8 @@ require "mruby-core-ext" require "mruby/build" # load configuration file -MRUBY_CONFIG = (ENV['MRUBY_CONFIG'] && ENV['MRUBY_CONFIG'] != '') ? ENV['MRUBY_CONFIG'] : "#{MRUBY_ROOT}/build_config.rb" +MRUBY_TARGET = ENV['MRUBY_TARGET'] || ENV['TARGET'] || "host" +MRUBY_CONFIG = "#{MRUBY_ROOT}/target/#{MRUBY_TARGET}.rb" load MRUBY_CONFIG # load basic rules diff --git a/appveyor_config.rb b/appveyor_config.rb deleted file mode 100644 index 25745daa8..000000000 --- a/appveyor_config.rb +++ /dev/null @@ -1,46 +0,0 @@ -def setup_option(conf) - conf.cc.flags[0].delete("/Zi") unless ENV['CFLAGS'] - conf.cxx.flags[0].delete("/Zi") unless ENV['CFLAGS'] || ENV['CXXFLAGS'] - conf.linker.flags << "/DEBUG:NONE" unless ENV['LDFLAGS'] -end - -MRuby::Build.new('full-debug') do |conf| - toolchain :visualcpp - enable_debug - - # include all core GEMs - conf.gembox 'full-core' - conf.cc.defines += %w(MRB_GC_STRESS MRB_METHOD_CACHE MRB_ENABLE_DEBUG_HOOK) - setup_option(conf) - - conf.enable_test -end - -MRuby::Build.new do |conf| - toolchain :visualcpp - - # include all core GEMs - conf.gembox 'full-core' - conf.compilers.each do |c| - c.defines += %w(MRB_GC_FIXED_ARENA) - end - setup_option(conf) - conf.enable_bintest - conf.enable_test -end - -MRuby::Build.new('cxx_abi') do |conf| - toolchain :visualcpp - - conf.gembox 'full-core' - conf.compilers.each do |c| - c.defines += %w(MRB_GC_FIXED_ARENA) - end - setup_option(conf) - conf.enable_bintest - conf.enable_test - - enable_cxx_abi - - build_mrbc_exec -end diff --git a/build_config.rb b/build_config.rb deleted file mode 100644 index 254a28ce0..000000000 --- a/build_config.rb +++ /dev/null @@ -1,152 +0,0 @@ -MRuby::Build.new do |conf| - # load specific toolchain settings - - # Gets set by the VS command prompts. - if ENV['VisualStudioVersion'] || ENV['VSINSTALLDIR'] - toolchain :visualcpp - else - toolchain :gcc - end - - # Turn on `enable_debug` for better debugging - # enable_debug - - # Use mrbgems - # conf.gem 'examples/mrbgems/ruby_extension_example' - # conf.gem 'examples/mrbgems/c_extension_example' do |g| - # g.cc.flags << '-g' # append cflags in this gem - # end - # conf.gem 'examples/mrbgems/c_and_ruby_extension_example' - # conf.gem :core => 'mruby-eval' - # conf.gem :mgem => 'mruby-onig-regexp' - # conf.gem :github => 'mattn/mruby-onig-regexp' - # conf.gem :git => 'git@github.com:mattn/mruby-onig-regexp.git', :branch => 'master', :options => '-v' - - # include the default GEMs - conf.gembox 'default' - # C compiler settings - # conf.cc do |cc| - # cc.command = ENV['CC'] || 'gcc' - # cc.flags = [ENV['CFLAGS'] || %w()] - # cc.include_paths = ["#{root}/include"] - # cc.defines = %w() - # cc.option_include_path = %q[-I"%s"] - # cc.option_define = '-D%s' - # cc.compile_options = %Q[%{flags} -MMD -o "%{outfile}" -c "%{infile}"] - # end - - # mrbc settings - # conf.mrbc do |mrbc| - # mrbc.compile_options = "-g -B%{funcname} -o-" # The -g option is required for line numbers - # end - - # Linker settings - # conf.linker do |linker| - # linker.command = ENV['LD'] || 'gcc' - # linker.flags = [ENV['LDFLAGS'] || []] - # linker.flags_before_libraries = [] - # linker.libraries = %w() - # linker.flags_after_libraries = [] - # linker.library_paths = [] - # linker.option_library = '-l%s' - # linker.option_library_path = '-L%s' - # linker.link_options = "%{flags} -o "%{outfile}" %{objs} %{libs}" - # end - - # Archiver settings - # conf.archiver do |archiver| - # archiver.command = ENV['AR'] || 'ar' - # archiver.archive_options = 'rs "%{outfile}" %{objs}' - # end - - # Parser generator settings - # conf.yacc do |yacc| - # yacc.command = ENV['YACC'] || 'bison' - # yacc.compile_options = %q[-o "%{outfile}" "%{infile}"] - # end - - # gperf settings - # conf.gperf do |gperf| - # gperf.command = 'gperf' - # gperf.compile_options = %q[-L ANSI-C -C -p -j1 -i 1 -g -o -t -N mrb_reserved_word -k"1,3,$" "%{infile}" > "%{outfile}"] - # end - - # file extensions - # conf.exts do |exts| - # exts.object = '.o' - # exts.executable = '' # '.exe' if Windows - # exts.library = '.a' - # end - - # file separetor - # conf.file_separator = '/' - - # bintest - # conf.enable_bintest -end - -MRuby::Build.new('host-debug') do |conf| - # load specific toolchain settings - - # 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' - - # C compiler settings - conf.cc.defines = %w(MRB_ENABLE_DEBUG_HOOK) - - # Generate mruby debugger command (require mruby-eval) - conf.gem :core => "mruby-bin-debugger" - - # bintest - # conf.enable_bintest -end - -MRuby::Build.new('test') do |conf| - # Gets set by the VS command prompts. - if ENV['VisualStudioVersion'] || ENV['VSINSTALLDIR'] - toolchain :visualcpp - else - toolchain :gcc - end - - enable_debug - conf.enable_bintest - conf.enable_test - - conf.gembox 'default' -end - -#MRuby::Build.new('bench') do |conf| -# # Gets set by the VS command prompts. -# if ENV['VisualStudioVersion'] || ENV['VSINSTALLDIR'] -# toolchain :visualcpp -# else -# toolchain :gcc -# conf.cc.flags << '-O3' -# end -# -# conf.gembox 'default' -#end - -# Define cross build settings -# MRuby::CrossBuild.new('32bit') do |conf| -# toolchain :gcc -# -# conf.cc.flags << "-m32" -# conf.linker.flags << "-m32" -# -# conf.build_mrbtest_lib_only -# -# conf.gem 'examples/mrbgems/c_and_ruby_extension_example' -# -# conf.test_runner.command = 'env' -# end diff --git a/examples/targets/build_config_ArduinoDue.rb b/examples/targets/build_config_ArduinoDue.rb deleted file mode 100644 index 09646a700..000000000 --- a/examples/targets/build_config_ArduinoDue.rb +++ /dev/null @@ -1,90 +0,0 @@ -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 - -# Cross Compiling configuration for Arduino Due -# http://arduino.cc/en/Main/ArduinoBoardDue -# -# Requires Arduino IDE >= 1.5 -MRuby::CrossBuild.new("ArduinoDue") do |conf| - toolchain :gcc - - # Mac OS X, Arduino IDE <= 1.5.6 - # ARDUINO_PATH = '/Applications/Arduino.app/Contents/Resources/Java' - # Mac OS X, Arduino IDE >= 1.5.7 - # ARDUINO_PATH = '/Applications/Arduino.app/Contents/Java' - # GNU Linux - ARDUINO_PATH = '/opt/arduino' - # Arduino IDE <= 1.5.6 - BIN_PATH = "#{ARDUINO_PATH}/hardware/tools/g++_arm_none_eabi/bin" - # Arduino IDE >= 1.5.7 - # BIN_PATH = "#{ARDUINO_PATH}/hardware/tools/gcc-arm-none-eabi-4.8.3-2014q1/bin" - SAM_PATH = "#{ARDUINO_PATH}/hardware/arduino/sam" - TARGET_PATH = "#{SAM_PATH}/variants/arduino_due_x" - - conf.cc do |cc| - cc.command = "#{BIN_PATH}/arm-none-eabi-gcc" - cc.include_paths << ["#{SAM_PATH}/system/libsam", "#{SAM_PATH}/system/CMSIS/CMSIS/Include/", - "#{SAM_PATH}/system/CMSIS/Device/ATMEL/", - "#{SAM_PATH}/cores/arduino", "#{SAM_PATH}/libraries","#{TARGET_PATH}"] - cc.flags = %w(-g -Os -w -ffunction-sections -fdata-sections -nostdlib --param max-inline-insns-single=500 - -Dprintf=iprintf -mcpu=cortex-m3 -DF_CPU=84000000L -DARDUINO=156 -DARDUINO_SAM_DUE -DARDUINO_ARCH_SAM - -D__SAM3X8E__ -mthumb -DUSB_PID=0x003e -DUSB_VID=0x2341 -DUSBCON -DUSB_MANUFACTURER="Unknown" -DUSB_PRODUCT="Arduino Due") - cc.compile_options = %Q[%{flags} -o "%{outfile}" -c "%{infile}"] - - #configuration for low memory environment - cc.defines << %w(MRB_HEAP_PAGE_SIZE=64) - cc.defines << %w(KHASH_DEFAULT_SIZE=8) - cc.defines << %w(MRB_STR_BUF_MIN_SIZE=20) - cc.defines << %w(MRB_GC_STRESS) - #cc.defines << %w(MRB_DISABLE_STDIO) #if you dont need stdio. - #cc.defines << %w(POOL_PAGE_SIZE=1000) #effective only for use with mruby-eval - end - - conf.cxx do |cxx| - cxx.command = conf.cc.command.dup - cxx.include_paths = conf.cc.include_paths.dup - cxx.flags = conf.cc.flags.dup - cxx.flags << %w(-fno-rtti -fno-exceptions) - cxx.defines = conf.cc.defines.dup - cxx.compile_options = conf.cc.compile_options.dup - end - - conf.archiver do |archiver| - archiver.command = "#{BIN_PATH}/arm-none-eabi-ar" - archiver.archive_options = 'rcs "%{outfile}" %{objs}' - end - - #no executables - conf.bins = [] - - #do not build executable test - conf.build_mrbtest_lib_only - - #disable C++ exception - conf.disable_cxx_exception - - #gems from core - conf.gem :core => "mruby-print" - conf.gem :core => "mruby-math" - conf.gem :core => "mruby-enum-ext" - - #light-weight regular expression - conf.gem :github => "masamitsu-murase/mruby-hs-regexp", :branch => "master" - - #Arduino API - #conf.gem :github =>"kyab/mruby-arduino", :branch => "master" - -end diff --git a/examples/targets/build_config_IntelEdison.rb b/examples/targets/build_config_IntelEdison.rb deleted file mode 100644 index a22f9cfd2..000000000 --- a/examples/targets/build_config_IntelEdison.rb +++ /dev/null @@ -1,69 +0,0 @@ -# Cross-compiling setup for Intel Edison (poky linux) platform -# Get SDK from here: https://software.intel.com/en-us/iot/hardware/edison/downloads -# REMEMBER to check and update the SDK root in the constant POKY_EDISON_PATH - -MRuby::Build.new do |conf| - toolchain :gcc - conf.gembox 'default' - conf.cc.defines = %w(ENABLE_READLINE) - conf.gembox 'default' - - #lightweight regular expression - conf.gem :github => "pbosetti/mruby-hs-regexp", :branch => "master" - -end - -# Define cross build settings -MRuby::CrossBuild.new('core2-32-poky-linux') do |conf| - toolchain :gcc - - # Mac OS X - # - POKY_EDISON_PATH = '/opt/poky-edison/1.7.2' - - POKY_EDISON_SYSROOT = "#{POKY_EDISON_PATH}/sysroots/core2-32-poky-linux" - POKY_EDISON_X86_PATH = "#{POKY_EDISON_PATH}/sysroots/i386-pokysdk-darwin" - POKY_EDISON_BIN_PATH = "#{POKY_EDISON_X86_PATH}/usr/bin/i586-poky-linux" - - - conf.cc do |cc| - cc.command = "#{POKY_EDISON_BIN_PATH}/i586-poky-linux-gcc" - cc.include_paths << ["#{POKY_EDISON_SYSROOT}/usr/include", "#{POKY_EDISON_X86_PATH}/usr/include"] - cc.flags = %w(-m32 -march=core2 -mtune=core2 -msse3 -mfpmath=sse -mstackrealign -fno-omit-frame-pointer) - cc.flags << %w(-O2 -pipe -g -feliminate-unused-debug-types) - cc.flags << "--sysroot=#{POKY_EDISON_SYSROOT}" - cc.compile_options = %Q[%{flags} -o "%{outfile}" -c "%{infile}"] - cc.defines = %w(ENABLE_READLINE) - end - - conf.cxx do |cxx| - cxx.command = "#{POKY_EDISON_BIN_PATH}/i586-poky-linux-g++" - cxx.include_paths = conf.cc.include_paths.dup - cxx.include_paths << ["#{POKY_EDISON_SYSROOT}/usr/include/c++/4.9.1"] - cxx.flags = conf.cc.flags.dup - cxx.defines = conf.cc.defines.dup - cxx.compile_options = conf.cc.compile_options.dup - end - - conf.archiver do |archiver| - archiver.command = "#{POKY_EDISON_BIN_PATH}/i586-poky-linux-ar" - archiver.archive_options = 'rcs "%{outfile}" %{objs}' - end - - conf.linker do |linker| - linker.command = "#{POKY_EDISON_BIN_PATH}/i586-poky-linux-g++" - linker.flags = %w(-m32 -march=i586) - linker.flags << "--sysroot=#{POKY_EDISON_SYSROOT}" - linker.flags << %w(-O1) - linker.libraries = %w(m pthread) - end - - #do not build executable test - conf.build_mrbtest_lib_only - - conf.gembox 'default' - - #lightweight regular expression - conf.gem :github => "pbosetti/mruby-hs-regexp", :branch => "master" - -end diff --git a/examples/targets/build_config_IntelGalileo.rb b/examples/targets/build_config_IntelGalileo.rb deleted file mode 100644 index 42f39c456..000000000 --- a/examples/targets/build_config_IntelGalileo.rb +++ /dev/null @@ -1,106 +0,0 @@ -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 - - -# Cross Compiling configuration for Intel Galileo on Arduino environment -# http://arduino.cc/en/ArduinoCertified/IntelGalileo -# -# Requires Arduino IDE for Intel Galileo -MRuby::CrossBuild.new("Galileo") do |conf| - toolchain :gcc - - # Mac OS X - # Assume you renamed Arduino.app to Arduino_Galileo.app - GALILEO_ARDUINO_PATH = '/Applications/Arduino_Galileo.app/Contents/Resources/Java' - # GNU Linux - #ARDUINO_GALILEO_PATH = '/opt/arduino' - - GALILEO_BIN_PATH = "#{GALILEO_ARDUINO_PATH}/hardware/tools/x86/i386-pokysdk-darwin/usr/bin/i586-poky-linux-uclibc" - GALILEO_SYSROOT = "#{GALILEO_ARDUINO_PATH}/hardware/tools/x86/i586-poky-linux-uclibc" - GALILEO_X86_PATH = "#{GALILEO_ARDUINO_PATH}/hardware/arduino/x86" - - - conf.cc do |cc| - cc.command = "#{GALILEO_BIN_PATH}/i586-poky-linux-uclibc-gcc" - cc.include_paths << ["#{GALILEO_X86_PATH}/cores/arduino", "#{GALILEO_X86_PATH}/variants/galileo_fab_d"] - cc.flags = %w(-m32 -march=i586 -c -g -Os -w - -ffunction-sections -fdata-sections -MMD -DARDUINO=153) - cc.flags << "--sysroot=#{GALILEO_SYSROOT}" - cc.compile_options = %Q[%{flags} -o "%{outfile}" -c "%{infile}"] - end - - conf.cxx do |cxx| - cxx.command = "#{GALILEO_BIN_PATH}/i586-poky-linux-uclibc-g++" - cxx.include_paths = conf.cc.include_paths.dup - cxx.include_paths << "#{GALILEO_ARDUINO_PATH}/hardware/tools/x86/i586-poky-linux-uclibc/usr/include/c++" - cxx.include_paths << "#{GALILEO_ARDUINO_PATH}/hardware/tools/x86/i586-poky-linux-uclibc/usr/include/c++/i586-poky-linux-uclibc" - cxx.flags = conf.cc.flags.dup - cxx.defines = conf.cc.defines.dup - cxx.compile_options = conf.cc.compile_options.dup - end - - conf.archiver do |archiver| - archiver.command = "#{GALILEO_BIN_PATH}/i586-poky-linux-uclibc-ar" - archiver.archive_options = 'rcs "%{outfile}" %{objs}' - end - - conf.linker do |linker| - linker.command = "#{GALILEO_BIN_PATH}/i586-poky-linux-uclibc-g++" - linker.flags = %w(-m32 -march=i586) - linker.flags << "--sysroot=#{GALILEO_SYSROOT}" - linker.flags << %w(-Os -Wl,--gc-sections) - linker.libraries = %w(m pthread) - end - - #no executables - conf.bins = [] - - #do not build executable test - conf.build_mrbtest_lib_only - - #official mrbgems - conf.gem :core => "mruby-sprintf" - conf.gem :core => "mruby-print" - conf.gem :core => "mruby-math" - conf.gem :core => "mruby-time" - conf.gem :core => "mruby-struct" - conf.gem :core => "mruby-enum-ext" - conf.gem :core => "mruby-string-ext" - conf.gem :core => "mruby-numeric-ext" - conf.gem :core => "mruby-array-ext" - conf.gem :core => "mruby-hash-ext" - conf.gem :core => "mruby-range-ext" - conf.gem :core => "mruby-proc-ext" - conf.gem :core => "mruby-symbol-ext" - conf.gem :core => "mruby-random" - conf.gem :core => "mruby-object-ext" - conf.gem :core => "mruby-objectspace" - conf.gem :core => "mruby-fiber" - conf.gem :core => "mruby-toplevel-ext" - - #lightweigh regular expression - conf.gem :github => "masamitsu-murase/mruby-hs-regexp", :branch => "master" - - #Arduino API - #conf.gem :github =>"kyab/mruby-arduino", :branch => "master" do |g| - # g.cxx.include_paths << "#{GALILEO_X86_PATH}/libraries/Wire" - # g.cxx.include_paths << "#{GALILEO_X86_PATH}/libraries/Servo" - - #enable unsupported Servo class - # g.cxx.defines << "MRUBY_ARDUINO_GALILEO_ENABLE_SERVO" - #end - -end diff --git a/examples/targets/build_config_RX630.rb b/examples/targets/build_config_RX630.rb deleted file mode 100644 index 8b1bbb42f..000000000 --- a/examples/targets/build_config_RX630.rb +++ /dev/null @@ -1,81 +0,0 @@ -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 - -# Cross Compiling configuration for RX630 -# http://gadget.renesas.com/ -# -# Requires gnurx_v14.03 -MRuby::CrossBuild.new("RX630") do |conf| - toolchain :gcc - - # Linux - BIN_PATH = "/usr/share/gnurx_v14.03_elf-1/bin" - - conf.cc do |cc| - cc.command = "#{BIN_PATH}/rx-elf-gcc" - cc.flags = "-Wall -g -O2 -flto -mcpu=rx600 -m64bit-doubles" - cc.compile_options = %Q[%{flags} -o "%{outfile}" -c "%{infile}"] - - #configuration for low memory environment - cc.defines << %w(MRB_USE_FLOAT) - cc.defines << %w(MRB_HEAP_PAGE_SIZE=64) - cc.defines << %w(KHASH_DEFAULT_SIZE=8) - cc.defines << %w(MRB_STR_BUF_MIN_SIZE=20) - cc.defines << %w(MRB_GC_STRESS) - cc.defines << %w(MRB_DISABLE_STDIO) #if you dont need stdio. - #cc.defines << %w(POOL_PAGE_SIZE=1000) #effective only for use with mruby-eval - end - - conf.cxx do |cxx| - cxx.command = conf.cc.command.dup - cxx.include_paths = conf.cc.include_paths.dup - cxx.flags = conf.cc.flags.dup - cxx.defines = conf.cc.defines.dup - cxx.compile_options = conf.cc.compile_options.dup - end - - conf.linker do |linker| - linker.command="#{BIN_PATH}/rx-elf-ld" - end - - conf.archiver do |archiver| - archiver.command = "#{BIN_PATH}/rx-elf-ar" - archiver.archive_options = 'rcs "%{outfile}" %{objs}' - end - - #no executables - conf.bins = [] - - #do not build executable test - conf.build_mrbtest_lib_only - - #disable C++ exception - conf.disable_cxx_exception - - #gems from core - conf.gem :core => "mruby-sprintf" - conf.gem :core => "mruby-print" - conf.gem :core => "mruby-math" - conf.gem :core => "mruby-enum-ext" - conf.gem :core => "mruby-numeric-ext" - - #light-weight regular expression - #conf.gem :github => "masamitsu-murase/mruby-hs-regexp", :branch => "master" - - #Arduino API - #conf.gem :github =>"kyab/mruby-arduino", :branch => "master" - -end diff --git a/examples/targets/build_config_android_arm64-v8a.rb b/examples/targets/build_config_android_arm64-v8a.rb deleted file mode 100644 index 70b0f4b97..000000000 --- a/examples/targets/build_config_android_arm64-v8a.rb +++ /dev/null @@ -1,26 +0,0 @@ -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 deleted file mode 100644 index 17330242a..000000000 --- a/examples/targets/build_config_android_armeabi.rb +++ /dev/null @@ -1,26 +0,0 @@ -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/examples/targets/build_config_android_armeabi_v7a_neon_hard.rb b/examples/targets/build_config_android_armeabi_v7a_neon_hard.rb deleted file mode 100644 index 3788bba7f..000000000 --- a/examples/targets/build_config_android_armeabi_v7a_neon_hard.rb +++ /dev/null @@ -1,28 +0,0 @@ -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 diff --git a/examples/targets/build_config_chipKITMax32.rb b/examples/targets/build_config_chipKITMax32.rb deleted file mode 100644 index 8617d8d10..000000000 --- a/examples/targets/build_config_chipKITMax32.rb +++ /dev/null @@ -1,86 +0,0 @@ -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 - -# Cross Compiling configuration for Digilent chipKIT Max32 -# http://www.digilentinc.com/Products/Detail.cfm?Prod=CHIPKIT-MAX32 -# -# Requires MPIDE (https://github.com/chipKIT32/chipKIT32-MAX) -# -# This configuration is based on @kyab's version -# http://d.hatena.ne.jp/kyab/20130201 -MRuby::CrossBuild.new("chipKITMax32") do |conf| - toolchain :gcc - - # Mac OS X - # MPIDE_PATH = '/Applications/Mpide.app/Contents/Resources/Java' - # GNU Linux - MPIDE_PATH = '/opt/mpide-0023-linux-20120903' - - PIC32_PATH = "#{MPIDE_PATH}/hardware/pic32" - - conf.cc do |cc| - cc.command = "#{PIC32_PATH}/compiler/pic32-tools/bin/pic32-gcc" - cc.include_paths << ["#{PIC32_PATH}/cores/pic32", - "#{PIC32_PATH}/variants/Max32", - "#{PIC32_PATH}/libraries"] - cc.flags = %w(-O2 -mno-smart-io -w -ffunction-sections -fdata-sections -g -mdebugger -Wcast-align - -fno-short-double -mprocessor=32MX795F512L -DF_CPU=80000000L -DARDUINO=23 -D_BOARD_MEGA_ - -DMPIDEVER=0x01000202 -DMPIDE=23) - cc.compile_options = %Q[%{flags} -o "%{outfile}" -c "%{infile}"] - - #configuration for low memory environment - cc.defines << %w(MRB_HEAP_PAGE_SIZE=64) - cc.defines << %w(KHASH_DEFAULT_SIZE=8) - cc.defines << %w(MRB_STR_BUF_MIN_SIZE=20) - cc.defines << %w(MRB_GC_STRESS) - #cc.defines << %w(MRB_DISABLE_STDIO) #if you dont need stdio. - #cc.defines << %w(POOL_PAGE_SIZE=1000) #effective only for use with mruby-eval - end - - conf.cxx do |cxx| - cxx.command = conf.cc.command.dup - cxx.include_paths = conf.cc.include_paths.dup - cxx.flags = conf.cc.flags.dup - cxx.defines = conf.cc.defines.dup - cxx.compile_options = conf.cc.compile_options.dup - end - - conf.archiver do |archiver| - archiver.command = "#{PIC32_PATH}/compiler/pic32-tools/bin/pic32-ar" - archiver.archive_options = 'rcs "%{outfile}" %{objs}' - end - - #no executables - conf.bins = [] - - #do not build test executable - conf.build_mrbtest_lib_only - - #disable C++ exception - conf.disable_cxx_exception - - #gems from core - conf.gem :core => "mruby-print" - conf.gem :core => "mruby-math" - conf.gem :core => "mruby-enum-ext" - - #light-weight regular expression - conf.gem :github => "masamitsu-murase/mruby-hs-regexp", :branch => "master" - - #Arduino API - #conf.gem :github =>"kyab/mruby-arduino", :branch => "master" - -end diff --git a/examples/targets/build_config_dreamcast_shelf.rb b/examples/targets/build_config_dreamcast_shelf.rb deleted file mode 100644 index 85b2ff20d..000000000 --- a/examples/targets/build_config_dreamcast_shelf.rb +++ /dev/null @@ -1,108 +0,0 @@ -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 - -# Cross Compiling configuration for the Sega Dreamcast -# This configuration requires KallistiOS (KOS) -# https://dreamcast.wiki -# -# Tested on GNU/Linux, MinGW-w64/MSYS2, Cygwin, macOS and MinGW/MSYS (see below) -# -MRuby::CrossBuild.new("dreamcast") do |conf| - toolchain :gcc - - # Support for DreamSDK (based on MinGW/MSYS) - # To compile mruby with DreamSDK, RubyInstaller for Windows should be installed - DREAMSDK_HOME = ENV["DREAMSDK_HOME"] - MSYS_ROOT = !(DREAMSDK_HOME.nil? || DREAMSDK_HOME.empty?) ? "#{DREAMSDK_HOME}/msys/1.0" : "" - - # Setting paths - DREAMCAST_PATH = "#{MSYS_ROOT}/opt/toolchains/dc" - KOS_PATH = "#{DREAMCAST_PATH}/kos" - BIN_PATH = "#{DREAMCAST_PATH}/sh-elf/bin" - - # C compiler - # Flags were extracted from KallistiOS environment files - conf.cc do |cc| - cc.command = "#{BIN_PATH}/sh-elf-gcc" - cc.include_paths << ["#{KOS_PATH}/include", "#{KOS_PATH}/kernel/arch/dreamcast/include", "#{KOS_PATH}/addons/include", "#{KOS_PATH}/../kos-ports/include"] - cc.flags << ["-O2", "-fomit-frame-pointer", "-ml", "-m4-single-only", "-ffunction-sections", "-fdata-sections", "-Wall", "-g", "-fno-builtin", "-ml", "-m4-single-only", "-Wl,-Ttext=0x8c010000", "-Wl,--gc-sections", "-T#{KOS_PATH}/utils/ldscripts/shlelf.xc", "-nodefaultlibs"] - cc.compile_options = %Q[%{flags} -o "%{outfile}" -c "%{infile}"] - cc.defines << %w(_arch_dreamcast) - cc.defines << %w(_arch_sub_pristine) - end - - # C++ compiler - conf.cxx do |cxx| - cxx.command = conf.cc.command.dup - cxx.include_paths = conf.cc.include_paths.dup - cxx.flags = conf.cc.flags.dup - cxx.flags << %w(-fno-rtti -fno-exceptions) - cxx.defines = conf.cc.defines.dup - cxx.compile_options = conf.cc.compile_options.dup - end - - # Linker - # There is an issue when making the mruby library with KallistiOS: - # 'newlib_kill.o' and 'newlib_getpid.o' aren't found so they are explicitly - # specified here at least for now. - conf.linker do |linker| - linker.command="#{BIN_PATH}/sh-elf-gcc" - linker.flags << ["#{MSYS_ROOT}/opt/toolchains/dc/kos/kernel/build/newlib_kill.o", "#{MSYS_ROOT}/opt/toolchains/dc/kos/kernel/build/newlib_getpid.o", "-Wl,--start-group -lkallisti -lc -lgcc -Wl,--end-group"] - linker.library_paths << ["#{KOS_PATH}/lib/dreamcast", "#{KOS_PATH}/addons/lib/dreamcast", "#{KOS_PATH}/../kos-ports/lib"] - end - - # Archiver - conf.archiver do |archiver| - archiver.command = "#{BIN_PATH}/sh-elf-ar" - archiver.archive_options = 'rcs "%{outfile}" %{objs}' - end - - # No executables - conf.bins = [] - - # Do not build executable test - conf.build_mrbtest_lib_only - - # Disable C++ exception - conf.disable_cxx_exception - - # Gems from core - # removing mruby-io - conf.gem :core => "mruby-metaprog" - conf.gem :core => "mruby-pack" - conf.gem :core => "mruby-sprintf" - conf.gem :core => "mruby-print" - conf.gem :core => "mruby-math" - conf.gem :core => "mruby-time" - conf.gem :core => "mruby-struct" - conf.gem :core => "mruby-compar-ext" - conf.gem :core => "mruby-enum-ext" - conf.gem :core => "mruby-string-ext" - conf.gem :core => "mruby-numeric-ext" - conf.gem :core => "mruby-array-ext" - conf.gem :core => "mruby-hash-ext" - conf.gem :core => "mruby-range-ext" - conf.gem :core => "mruby-proc-ext" - conf.gem :core => "mruby-symbol-ext" - conf.gem :core => "mruby-random" - conf.gem :core => "mruby-object-ext" - conf.gem :core => "mruby-objectspace" - conf.gem :core => "mruby-fiber" - conf.gem :core => "mruby-enumerator" - conf.gem :core => "mruby-enum-lazy" - conf.gem :core => "mruby-toplevel-ext" - conf.gem :core => "mruby-kernel-ext" - conf.gem :core => "mruby-class-ext" - conf.gem :core => "mruby-compiler" -end diff --git a/lib/mruby/lockfile.rb b/lib/mruby/lockfile.rb index 0d2455b4c..ee16e2ad8 100644 --- a/lib/mruby/lockfile.rb +++ b/lib/mruby/lockfile.rb @@ -26,7 +26,7 @@ module MRuby end def instance - @instance ||= new("#{MRUBY_CONFIG}.lock") + @instance ||= new("#{MRUBY_ROOT}/build/#{MRUBY_TARGET}.lock") end end diff --git a/target/ArduinoDue.rb b/target/ArduinoDue.rb new file mode 100644 index 000000000..09646a700 --- /dev/null +++ b/target/ArduinoDue.rb @@ -0,0 +1,90 @@ +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 + +# Cross Compiling configuration for Arduino Due +# http://arduino.cc/en/Main/ArduinoBoardDue +# +# Requires Arduino IDE >= 1.5 +MRuby::CrossBuild.new("ArduinoDue") do |conf| + toolchain :gcc + + # Mac OS X, Arduino IDE <= 1.5.6 + # ARDUINO_PATH = '/Applications/Arduino.app/Contents/Resources/Java' + # Mac OS X, Arduino IDE >= 1.5.7 + # ARDUINO_PATH = '/Applications/Arduino.app/Contents/Java' + # GNU Linux + ARDUINO_PATH = '/opt/arduino' + # Arduino IDE <= 1.5.6 + BIN_PATH = "#{ARDUINO_PATH}/hardware/tools/g++_arm_none_eabi/bin" + # Arduino IDE >= 1.5.7 + # BIN_PATH = "#{ARDUINO_PATH}/hardware/tools/gcc-arm-none-eabi-4.8.3-2014q1/bin" + SAM_PATH = "#{ARDUINO_PATH}/hardware/arduino/sam" + TARGET_PATH = "#{SAM_PATH}/variants/arduino_due_x" + + conf.cc do |cc| + cc.command = "#{BIN_PATH}/arm-none-eabi-gcc" + cc.include_paths << ["#{SAM_PATH}/system/libsam", "#{SAM_PATH}/system/CMSIS/CMSIS/Include/", + "#{SAM_PATH}/system/CMSIS/Device/ATMEL/", + "#{SAM_PATH}/cores/arduino", "#{SAM_PATH}/libraries","#{TARGET_PATH}"] + cc.flags = %w(-g -Os -w -ffunction-sections -fdata-sections -nostdlib --param max-inline-insns-single=500 + -Dprintf=iprintf -mcpu=cortex-m3 -DF_CPU=84000000L -DARDUINO=156 -DARDUINO_SAM_DUE -DARDUINO_ARCH_SAM + -D__SAM3X8E__ -mthumb -DUSB_PID=0x003e -DUSB_VID=0x2341 -DUSBCON -DUSB_MANUFACTURER="Unknown" -DUSB_PRODUCT="Arduino Due") + cc.compile_options = %Q[%{flags} -o "%{outfile}" -c "%{infile}"] + + #configuration for low memory environment + cc.defines << %w(MRB_HEAP_PAGE_SIZE=64) + cc.defines << %w(KHASH_DEFAULT_SIZE=8) + cc.defines << %w(MRB_STR_BUF_MIN_SIZE=20) + cc.defines << %w(MRB_GC_STRESS) + #cc.defines << %w(MRB_DISABLE_STDIO) #if you dont need stdio. + #cc.defines << %w(POOL_PAGE_SIZE=1000) #effective only for use with mruby-eval + end + + conf.cxx do |cxx| + cxx.command = conf.cc.command.dup + cxx.include_paths = conf.cc.include_paths.dup + cxx.flags = conf.cc.flags.dup + cxx.flags << %w(-fno-rtti -fno-exceptions) + cxx.defines = conf.cc.defines.dup + cxx.compile_options = conf.cc.compile_options.dup + end + + conf.archiver do |archiver| + archiver.command = "#{BIN_PATH}/arm-none-eabi-ar" + archiver.archive_options = 'rcs "%{outfile}" %{objs}' + end + + #no executables + conf.bins = [] + + #do not build executable test + conf.build_mrbtest_lib_only + + #disable C++ exception + conf.disable_cxx_exception + + #gems from core + conf.gem :core => "mruby-print" + conf.gem :core => "mruby-math" + conf.gem :core => "mruby-enum-ext" + + #light-weight regular expression + conf.gem :github => "masamitsu-murase/mruby-hs-regexp", :branch => "master" + + #Arduino API + #conf.gem :github =>"kyab/mruby-arduino", :branch => "master" + +end diff --git a/target/IntelEdison.rb b/target/IntelEdison.rb new file mode 100644 index 000000000..a22f9cfd2 --- /dev/null +++ b/target/IntelEdison.rb @@ -0,0 +1,69 @@ +# Cross-compiling setup for Intel Edison (poky linux) platform +# Get SDK from here: https://software.intel.com/en-us/iot/hardware/edison/downloads +# REMEMBER to check and update the SDK root in the constant POKY_EDISON_PATH + +MRuby::Build.new do |conf| + toolchain :gcc + conf.gembox 'default' + conf.cc.defines = %w(ENABLE_READLINE) + conf.gembox 'default' + + #lightweight regular expression + conf.gem :github => "pbosetti/mruby-hs-regexp", :branch => "master" + +end + +# Define cross build settings +MRuby::CrossBuild.new('core2-32-poky-linux') do |conf| + toolchain :gcc + + # Mac OS X + # + POKY_EDISON_PATH = '/opt/poky-edison/1.7.2' + + POKY_EDISON_SYSROOT = "#{POKY_EDISON_PATH}/sysroots/core2-32-poky-linux" + POKY_EDISON_X86_PATH = "#{POKY_EDISON_PATH}/sysroots/i386-pokysdk-darwin" + POKY_EDISON_BIN_PATH = "#{POKY_EDISON_X86_PATH}/usr/bin/i586-poky-linux" + + + conf.cc do |cc| + cc.command = "#{POKY_EDISON_BIN_PATH}/i586-poky-linux-gcc" + cc.include_paths << ["#{POKY_EDISON_SYSROOT}/usr/include", "#{POKY_EDISON_X86_PATH}/usr/include"] + cc.flags = %w(-m32 -march=core2 -mtune=core2 -msse3 -mfpmath=sse -mstackrealign -fno-omit-frame-pointer) + cc.flags << %w(-O2 -pipe -g -feliminate-unused-debug-types) + cc.flags << "--sysroot=#{POKY_EDISON_SYSROOT}" + cc.compile_options = %Q[%{flags} -o "%{outfile}" -c "%{infile}"] + cc.defines = %w(ENABLE_READLINE) + end + + conf.cxx do |cxx| + cxx.command = "#{POKY_EDISON_BIN_PATH}/i586-poky-linux-g++" + cxx.include_paths = conf.cc.include_paths.dup + cxx.include_paths << ["#{POKY_EDISON_SYSROOT}/usr/include/c++/4.9.1"] + cxx.flags = conf.cc.flags.dup + cxx.defines = conf.cc.defines.dup + cxx.compile_options = conf.cc.compile_options.dup + end + + conf.archiver do |archiver| + archiver.command = "#{POKY_EDISON_BIN_PATH}/i586-poky-linux-ar" + archiver.archive_options = 'rcs "%{outfile}" %{objs}' + end + + conf.linker do |linker| + linker.command = "#{POKY_EDISON_BIN_PATH}/i586-poky-linux-g++" + linker.flags = %w(-m32 -march=i586) + linker.flags << "--sysroot=#{POKY_EDISON_SYSROOT}" + linker.flags << %w(-O1) + linker.libraries = %w(m pthread) + end + + #do not build executable test + conf.build_mrbtest_lib_only + + conf.gembox 'default' + + #lightweight regular expression + conf.gem :github => "pbosetti/mruby-hs-regexp", :branch => "master" + +end diff --git a/target/IntelGalileo.rb b/target/IntelGalileo.rb new file mode 100644 index 000000000..42f39c456 --- /dev/null +++ b/target/IntelGalileo.rb @@ -0,0 +1,106 @@ +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 + + +# Cross Compiling configuration for Intel Galileo on Arduino environment +# http://arduino.cc/en/ArduinoCertified/IntelGalileo +# +# Requires Arduino IDE for Intel Galileo +MRuby::CrossBuild.new("Galileo") do |conf| + toolchain :gcc + + # Mac OS X + # Assume you renamed Arduino.app to Arduino_Galileo.app + GALILEO_ARDUINO_PATH = '/Applications/Arduino_Galileo.app/Contents/Resources/Java' + # GNU Linux + #ARDUINO_GALILEO_PATH = '/opt/arduino' + + GALILEO_BIN_PATH = "#{GALILEO_ARDUINO_PATH}/hardware/tools/x86/i386-pokysdk-darwin/usr/bin/i586-poky-linux-uclibc" + GALILEO_SYSROOT = "#{GALILEO_ARDUINO_PATH}/hardware/tools/x86/i586-poky-linux-uclibc" + GALILEO_X86_PATH = "#{GALILEO_ARDUINO_PATH}/hardware/arduino/x86" + + + conf.cc do |cc| + cc.command = "#{GALILEO_BIN_PATH}/i586-poky-linux-uclibc-gcc" + cc.include_paths << ["#{GALILEO_X86_PATH}/cores/arduino", "#{GALILEO_X86_PATH}/variants/galileo_fab_d"] + cc.flags = %w(-m32 -march=i586 -c -g -Os -w + -ffunction-sections -fdata-sections -MMD -DARDUINO=153) + cc.flags << "--sysroot=#{GALILEO_SYSROOT}" + cc.compile_options = %Q[%{flags} -o "%{outfile}" -c "%{infile}"] + end + + conf.cxx do |cxx| + cxx.command = "#{GALILEO_BIN_PATH}/i586-poky-linux-uclibc-g++" + cxx.include_paths = conf.cc.include_paths.dup + cxx.include_paths << "#{GALILEO_ARDUINO_PATH}/hardware/tools/x86/i586-poky-linux-uclibc/usr/include/c++" + cxx.include_paths << "#{GALILEO_ARDUINO_PATH}/hardware/tools/x86/i586-poky-linux-uclibc/usr/include/c++/i586-poky-linux-uclibc" + cxx.flags = conf.cc.flags.dup + cxx.defines = conf.cc.defines.dup + cxx.compile_options = conf.cc.compile_options.dup + end + + conf.archiver do |archiver| + archiver.command = "#{GALILEO_BIN_PATH}/i586-poky-linux-uclibc-ar" + archiver.archive_options = 'rcs "%{outfile}" %{objs}' + end + + conf.linker do |linker| + linker.command = "#{GALILEO_BIN_PATH}/i586-poky-linux-uclibc-g++" + linker.flags = %w(-m32 -march=i586) + linker.flags << "--sysroot=#{GALILEO_SYSROOT}" + linker.flags << %w(-Os -Wl,--gc-sections) + linker.libraries = %w(m pthread) + end + + #no executables + conf.bins = [] + + #do not build executable test + conf.build_mrbtest_lib_only + + #official mrbgems + conf.gem :core => "mruby-sprintf" + conf.gem :core => "mruby-print" + conf.gem :core => "mruby-math" + conf.gem :core => "mruby-time" + conf.gem :core => "mruby-struct" + conf.gem :core => "mruby-enum-ext" + conf.gem :core => "mruby-string-ext" + conf.gem :core => "mruby-numeric-ext" + conf.gem :core => "mruby-array-ext" + conf.gem :core => "mruby-hash-ext" + conf.gem :core => "mruby-range-ext" + conf.gem :core => "mruby-proc-ext" + conf.gem :core => "mruby-symbol-ext" + conf.gem :core => "mruby-random" + conf.gem :core => "mruby-object-ext" + conf.gem :core => "mruby-objectspace" + conf.gem :core => "mruby-fiber" + conf.gem :core => "mruby-toplevel-ext" + + #lightweigh regular expression + conf.gem :github => "masamitsu-murase/mruby-hs-regexp", :branch => "master" + + #Arduino API + #conf.gem :github =>"kyab/mruby-arduino", :branch => "master" do |g| + # g.cxx.include_paths << "#{GALILEO_X86_PATH}/libraries/Wire" + # g.cxx.include_paths << "#{GALILEO_X86_PATH}/libraries/Servo" + + #enable unsupported Servo class + # g.cxx.defines << "MRUBY_ARDUINO_GALILEO_ENABLE_SERVO" + #end + +end diff --git a/target/RX630.rb b/target/RX630.rb new file mode 100644 index 000000000..8b1bbb42f --- /dev/null +++ b/target/RX630.rb @@ -0,0 +1,81 @@ +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 + +# Cross Compiling configuration for RX630 +# http://gadget.renesas.com/ +# +# Requires gnurx_v14.03 +MRuby::CrossBuild.new("RX630") do |conf| + toolchain :gcc + + # Linux + BIN_PATH = "/usr/share/gnurx_v14.03_elf-1/bin" + + conf.cc do |cc| + cc.command = "#{BIN_PATH}/rx-elf-gcc" + cc.flags = "-Wall -g -O2 -flto -mcpu=rx600 -m64bit-doubles" + cc.compile_options = %Q[%{flags} -o "%{outfile}" -c "%{infile}"] + + #configuration for low memory environment + cc.defines << %w(MRB_USE_FLOAT) + cc.defines << %w(MRB_HEAP_PAGE_SIZE=64) + cc.defines << %w(KHASH_DEFAULT_SIZE=8) + cc.defines << %w(MRB_STR_BUF_MIN_SIZE=20) + cc.defines << %w(MRB_GC_STRESS) + cc.defines << %w(MRB_DISABLE_STDIO) #if you dont need stdio. + #cc.defines << %w(POOL_PAGE_SIZE=1000) #effective only for use with mruby-eval + end + + conf.cxx do |cxx| + cxx.command = conf.cc.command.dup + cxx.include_paths = conf.cc.include_paths.dup + cxx.flags = conf.cc.flags.dup + cxx.defines = conf.cc.defines.dup + cxx.compile_options = conf.cc.compile_options.dup + end + + conf.linker do |linker| + linker.command="#{BIN_PATH}/rx-elf-ld" + end + + conf.archiver do |archiver| + archiver.command = "#{BIN_PATH}/rx-elf-ar" + archiver.archive_options = 'rcs "%{outfile}" %{objs}' + end + + #no executables + conf.bins = [] + + #do not build executable test + conf.build_mrbtest_lib_only + + #disable C++ exception + conf.disable_cxx_exception + + #gems from core + conf.gem :core => "mruby-sprintf" + conf.gem :core => "mruby-print" + conf.gem :core => "mruby-math" + conf.gem :core => "mruby-enum-ext" + conf.gem :core => "mruby-numeric-ext" + + #light-weight regular expression + #conf.gem :github => "masamitsu-murase/mruby-hs-regexp", :branch => "master" + + #Arduino API + #conf.gem :github =>"kyab/mruby-arduino", :branch => "master" + +end diff --git a/target/android_arm64-v8a.rb b/target/android_arm64-v8a.rb new file mode 100644 index 000000000..70b0f4b97 --- /dev/null +++ b/target/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/target/android_armeabi.rb b/target/android_armeabi.rb new file mode 100644 index 000000000..17330242a --- /dev/null +++ b/target/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/target/android_armeabi_v7a_neon_hard.rb b/target/android_armeabi_v7a_neon_hard.rb new file mode 100644 index 000000000..3788bba7f --- /dev/null +++ b/target/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 diff --git a/target/appveyor.rb b/target/appveyor.rb new file mode 100644 index 000000000..25745daa8 --- /dev/null +++ b/target/appveyor.rb @@ -0,0 +1,46 @@ +def setup_option(conf) + conf.cc.flags[0].delete("/Zi") unless ENV['CFLAGS'] + conf.cxx.flags[0].delete("/Zi") unless ENV['CFLAGS'] || ENV['CXXFLAGS'] + conf.linker.flags << "/DEBUG:NONE" unless ENV['LDFLAGS'] +end + +MRuby::Build.new('full-debug') do |conf| + toolchain :visualcpp + enable_debug + + # include all core GEMs + conf.gembox 'full-core' + conf.cc.defines += %w(MRB_GC_STRESS MRB_METHOD_CACHE MRB_ENABLE_DEBUG_HOOK) + setup_option(conf) + + conf.enable_test +end + +MRuby::Build.new do |conf| + toolchain :visualcpp + + # include all core GEMs + conf.gembox 'full-core' + conf.compilers.each do |c| + c.defines += %w(MRB_GC_FIXED_ARENA) + end + setup_option(conf) + conf.enable_bintest + conf.enable_test +end + +MRuby::Build.new('cxx_abi') do |conf| + toolchain :visualcpp + + conf.gembox 'full-core' + conf.compilers.each do |c| + c.defines += %w(MRB_GC_FIXED_ARENA) + end + setup_option(conf) + conf.enable_bintest + conf.enable_test + + enable_cxx_abi + + build_mrbc_exec +end diff --git a/target/bench.rb b/target/bench.rb new file mode 100644 index 000000000..30ec56ad3 --- /dev/null +++ b/target/bench.rb @@ -0,0 +1,11 @@ +MRuby::Build.new('bench') do |conf| + # Gets set by the VS command prompts. + if ENV['VisualStudioVersion'] || ENV['VSINSTALLDIR'] + toolchain :visualcpp + else + toolchain :gcc + conf.cc.flags << '-O3' + end + + conf.gembox 'default' +end diff --git a/target/chipKITMax32.rb b/target/chipKITMax32.rb new file mode 100644 index 000000000..8617d8d10 --- /dev/null +++ b/target/chipKITMax32.rb @@ -0,0 +1,86 @@ +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 + +# Cross Compiling configuration for Digilent chipKIT Max32 +# http://www.digilentinc.com/Products/Detail.cfm?Prod=CHIPKIT-MAX32 +# +# Requires MPIDE (https://github.com/chipKIT32/chipKIT32-MAX) +# +# This configuration is based on @kyab's version +# http://d.hatena.ne.jp/kyab/20130201 +MRuby::CrossBuild.new("chipKITMax32") do |conf| + toolchain :gcc + + # Mac OS X + # MPIDE_PATH = '/Applications/Mpide.app/Contents/Resources/Java' + # GNU Linux + MPIDE_PATH = '/opt/mpide-0023-linux-20120903' + + PIC32_PATH = "#{MPIDE_PATH}/hardware/pic32" + + conf.cc do |cc| + cc.command = "#{PIC32_PATH}/compiler/pic32-tools/bin/pic32-gcc" + cc.include_paths << ["#{PIC32_PATH}/cores/pic32", + "#{PIC32_PATH}/variants/Max32", + "#{PIC32_PATH}/libraries"] + cc.flags = %w(-O2 -mno-smart-io -w -ffunction-sections -fdata-sections -g -mdebugger -Wcast-align + -fno-short-double -mprocessor=32MX795F512L -DF_CPU=80000000L -DARDUINO=23 -D_BOARD_MEGA_ + -DMPIDEVER=0x01000202 -DMPIDE=23) + cc.compile_options = %Q[%{flags} -o "%{outfile}" -c "%{infile}"] + + #configuration for low memory environment + cc.defines << %w(MRB_HEAP_PAGE_SIZE=64) + cc.defines << %w(KHASH_DEFAULT_SIZE=8) + cc.defines << %w(MRB_STR_BUF_MIN_SIZE=20) + cc.defines << %w(MRB_GC_STRESS) + #cc.defines << %w(MRB_DISABLE_STDIO) #if you dont need stdio. + #cc.defines << %w(POOL_PAGE_SIZE=1000) #effective only for use with mruby-eval + end + + conf.cxx do |cxx| + cxx.command = conf.cc.command.dup + cxx.include_paths = conf.cc.include_paths.dup + cxx.flags = conf.cc.flags.dup + cxx.defines = conf.cc.defines.dup + cxx.compile_options = conf.cc.compile_options.dup + end + + conf.archiver do |archiver| + archiver.command = "#{PIC32_PATH}/compiler/pic32-tools/bin/pic32-ar" + archiver.archive_options = 'rcs "%{outfile}" %{objs}' + end + + #no executables + conf.bins = [] + + #do not build test executable + conf.build_mrbtest_lib_only + + #disable C++ exception + conf.disable_cxx_exception + + #gems from core + conf.gem :core => "mruby-print" + conf.gem :core => "mruby-math" + conf.gem :core => "mruby-enum-ext" + + #light-weight regular expression + conf.gem :github => "masamitsu-murase/mruby-hs-regexp", :branch => "master" + + #Arduino API + #conf.gem :github =>"kyab/mruby-arduino", :branch => "master" + +end diff --git a/target/cross-32bit.rb b/target/cross-32bit.rb new file mode 100644 index 000000000..310ffc833 --- /dev/null +++ b/target/cross-32bit.rb @@ -0,0 +1,13 @@ +# Define cross build settings +MRuby::CrossBuild.new('32bit') do |conf| + toolchain :gcc + + conf.cc.flags << "-m32" + conf.linker.flags << "-m32" + + conf.build_mrbtest_lib_only + + conf.gem 'examples/mrbgems/c_and_ruby_extension_example' + + conf.test_runner.command = 'env' +end diff --git a/target/dreamcast_shelf.rb b/target/dreamcast_shelf.rb new file mode 100644 index 000000000..85b2ff20d --- /dev/null +++ b/target/dreamcast_shelf.rb @@ -0,0 +1,108 @@ +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 + +# Cross Compiling configuration for the Sega Dreamcast +# This configuration requires KallistiOS (KOS) +# https://dreamcast.wiki +# +# Tested on GNU/Linux, MinGW-w64/MSYS2, Cygwin, macOS and MinGW/MSYS (see below) +# +MRuby::CrossBuild.new("dreamcast") do |conf| + toolchain :gcc + + # Support for DreamSDK (based on MinGW/MSYS) + # To compile mruby with DreamSDK, RubyInstaller for Windows should be installed + DREAMSDK_HOME = ENV["DREAMSDK_HOME"] + MSYS_ROOT = !(DREAMSDK_HOME.nil? || DREAMSDK_HOME.empty?) ? "#{DREAMSDK_HOME}/msys/1.0" : "" + + # Setting paths + DREAMCAST_PATH = "#{MSYS_ROOT}/opt/toolchains/dc" + KOS_PATH = "#{DREAMCAST_PATH}/kos" + BIN_PATH = "#{DREAMCAST_PATH}/sh-elf/bin" + + # C compiler + # Flags were extracted from KallistiOS environment files + conf.cc do |cc| + cc.command = "#{BIN_PATH}/sh-elf-gcc" + cc.include_paths << ["#{KOS_PATH}/include", "#{KOS_PATH}/kernel/arch/dreamcast/include", "#{KOS_PATH}/addons/include", "#{KOS_PATH}/../kos-ports/include"] + cc.flags << ["-O2", "-fomit-frame-pointer", "-ml", "-m4-single-only", "-ffunction-sections", "-fdata-sections", "-Wall", "-g", "-fno-builtin", "-ml", "-m4-single-only", "-Wl,-Ttext=0x8c010000", "-Wl,--gc-sections", "-T#{KOS_PATH}/utils/ldscripts/shlelf.xc", "-nodefaultlibs"] + cc.compile_options = %Q[%{flags} -o "%{outfile}" -c "%{infile}"] + cc.defines << %w(_arch_dreamcast) + cc.defines << %w(_arch_sub_pristine) + end + + # C++ compiler + conf.cxx do |cxx| + cxx.command = conf.cc.command.dup + cxx.include_paths = conf.cc.include_paths.dup + cxx.flags = conf.cc.flags.dup + cxx.flags << %w(-fno-rtti -fno-exceptions) + cxx.defines = conf.cc.defines.dup + cxx.compile_options = conf.cc.compile_options.dup + end + + # Linker + # There is an issue when making the mruby library with KallistiOS: + # 'newlib_kill.o' and 'newlib_getpid.o' aren't found so they are explicitly + # specified here at least for now. + conf.linker do |linker| + linker.command="#{BIN_PATH}/sh-elf-gcc" + linker.flags << ["#{MSYS_ROOT}/opt/toolchains/dc/kos/kernel/build/newlib_kill.o", "#{MSYS_ROOT}/opt/toolchains/dc/kos/kernel/build/newlib_getpid.o", "-Wl,--start-group -lkallisti -lc -lgcc -Wl,--end-group"] + linker.library_paths << ["#{KOS_PATH}/lib/dreamcast", "#{KOS_PATH}/addons/lib/dreamcast", "#{KOS_PATH}/../kos-ports/lib"] + end + + # Archiver + conf.archiver do |archiver| + archiver.command = "#{BIN_PATH}/sh-elf-ar" + archiver.archive_options = 'rcs "%{outfile}" %{objs}' + end + + # No executables + conf.bins = [] + + # Do not build executable test + conf.build_mrbtest_lib_only + + # Disable C++ exception + conf.disable_cxx_exception + + # Gems from core + # removing mruby-io + conf.gem :core => "mruby-metaprog" + conf.gem :core => "mruby-pack" + conf.gem :core => "mruby-sprintf" + conf.gem :core => "mruby-print" + conf.gem :core => "mruby-math" + conf.gem :core => "mruby-time" + conf.gem :core => "mruby-struct" + conf.gem :core => "mruby-compar-ext" + conf.gem :core => "mruby-enum-ext" + conf.gem :core => "mruby-string-ext" + conf.gem :core => "mruby-numeric-ext" + conf.gem :core => "mruby-array-ext" + conf.gem :core => "mruby-hash-ext" + conf.gem :core => "mruby-range-ext" + conf.gem :core => "mruby-proc-ext" + conf.gem :core => "mruby-symbol-ext" + conf.gem :core => "mruby-random" + conf.gem :core => "mruby-object-ext" + conf.gem :core => "mruby-objectspace" + conf.gem :core => "mruby-fiber" + conf.gem :core => "mruby-enumerator" + conf.gem :core => "mruby-enum-lazy" + conf.gem :core => "mruby-toplevel-ext" + conf.gem :core => "mruby-kernel-ext" + conf.gem :core => "mruby-class-ext" + conf.gem :core => "mruby-compiler" +end diff --git a/target/host-debug.rb b/target/host-debug.rb new file mode 100644 index 000000000..4e89d162c --- /dev/null +++ b/target/host-debug.rb @@ -0,0 +1,24 @@ +MRuby::Build.new('host-debug') do |conf| + # load specific toolchain settings + + # 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 'full-core' + + # C compiler settings + conf.cc.defines = %w(MRB_ENABLE_DEBUG_HOOK) + + # Generate mruby debugger command (require mruby-eval) + conf.gem :core => "mruby-bin-debugger" + + # bintest + # conf.enable_bintest +end diff --git a/target/host.rb b/target/host.rb new file mode 100644 index 000000000..4f0286882 --- /dev/null +++ b/target/host.rb @@ -0,0 +1,98 @@ +MRuby::Build.new do |conf| + # load specific toolchain settings + + # Gets set by the VS command prompts. + if ENV['VisualStudioVersion'] || ENV['VSINSTALLDIR'] + toolchain :visualcpp + else + toolchain :gcc + end + + # Use mrbgems + # conf.gem 'examples/mrbgems/ruby_extension_example' + # conf.gem 'examples/mrbgems/c_extension_example' do |g| + # g.cc.flags << '-g' # append cflags in this gem + # end + # conf.gem 'examples/mrbgems/c_and_ruby_extension_example' + # conf.gem :core => 'mruby-eval' + # conf.gem :mgem => 'mruby-onig-regexp' + # conf.gem :github => 'mattn/mruby-onig-regexp' + # conf.gem :git => 'git@github.com:mattn/mruby-onig-regexp.git', :branch => 'master', :options => '-v' + + # include the GEM box + conf.gembox 'full-core' + + # C compiler settings + # conf.cc do |cc| + # cc.command = ENV['CC'] || 'gcc' + # cc.flags = [ENV['CFLAGS'] || %w()] + # cc.include_paths = ["#{root}/include"] + # cc.defines = %w() + # cc.option_include_path = %q[-I"%s"] + # cc.option_define = '-D%s' + # cc.compile_options = %Q[%{flags} -MMD -o "%{outfile}" -c "%{infile}"] + # end + + # mrbc settings + # conf.mrbc do |mrbc| + # mrbc.compile_options = "-g -B%{funcname} -o-" # The -g option is required for line numbers + # end + + # Linker settings + # conf.linker do |linker| + # linker.command = ENV['LD'] || 'gcc' + # linker.flags = [ENV['LDFLAGS'] || []] + # linker.flags_before_libraries = [] + # linker.libraries = %w() + # linker.flags_after_libraries = [] + # linker.library_paths = [] + # linker.option_library = '-l%s' + # linker.option_library_path = '-L%s' + # linker.link_options = "%{flags} -o "%{outfile}" %{objs} %{libs}" + # end + + # Archiver settings + # conf.archiver do |archiver| + # archiver.command = ENV['AR'] || 'ar' + # archiver.archive_options = 'rs "%{outfile}" %{objs}' + # end + + # Parser generator settings + # conf.yacc do |yacc| + # yacc.command = ENV['YACC'] || 'bison' + # yacc.compile_options = %q[-o "%{outfile}" "%{infile}"] + # end + + # gperf settings + # conf.gperf do |gperf| + # gperf.command = 'gperf' + # gperf.compile_options = %q[-L ANSI-C -C -p -j1 -i 1 -g -o -t -N mrb_reserved_word -k"1,3,$" "%{infile}" > "%{outfile}"] + # end + + # file extensions + # conf.exts do |exts| + # exts.object = '.o' + # exts.executable = '' # '.exe' if Windows + # exts.library = '.a' + # end + + # file separetor + # conf.file_separator = '/' + + # Turn on `enable_debug` for better debugging + # enable_debug + enable_debug + conf.enable_bintest + conf.enable_test +end + +MRuby::Build.new('test') do |conf| + # Gets set by the VS command prompts. + if ENV['VisualStudioVersion'] || ENV['VSINSTALLDIR'] + toolchain :visualcpp + else + toolchain :gcc + end + + conf.gembox 'default' +end diff --git a/target/travis.rb b/target/travis.rb new file mode 100644 index 000000000..f4bef0a52 --- /dev/null +++ b/target/travis.rb @@ -0,0 +1,40 @@ +MRuby::Build.new('full-debug') do |conf| + toolchain :gcc + enable_debug + + # include all core GEMs + conf.gembox 'full-core' + conf.cc.flags += %w(-Werror=declaration-after-statement) + conf.cc.defines += %w(MRB_GC_STRESS MRB_METHOD_CACHE MRB_ENABLE_DEBUG_HOOK) + + conf.enable_test +end + +MRuby::Build.new do |conf| + toolchain :gcc + + # include all core GEMs + conf.gembox 'full-core' + conf.cc.flags += %w(-Werror=declaration-after-statement) + conf.compilers.each do |c| + c.defines += %w(MRB_GC_FIXED_ARENA) + end + conf.enable_bintest + conf.enable_test +end + +MRuby::Build.new('cxx_abi') do |conf| + toolchain :gcc + + conf.gembox 'full-core' + conf.cc.flags += %w(-fpermissive) + conf.compilers.each do |c| + c.defines += %w(MRB_GC_FIXED_ARENA) + end + conf.enable_bintest + conf.enable_test + + enable_cxx_abi + + build_mrbc_exec +end diff --git a/tasks/benchmark.rake b/tasks/benchmark.rake index 6352f5c17..661fd2ada 100644 --- a/tasks/benchmark.rake +++ b/tasks/benchmark.rake @@ -9,11 +9,7 @@ def bm_files end def build_config_name - if ENV['MRUBY_CONFIG'] - File.basename(ENV['MRUBY_CONFIG'], '.rb').gsub('build_config_', '') - else - "build" - end + MRUBY_TARGET end def plot_file diff --git a/travis_config.rb b/travis_config.rb deleted file mode 100644 index f4bef0a52..000000000 --- a/travis_config.rb +++ /dev/null @@ -1,40 +0,0 @@ -MRuby::Build.new('full-debug') do |conf| - toolchain :gcc - enable_debug - - # include all core GEMs - conf.gembox 'full-core' - conf.cc.flags += %w(-Werror=declaration-after-statement) - conf.cc.defines += %w(MRB_GC_STRESS MRB_METHOD_CACHE MRB_ENABLE_DEBUG_HOOK) - - conf.enable_test -end - -MRuby::Build.new do |conf| - toolchain :gcc - - # include all core GEMs - conf.gembox 'full-core' - conf.cc.flags += %w(-Werror=declaration-after-statement) - conf.compilers.each do |c| - c.defines += %w(MRB_GC_FIXED_ARENA) - end - conf.enable_bintest - conf.enable_test -end - -MRuby::Build.new('cxx_abi') do |conf| - toolchain :gcc - - conf.gembox 'full-core' - conf.cc.flags += %w(-fpermissive) - conf.compilers.each do |c| - c.defines += %w(MRB_GC_FIXED_ARENA) - end - conf.enable_bintest - conf.enable_test - - enable_cxx_abi - - build_mrbc_exec -end -- cgit v1.2.3