tecscde 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (237) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/.rubocop.yml +125 -0
  4. data/.rubocop_todo.yml +188 -0
  5. data/CHANGELOG.md +3 -0
  6. data/Gemfile +6 -0
  7. data/LICENSE +46 -0
  8. data/LICENSE.ja +32 -0
  9. data/README.ja.md +200 -0
  10. data/README.md +35 -0
  11. data/Rakefile +27 -0
  12. data/bin/tecscde +64 -0
  13. data/glade/tecscde-cell-property.glade +205 -0
  14. data/glade/tecscde-celltype-property.glade +172 -0
  15. data/glade/tecscde-celltype.glade +414 -0
  16. data/glade/tecscde-export.glade +161 -0
  17. data/glade/test-cell-plugin.rb +51 -0
  18. data/glade/test-cell-property.rb +35 -0
  19. data/glade/test-export.rb +35 -0
  20. data/glade/test-palette.rb +26 -0
  21. data/lib/tcflow.rb +148 -0
  22. data/lib/tecscde.rb +65 -0
  23. data/lib/tecscde/NewCell.png +0 -0
  24. data/lib/tecscde/SelectArrow.png +0 -0
  25. data/lib/tecscde/attr_tree_view.rb +253 -0
  26. data/lib/tecscde/cell_plugin_dialog.glade +294 -0
  27. data/lib/tecscde/cell_plugin_dialog.rb +89 -0
  28. data/lib/tecscde/celltype_tree_view.rb +105 -0
  29. data/lib/tecscde/change_set_control.rb +35 -0
  30. data/lib/tecscde/change_set_control/change_set.rb +32 -0
  31. data/lib/tecscde/change_set_control/change_set_manager.rb +62 -0
  32. data/lib/tecscde/command.rb +35 -0
  33. data/lib/tecscde/control.rb +491 -0
  34. data/lib/tecscde/highlighted_objects.rb +180 -0
  35. data/lib/tecscde/logger.rb +74 -0
  36. data/lib/tecscde/main_view_and_model.rb +80 -0
  37. data/lib/tecscde/palette.glade +553 -0
  38. data/lib/tecscde/palette.rb +174 -0
  39. data/lib/tecscde/preferences.glade +117 -0
  40. data/lib/tecscde/preferences.rb +44 -0
  41. data/lib/tecscde/tecs_model.rb +1137 -0
  42. data/lib/tecscde/tecs_model/hbar.rb +68 -0
  43. data/lib/tecscde/tecs_model/tm_c_port.rb +122 -0
  44. data/lib/tecscde/tecs_model/tm_c_port_array.rb +98 -0
  45. data/lib/tecscde/tecs_model/tm_cell.rb +496 -0
  46. data/lib/tecscde/tecs_model/tm_e_port.rb +126 -0
  47. data/lib/tecscde/tecs_model/tm_e_port_array.rb +78 -0
  48. data/lib/tecscde/tecs_model/tm_join.rb +293 -0
  49. data/lib/tecscde/tecs_model/tm_join_bar.rb +146 -0
  50. data/lib/tecscde/tecs_model/tm_port.rb +238 -0
  51. data/lib/tecscde/tecs_model/tm_port_array.rb +246 -0
  52. data/lib/tecscde/tecs_model/tm_region.rb +107 -0
  53. data/lib/tecscde/tecs_model/tm_uneditable.rb +68 -0
  54. data/lib/tecscde/tecs_model/vbar.rb +68 -0
  55. data/lib/tecscde/templates/_cell_info.cde.erb +15 -0
  56. data/lib/tecscde/templates/_join_info.cde.erb +28 -0
  57. data/lib/tecscde/templates/main.cde.erb +49 -0
  58. data/lib/tecscde/tm_object.rb +91 -0
  59. data/lib/tecscde/version.rb +4 -0
  60. data/lib/tecscde/view.rb +58 -0
  61. data/lib/tecscde/view/cairo_matrix.rb +90 -0
  62. data/lib/tecscde/view/canvas.rb +59 -0
  63. data/lib/tecscde/view/constants.rb +114 -0
  64. data/lib/tecscde/view/main_view.rb +1245 -0
  65. data/lib/tecsflow.rb +475 -0
  66. data/lib/tecsflow/C_parser.tab.rb +2471 -0
  67. data/lib/tecsflow/C_parser.y.rb +1087 -0
  68. data/lib/tecsflow/classes.rb +421 -0
  69. data/lib/tecsgen.rb +581 -0
  70. data/lib/tecsgen/core/C_parser.tab.rb +2477 -0
  71. data/lib/tecsgen/core/C_parser.y +1032 -0
  72. data/lib/tecsgen/core/bnf-deb.tab.rb +5193 -0
  73. data/lib/tecsgen/core/bnf.tab.rb +5193 -0
  74. data/lib/tecsgen/core/bnf.y +2211 -0
  75. data/lib/tecsgen/core/componentobj.rb +7901 -0
  76. data/lib/tecsgen/core/ctypes.rb +226 -0
  77. data/lib/tecsgen/core/expression.rb +1031 -0
  78. data/lib/tecsgen/core/gen_xml.rb +374 -0
  79. data/lib/tecsgen/core/generate.rb +5206 -0
  80. data/lib/tecsgen/core/location.rb +116 -0
  81. data/lib/tecsgen/core/messages.rb +101 -0
  82. data/lib/tecsgen/core/optimize.rb +456 -0
  83. data/lib/tecsgen/core/plugin.rb +332 -0
  84. data/lib/tecsgen/core/pluginModule.rb +165 -0
  85. data/lib/tecsgen/core/syntaxobj.rb +1234 -0
  86. data/lib/tecsgen/core/tecs_lang.rb +306 -0
  87. data/lib/tecsgen/core/tecsgen.rb +453 -0
  88. data/lib/tecsgen/core/tecsinfo.rb +860 -0
  89. data/lib/tecsgen/core/tool_info.rb +258 -0
  90. data/lib/tecsgen/core/types.rb +1632 -0
  91. data/lib/tecsgen/core/unjoin_plugin.rb +218 -0
  92. data/lib/tecsgen/core/value.rb +650 -0
  93. data/lib/tecsgen/messages/messages_console_en_US.rb +1171 -0
  94. data/lib/tecsgen/messages/messages_console_ja_JP.rb +1171 -0
  95. data/lib/tecsgen/messages/messages_file_en_US.rb +334 -0
  96. data/lib/tecsgen/messages/messages_file_ja_JP.rb +163 -0
  97. data/lib/tecsgen/plugin/ATK1AlarmPlugin.rb +196 -0
  98. data/lib/tecsgen/plugin/ATK1DelayTaskPlugin.rb +106 -0
  99. data/lib/tecsgen/plugin/ATK1EventPlugin.rb +147 -0
  100. data/lib/tecsgen/plugin/ATK1ISRPlugin.rb +174 -0
  101. data/lib/tecsgen/plugin/ATK1KernelPlugin.rb +287 -0
  102. data/lib/tecsgen/plugin/ATK1ResourcePlugin.rb +124 -0
  103. data/lib/tecsgen/plugin/ATK1TaskPlugin.rb +220 -0
  104. data/lib/tecsgen/plugin/C2TECSBridgePlugin.rb +210 -0
  105. data/lib/tecsgen/plugin/CellPlugin.rb +61 -0
  106. data/lib/tecsgen/plugin/CelltypePlugin.rb +72 -0
  107. data/lib/tecsgen/plugin/CompositePlugin.rb +66 -0
  108. data/lib/tecsgen/plugin/DomainPlugin.rb +89 -0
  109. data/lib/tecsgen/plugin/HRP2AlarmHandlerPlugin.rb +76 -0
  110. data/lib/tecsgen/plugin/HRP2Cache.rb +1 -0
  111. data/lib/tecsgen/plugin/HRP2CyclicHandlerPlugin.rb +75 -0
  112. data/lib/tecsgen/plugin/HRP2DataqueuePlugin.rb +68 -0
  113. data/lib/tecsgen/plugin/HRP2EventflagPlugin.rb +68 -0
  114. data/lib/tecsgen/plugin/HRP2FixedSizeMemoryPoolPlugin.rb +68 -0
  115. data/lib/tecsgen/plugin/HRP2HandlerPlugin.rb +117 -0
  116. data/lib/tecsgen/plugin/HRP2KernelObjectPlugin.rb +372 -0
  117. data/lib/tecsgen/plugin/HRP2ObjectPlugin.rb +94 -0
  118. data/lib/tecsgen/plugin/HRP2Plugin.rb +140 -0
  119. data/lib/tecsgen/plugin/HRP2PostHook.rb +111 -0
  120. data/lib/tecsgen/plugin/HRP2PriorityDataqueuePlugin.rb +66 -0
  121. data/lib/tecsgen/plugin/HRP2RPCPlugin.rb +319 -0
  122. data/lib/tecsgen/plugin/HRP2SVCPlugin.rb +473 -0
  123. data/lib/tecsgen/plugin/HRP2SemaphorePlugin.rb +67 -0
  124. data/lib/tecsgen/plugin/HRP2TaskPlugin.rb +200 -0
  125. data/lib/tecsgen/plugin/HRPHandlerPlugin.rb +125 -0
  126. data/lib/tecsgen/plugin/HRPKernelObjectManager.rb +72 -0
  127. data/lib/tecsgen/plugin/HRPKernelObjectPlugin.rb +333 -0
  128. data/lib/tecsgen/plugin/HRPObjectPlugin.rb +93 -0
  129. data/lib/tecsgen/plugin/HRPPlugin.rb +356 -0
  130. data/lib/tecsgen/plugin/HRPRPCPlugin.rb +407 -0
  131. data/lib/tecsgen/plugin/HRPSVCPlugin.rb +859 -0
  132. data/lib/tecsgen/plugin/HRPTaskPlugin.rb +107 -0
  133. data/lib/tecsgen/plugin/Mruby2CBridgePlugin.rb +86 -0
  134. data/lib/tecsgen/plugin/MrubyBridgeCellPlugin.rb +264 -0
  135. data/lib/tecsgen/plugin/MrubyBridgeCelltypePlugin.rb +293 -0
  136. data/lib/tecsgen/plugin/MrubyBridgeCompositePlugin.rb +49 -0
  137. data/lib/tecsgen/plugin/MrubyBridgePlugin.rb +67 -0
  138. data/lib/tecsgen/plugin/MrubyBridgeSignaturePlugin.rb +1307 -0
  139. data/lib/tecsgen/plugin/MrubyInfoBridgePlugin.rb +14 -0
  140. data/lib/tecsgen/plugin/MrubyInfoBridgeSignaturePlugin.rb +994 -0
  141. data/lib/tecsgen/plugin/MultiPlugin.rb +57 -0
  142. data/lib/tecsgen/plugin/NotifierPlugin.rb +1217 -0
  143. data/lib/tecsgen/plugin/OpaqueMarshalerPlugin.rb +81 -0
  144. data/lib/tecsgen/plugin/OpaqueRPCPlugin.rb +323 -0
  145. data/lib/tecsgen/plugin/RPCPlugin.rb +266 -0
  146. data/lib/tecsgen/plugin/RepeatCellPlugin.rb +166 -0
  147. data/lib/tecsgen/plugin/RepeatJoinPlugin.rb +130 -0
  148. data/lib/tecsgen/plugin/SharedOpaqueRPCPlugin.rb +357 -0
  149. data/lib/tecsgen/plugin/SharedRPCPlugin.rb +329 -0
  150. data/lib/tecsgen/plugin/SignaturePlugin.rb +77 -0
  151. data/lib/tecsgen/plugin/TECS2CBridgePlugin.rb +178 -0
  152. data/lib/tecsgen/plugin/TECSInfoPlugin.rb +280 -0
  153. data/lib/tecsgen/plugin/ThroughPlugin.rb +333 -0
  154. data/lib/tecsgen/plugin/TracePlugin.rb +484 -0
  155. data/lib/tecsgen/plugin/lib/GenHRP2Marshaler.rb +761 -0
  156. data/lib/tecsgen/plugin/lib/GenOpaqueMarshaler.rb +1107 -0
  157. data/lib/tecsgen/plugin/lib/GenParamCopy.rb +365 -0
  158. data/lib/tecsgen/plugin/lib/GenTransparentMarshaler.rb +683 -0
  159. data/lib/tecsgen/plugin/lib/MrubyBridgeCelltypePluginModule.rb +283 -0
  160. data/lib/tecsgen/plugin/lib/MrubyBridgeSignaturePluginModule.rb +277 -0
  161. data/lib/tecsgen/version.rb +6 -0
  162. data/samples/FigureSamples/active/active.cde +104 -0
  163. data/samples/FigureSamples/active/active.cdl +20 -0
  164. data/samples/FigureSamples/active/active.pdf +0 -0
  165. data/samples/FigureSamples/active/active.png +0 -0
  166. data/samples/FigureSamples/active/gen/tmp_C_src.c +36 -0
  167. data/samples/FigureSamples/active/gen/tmp_cygwin_tecs.h +1908 -0
  168. data/samples/FigureSamples/active/gen/tmp_plugin_post_code.cdl +0 -0
  169. data/samples/FigureSamples/allocator/allocator-internal.png +0 -0
  170. data/samples/FigureSamples/allocator/allocator.cde +171 -0
  171. data/samples/FigureSamples/allocator/allocator.cdl +58 -0
  172. data/samples/FigureSamples/allocator/allocator.png +0 -0
  173. data/samples/FigureSamples/basic/Makefile +87 -0
  174. data/samples/FigureSamples/basic/SimpleSample-trace.cdl +50 -0
  175. data/samples/FigureSamples/basic/SimpleSample.cde +91 -0
  176. data/samples/FigureSamples/basic/SimpleSample.cdl +47 -0
  177. data/samples/FigureSamples/basic/basic.cde +93 -0
  178. data/samples/FigureSamples/basic/basic.cdl +46 -0
  179. data/samples/FigureSamples/basic/basic.png +0 -0
  180. data/samples/FigureSamples/callback/callback.cde +130 -0
  181. data/samples/FigureSamples/callback/callback.cdl +29 -0
  182. data/samples/FigureSamples/callback/callback.png +0 -0
  183. data/samples/FigureSamples/carray/carray.cde +144 -0
  184. data/samples/FigureSamples/carray/carray.cdl +38 -0
  185. data/samples/FigureSamples/carray/carray.png +0 -0
  186. data/samples/FigureSamples/cearray/cearray.cde +314 -0
  187. data/samples/FigureSamples/cearray/cearray.cdl +60 -0
  188. data/samples/FigureSamples/cearray/cearray.png +0 -0
  189. data/samples/FigureSamples/composite/composite-internal.png +0 -0
  190. data/samples/FigureSamples/composite/composite.cde +216 -0
  191. data/samples/FigureSamples/composite/composite.cdl +95 -0
  192. data/samples/FigureSamples/composite/composite.png +0 -0
  193. data/samples/FigureSamples/earray/earray.cde +142 -0
  194. data/samples/FigureSamples/earray/earray.cdl +38 -0
  195. data/samples/FigureSamples/earray/earray.png +0 -0
  196. data/samples/FigureSamples/join/Makefile +87 -0
  197. data/samples/FigureSamples/join/join.cde +132 -0
  198. data/samples/FigureSamples/join/join.cdl +40 -0
  199. data/samples/FigureSamples/join/join.png +0 -0
  200. data/samples/FigureSamples/relay/Makefile +99 -0
  201. data/samples/FigureSamples/relay/relay-internal.png +0 -0
  202. data/samples/FigureSamples/relay/relay.cde +284 -0
  203. data/samples/FigureSamples/relay/relay.cdl +52 -0
  204. data/samples/FigureSamples/relay/relay.png +0 -0
  205. data/samples/FigureSamples/rpc/Makefile +123 -0
  206. data/samples/FigureSamples/rpc/rpc-expand.png +0 -0
  207. data/samples/FigureSamples/rpc/rpc.cde +245 -0
  208. data/samples/FigureSamples/rpc/rpc.png +0 -0
  209. data/samples/FigureSamples/rpc/rpc_sample.cdl +53 -0
  210. data/samples/SimpleSample/Makefile +25 -0
  211. data/samples/SimpleSample/SimpleSample/Makefile +86 -0
  212. data/samples/SimpleSample/SimpleSample/Makefile-trace +91 -0
  213. data/samples/SimpleSample/SimpleSample/README.txt +106 -0
  214. data/samples/SimpleSample/SimpleSample/SimpleSample-trace.cdl +50 -0
  215. data/samples/SimpleSample/SimpleSample/SimpleSample.cdl +45 -0
  216. data/samples/SimpleSample/SimpleSample/src/tSample.c +77 -0
  217. data/samples/SimpleSample/SimpleSample/src/tSimple.c +48 -0
  218. data/samples/SimpleSample/SimpleSample/src/tecs-types.h +27 -0
  219. data/samples/SimpleSample/SimpleSampleOpaqueRPC/Makefile +51 -0
  220. data/samples/SimpleSample/SimpleSampleOpaqueRPC/Makefile-trace +91 -0
  221. data/samples/SimpleSample/SimpleSampleOpaqueRPC/README.txt +106 -0
  222. data/samples/SimpleSample/SimpleSampleOpaqueRPC/SimpleSample-trace.cdl +80 -0
  223. data/samples/SimpleSample/SimpleSampleOpaqueRPC/SimpleSample.cdl +77 -0
  224. data/samples/SimpleSample/SimpleSampleOpaqueRPC/rSample/Makefile +112 -0
  225. data/samples/SimpleSample/SimpleSampleOpaqueRPC/rSimple/Makefile +109 -0
  226. data/samples/SimpleSample/SimpleSampleOpaqueRPC/src/tSample.c +80 -0
  227. data/samples/SimpleSample/SimpleSampleOpaqueRPC/src/tSimple.c +47 -0
  228. data/samples/SimpleSample/SimpleSampleOpaqueRPC/src/tTaskMain.c +66 -0
  229. data/samples/SimpleSample/SimpleSampleOpaqueRPC/src/tecs-types.h +27 -0
  230. data/samples/SimpleSample/SimpleSampleTransparentRPC/Makefile +125 -0
  231. data/samples/SimpleSample/SimpleSampleTransparentRPC/Makefile-trace +130 -0
  232. data/samples/SimpleSample/SimpleSampleTransparentRPC/SimpleSample-trace.cdl +54 -0
  233. data/samples/SimpleSample/SimpleSampleTransparentRPC/SimpleSample.cdl +53 -0
  234. data/samples/SimpleSample/SimpleSampleTransparentRPC/src/tSample.c +80 -0
  235. data/samples/SimpleSample/SimpleSampleTransparentRPC/src/tSimple.c +54 -0
  236. data/tecscde.gemspec +41 -0
  237. metadata +353 -0
