Skip to content

Commit

Permalink
mruby のビルド: ビルドスクリプトの変更, BASE PLATFORM 用スクリプト追加
Browse files Browse the repository at this point in the history
  • Loading branch information
hiro22022 committed Aug 12, 2021
1 parent 945ca2f commit a77e09e
Show file tree
Hide file tree
Showing 3 changed files with 117 additions and 2 deletions.
46 changes: 45 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -123,12 +123,56 @@ 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
1) 追加チェックイン tecsgen-1.7.0
1) 方針、進め方まで記載
1) 非 TECS 版 sample1 のビルド
1) 非 TECS 版 sample1 を ROM 化対応してビルド
1) mruby VM のビルド

71 changes: 71 additions & 0 deletions mruby-3.0.0/build_config/toppers_arm_m7.rb
Original file line number Diff line number Diff line change
@@ -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
2 changes: 1 addition & 1 deletion mruby-3.0.0/lib/mruby/build.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down

0 comments on commit a77e09e

Please sign in to comment.