From 175bd31489dbcd64e22aee9d36768522418d5a41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B3=D0=BE=D1=80?= Date: Sat, 16 May 2026 08:30:18 +0000 Subject: [PATCH] add autobuild of some tcc libs (#339) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Implement autobuild for(this libs in [`programs/develop/ktcc/bin/lib/`](https://git.kolibrios.org/KolibriOS/kolibrios/src/branch/main/programs/develop/ktcc/bin/lib)): + `crt0.o` + `libtcc1.a` + `tiny.o` + `libshell.a` + `libcryptal.a` + `libsound.a` it autobuild for kolibrios image and programs build. `link_tcc` automatically add this libs to `extra_inputs` roots of this grow from #311 --------- Co-authored-by: Burer Reviewed-on: https://git.kolibrios.org/KolibriOS/kolibrios/pulls/339 Reviewed-by: Burer Reviewed-by: Mikhail Frolov Co-authored-by: Егор Co-committed-by: Егор --- .gitignore | 6 ++ contrib/sdk/sources/sound/Tupfile.lua | 18 ++++ data/Tupfile.lua | 37 ++++++-- programs/demos/kmatrix/Tupfile.lua | 2 +- programs/develop/ktcc/Tupfile.lua | 36 +++++++ programs/develop/ktcc/bin/lib/crt0.o | Bin 752 -> 0 bytes programs/develop/ktcc/bin/lib/libcryptal.a | Bin 61346 -> 0 bytes programs/develop/ktcc/bin/lib/libshell.a | Bin 9436 -> 0 bytes programs/develop/ktcc/bin/lib/libsound.a | Bin 11432 -> 0 bytes programs/develop/ktcc/bin/lib/libtcc1.a | Bin 6644 -> 0 bytes programs/develop/ktcc/bin/lib/tiny.o | Bin 312 -> 0 bytes .../develop/ktcc/lib/libcryptal/Tupfile.lua | 23 +++++ .../develop/ktcc/lib/libshell/Tupfile.lua | 24 +++++ programs/develop/ktcc/lib/tiny/Tupfile.lua | 10 ++ programs/develop/ktcc/libc.obj/.gitignore | 4 + programs/develop/ktcc/libc.obj/lib/crt0.o | Bin 1340 -> 0 bytes .../develop/ktcc/libc.obj/source/Tupfile.lua | 22 +++-- .../ktcc/libc.obj/source/libtcc1/Tupfile.lua | 25 +++++ .../kos_mbedtls/programs/ssl/Tupfile.lua | 3 +- programs/develop/tinybasic-1.0.4/Tupfile.lua | 2 +- programs/games/dino/Tupfile.lua | 2 +- programs/games/flpybird/Tupfile.lua | 2 +- programs/network/whois/Tupfile.lua | 2 +- programs/other/PasswordGen/Tupfile.lua | 2 +- programs/other/TinyHashView/Tupfile.lua | 4 +- programs/other/Weather/Tupfile.lua | 2 +- .../graph/branches/tcc_current/Tupfile.lua | 2 +- programs/other/man2html/Tupfile.lua | 2 +- programs/system/shell/Tupfile.lua | 2 +- programs/use_tcc.lua | 89 ++++++++++++++---- 30 files changed, 275 insertions(+), 46 deletions(-) create mode 100644 contrib/sdk/sources/sound/Tupfile.lua create mode 100644 programs/develop/ktcc/Tupfile.lua delete mode 100644 programs/develop/ktcc/bin/lib/crt0.o delete mode 100644 programs/develop/ktcc/bin/lib/libcryptal.a delete mode 100644 programs/develop/ktcc/bin/lib/libshell.a delete mode 100644 programs/develop/ktcc/bin/lib/libsound.a delete mode 100644 programs/develop/ktcc/bin/lib/libtcc1.a delete mode 100644 programs/develop/ktcc/bin/lib/tiny.o create mode 100644 programs/develop/ktcc/lib/libcryptal/Tupfile.lua create mode 100644 programs/develop/ktcc/lib/libshell/Tupfile.lua create mode 100644 programs/develop/ktcc/lib/tiny/Tupfile.lua create mode 100644 programs/develop/ktcc/libc.obj/.gitignore delete mode 100644 programs/develop/ktcc/libc.obj/lib/crt0.o create mode 100644 programs/develop/ktcc/libc.obj/source/libtcc1/Tupfile.lua diff --git a/.gitignore b/.gitignore index 56e074416..bc76a3aa3 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,9 @@ ehthumbs_vista.db ._* programs/cmm/cmm.code-workspace programs/cmm/menu/.gitignore + +.tup/ + +/build-*/ +/*.config + diff --git a/contrib/sdk/sources/sound/Tupfile.lua b/contrib/sdk/sources/sound/Tupfile.lua new file mode 100644 index 000000000..f3f542cc9 --- /dev/null +++ b/contrib/sdk/sources/sound/Tupfile.lua @@ -0,0 +1,18 @@ +if tup.getconfig("NO_FASM") ~= "" then return end + +SOURCES = { + "src/*.asm", + extra_inputs = { + "src/*.inc" + } +} + +OBJS = { + extra_inputs = { + "symbols" + } +} + +tup.append_table(OBJS, tup.foreach_rule(SOURCES, "fasm %f %o", "%B.o")) + +tup.rule(OBJS, "ar -cvrs %o %f && objcopy -O elf32-i386 --redefine-syms=symbols %o", {"libsound.a", ""}) diff --git a/data/Tupfile.lua b/data/Tupfile.lua index fd3afb2d1..700f54a97 100644 --- a/data/Tupfile.lua +++ b/data/Tupfile.lua @@ -184,7 +184,8 @@ extra_files = { {"kolibrios/develop/oberon07/lib/KolibriOS/", SRC_PROGS .. "/develop/oberon07/lib/KolibriOS/*"}, {"kolibrios/develop/oberon07/lib/Math/", SRC_PROGS .. "/develop/oberon07/lib/Math/*"}, {"kolibrios/develop/oberon07/samples/", SRC_PROGS .. "/develop/oberon07/samples/KolibriOS/*"}, - {"kolibrios/develop/tcc/lib/", SRC_PROGS .. "/develop/ktcc/bin/lib/*"}, + {"kolibrios/develop/tcc/lib/", SRC_PROGS .. "/develop/ktcc/bin/lib/*.def"}, + {"kolibrios/develop/tcc/lib/libSDL.a", SRC_PROGS .. "/develop/ktcc/bin/lib/libSDL.a"}, {"kolibrios/develop/tcc/include/", SRC_PROGS .. "/develop/ktcc/libc.obj/include/*"}, {"kolibrios/develop/tcc/include/clayer/", SRC_PROGS .. "/develop/ktcc/libc.obj/include/clayer/*"}, {"kolibrios/develop/tcc/include/cryptal/", SRC_PROGS .. "/develop/ktcc/libc.obj/include/cryptal/*"}, @@ -634,7 +635,10 @@ tup.append_table(extra_files, { {"kolibrios/utils/AMDtemp", VAR_PROGS .. "/system/amd_temp_view/AMDtemp"}, {"kolibrios/utils/kfm/kfm", VAR_PROGS .. "/fs/kfm/kfm"}, {"kolibrios/utils/tedit/t_edit", VAR_PROGS .. "/other/t_edit/t_edit"}, - {"kolibrios/3D/blocks/block.bin", VAR_PROGS .. "/bcc32/games/blocks/block.bin"} + {"kolibrios/3D/blocks/block.bin", VAR_PROGS .. "/bcc32/games/blocks/block.bin"}, + {"kolibrios/develop/tcc/lib/crt0.o", VAR_PROGS .. "/develop/ktcc/bin/lib/crt0.o", group = "../programs/develop/ktcc/"}, + {"kolibrios/develop/tcc/lib/tiny.o", VAR_PROGS .. "/develop/ktcc/bin/lib/tiny.o", group = "../programs/develop/ktcc/"}, + {"kolibrios/develop/tcc/lib/libsound.a", VAR_PROGS .. "/develop/ktcc/bin/lib/libsound.a", group = "../programs/develop/ktcc/"} }) -- For russian build, add russian-only programs. if build_type == "ru_RU" then tup.append_table(img_files, { @@ -719,29 +723,41 @@ tup.append_table(extra_files, { }) end -- tup.getconfig('NO_MSVC') ~= 'full' --- Programs that require TCC to compile. +-- Programs that require TCC to compile. TCC programs that link executables +-- additionally need FASM (for crt0.o, tiny.o, libtcc1.a). LIBC.OBJ is a +-- relocatable TCC translation unit and does not require FASM. if tup.getconfig('NO_TCC') ~= 'full' then +if tup.getconfig('NO_FASM') ~= 'full' then tup.append_table(img_files, { {"NETWORK/WHOIS", VAR_PROGS .. "/network/whois/whois"}, {"SHELL", VAR_PROGS .. "/system/shell/shell"}, {"GAMES/DINO", VAR_PROGS .. "/games/dino/dino"}, {"GAMES/FLPYBIRD", VAR_PROGS .. "/games/flpybird/flpybird"}, +}) +end -- tup.getconfig('NO_FASM') ~= 'full' +tup.append_table(img_files, { {"LIB/LIBC.OBJ", VAR_PROGS .. "/develop/ktcc/libc.obj/source/libc.obj"}, }) +if tup.getconfig('NO_FASM') ~= 'full' then tup.append_table(extra_files, { {"kolibrios/utils/thashview", VAR_PROGS .. "/other/TinyHashView/thashview"}, {"kolibrios/demos/kmatrix", VAR_PROGS .. "/demos/kmatrix/kmatrix"}, {"kolibrios/utils/graph", VAR_PROGS .. "/other/graph/branches/tcc_current/graph"}, {"kolibrios/develop/TinyBasic/TinyBasic", VAR_PROGS .. "/develop/tinybasic-1.0.4/tinybasic"}, - {"kolibrios/develop/TinyBasic/bas/", SRC_PROGS .. "/develop/tinybasic-1.0.4/bas/*"}, - {"kolibrios/develop/TinyBasic/TinyBasic.man", SRC_PROGS .. "/develop/tinybasic-1.0.4/doc/tinybasic.man"}, {"kolibrios/utils/passwordgen", VAR_PROGS .. "/other/PasswordGen/passwordgen"}, {"kolibrios/utils/kruler", VAR_PROGS .. "/other/kruler/kruler"}, - {"kolibrios/media/qr_tool", SRC_PROGS .. "/media/qr_tool/qr_tool"}, {"kolibrios/utils/weather", VAR_PROGS .. "/other/Weather/weather"}, - {"kolibrios/settings/weather.json", SRC_PROGS .. "/other/Weather/weather.json"}, {"kolibrios/utils/man2html", VAR_PROGS .."/other/man2html/man2html"}, }) +end -- tup.getconfig('NO_FASM') ~= 'full' +tup.append_table(extra_files, { + {"kolibrios/develop/TinyBasic/bas/", SRC_PROGS .. "/develop/tinybasic-1.0.4/bas/*"}, + {"kolibrios/develop/TinyBasic/TinyBasic.man", SRC_PROGS .. "/develop/tinybasic-1.0.4/doc/tinybasic.man"}, + {"kolibrios/media/qr_tool", SRC_PROGS .. "/media/qr_tool/qr_tool"}, + {"kolibrios/settings/weather.json", SRC_PROGS .. "/other/Weather/weather.json"}, + {"kolibrios/develop/tcc/lib/libshell.a", VAR_PROGS .. "/develop/ktcc/bin/lib/libshell.a", group="../programs/develop/ktcc/"}, + {"kolibrios/develop/tcc/lib/libcryptal.a", VAR_PROGS .. "/develop/ktcc/bin/lib/libcryptal.a", group="../programs/develop/ktcc/"} +}) end -- tup.getconfig('NO_TCC') ~= 'full' -- Programs that require oberon07 compiler. @@ -808,6 +824,13 @@ if tup.getconfig('NO_NASM') ~= 'full' then {"kolibrios/emul/dgen/dgenrc.html", SRC_PROGS .. "/emulator/dgen-sdl-1.33/dgenrc.html"}, }) end + +if tup.getconfig("NO_FASM") ~= "full" and tup.getconfig("NO_TCC") ~= "full" then + tup.append_table(extra_files, { + {"kolibrios/develop/tcc/lib/libtcc1.a", VAR_PROGS .. "/develop/ktcc/bin/lib/libtcc1.a", group="../programs/develop/ktcc/"} + }) +end + -- For russian build, add russian-only programs. if build_type == "ru_RU" then tup.append_table(extra_files, { {"kolibrios/games/21days", VAR_PROGS .. "/games/21days/21days"}, diff --git a/programs/demos/kmatrix/Tupfile.lua b/programs/demos/kmatrix/Tupfile.lua index 025efea41..4d2361b8e 100755 --- a/programs/demos/kmatrix/Tupfile.lua +++ b/programs/demos/kmatrix/Tupfile.lua @@ -1,4 +1,4 @@ -if tup.getconfig("NO_TCC") ~= "" then return end +if tup.getconfig("NO_TCC") ~= "" or tup.getconfig("NO_FASM") ~= "" then return end HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR") tup.include(HELPERDIR .. "/use_tcc.lua") diff --git a/programs/develop/ktcc/Tupfile.lua b/programs/develop/ktcc/Tupfile.lua new file mode 100644 index 000000000..6befab330 --- /dev/null +++ b/programs/develop/ktcc/Tupfile.lua @@ -0,0 +1,36 @@ +local LIBS = {} + +if tup.getconfig("NO_FASM") == "" then + tup.append_table(LIBS, { + tup.getcwd() .. "/libc.obj/source/crt0.o", + tup.getcwd() .. "/lib/tiny/tiny.o", + }) +end + +if tup.getconfig("NO_TCC") == "" then + tup.append_table(LIBS, { + tup.getcwd() .. "/lib/libcryptal/libcryptal.a", + tup.getcwd() .. "/lib/libshell/libshell.a", + }) +end + +if tup.getconfig("NO_FASM") == "" and tup.getconfig("NO_TCC") == "" then + tup.append_table(LIBS, { + tup.getcwd() .. "/libc.obj/source/libtcc1/libtcc1.a", + }) +end + +tup.foreach_rule(LIBS, "cp %f %o", { tup.getcwd() .. "/bin/lib/%b", "<%b>" }) + +-- libsound.a lives in another subtree (contrib/), so reference its group +-- explicitly via extra_inputs to keep Tup ordering correct across trees. +if tup.getconfig("NO_FASM") == "" then + tup.rule( + { + "../../../contrib/sdk/sources/sound/libsound.a", + extra_inputs = { "../../../contrib/sdk/sources/sound/" }, + }, + "cp %f %o", + { tup.getcwd() .. "/bin/lib/libsound.a", "" } + ) +end diff --git a/programs/develop/ktcc/bin/lib/crt0.o b/programs/develop/ktcc/bin/lib/crt0.o deleted file mode 100644 index b857c80565641ceef35a5b36895c6c7327e396d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 752 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 EFX%=VwEzGB diff --git a/programs/develop/ktcc/bin/lib/libshell.a b/programs/develop/ktcc/bin/lib/libshell.a deleted file mode 100644 index 582aa71f6f8275ce5bbdbace3815770535121f5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9436 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 F#6M1AWE=nh diff --git a/programs/develop/ktcc/bin/lib/libsound.a b/programs/develop/ktcc/bin/lib/libsound.a deleted file mode 100644 index de48e13527ba300d24413e4c67c775c3be8cff97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11432 zcmd^FU2I&%6+WBTVR1LvO=G}7NY|+g6e44%jxi9zCfF`3;;_j=LIhD*y4Q79w%6Ld zn;+DQST<10wVDS&JOEj?C7h~^n)oZin6ONjVqNV}SOmADL^HQcEkxXW2X$Lb4 zM&_CN>SAo-T+87X{?$Meb4zx7Cb=JNnrB{Y3!zmen9Kz9%|dhr{GGGRok(OFl9@Gn zW*&~D_`d%5zWB3;Df!HE`}m7oE5A@074q%O&WqhBE+hx34#wTU`7a3D~ z{?v$>dKs~q6Y-Er<&0tH=+MF+{S0h8&kA8Nr2m1Sh%v@=H^Qw5F$9}1{vITFzPLTd z48>o_{942|p_11{k?N1zNSNDIEhspPR3ien<^GtL-&yPn>5stIhgcE!!^A*#^7Wwe z2kjd1P<(mAe7P`K+PPl)c1O3^ztO1ozU`GSQTukC{WYaQIQB>+nF;FmNQ9jG37fA; z&&!kUBK57JxP0I6oNjRN^FC=o9*V&x&P$w2DPI(v?*Y9Jz5B!tl9{vB2}7aLH*W-k>ZgA?vwZhc_r;`Z?=}y`O)-m z4RdfrDGM*Wb@lZ4))Uv|%k+4I438)o4zb)&6O8QnQ{Th0>6E{fa8!;PC{U@6m7J>w zMp%X_(qUu{47_c;Ffs<77y@IX8b&@qJ?|k!YVF+^`3wwtjEo%54hy;Dg^?Yd-M%r> zEC-{*$a7Qwow(YP-2W~QetIC-d1T)c1=jH*Ny9-c!x&H4>T&fGJsRC4*AvfB-L+AN{8~_7PW-F}oe@?6D#5 zmN8$W%nyDh!52f|NvejQbEw~fph(T18$VaUpvTWxYE-H7b7*CS8m90>12$3mT>B!TUHVy%k7zE zdZ={pE85)kkR^U_ashMaN0y9%FNWYHOFjS(%PU1XoO}TWy)4P&?Cnz*_4v1spO=I2 zjgv?kr_I zA$VbD4m^Hr=_}yVU?*Ephb=(H+ZOUKzZlm{I_x;k_n~CwR*f)%7^(n}>iF=|ampPk z&ZYG_k30PI`!AFjL#?lP(fsd6uj~9KU zz(=DVA3R|$Qr{_x-SWc=A5J&<&4&@*^DB*!yBzbU=FW|g&%mR>2oO?>&t_F*2>gC) z>xdEf`J}&w=js1lhWODjRb&Y8;oo1=wW4RKq6~q-yH1Y}7Njmx`#==CWr)@<17KA4 z%h))n)0x|kuHp4sX*uG@FY^W7tCu6S_+?f_jzHIJ(Bq_LU8D8M04L=>nVStCt6_`y z@yS$|BQ^MBR`lOMQI0^*RFNY!B2|h&! zE(%Zn)lQ$@#p!pD?wsYH?Bk2GM~KYa_#*ut@!s*p-uDsTJHB}O6QaVG;lDj~d)!$+~)s-htJ(ZT`dZTE3_?e-;mmMZo;qc-U>jldmHgH-9I3 z8jYK2kvbSR_lnf6xY;FA_r}f5BDEnNer@N{(vrnLO%|TE+BoX9S~+^$+R9P4#XsQ} z95fC7fFcORToguffUPME@#og ayzYB&H^8U*K(%(ygwRPVGf3k1F?|Pb2TW@K diff --git a/programs/develop/ktcc/bin/lib/libtcc1.a b/programs/develop/ktcc/bin/lib/libtcc1.a deleted file mode 100644 index 77e05da5e8b1232f9ec40bed14c96f5e922a6c9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6644 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/lib/). +LIST_OF_LIBS = {} + +-- Optional libs: requested by individual programs via the third argument +-- of link_tcc, e.g. link_tcc(src, out, {"cryptal"}). Only entries that the +-- current toolchain configuration can actually produce are exposed here. +OPTIONAL_LIBS = {} + +if tup.getconfig("NO_FASM") == "" then + tup.append_table(LIST_OF_LIBS, { "crt0.o", "tiny.o" }) + OPTIONAL_LIBS.sound = "libsound.a" +end + +if tup.getconfig("NO_TCC") == "" then + OPTIONAL_LIBS.cryptal = "libcryptal.a" + OPTIONAL_LIBS.shell = "libshell.a" +end + +if tup.getconfig("NO_FASM") == "" and tup.getconfig("NO_TCC") == "" then + tup.append_table(LIST_OF_LIBS, { "libtcc1.a" }) +end + +function compile_tcc(input, output) + if not output then output = '%B.o' end + tup.append_table(OBJS, + tup.foreach_rule(input, TCC .. " -c " .. CFLAGS .. " %f -o %o", output) + ) +end + +function link_tcc(input, output, libs) + if not output then input, output = OBJS, input end + + if type(input) ~= "table" then + input = { input } + end + + if not input.extra_inputs then + input.extra_inputs = {} + end + + for _, lib in pairs(LIST_OF_LIBS) do + table.insert(input.extra_inputs, KTCC_TRUNK .. "<" .. lib .. ">") + end + + if libs then + for _, name in pairs(libs) do + local libfile = OPTIONAL_LIBS[name] + if libfile then + table.insert(input.extra_inputs, KTCC_TRUNK .. "<" .. libfile .. ">") + end + end + end + + table.insert(input.extra_inputs, KTCC_TRUNK .. "bin/lib/*.def") + + tup.rule(input, + TCC .. " " .. CFLAGS .. " " .. LFLAGS .. " " .. "%f -o %o " .. LIBS .. " " .. tup.getconfig("KPACK_CMD"), + output) +end