Page 19 of 20

Re: Tiny C Compiler

Posted: Wed Dec 15, 2021 6:17 pm
by Coldy
Считаю, что пока это не приоритетно.

Re: Tiny C Compiler

Posted: Tue Dec 28, 2021 3:17 pm
by Coldy
Привет!
Обновил на svn последнюю версию, в т.ч. исправлена ошибка при задании неиспользуемых библиотек, добавлены доки, библиотеки.
К сожалению, в дистрибутив сейчас многое не попадает (кроме самого tcc и tcc.conf) нужно это будет настроить позже.
Для тестирования для понимания что должно быть в папке tcc ориентируйтесь на архив, который выкладывал выше.

Re: Tiny C Compiler

Posted: Thu Jan 06, 2022 1:15 am
by vitalkrilov
В TCC баг замечен:
Если использовать преобразование типов с плавающей запятой в целочисленный, то скомпилированная программа будет вылетать (в Board->Kernel видно).
Пример кода:

Code: Select all

float a = 3.14f;
int b = (int)a;

Re: Tiny C Compiler

Posted: Thu Jan 06, 2022 3:59 pm
by Coldy
Привет!
Собралось без проблем (архив в приложении). Возможно криво прилинковалась библиотека tcc. Используй вариант из дистрибутива, но в файле tcc.conf надо раскомментировать строку "tcc_root kx"

Re: Tiny C Compiler

Posted: Thu Jan 06, 2022 6:29 pm
by vitalkrilov
Coldy wrote:Привет!
Собралось без проблем (архив в приложении). Возможно криво прилинковалась библиотека tcc. Используй вариант из дистрибутива, но в файле tcc.conf надо раскомментировать строку "tcc_root kx"
Спасибо за ответ. Интересно получилось: я сравнил мой и твой вариант, и выходит, что необходимо сначала указать "-ltcc" и только потом "-lc.obj". Тогда все работает, как надо (даже что-то менять в tcc.conf не пришлось). Если же сделать наоборот, то будет возникать описанная мной ошибка.
(libc.obj пришлось подключать для printf)

Re: Tiny C Compiler

Posted: Thu Jan 06, 2022 7:11 pm
by Coldy
От разницы указаний библиотек не должно быть проблем - это вляет только на то в каком порядке они будут следовать в коде. Я к сожалению вижу только часть контекста твоей проблемы, возможно, проблема вовсе не в tcc, и даже не в порядке подключения библиотек. Например, текущий формат приложений позволяет легко затереть/перезаписать к.л. участок кода с помощью другой ошибки в коде - отловить это очень сложно.

Да, tcc.conf пока лучше не править, т.к. CLAYER еще не переделан, но в дальнейшем библиотеки будут использоваться те, которые в папке kx/lib.

Re: Tiny C Compiler

Posted: Thu Jan 06, 2022 8:54 pm
by vitalkrilov
Coldy wrote:От разницы указаний библиотек не должно быть проблем - это вляет только на то в каком порядке они будут следовать в коде. Я к сожалению вижу только часть контекста твоей проблемы, возможно, проблема вовсе не в tcc, и даже не в порядке подключения библиотек. Например, текущий формат приложений позволяет легко затереть/перезаписать к.л. участок кода с помощью другой ошибки в коде - отловить это очень сложно.

Да, tcc.conf пока лучше не править, т.к. CLAYER еще не переделан, но в дальнейшем библиотеки будут использоваться те, которые в папке kx/lib.
Все то же самое, как и в твоем архиве. Но замени в скрипте билда "-ltcc" на "-lc.obj -ltcc". А в коде выведи полученное число:

Code: Select all

#include <stdio.h> //в начале
printf("%d", b); // в конец main()

Re: Tiny C Compiler

Posted: Thu Jan 06, 2022 8:57 pm
by vitalkrilov
В итоге будет:

Code: Select all

#include <stdio.h>
int main() {
	float a = 3.14f;
	int b = (int)a;
	printf("%d", b);
}
Компиляция (из папки с исходником):

Code: Select all

/kolibrios/develop/tcc/tcc main.c -o a.kex -lc.obj -ltcc

Re: Tiny C Compiler

Posted: Thu Jan 06, 2022 9:39 pm
by Coldy
Да, с использованием старой версии libc.obj.a (-lc.obj) ошибка появляется, как ты описал. Как уже писал ранее, libc.obj.a вскоре будет устаревшей.
Подключи tcc.conf, как я описал выше.
запусти tcc с ключом -vv, путь к библиотекам должен быть "/kolibrios/develop/tcc/kx/lib"
затем используй сборку так

Code: Select all

