From a77e09ecd61b19f9486aba10be82f8b07afe775e Mon Sep 17 00:00:00 2001 From: hiro22022 Date: Thu, 12 Aug 2021 13:47:55 +0900 Subject: [PATCH] =?UTF-8?q?mruby=20=E3=81=AE=E3=83=93=E3=83=AB=E3=83=89?= =?UTF-8?q?=EF=BC=9A=20=E3=83=93=E3=83=AB=E3=83=89=E3=82=B9=E3=82=AF?= =?UTF-8?q?=E3=83=AA=E3=83=97=E3=83=88=E3=81=AE=E5=A4=89=E6=9B=B4,=20BASE?= =?UTF-8?q?=20PLATFORM=20=E7=94=A8=E3=82=B9=E3=82=AF=E3=83=AA=E3=83=97?= =?UTF-8?q?=E3=83=88=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 46 +++++++++++++- mruby-3.0.0/build_config/toppers_arm_m7.rb | 71 ++++++++++++++++++++++ mruby-3.0.0/lib/mruby/build.rb | 2 +- 3 files changed, 117 insertions(+), 2 deletions(-) create mode 100644 mruby-3.0.0/build_config/toppers_arm_m7.rb diff --git a/README.md b/README.md index 28441a9..439e22d 100644 --- a/README.md +++ b/README.md @@ -123,7 +123,50 @@ Makefile の修正が終わりましたら、ビルドします。 これは ROM の開始アドレスですが、使用する CPU やボードに依存します。RAM 実行版では RAM の開始アドレスである 0x20000000 になっていましたので、併せて確認してみてください。 -### 現在の状況 +## mruby VM のビルド + +先に mruby をビルドしておきます。 +ホスト環境用と、ARM 用をビルドします。 + +### ホスト環境用をビルド + +初めにホスト用の mruby をビルドします。 +これは、mruby コンパイラ mrbc を使用するため必要となります。 + + % cd mruby-3.0.0 + % make + +### ビルドスクリプトの変更 + +arm 用 mruby をビルドする前に、ビルドスクリプトを少し変更します。 + +mruby のビルドスクリプトを実行すると、コンパイラを呼び出すときに、絶対パスでファイル名を指定するように組まれています。 + +今回使用する ARM コンパイラは、非 cygwin のものであるため、このことが問題になります。 +相対パスであれば、問題ありません。 + +本格的な修正案は、ykominami さんが、[こちら](https://github.com/ykominami/mruby) で相対パスを指定する拡張を公開してくだっていますが、ここでは安直に相対パスを指定するように変更します。 + +[mruby-3.0.0/lib/mruby/build.rb](https://github.com/hiro22022/mruby-TECS_on_TOPPERS_BASE_PLATFORM/blob/main/mruby-3.0.0/lib/mruby/build.rb) の filename メソッドを変更します。 + + 変更前) # name.gsub('/', file_separator) + 変更後) name.relative_path.gsub('/', file_separator) + +### ARM 用 mruby のビルド + +TOPPERS BASE PLATFORM に合わせたクロスビルド用のスクリプト +[mruby-3.0.0/build_config/toppers_arm_m7.rb](https://github.com/hiro22022/mruby-TECS_on_TOPPERS_BASE_PLATFORM/blob/main/mruby-3.0.0/build_config/toppers_arm_m7.rb) +を用意します。 + +コンパイラのオプションは、Makefile.target, Makefile.chip で指定されているものと合わせる必要があります。 +合っていなくても、リンク時にエラーにならないので、ビルド後に動作しない場合、チェックすべき一つになります。 + +ビルドコマンドは、以下の通りです。rake コマンドにクロスビルド用のスクリプトを指定します。 + + % rake MRUBY_CONFIG=toppers_arm_m7 + + +## 現在の状況 1) 初期チェックイン asp_baseplatformv1.3.0, mruby-3.0.0 1) 追加チェックイン asp-1.9.3, asp_arch_arm_m7_gcc, TLSF-2.4.6 @@ -131,4 +174,5 @@ Makefile の修正が終わりましたら、ビルドします。 1) 方針、進め方まで記載 1) 非 TECS 版 sample1 のビルド 1) 非 TECS 版 sample1 を ROM 化対応してビルド +1) mruby VM のビルド diff --git a/mruby-3.0.0/build_config/toppers_arm_m7.rb b/mruby-3.0.0/build_config/toppers_arm_m7.rb new file mode 100644 index 0000000..290d6cc --- /dev/null +++ b/mruby-3.0.0/build_config/toppers_arm_m7.rb @@ -0,0 +1,71 @@ +# Cross Compiling configuration for TOPPERS BASE PLATFORM ARM Cortex-M7 +# +MRuby::CrossBuild.new("toppers_arm_m7") do |conf| + toolchain :gcc + + [conf.cc].each do |cc| + cc.command = ENV['CC'] || 'arm-none-eabi-gcc' + cc.flags = [ENV['CFLAGS'] || %w(-mlittle-endian -nostartfiles -mthumb -mcpu=cortex-m7 -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -Wall -O2)] + cc.include_paths = ["#{MRUBY_ROOT}/include", "../asp/include", "../asp/target/stm32f7discovery_gcc/", "../asp/arch"], + + cc.defines = ["DISABLE_GEMS", "ev3rt"] # %w(DISABLE_GEMS) + cc.option_include_path = '-I%s' + cc.option_define = '-D%s' + cc.compile_options = '%{flags} -MMD -o %{outfile} -c %{infile}' + 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.linker do |linker| + linker.command = ENV['LD'] || 'arm-none-eabi-gcc' + linker.flags = [ENV['LDFLAGS'] || %w()] + linker.libraries = %w(m) + linker.library_paths = [] + linker.option_library = '-l%s' + linker.option_library_path = '-L%s' + linker.link_options = '%{flags} -o %{outfile} %{objs} %{flags_before_libraries} %{libs} %{flags_after_libraries}' + end + + conf.archiver do |archiver| + # archiver.command = "#{BIN_PATH}/arm-none-eabi-ar" + archiver.command = "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 + +=begin + #gems from core + conf.gem :core => "mruby-print" + conf.gem :core => "mruby-math" + conf.gem :core => "mruby-enum-ext" +=end + + # Use standard print/puts/p + conf.gem :core => "mruby-print" + # Use extended toplevel object (main) methods +# conf.gem :core => "mruby-toplevel-ext" + # Use standard Math module + # conf.gem :core => "mruby-math" + # Use mruby-compiler to build other mrbgems +# conf.gem :core => "mruby-compiler" +# conf.gem :core => "mruby-array-ext" + + #light-weight regular expression +# conf.gem :github => "masamitsu-murase/mruby-hs-regexp", :branch => "master" + +end diff --git a/mruby-3.0.0/lib/mruby/build.rb b/mruby-3.0.0/lib/mruby/build.rb index d6eabd7..a263810 100644 --- a/mruby-3.0.0/lib/mruby/build.rb +++ b/mruby-3.0.0/lib/mruby/build.rb @@ -376,7 +376,7 @@ def filename(name) if name.is_a?(Array) name.flatten.map { |n| filename(n) } else - name.gsub('/', file_separator) + name.relative_path.gsub('/', file_separator) end end