4 ms·
Somewhat related, it is something I have been trying to figure out, and I did, successfully! This information might help others. You can create a standalone bi
by johnisgood 1y ago
Somewhat related, it is something I have been trying to figure out, and I did, successfully! This information might help others.
You can create a standalone binary from .tcl files by using KitCreator and sdx (Starkit Developer eXtension). You need to wrap your Tcl script into a .kit file (a virtual filesystem), then combine it with a Tcl runtime to produce a native ELF (or Windows) binary. Optionally, you can encrypt your Tcl code with AES (e.g., using openssl enc) before embedding it, and decrypt it at runtime via a custom loader. The result is a self-contained executable that runs anywhere Tcl is supported. :)
I have a script for it!
Standalone encrypted application created:
-> /tmp/tcl/app.run
-> AES KEY (hex): 95a8a95e8322344b808ebd3fd3986b5b
-> AES IV (hex): 69eac67341d2657a0b00d3006addb131
-> To run it: ./app.run
$ ./app.run
Hello world from binary!
$ file app.run
app.run: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=f3fabb748cc7e61c2fafc7c288f282db2f6de0c7, for GNU/Linux 3.2.0, stripped
The generated app.run is 10 MB and ldd shows it only needs "linux-vdso", "libm", "libc", and "ld-linux-*".
Useful links (taken from my script):
TCL_VERSION="9.0.1"
TCL_SRC_URL="https://sourceforge.net/projects/tcl/files/Tcl/${TCL_VERSION}/tcl${TCL_VERSION}-src.tar.gz"
SDX_KIT_URL="https://chiselapp.com/user/aspect/repository/sdx/uv/sdx-20110317.kit"
TCLLIB_URL="https://github.com/tcltk/tcllib/archive/refs/heads/main.zip"
I wonder if there is a more recent sdx, although it still works.
FWIW, the steps are:
1. Download and build Tcl
2. Clone KitCreator and build Tclkit
3. Download SDX
4. Create the loader ($VFS_DIR/main.tcl)
5. Download and extract Tcllib (optional)
6. Copy any modules you want from Tcllib (optional)
7. Add dummy assets to $VFS_DIR/assets/data.json (has a specific format) (probably optional)
8. Wrap and generate .kit and final .run ELF (you need 2 Tclkit binaries, just duplicate it)
If you have any questions, let me know!
---
I have used critcl before, but can't find my code anymore. :( It is good stuff though.
- johnisgood 1y agoCorrection: "The result is a self-contained executable that runs anywhere Tcl is supported" is inaccurate. You do not need Tcl to be supported, hence the binaries.