Привет!
Во вложении последняя сборка tcc-kx (версия для Kolibri) + все собранные приложения, которые сейчас собираются (в автосборке) с помощью tcc, но с использованием автозагрузки и автосвязывания импортов через dll.obj. Все эти программы уменьшились в размере, т.к. теперь в них отсутствует код загрузчика и часть кода, которая связывала приложение с clayer.
В файле /3rd_party/Programs.txt приведено сравнение размеров.
Отмечу, что teatool и tinybasic используют статическую библиотеку libck.a, а TinyHashView также статическую libcryptal.a. При переводе этих приложений на динамические библиотеки размер этих приложений дополнительно уменьшится.
В папке /tcc/kx/doc имеется руководство (большая часть только на русском) и описание новых возможностей tcc
Для самостоятельной сборки может потребоваться корерктировка путей в файлах build.sh в каждом проекте, если пути будут отличны от следующих:
/fd2/1/ - директория всех файлов, кроме библиотеки kos_mbedtls, для нее была использована директория /cd2/1/libraries.
Примечание: если будет использваться дискета, то может потребоваться только частичная запись на нее проектов, т.к. не все умещается.
В проектах были сделаны корректировки, связанные с отклчюением clayer.
В библитеке libc были сделаны корректировки для исклчюения когда загрузчика (т.к. она устарела - детально описывать не буду).
В заголовочных файлах библиотек были произведены изменения для того чтобы:
1) не зависить от clayer (/3rd_party/libc.obj/include/clayer)
2) вызов функций из библиотек был по указателю (/3rd_party/kos_mbedtls/include/mbedtls)
Эти изменения не являются полными и конечными, а служат пока только для того чтобы успешно собирать вышеописанные приложения. По п. 1 все корректировки оформлены с уловной компиляцией типа
Code: Select all
#ifdef _C_LAYER
kolibri_boxlib_init();
#endif
По п. 2 добавлено определение
Code: Select all
#define MBEDTLS_API(name) (*name __attribute__((__cdecl__)))
и все вызовы из kos_mbedtls оформлены по примеру ниже
Code: Select all
extern void MBEDTLS_API(mbedtls_ssl_init)( mbedtls_ssl_context *ssl );
В дельнейшем планируется научить tcc понимать аттрибуты dllimport/dllexport.
Тогда можно будет делать объявления так:
Code: Select all
#ifndef MBEDTLS_LIB
#define MBEDTLS_API __attribute__((dllimport))
#else
#define MBEDTLS_API __attribute__((dllexport))
#endif
MBEDTLS_API some_func( arg *a);
В этом случае размер приложения еще дполнительно сократится.