20230322
[shlib.git] / sample / build-config / build / dest / build-step.imi
blob1e89ec80571b4aaa4f45fbf1b2c9f615fb64bfd5
6 # [note]
7 # @ script test output info through stdout, current testing info through stderr.
8 #   direction '>' re-direct compile infos from stdout. stderr is used as debug
9 #   info.
15 #   task and step defined as a variable with upper-char name string,
16 # func defined as a lower-char name string.
17 #   it does not means upper-char name string must be a task or step,
18 # but it should be a task or step defination in normal.
19 #   it is a bit similar with marcro name defination in c language.
20 # generally, a macro define is upper-char, and func/var name is 
21 # lower-char. althought we can define upper-char func/var name string,
22 # but it's not better for code reading.
25
26 # build sequence expression.
27 # @ in make file, it express build sequence with node define.
28 #   one node is the combination of input, output, process cmd list.
29 # @ in build-pkg, it uses step list to show which steps should be invoking.
30 #   there is a corresponding func associated with step. the inputs and outputs
31 #   are described in the func. this func called TASK.
32
34 ######################################################
35 # @ external list parameter.
37 # LANG_LIST
38 # HELPER_DOC_LIST, UMDOC_LIST, WEBDOC_LIST, 
39 # DEST_LIST, 
40 # C_SRC_LIST, CXX_SRC_LIST, CPP_SRC_LIST, ASM_SRC_LIST, 
41 # ASFLAGS ASFLAGS_XXX 
42 # CCFLAGS_XXX CFLAGS CXXFLAGS CPPFLAGS 
43 # LDFLAGS LDFLAGS_XXX ARFLAGS ARFLAGS_XXX 
44
47 declare -g -A EXT_NAME
48 declare -g -A LANG_EXT_NAME
50 COMPILER_TYPE=gcc
51 SYSTEM_TYPE=linux
55 # file name sfx define.
58         EXT_NAME[bin]="bin"
59         EXT_NAME[hex]="hex"
60         EXT_NAME[la]="la"
61         EXT_NAME[lo]="lo"
62 if [[ ${SYSTEM_TYPE,,} == linux ]]; then
63         EXT_NAME[exe]=""
64         EXT_NAME[dll]="so"
65         EXT_NAME[lib]="a"
66         EXT_NAME[drv]="ko"
67         EXT_NAME[obj]="o"
68         EXT_NAME[objlist]="o"
69         EXT_NAME[exelist]=""
70 elif [[ ${SYSTEM_TYPE,,} == windows ]]; then
71         EXT_NAME[exe]="exe"
72         EXT_NAME[dll]="dll"
73         EXT_NAME[lib]="lib"
74         EXT_NAME[drv]="sys"
75         EXT_NAME[obj]="obj"
76         EXT_NAME[objlist]="obj"
77         EXT_NAME[exelist]="exe"
78 elif [[ ${SYSTEM_TYPE,,} == mac ]]; then
79         EXT_NAME[exe]=""
80         EXT_NAME[dll]="so"
81         EXT_NAME[lib]="a"
82         EXT_NAME[drv]="o"
83         EXT_NAME[obj]="o"
84         EXT_NAME[objlist]="o"
85         EXT_NAME[exelist]=""
86 else
87         :
90         LANG_EXT_NAME[c]="c"
91         LANG_EXT_NAME[sh]="sh"
92 if [[ ${COMPILER_TYPE,,} == gcc ]]; then
93         LANG_EXT_NAME[cxx]="cc"
94         LANG_EXT_NAME[cpp]="cpp"
95         LANG_EXT_NAME[c++]="cpp"
96         LANG_EXT_NAME[asm]="S"
97 elif [[ ${SYSTEM_TYPE,,} == mac ]]; then
98         LANG_EXT_NAME[cxx]="cc"
99         LANG_EXT_NAME[cpp]="cpp"
100         LANG_EXT_NAME[c++]="cpp"
101         LANG_EXT_NAME[asm]="asm"
105 # lang set define. it can be re-setted in src-pkg.
107 LANG_LIST="c
114 # build sub-cmd map to step.
116 build_map="
117 default STEP_DEFAULT
118 all STEP_ALL
119 full STEP_FULL
120 doc STEP_DOC
121 umdoc STEP_UMDOC
122 test STEP_TEST
123 src STEP_SRC
124 pkg STEP_PKG
127 STEP_SRC="STEP_BUILD_DEST"
129 STEP_DOC=""
130 STEP_UMDOC=""
131 STEP_TEST=""
133 STEP_PKG=""
134 STEP_INST=""
136 STEP_DEFAULT=""
137 STEP_ALL=""
138 STEP_FULL=""
141 ###########################################################
142 # pre-build step
143 ###########################################################
145 # wwwwwwww
146 # dest build step
147 STEP_PREPROC="
148         STEP_TOOLCHAIN_CHK 
149         STEP_DEV_ENV_CHK 
150         STEP_DEP_LIB_CHK 
151         STEP_DEP_SYSHDR_CHK 
152         STEP_CONFIG_GEN 
153         STEP_VERSION_GEN"
155 # steps before dest-constructing.
156 STEP_TOOLCHAIN_CHK="toolchain_chk()"
157 STEP_DEV_ENV_CHK="dev_env_chk()"
158 STEP_DEP_LIB_CHK="dep_lib_chk()"
159 STEP_DEP_SYSHDR_CHK="dep_syshdr_chk()"
161 STEP_CONFIG_GEN="config_gen()"
162 STEP_VERSION_GEN="version_gen()"
165 ###########################################################
166 # main compile build step
167 ###########################################################
170 # todo: 
171 # @ append second parameter with item in first list.
175 STEP_DEST_INIT="dest_init()"
176 # STEP_CONSTRUCT_INIT="construct_init()"
178 STEP_BUILD_DEST="
179         STEP_PRI_PREV_CONSTRUCT
180         TASKLIST(DEST_LIST, STEP_DEFAULT_DEST)
181         STEP_PRI_POST_CONSTRUCT"
183 STEP_DEFAULT_DEST="
184         STEP_DEST_INIT(DEST_NAME)
185         STEP_PRI_PREV_DEST_BUILD
186         STEP_DEST_CHK(DEST_NAME)
187         TASKLIST(LANG_LIST, STEP_LANG_SRC_TPCHK)
188         TASKLIST(LANG_LIST, STEP_LANG_CMPL) 
189         STEP_LINK(OBJ_LIST, DEST_FILENAME) 
190         STEP_PROGINFO(DEBUG)
191         STEP_PRI_POST_DEST_BUILD"
193 # TBD: append corresponding dest steps, 
194 # some of them need STRIP in non DEBUG version.
195 #       STEP_STRIP(DEBUG) 
197 # TBD:
198 # STEP_OBJLIST2SRCLIST=objlist2srclist
200 STEP_EXE_DEST="STEP_DEFAULT_DEST STEP_STRIP(DEBUG) "
201 STEP_DLL_DEST="STEP_DEFAULT_DEST STEP_STRIP(DEBUG) "
202 STEP_LIB_DEST="STEP_DEFAULT_DEST"
203 STEP_DRV_DEST="STEP_DEFAULT_DEST STEP_STRIP(DEBUG) "
204 STEP_LA_DEST="STEP_DEFAULT_DEST"
205 STEP_LO_DEST="STEP_DEFAULT_DEST"
206 STEP_OBJ_DEST="STEP_DEFAULT_DEST"
208 STEP_OBJLIST_DEST="
209         STEP_OBJLIST2SRCLIST
210         TASKLIST(LANG_LIST, STEP_LANG_CMPL)"
211 STEP_EXELIST_DEST="
212         TASKLIST(LANG_LIST, STEP_LANG_SRC2EXE) 
213         TASKLIST(LANG_LIST, STEP_STRIP(DEBUG))"
215 STEP_HEX_DEST="STEP_DEFAULT_DEST STEP_EXE2HEX"
216 STEP_BIN_DEST="STEP_DEFAULT_DEST STEP_EXE2BIN"
219 ###########################################################
220 # DOC build step
221 ###########################################################
223 # TBD: have not been implemented.
224 STEP_BUILD_DOC="
225         TASKLIST(HELPER_DOC_LIST, STEP_DOC_BUILD)
226         TASKLIST(UMDOC_LIST, STEP_DOC_BUILD)
227         TASKLIST(WEBDOC_LIST, STEP_DOC_BUILD)"
230 ###########################################################
231 # src build step
232 ###########################################################
234 TASKLIST="tasklist()"
235 STEP_STRIP="progstrip()"
236 STEP_PROGINFO="prog_sizeinfo()"
238 STEP_LANG_SRC_TPCHK="lang_src_tpchk()"
239 STEP_LANG_CMPL="
240 lang_cmpl()"
241 # TBD:
242 STEP_LANG_SRC2EXE="lang_src2exe()"
245 #lang_src_tpchk()
246 #STEP_LANG_HDRTPCHK="lang_hdrtpchk()"
248 ###############################################
249 # src tp chk
250 # hdrtpchk() is included in tpchk().
251 # this step decrease files to be compiled.
252 # in compile step, it will run tpchk() and hdrtpchk()
253 # again.
256 # <LANG>_SRC_LIST defined in .list file
257 STEP_C_LANG_SRC_TPCHK="c_lang_src_tpchk()"
258 STEP_CXX_LANG_SRC_TPCHK="cxx_lang_src_tpchk()"
259 STEP_CPP_LANG_SRC_TPCHK="cpp_lang_src_tpchk()"
260 STEP_ASM_LANG_SRC_TPCHK="asm_lang_src_tpchk()"
261 STEP_SH_LANG_SRC_TPCHK="sh_lang_src_tpchk()"
264 ###############################################
265 # src compile
269 # dest names are named as "exe/dll/lib/drv", it'scan
270 # the short name of output file, it doesn't means
271 # that it uses windows sytle name. if it use 'elf' for
272 # a executable file, it's not general in various env.
275 # C_SRC_LIST defined in .list file
276 STEP_C_LANG_CMPL="TASKLIST(C_SRC_CMPL_LIST, STEP_C_SRC_CMPL)"
277 STEP_C_SRC_CMPL="
278         STEP_PRI_PREV_CMPL
279         tpchk()
280         hdrtpchk()
281         c2o()
282         STEP_PRI_POST_CMPL"
284 # CXX_SRC_LIST defined in .list file
285 STEP_CXX_LANG_CMPL="TASKLIST(CXX_SRC_CMPL_LIST, STEP_CXX_SRC_CMPL)"
286 STEP_CXX_SRC_CMPL="
287         STEP_PRI_PREV_CMPL
288         tpchk()
289         hdrtpchk()
290         cxx2o()
291         STEP_PRI_POST_CMPL"
293 # CPP_SRC_LIST defined in .list file
294 STEP_CPP_LANG_CMPL="TASKLIST(CPP_SRC_CMPL_LIST, STEP_CPP_SRC_CMPL)"
295 STEP_CPP_SRC_CMPL="
296         STEP_PRI_PREV_CMPL
297         tpchk()
298         hdrtpchk()
299         cpp2o()
300         STEP_PRI_POST_CMPL"
302 # ASM_SRC_LIST defined in .list file
303 STEP_ASM_LANG_CMPL="TASKLIST(ASM_SRC_CMPL_LIST, STEP_ASM_SRC_CMPL)"
304 STEP_ASM_SRC_CMPL="
305         STEP_PRI_PREV_CMPL
306         tpchk()
307         hdrtpchk()
308         asm2o()
309         STEP_PRI_POST_CMPL"
311 # SH_SRC_LIST defined in .list file
312 STEP_SH_LANG_CMPL="TASKLIST(SH_SRC_CMPL_LIST, STEP_SH_SRC_CMPL)"
313 STEP_SH_SRC_CMPL="
314         STEP_PRI_PREV_CMPL
315         tpchk()
316         hdrtpchk()
317         sh2o()
318         STEP_PRI_POST_CMPL"
320 ###############################################
321 # src2exe
324 # C_SRC_LIST defined in .list file
325 STEP_C_LANG_SRC2EXE="TASKLIST(C_SRC_LIST, STEP_C_SRC2EXE)"
326 STEP_C_SRC2EXE="
327         STEP_PRI_PREV_CMPL
328         STEP_PRI_PREV_LINK
329         tpchk()
330         hdrtpchk()
331         c2exe()
332         STEP_PRI_POST_CMPL
333         STEP_PRI_POST_LINK"
335 # CXX_SRC_LIST defined in .list file
336 STEP_CXX_LANG_SRC2EXE="TASKLIST(CXX_SRC_LIST, STEP_CXX_SRC2EXE)"
337 STEP_CXX_SRC2EXE="
338         STEP_PRI_PREV_CMPL
339         STEP_PRI_PREV_LINK
340         tpchk()
341         hdrtpchk()
342         STEP_cxx2exe()
343         STEP_PRI_POST_CMPL
344         STEP_PRI_POST_LINK"
346 # CPP_SRC_LIST defined in .list file
347 STEP_CPP_LANG_SRC2EXE="TASKLIST(CPP_SRC_LIST, STEP_CPP_SRC2EXE)"
348 STEP_CPP_SRC2EXE="
349         STEP_PRI_PREV_CMPL
350         STEP_PRI_PREV_LINK
351         tpchk()
352         hdrtpchk()
353         cpp2exe()
354         STEP_PRI_POST_CMPL
355         STEP_PRI_POST_LINK"
357 # ASM_SRC_LIST defined in .list file
358 STEP_ASM_LANG_SRC2EXE="TASKLIST(ASM_SRC_LIST, STEP_ASM_SRC2EXE)"
359 STEP_ASM_SRC2EXE="
360         STEP_PRI_PREV_CMPL
361         STEP_PRI_PREV_LINK
362         tpchk()
363         hdrtpchk()
364         asm2exe()
365         STEP_PRI_PREV_CMPL
366         STEP_PRI_POST_LINK"
368 # SH_SRC_LIST defined in .list file
369 STEP_SH_LANG_SRC2EXE="TASKLIST(SH_SRC_LIST, STEP_SH_SRC2EXE)"
370 STEP_SH_SRC2EXE="
371         STEP_PRI_PREV_CMPL
372         STEP_PRI_PREV_LINK
373         tpchk()
374         hdrtpchk()
375         sh2exe()
376         STEP_PRI_POST_CMPL
377         STEP_PRI_POST_LINK"
379 ###############################################
380 # link
383 # LINK()
384 STEP_LINK="step_link()"
386 # build steps below is setted accroding DEST_TYPE in dest.imi
387 STEP_EXE_LINK="
388         STEP_PRI_PREV_LINK
389         desttpchk()
390         o2exe()
391         STEP_PRI_POST_LINK"
392 STEP_DLL_LINK="
393         STEP_PRI_PREV_LINK
394         desttpchk()
395         o2dll()
396         STEP_PRI_POST_LINK"
397 STEP_DRV_LINK="
398         STEP_PRI_PREV_LINK
399         desttpchk()
400         o2drv()
401         STEP_PRI_POST_LINK"
402 STEP_LIB_LINK="
403         STEP_PRI_PREV_LINK
404         desttpchk()
405         o2lib()
406         STEP_PRI_POST_LINK"
407 STEP_LA_LINK="
408         STEP_PRI_PREV_LINK
409         desttpchk()
410         o2la()
411         STEP_PRI_POST_LINK"
412 STEP_O_LINK="
413         STEP_PRI_PREV_LINK
414         desttpchk()
415         o2o()
416         STEP_PRI_POST_LINK"
417 STEP_LO_LINK="
418         STEP_PRI_PREV_LINK
419         desttpchk()
420         o2lo()
421         STEP_PRI_POST_LINK"
424 ###############################################
425 # prev-post-proc
426 # those proc functions are defined in <srcpkg>.shlib,
427 # it's a privaate function for a srcpkg.
430 # private steps in a dest-constructing.
431 STEP_PRI_PREV_CONSTRUCT="on_prev_construct()"
432 STEP_PRI_POST_CONSTRUCT="on_post_construct()"
433 STEP_PRI_PREV_DEST_BUILD="on_prev_dest_build()"
434 STEP_PRI_POST_DEST_BUILD="on_post_dest_build()"
435 STEP_PRI_PREV_CMPL="on_prev_cmpl()"
436 STEP_PRI_POST_CMPL="on_post_cmpl()"
437 STEP_PRI_PREV_LINK="on_prev_link()"
438 STEP_PRI_POST_LINK="on_post_link()"
439 STEP_PRI_PREV_INSTPKG_GEN="on_prev_instpkg_gen()"
440 STEP_PRI_POST_INSTPKG_GEN="on_post_instpkg_gen()"
441 STEP_PRI_PREV_ARCH_BUILD="on_prev_arch_build()"
442 STEP_PRI_POST_ARCH_BUILD="on_post_arch_build()"
445 #################################################################
446 # document gen.
447 # TBD:
449 STEP_DOC_GEN=(
450 "[STEP_TEX_2_MAN STEP_TEX_2_TXT STEP_TEX_2_PDF STEP_TEX_2_HTML STEP_MD_2_HTML STEP_HTML_2_CHM ]"
451 STEP_INFO_2_MAN
452 STEP_INFO_2_HTML
453 STEP_INFO_2_PDF
454 STEP_TEX_2_MAN
455 STEP_TEX_2_INFO
456 STEP_TEX_2_TXT
457 STEP_TEX_2_PDF
458 STEP_TEX_2_HTML
459 STEP_TEX_2_DVI
460 STEP_TEX_2_DOCBOOK
461 STEP_DOCBOOK_2_TXT
462 STEP_DOCBOOK_2_PDF
463 STEP_DOCBOOK_2_HTML
464 STEP_DOCBOOK_2_DVI
465 STEP_MD_2_HTML
466 STEP_RST_2_HTML
467 STEP_HTML_2_CHM
470 GEN_DOC_TYPE_LIST="
471 STEP_TEX_2_MAN
472 STEP_TEX_2_TXT
473 STEP_TEX_2_PDF
474 STEP_TEX_2_HTML
475 STEP_MD_2_HTML
476 STEP_HTML_2_CHM"
478 STEP_DOC_GEN="TASKLIST(GEN_DOC_TYPE_LIST, doc_gen())"
480 STEP_INFO_2_MAN="info_2_man()"
481 STEP_INFO_2_HTML="info_2_html()"
482 STEP_INFO_2_PDF="info_2_pdf()"
483 STEP_TEX_2_MAN="tex_2_man()"
484 STEP_TEX_2_INFO="tex_2_info()"
485 STEP_TEX_2_TXT="tex_2_txt()"
486 STEP_TEX_2_PDF="tex_2_pdf()"
487 STEP_TEX_2_HTML="tex_2_html()"
488 STEP_TEX_2_DVI="tex_2_dvi()"
489 STEP_TEX_2_DOCBOOK="tex_2_docbook()"
490 STEP_DOCBOOK_2_TXT="docbook_2_txt()"
491 STEP_DOCBOOK_2_PDF="docbook_2_pdf()"
492 STEP_DOCBOOK_2_HTML="docbook_2_html()"
493 STEP_DOCBOOK_2_DVI="docbook_2_dvi()"
495 STEP_MD_2_HTML="md2html()"
496 STEP_RST_2_HTML="rst2html()"
497 STEP_HTML_2_CHM="html2chm()"
499 # others
500 STEP_APIDOC_GEN="apidocgen()"
501 STEP_GRAPHVIZE_GEN="graphvize()"
503 #################################################################
504 # intl
505 # TBD:
506 STEP_INTL_GEN="intl()"