/kolibrios/develop/tcc/tcc main.c -o a.kex -llibc -ltcc
Можешь менять библиотеки местами, все будет работать нормально.

И просьба не использовать оверквоттинг без надобности, нажимай кнопку "Ответить", вместо "Цитата"

Re: Tiny C Compiler

Posted: Thu Jan 06, 2022 10:06 pm
by Coldy
Так, я понял в чем проблема. Программа вылетает из-за того что у функции pfintf некорректный указатель (в примере с ошибкой он 0x318 чего быть по определению не может, правильный в мом случае - 0x7004D66B). Видимо старый загрузчик чувствителен к порядку указания библиотек - это еще один повод отказаться от этого метода.

Re: Tiny C Compiler

Posted: Fri Jan 07, 2022 10:46 pm
by turbocat
Я тут поколдовал... Coldy, может сделать формат KX дефолтным для tcc в самом дистре? Нужные изменения я произвёл на своём пк, автособираемые проги не пострадают. Вот так tcc в дистре будет. Ты согласен?

PS:
Смысла два способа сборки держать в дистре не вижу. + Новички как видно путаются...
И давай решим уже с автолинковкой libtcc1.a(да я дурачёк эта либа именно так называется а не libtcc.a), lc.def и crt0.asm. Опять же автосборке ничего не будет.
__
Я думаю этого будет достаточно или не? Помню ты говорил пока не сделаем __attribute__((dllimport)) добавлять не будем почему то. Или я что то путаю.

Code: Select all

tcc_add_crt(s,"crt0.o");
tcc_add_library_err(s, "c");
tcc_add_library_err(s, "tcc1");

Re: Tiny C Compiler

Posted: Fri Jan 07, 2022 11:15 pm
by turbocat
Кста самое главное! Разработка tcc достаточно живая по этому я наверное попрошу чтобы Xvilka починил gcc на серваке. Каждый раз просить обновлять tcc как то не камельфо.

Re: Tiny C Compiler

Posted: Sat Jan 08, 2022 1:29 pm
by Coldy
Привет!
сделать формат KX дефолтным для tcc в самом дистре?
Я в целом согласен, но это еще большая работа, т.к. нужно править все оставшиеся заголовки, например, mbedtls, т.к. сейчас вызов внешних функций из библиотек происходит по указателю. Но учитывая, что я планирую сделать, чтобы вызовы были как функции (с помощью __attribute__((dllimport))), то сейчас это будет двойная работа. По этой же причине mbedtls.def предлагаю пока убрать.
Смысла два способа сборки держать в дистре не вижу. + Новички как видно путаются
Тут тоже согласен. Тем более что старый способ ненадежный.
давай решим уже с автолинковкой libtcc1.a, ... lc.def и crt0.asm
Ок, добавлю, только надо будет поправить еще все скрипты сборки (чтобы эти библиотеки не фигурировали дважды). А почему название название libtcc не можем оставить, зачем еще 1 в конце?libc.def я так понял тоже меняем на lc.def?
автособираемые проги не пострадают
Тут не уверен, нужно внести все изменения сразу - это большая работа. Самое главное, чтобы автосборка не встала. Поэтому и предлагаю делать все поэтапно:
1) Перенастроить дистрибутив c samples, чтобы примеры собирались по-новому. На этом этапе tcc.conf пока останется. Дополнительно временно сделаю, чтобы корневая папка include также автоматом цеплялась (чтобы ее не задавать в скрипте), т.к. корень меняется на %tcc_root%/kx/lib и include ищется там (а на самом деле от в папке %tcc_root%, т.е. на уровень выше). Старая папка lib пока останется. И да, в CLAYER пока надо оставить функции типа kolibri_boxlib_init. Так не будет проблем с автосборкой.
2) Перенастроить все в приложениях автосборки и залить новый tcc на сервер. Возможно этот этап придется разбивать на подэтапы.

Re: Tiny C Compiler

Posted: Sat Jan 08, 2022 11:36 pm
by turbocat
Вот патч для tcc. Что тут есть:
1. Удалён мой костыль undef_sym_flag. (Coldy кажется это пофиксил);
2. Добавлен автолинк libc.def и libtcc1.a(+ подправлен линк crt0.o);
3. Если символы из crt0.o ненайдены, вызывает ошибку сборки;
4. tcc теперь находит crt0.o при использовании параметра -B.

Re: Tiny C Compiler

Posted: Wed Jan 12, 2022 12:16 am
by punk_joker
Два вопроса:
1. tcc собирает сам себя?
2. Кодовая база для Колибри и линукс версии для кросскомпиляции одна и таже?