@@ -0,0 +1,333 @@
1
+ #
2
+ # TECS Generator
3
+ # Generator for TOPPERS Embedded Component System
4
+ #
5
+ # Copyright (C) 2008-2018 by TOPPERS Project
6
+ #--
7
+ # 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
8
+ # ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
9
+ # 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
10
+ # (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
11
+ # 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
12
+ # スコード中に含まれていること.
13
+ # (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
14
+ # 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
15
+ # 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
16
+ # の無保証規定を掲載すること.
17
+ # (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
18
+ # 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
19
+ # と.
20
+ # (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
21
+ # 作権表示,この利用条件および下記の無保証規定を掲載すること.
22
+ # (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
23
+ # 報告すること.
24
+ # (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
25
+ # 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
26
+ # また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
27
+ # 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
28
+ # 免責すること.
29
+ #
30
+ # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
31
+ # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
32
+ # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
33
+ # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
34
+ # の責任を負わない.
35
+ #
36
+ #
37
+ # $Id: HRPKernelObjectPlugin.rb 2952 2018-05-07 10:19:07Z okuma-top $
38
+ #++
39
+
40
+ #== celltype プラグインの共通の親クラス
41
+ class HRPKernelObjectPlugin < CelltypePlugin
42
+ # @@obj_hash = {}
43
+
44
+ # @celltype:: Celltype
45
+ # @option:: String :オプション文字列
46
+ def initialize(celltype, option)
47
+ super
48
+ #
49
+ # それぞれのカーネルオブジェクトを解析対象セルタイプに追加
50
+ # 目的:
51
+ # - カーネルオブジェクトのセルをメモリ保護対象外とする
52
+ # - カーネルオブジェクト本体の管理はTECSでなくOSで実施するため
53
+ # - カーネルオブジェクトのセルへのアクセスを直接関数呼出し
54
+ #  とする
55
+ # - システムサービス呼出しはOSが提供するため
56
+ HRPKernelObjectPlugin.set_celltype(celltype)
57
+ end
58
+
59
+ #=== HRPKernelObjectPlugin#print_cfg_cre
60
+ # 各種カーネルオブジェクトのCRE_*の出力
61
+ # file:: FILE: 出力先ファイル
62
+ # val :: string: カーネルオブジェクトの属性の解析結果
63
+ # tab :: string: インデント用のtab
64
+ def print_cfg_cre(file, cell, val, tab)
65
+ raise "called virtual method print_cfg_cre in #{@celltype.get_name} plugin"
66
+ end
67
+
68
+ #=== HRPKernelObjectPlugin#print_cfg_sac
69
+ # 各種カーネルオブジェクトのSAC_*の出力
70
+ # file:: FILE: 出力先ファイル
71
+ # val :: string: カーネルオブジェクトの属性の解析結果
72
+ # acv :: string: アクセスベクタ
73
+ def print_cfg_sac(file, val, acv)
74
+ raise "called virtual method print_cfg_sac in #{@celltype.get_name} plugin"
75
+ end
76
+
77
+ #
78
+ # セルタイププラグインの本体メソッド
79
+ # - 静的APIの生成
80
+ # file:: FILE: 出力先ファイル
81
+ #
82
+ def gen_factory(file)
83
+ dbgPrint "===== begin #{@celltype.get_name} plugin =====\n"
84
+
85
+ #
86
+ # 対象となるすべてのセルについて、受け口に結合されている
87
+ # セルの所属ドメインを解析
88
+ # - 生成すべきcfgファイル名を取得するために必要
89
+ #
90
+ if !HRPKernelObjectPlugin.isChecked
91
+ HRPKernelObjectPlugin.check_referenced_cells
92
+ else
93
+ dbgPrint "***** already checked\n"
94
+ end
95
+
96
+ # 追記するために AppFile を使う(文字コード変換されない)
97
+ file2 = AppFile.open("#{$gen}/tecsgen.cfg")
98
+ file2.print "\n/* Generated by #{self.class.name} */\n\n"
99
+
100
+ @celltype.get_cell_list.each {|cell|
101
+ if cell.is_generate?
102
+ dbgPrint "===== begin check my domain #{cell.get_name} =====\n"
103
+ #
104
+ # カーネルオブジェクトの属性を,valにコピー
105
+ #
106
+ val = {}
107
+ @celltype.get_attribute_list.each{|a|
108
+ # p a.get_name
109
+ if a.get_type.is_a?(ArrayType)
110
+ val[a.get_name] = []
111
+ if j = cell.get_join_list.get_item(a.get_name)
112
+ # セル生成時に初期化する場合
113
+ j.get_rhs.each {|elem|
114
+ val[a.get_name] << elem.to_s
115
+ }
116
+ elsif i = a.get_initializer
117
+ # セルタイプの初期化値を使う場合
118
+ i.each {|elem|
119
+ val[a.get_name] << elem.to_s
120
+ }
121
+ else
122
+ raise "attribute is not initialized"
123
+ end
124
+ else
125
+ if j = cell.get_join_list.get_item(a.get_name)
126
+ # セル生成時に初期化する場合
127
+ val[a.get_name] = j.get_rhs.to_s
128
+ elsif i = a.get_initializer
129
+ # セルタイプの初期化値を使う場合
130
+ val[a.get_name] = i.to_s
131
+ else
132
+ raise "attribute is not initialized"
133
+ end
134
+ end
135
+ }
136
+ # generate.rbを参考に
137
+ # $id$を置換
138
+ if val[:id].nil? != true
139
+ name_array = @celltype.get_name_array(cell)
140
+ val[:id] = @celltype.subst_name(val[:id], name_array)
141
+ end
142
+ # $cbp$の代わり
143
+ cell_domain_root = cell.get_region.get_domain_root
144
+ cell_domain_type = cell.get_region.get_domain_root.get_domain_type
145
+
146
+ # CRE_XXX/DEF_XXXの生成
147
+ if cell_domain_type.get_option.to_s != "OutOfDomain"
148
+ # 保護ドメインに属する場合
149
+ if !HRPKernelObjectPlugin.include_region(cell_domain_root.get_name.to_s)
150
+ # その保護ドメインの.cfgが生成されていない場合
151
+ HRPKernelObjectPlugin.set_region_list(cell_domain_root.get_name.to_s)
152
+ dbgPrint "~~~~~ #{cell_domain_root.get_name} is registered!\n"
153
+
154
+ # # if cell.get_region.get_param == :KERNEL_DOMAIN
155
+ # if cell_domain_type.get_option.to_s == "kernel"
156
+ # file2.print "KERNEL_DOMAIN{\n"
157
+ # else
158
+ # file2.print "DOMAIN(#{cell_domain_root.get_name.to_s}){\n"
159
+ # end
160
+ # file2.puts "\tINCLUDE(\"#{$gen}/tecsgen_#{cell_domain_root.get_name.to_s}.cfg\");"
161
+ # file2.puts "}\n"
162
+ else
163
+ dbgPrint "~~~~~ #{cell.get_region.get_namespace_path} is included in"
164
+ # p @@region_list
165
+ end
166
+ file3 = AppFile.open("#{$gen}/tecsgen_#{cell_domain_root.get_global_name}.cfg")
167
+ print_cfg_cre(file3, cell, val, "")
168
+ file3.close
169
+ else
170
+ # 無所属の場合
171
+ dbgPrint "~~~~~ #{cell_domain_root.get_namespace_path} is OutOfDomain\n"
172
+ # print "~~~~~ #{cell_domain_root.get_namespace_path} is OutOfDomain\n"
173
+ # p cell_domain_root.get_name
174
+ if cell_domain_root.get_name == "::"
175
+ print_cfg_cre(file2, cell, val, "")
176
+ else
177
+ # if !HRPKernelObjectPlugin.include_region(cell_domain_root.get_name.to_s)
178
+ # # その保護ドメインの.cfgが生成されていない場合
179
+ # HRPKernelObjectPlugin.set_region_list(cell_domain_root.get_name.to_s)
180
+ # file2.puts "INCLUDE(\"#{$gen}/tecsgen_#{cell_domain_root.get_name.to_s}.cfg\");\n"
181
+ # end
182
+ file3 = AppFile.open("#{$gen}/tecsgen_#{cell_domain_root.get_name}.cfg")
183
+ print_cfg_cre(file3, cell, val, "")
184
+ file3.close
185
+ end
186
+
187
+ end
188
+
189
+ dbgPrint "===== end check my domain #{cell.get_name} =====\n"
190
+
191
+ #
192
+ # SAC_XXXの生成
193
+ #
194
+ if !val[:accessPattern1].nil?
195
+ dbgPrint "===== begin check regions #{cell.get_name} =====\n"
196
+ i = 0
197
+ acv = { \
198
+ :accessPattern1 => val[:accessPattern1], \
199
+ :accessPattern2 => val[:accessPattern2], \
200
+ :accessPattern3 => val[:accessPattern3], \
201
+ :accessPattern4 => val[:accessPattern4] \
202
+ }
203
+ acv_tmp = []
204
+ domain_roots = HRPPlugin.get_inter_domain_join_roots cell
205
+ # 結合先セルのドメインを加える
206
+ if cell_domain_type.get_kind != :OutOfDomain
207
+ domain_roots << cell_domain_root
208
+ end
209
+ domain_roots.each{|dr|
210
+ case dr.get_domain_type.get_kind
211
+ when :user
212
+ acv_tmp << "TACP(#{dr.get_name})"
213
+ when :kernel
214
+ acv_tmp << "TACP_KERNEL"
215
+ when :OutOfDomain
216
+ if cell_domain_type.get_kind == :OutOfDomain
217
+ # 呼び元も、呼び先も OutOfDomain の場合
218
+ acv_tmp << "TACP_SHARED"
219
+ end
220
+ end
221
+ }
222
+ acv_tmp.uniq!
223
+ if acv_tmp.length == 0
224
+ # 呼び先セルが無所属かつ、呼び元も無所属のみ、または結合無しの場合
225
+ acv_tmp = ["TACP_SHARED"]
226
+ end
227
+ b_info = false
228
+ b_warn = false
229
+ acv.each {|key, acp|
230
+ if !acp.nil?
231
+ if acp != "OMIT"
232
+ elsif cell_domain_type.get_kind != :OutOfDomain
233
+ # p "UserDomainCell or KernelDomainCell"
234
+ domain_roots = HRPPlugin.get_inter_domain_join_roots cell
235
+ domain_roots.each{|dr|
236
+ #
237
+ case dr.get_domain_type.get_kind
238
+ when :kernel
239
+ when :user
240
+ if dr.get_namespace_path != cell.get_region.get_domain_root.get_namespace_path
241
+ # 他のユーザードメインからの結合
242
+ if b_warn == false
243
+ cdl_error("HRP9999 '$1': kernel object joined from other user domain. kernel object joined from multi-user-domain must be placed out of domain", cell.get_name)
244
+ b_warn = true
245
+ end
246
+ end
247
+ when :OutOfDomain
248
+ if b_info == false
249
+ # 無所属からの結合
250
+ # cdl_error( "HRP9999 kernel object joined from out of domain" )
251
+ if cell_domain_type.get_kind == :OutOfDomain
252
+ # この情報は、不要と判断する (無所属から無所属へ結合があると、アクセス許可ベクタが設定されない)
253
+ # cdl_info2( cell.get_locale, "HRP9999 '$1': kernel object joined from out of domain, access vector is not set", cell.get_name )
254
+ b_info = true
255
+ end
256
+ end
257
+ else
258
+ raise "unknown domain kind"
259
+ end
260
+ }
261
+ # acv[key] = "TACP(#{cell_domain_root.get_name.to_s})"
262
+ else
263
+ # p "OutOfDomainCell"
264
+ # 無所属のセル
265
+ # 結合元ドメインに許可する
266
+ # 結合元に無所属のセルがあると、TACP_SHARED が設定される. フロー解析してドメインを特定できるのが、あるべき仕様
267
+ end
268
+ if acp == "OMIT"
269
+ acv[key] = acv_tmp.join("|")
270
+ end
271
+ end
272
+ }
273
+ # 各種SACの生成
274
+ domainOption = cell_domain_type.get_option
275
+ # p "domain_root ", cell.get_region.get_domain_root.get_name
276
+ if domainOption != "OutOfDomain" || cell.get_region.get_domain_root.get_name != "::"
277
+ # 保護ドメインに属する場合
278
+ file3 = AppFile.open("#{$gen}/tecsgen_#{cell.get_region.get_name}.cfg")
279
+ print_cfg_sac(file3, val, acv)
280
+ file3.close
281
+ else
282
+ # 無所属の場合
283
+ print_cfg_sac(file2, val, acv)
284
+ end
285
+
286
+ dbgPrint "===== end check regions #{cell.get_name} =====\n"
287
+ end
288
+ end
289
+ }
290
+ dbgPrint "===== end #{@celltype.get_name} plugin =====\n"
291
+ file2.close
292
+ end
293
+
294
+ # カーネルオブジェクトセルタイプの管理
295
+ # HRPKernelObjectPluginクラスに対してメソッド呼出しを行うことを想定
296
+ @@checked = false
297
+ @@celltype_list = []
298
+ @@region_list = []
299
+
300
+ def self.isChecked
301
+ return @@checked
302
+ end
303
+
304
+ def self.check_referenced_cells
305
+ dbgPrint "===== begin check registered celltype =====\n"
306
+ self.get_celltype_list.each {|ct|
307
+ dbgPrint(ct.get_name.to_s + "\n")
308
+ }
309
+ dbgPrint "===== end check registered celltype =====\n"
310
+
311
+ @@checked = true
312
+ end
313
+
314
+ def self.set_celltype(celltype)
315
+ @@celltype_list << celltype
316
+ end
317
+
318
+ def self.get_celltype_list
319
+ return @@celltype_list
320
+ end
321
+
322
+ def self.set_region_list(region)
323
+ @@region_list << region
324
+ end
325
+
326
+ def self.include_region(region)
327
+ return @@region_list.include?(region)
328
+ end
329
+
330
+ def self.include_celltype?(celltype)
331
+ return @@celltype_list.include?(celltype)
332
+ end
333
+ end
@@ -0,0 +1,93 @@
1
+ #
2
+ # TECS Generator
3
+ # Generator for TOPPERS Embedded Component System
4
+ #
5
+ # Copyright (C) 2008-2018 by TOPPERS Project
6
+ #--
7
+ # 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
8
+ # ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
9
+ # 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
10
+ # (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
11
+ # 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
12
+ # スコード中に含まれていること.
13
+ # (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
14
+ # 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
15
+ # 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
16
+ # の無保証規定を掲載すること.
17
+ # (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
18
+ # 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
19
+ # と.
20
+ # (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
21
+ # 作権表示,この利用条件および下記の無保証規定を掲載すること.
22
+ # (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
23
+ # 報告すること.
24
+ # (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
25
+ # 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
26
+ # また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
27
+ # 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
28
+ # 免責すること.
29
+ #
30
+ # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
31
+ # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
32
+ # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
33
+ # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
34
+ # の責任を負わない.
35
+ #
36
+ # $Id: HRPObjectPlugin.rb 2952 2018-05-07 10:19:07Z okuma-top $
37
+ #++
38
+
39
+ require_tecsgen_lib "HRPKernelObjectPlugin.rb"
40
+
41
+
42
+ class HRPObjectPlugin < HRPKernelObjectPlugin
43
+ @@api = {
44
+ "SEMAPHORE" => ["SEM", :id, :attribute, :initialCount, :maxCount],
45
+ "EVENTFLAG" => ["FLG", :id, :attribute, :flagPattern],
46
+ "DATAQUEUE" => ["DTQ", :id, :attribute, :dataCount, :dataqueueManagementBuffer],
47
+ "PRIORITY_DATAQUEUE" => ["PDQ", :id, :attribute, :dataCount, :maxDataPriority, :priorityDataqueueManagementBuffer],
48
+ "FIXED_SIZE_MEMORYPOOL" => ["MPF", :id, :attribute, :blockCount, :blockSize, :memoryPool, :memoryPoolManagementBuffer],
49
+ "KERNEL" => ["SYS"],
50
+ "MESSAGE_BUFFER" => ["MBF", :id, :attribute, :maxMessageSize, :bufferSize, :mbfmb],
51
+ "MUTEX" => ["MTX", :id, :attribute, :ceilingPriority]
52
+ }
53
+
54
+ #=== HRPObjectPlugin#print_cfg_cre
55
+ # CRE_XXXの出力
56
+ # file:: FILE: 出力先ファイル
57
+ # val :: string: カーネルオブジェクトの属性の解析結果
58
+ # tab :: string: インデント用のtab
59
+ def print_cfg_cre(file, cell, val, tab)
60
+ if @@api.has_key?(@plugin_arg_str) == false
61
+ raise "#{@plugin_arg_str} is unknown"
62
+ elsif @plugin_arg_str != "KERNEL"
63
+ arg_list = []
64
+ params = @@api[@plugin_arg_str]
65
+ if @plugin_arg_str == "MUTEX" && (val[:attribute] =~ /\bTA_CEILING\b/).nil?
66
+ slice_end = -2 # :ceilingPriority を外す
67
+ else
68
+ slice_end = -1
69
+ end
70
+ # p @plugin_arg_str, slice_end, val[:attribute], (val[:attribute] =~ /\bTA_CEILING\b/)
71
+ params.slice(2..slice_end).each {|attr|
72
+ arg_list << val[attr].to_s
73
+ }
74
+ file.print tab
75
+ file.puts "CRE_#{@@api[@plugin_arg_str].at(0)}(#{val[:id]}, { #{arg_list.join(", ")} });"
76
+ end
77
+ end
78
+
79
+ #=== HRPObjectPlugin#print_cfg_sac
80
+ # SAC_XXXの出力
81
+ # file:: FILE: 出力先ファイル
82
+ # val :: string: カーネルオブジェクトの属性の解析結果
83
+ # acv :: string: アクセスベクタ
84
+ def print_cfg_sac(file, val, acv)
85
+ if @@api.has_key?(@plugin_arg_str) == false
86
+ raise "#{@plugin_arg_str} is unknown"
87
+ elsif @plugin_arg_str != "KERNEL"
88
+ file.puts "SAC_#{@@api[@plugin_arg_str].at(0)}(#{val[:id]}, { #{acv[:accessPattern1]}, #{acv[:accessPattern2]}, #{acv[:accessPattern3]}, #{acv[:accessPattern4]} });"
89
+ else
90
+ file.puts "SAC_#{@@api[@plugin_arg_str].at(0)}({ #{acv[:accessPattern1]}, #{acv[:accessPattern2]}, #{acv[:accessPattern3]}, #{acv[:accessPattern4]} });"
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,356 @@
1
+ #
2
+ # TECS Generator
3
+ # Generator for TOPPERS Embedded Component System
4
+ #
5
+ # Copyright (C) 2014-2018 by TOPPERS Project
6
+ #--
7
+ # 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
8
+ # ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
9
+ # 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
10
+ # (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
11
+ # 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
12
+ # スコード中に含まれていること.
13
+ # (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
14
+ # 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
15
+ # 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
16
+ # の無保証規定を掲載すること.
17
+ # (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
18
+ # 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
19
+ # と.
20
+ # (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
21
+ # 作権表示,この利用条件および下記の無保証規定を掲載すること.
22
+ # (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
23
+ # 報告すること.
24
+ # (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
25
+ # 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
26
+ # また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
27
+ # 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
28
+ # 免責すること.
29
+ #
30
+ # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
31
+ # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
32
+ # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
33
+ # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
34
+ # の責任を負わない.
35
+ #
36
+ # $Id: HRPPlugin.rb 2952 2018-05-07 10:19:07Z okuma-top $
37
+ #++
38
+
39
+
40
+ require_tecsgen_lib "HRPKernelObjectManager.rb"
41
+ #
42
+ # 各メソッドの役割りは、DomainPlugin.rb を参照のこと
43
+ # HRPカーネル用ドメインプラグイン
44
+ class HRPPlugin < DomainPlugin
45
+
46
+ def initialize(region, name, option)
47
+ super
48
+ dbgPrint "HRPPlugin: initialize: region=#{region.get_name}, domainName=#{name}, option=#{option}\n"
49
+ @region = region
50
+ @name = name
51
+ case option
52
+ when "kernel", "user", "OutOfDomain"
53
+ # OK
54
+ @option = option
55
+ else
56
+ cdl_error("HRPPlugin: '$1' is unacceptable domain kind, specify 'kernel' or 'user'", option)
57
+ @option = "kernel" # とりあえず kernel を設定しておく
58
+ end
59
+ end
60
+
61
+ def add_through_plugin(join, current_region, next_region, through_type)
62
+ # join.get_owner:Cell 左辺のセル
63
+ # join.get_definition:Port 呼び口
64
+ # join.get_subscript:Integer or nil 呼び口配列の添数 (Join::@subscript の説明参照)
65
+ # join.get_cell:Cell 右辺のセル
66
+ # join.get_port_name:Symbol 受け口
67
+ # get_rhs_subscript:Integer or nil 受け口配列の添数 (Join::@rhs_subscript の説明参照)
68
+ # return []
69
+ dbgPrint "MyDomainPlugin: add_through_plugin: #{current_region.get_name}=>#{next_region.get_name}, #{join.get_owner.get_name}.#{join.get_definition.get_name}=>#{join.get_cell.get_name}.#{join.get_port_name}, #{through_type}\n"
70
+
71
+ # puts "=====Join Check Start====="
72
+ # puts "caller: #{join.get_owner.get_name.to_s}, callee: #{join.get_cell.get_name.to_s}"
73
+ # puts "=====Join Check param====="
74
+ current_domain = current_region.get_domain_root.get_domain_type
75
+ next_domain = next_region.get_domain_root.get_domain_type
76
+ # puts current_domain.get_option.to_s
77
+ # if !next_domain.nil?
78
+ # puts next_domain.get_option.to_s
79
+ # else
80
+ # puts "next domain is nil!"
81
+ # end
82
+
83
+ HRPPlugin.add_inter_domain_join_set join
84
+ # p join.get_cell.get_name
85
+ # p join.get_cell.get_real_celltype(join.get_rhs_port1).get_name
86
+ # if HRPKernelObjectManager.include_celltype?(join.get_cell.get_celltype.get_global_name) #oyama: get_name => get_global_name
87
+ if HRPKernelObjectManager.include_celltype?(join.
88
+ get_cell.
89
+ get_real_celltype(join.get_rhs_port1).
90
+ get_global_name) # oyama: get_name => get_global_name
91
+ # 結合先がカーネルオブジェクトセル
92
+ # @plugin_body = HRP2SVCPlugin.new(cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell)
93
+ # 何もしないthrough
94
+ # puts "***** #{join.get_cell.get_celltype.get_name} is kernel object"
95
+ return []
96
+ # return [ :HRP2SVCPlugin, "channelCelltype=tMessagebufferChannel,noClientSemaphore=true" ]
97
+ # elsif @end_region.is_root?
98
+ # elsif next_region.get_option == OutOfDomain
99
+ # elsif next_domain.nil?
100
+ elsif next_domain.get_option.to_s == "OutOfDomain"
101
+ # # 結合先が無所属
102
+ # # 何もしないthrough
103
+ # # @plugin_body = HRP2SVCPlugin.new(cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell)
104
+ # puts "***** nil"
105
+ return []
106
+ # elsif @start_region.get_param != :KERNEL_DOMAIN && @end_region.get_param == :KERNEL_DOMAIN
107
+ elsif current_domain.get_option.to_s != "kernel" && next_domain.get_option.to_s == "kernel"
108
+ # ユーザドメインからカーネルドメインへの結合
109
+ # @plugin_body = HRP2SVCPlugin.new(cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell)
110
+ # puts "***** svc"
111
+ return [:HRPSVCPlugin, ""]
112
+ elsif current_domain != next_domain
113
+ # 別のユーザドメインへの結合
114
+ # @plugin_body = HRP2RPCPlugin.new(cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell)
115
+ # puts "***** rpc"
116
+ # return [ :HRPRPCPlugin, "channelCelltype=tMessagebufferChannel,noClientSemaphore=true" ]
117
+ # puts "HRPPlugin:RPC:PPAllocatorSize=256"
118
+ return [:HRPRPCPlugin, "noClientSemaphore=false,PPAllocatorSize=256"]
119
+ else
120
+ # その他
121
+ # 何もしないthrough
122
+ # @plugin_body = HRP2SVCPlugin.new(cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell)
123
+ dbgPrint "warning: at HRP Join Check"
124
+ return nil
125
+ end
126
+
127
+ # puts "=====Join Check End====="
128
+ end
129
+
130
+ def joinable?(current_region, next_region, through_type)
131
+ dbgPrint "MyDomainPlugin: joinable? from #{current_region.get_name} to #{next_region.get_name} (#{through_type})\n"
132
+ return true
133
+ end
134
+
135
+ #== ドメイン種別を返す
136
+ # return::Symbol :kernel, :user, :OutOfDomain
137
+ def get_kind
138
+ return @option.to_sym
139
+ end
140
+
141
+ def self.gen_post_code(file)
142
+ end
143
+
144
+ # ATT_MODを生成済みかどうか # 2017.8.27
145
+ @@generate_memory_module = false
146
+
147
+ @@include_extsvc_fncd = false # 17.07.26 暫定
148
+ #
149
+ # ATT_MODの生成
150
+ # gen_factory実行時には,すべてのセルタイププラグインを生成済みのはずなので,
151
+ # カーネルAPIコードのメモリ保護を省略できる.
152
+ #
153
+ def gen_factory
154
+ super
155
+
156
+ if @@include_extsvc_fncd == false
157
+ file = AppFile.open("#{$gen}/tecsgen.cfg")
158
+ file.print "/* HRPPlugin 001 */\n"
159
+ file.print "#include \"extsvc_fncode.h\"\n" ## 2017.7.26
160
+ file.close
161
+ @@include_extsvc_fncd = true
162
+ end
163
+
164
+ if @@generate_memory_module == false
165
+
166
+ # INCLUDE を出力
167
+ # すべてのドメインに対する cfg を先に生成しておく
168
+ # もし、ドメインに属するカーネルオブジェクトも、モジュールもない場合でも、cfg が出力される
169
+ regions = DomainType.get_domain_regions[:HRP]
170
+ file = AppFile.open("#{$gen}/tecsgen.cfg")
171
+ file.print "/* HRPPlugin 002 */\n"
172
+ regions.each{|region|
173
+ if !region.is_root?
174
+ nsp = region.get_global_name.to_s
175
+ file2 = AppFile.open("#{$gen}/tecsgen_#{nsp}.cfg")
176
+ file2.close
177
+ case region.get_domain_type.get_kind
178
+ when :kernel
179
+ pre = "KERNEL_DOMAIN{\n "
180
+ post = "}\n"
181
+ when :user
182
+ pre = "DOMAIN(#{region.get_name}){\n "
183
+ post = "}\n"
184
+ when :OutOfDomain
185
+ pre = ""
186
+ post = "\n"
187
+ end
188
+ file.puts "#{pre}INCLUDE(\"#{$gen}/tecsgen_#{nsp}.cfg\");\n#{post}"
189
+ end
190
+ }
191
+ file.print "/* HRPPlugin 002 end */\n\n"
192
+ file.close
193
+
194
+ check_celltype_list = []
195
+
196
+ #
197
+ # ATT_MODの生成
198
+ #
199
+ Cell.get_cell_list2.each {|cell|
200
+ # すべてのセルを走査してセルタイプをチェック
201
+ ct = cell.get_celltype
202
+ if ct.class == Celltype && check_celltype_list.include?(ct) == false
203
+ # チェック済みセルタイプに登録
204
+ check_celltype_list << ct
205
+
206
+ # 未チェックのセルタイプだった場合
207
+ # puts "check for ATT_MOD : #{ct.classget_global_name}"
208
+ # puts "check for ATT_MOD : #{ct.get_global_name}"
209
+
210
+ # カーネルAPIのコード,データはメモリ保護しない # HRP3 oyama delete by Takada's request
211
+ # next if HRPKernelObjectManager.include_celltype?( ct.get_name )
212
+
213
+ # 必要のないセルタイプのコード,データはメモリ保護しない
214
+ next if !ct.need_generate?
215
+
216
+ # HRPのドメインリージョンを取得
217
+ regions = ct.get_domain_roots
218
+ regions_hrp = regions[:HRP]
219
+ dbgPrint "HRP domain in #{ct.get_name}: "
220
+ regions_hrp.each {|reg|
221
+ dbgPrint reg.get_name
222
+ }
223
+ # puts ""
224
+
225
+ # セル管理ブロックとスケルトンのメモリ保護
226
+ # gen_celltype_names_domain 相当の処理
227
+ if regions_hrp.include?(Region.get_root) == false && regions_hrp.length > 1
228
+ # ドメインが複数で,OutOfDomainにセルが存在しないセルタイプの場合
229
+ # 共有のセル管理ブロックとスケルトンコードを登録する
230
+ file = AppFile.open("#{$gen}/tecsgen.cfg")
231
+ file.printf "%-60s/* HRPPlugin 003 */\n", "ATT_MOD(\"#{ct.get_global_name}_tecsgen.o\");"
232
+ file.close
233
+ end
234
+
235
+ regions_hrp.each {|reg|
236
+ if reg.is_root?
237
+ nsp = ""
238
+ else
239
+ nsp = "_#{reg.get_global_name}"
240
+ end
241
+ file = AppFile.open("#{$gen}/tecsgen#{nsp}.cfg")
242
+ file.printf "%-50s/* HRPPlugin 004 */\n", "ATT_MOD(\"#{ct.get_global_name}#{nsp}_tecsgen.o\");"
243
+ file.close
244
+ }
245
+
246
+ # セルタイプコードがない場合はスキップ
247
+ next if ct.is_all_entry_inline? && !ct.is_active?
248
+
249
+ # セルタイプコードのメモリ保護
250
+ # gen_celltype_names_domain2 相当の処理
251
+ if regions_hrp.include?(Region.get_root) == true || regions_hrp.length > 1
252
+ # OutOfDomainにセルが存在するセルタイプの場合
253
+ # または,複数のドメインにセルが存在するセルタイプの場合
254
+ # セルタイプコードを共有するように登録する
255
+ file = AppFile.open("#{$gen}/tecsgen.cfg")
256
+ else
257
+ # OutOfDomainでない単一のドメインにセルが存在するセルタイプの場合
258
+ # セルタイプコードを専有するように登録する
259
+ file = AppFile.open("#{$gen}/tecsgen_#{regions_hrp[0].get_global_name}.cfg")
260
+ end
261
+
262
+ file.printf "%-50s/* HRPPlugin 005 */\n", "ATT_MOD(\"#{ct.get_global_name}.o\");"
263
+ file.close
264
+ else
265
+ # 何もしない
266
+ end
267
+ }
268
+
269
+ @@generate_memory_module = true
270
+ else
271
+ # 何もしない
272
+ end
273
+ end
274
+
275
+ #----- Inter Domain Join Set -----#
276
+ @@inter_domain_join_set = {} # {entry_cell =>{domain_root=>count} } Hash of inter domain join
277
+ def self.add_inter_domain_join_set(join)
278
+ rhs_cell = join.get_cell
279
+ dbgPrint "--------- add_inter_domain:#{join.get_owner.get_namespace_path} => #{join.get_cell.get_namespace_path}-----\n"
280
+ domain_root = join.get_owner.get_region.get_domain_root # lhs cell's domain root
281
+ if @@inter_domain_join_set[rhs_cell].nil?
282
+ @@inter_domain_join_set[rhs_cell] = []
283
+ end
284
+ # 左辺のドメインルートを記録
285
+ @@inter_domain_join_set[rhs_cell] << join
286
+ end
287
+
288
+ def self.get_inter_domain_join_set(rhs_cell)
289
+ if @@inter_domain_join_set[rhs_cell]
290
+ @@inter_domain_join_set[rhs_cell].uniq!
291
+ else
292
+ @@inter_domain_join_set[rhs_cell] = []
293
+ end
294
+ return @@inter_domain_join_set[rhs_cell]
295
+ end
296
+
297
+ def self.get_inter_domain_join_roots(rhs_cell)
298
+ dbgPrint "--------- get_inter_domain #{rhs_cell.get_namespace_path} -----\n"
299
+ domain_roots = []
300
+ set = get_inter_domain_join_set rhs_cell
301
+ set.each{|join|
302
+ dbgPrint "--------- get_inter_domain:#{join.get_owner.get_namespace_path} => #{join.get_cell.get_namespace_path}-----\n"
303
+ # if join.get_owner.get_region.get_domain_root.get_domain_type.get_option == "user" then
304
+ domain_roots << join.get_owner.get_region.get_domain_root
305
+ # end
306
+ }
307
+ return domain_roots.uniq
308
+ end
309
+
310
+ def self.get_sac_str(cell)
311
+ domain_roots = self.get_inter_domain_join_roots cell
312
+ delim = ""
313
+ acv = ""
314
+ cell_domain_root = cell.get_region.get_domain_root
315
+ if cell_domain_root.get_domain_type.get_kind != :OutOfDomain
316
+ domain_roots << cell.get_region.get_domain_root # 結合先のドメインも含める
317
+ end
318
+ domain_roots.each{|dr|
319
+ case dr.get_domain_type.get_kind
320
+ when :kernel
321
+ acv += "#{delim}TACP_KERNEL"
322
+ delim = "|"
323
+ when :user
324
+ acv += "#{delim}TACP(#{dr.get_name})"
325
+ delim = "|"
326
+ if cell_domain_root.get_domain_type.get_kind != :OutOfDomain &&
327
+ dr.get_namespace_path != cell_domain_root.get_namespace_path
328
+ cdl_error("HRP9999 '$1': kernel object joined from other user domain. kernel object joined from multi-user-domain must be placed out of domain", cell.get_name)
329
+ end
330
+ when :OutOfDomain
331
+ if cell_domain_root.get_domain_type.get_kind == :OutOfDomain
332
+ acv += "#{delim}TACP_SHARED"
333
+ delim = "|"
334
+ end
335
+ else
336
+ raise "unkown domain kind"
337
+ end
338
+ }
339
+ if acv == ""
340
+ # 呼び先セルが無所属かつ、呼び元も無所属のみ、または結合無しの場合
341
+ acv = "TACP_SHARED"
342
+ end
343
+ sac_str = "{"
344
+ delim = ""
345
+ [:accessPattern1, :accessPattern2, :accessPattern3, :accessPattern4].each{|acp|
346
+ init = (cell.get_attr_initializer acp).to_s
347
+ if init != "OMIT"
348
+ sac_str += delim + init
349
+ else
350
+ sac_str += delim + acv
351
+ end
352
+ delim = ", "
353
+ }
354
+ return sac_str + "}"
355
+ end
356
+ end