ISSのインタフェースを統一するために、まずはコア部とインタフェース部を分離する。
現在のISSは、基本的に以下のようなインタフェースを持っている。
図では、コントロール部とCPUコア部を分離して記述しているが、実際には同じ階層としてビルドしていた。これをライブラリ化することにより、インタフェースを各コアで統一して、ヘテロマルチコア環境を構築できるようになりたい。 インタフェースを統一すれば、マルチコアのためのライブラリを複数個簡単にインスタンスできるようになる。
このためには、CMakeLists.txtを変更すれば良い。add_libraryを使えばその部分だけライブラリとしてビルドされる。
+add_library (core_mips32 + ../src/mips_env.cpp + ../src/env.cpp + ../src/trace.cpp + ../src/inst_print.cpp + ../src/inst_mnemonic.cpp + ../src/inst_mips_init.cpp + ../src/inst_decoder.cpp + ../src/inst_mips.cpp + ../src/inst_operand.cpp + ../src/dec_utils.cpp + ../src/memory_block.cpp + ../src/mem_body.cpp + ../src/mips_sysreg_func.cpp + ../src/mips_sysreg_rw.cpp + ../src/mips_sysreg_str.cpp + ../src/module_uart.cpp + ../src/module_ide.cpp + ) +target_link_libraries (swimmer_mips core_mips32)
このように記述するだけで、libcore_mips32.a ライブラリが作成された。
$ ls -1 CMakeCache.txt CMakeFiles cmake_install.cmake CMakeLists.txt config.h config.h.in core coremark.log init.lua libcore_mips32.a ## libcore_mips32.a ライブラリが自動的に作成される Makefile output.log swimmer_mips