Небольшое предисловие: с Си и процессом сборки знаком не очень близко, но кое-как со скрипом получается. Решил попрактиковаться, но под Windows изобретать особо нечего. А вот в KolibriOS можно совместить приятное с полезным, и, может быть, что-нибудь удастся довести до ума и представить сообществу.
Быстрого старта, увы, не получилось, хоть и прошелся по всем мануалам, которые смог найти. Процесс сборки с помощью gcc испугал своей сложностью, поэтому решил попробовать tcc. Собирал по
этой инструкции - такое впечатление, что она устарела. В процессе возникла пара проблем вместо обещаных tcc и библиотек к нему "в два клика", но обо всём по порядку.
1) Сперва была ошибка, не нашлась ф-ция WinMain@16. Глянул tcc.c, ф-ции main нет, зато есть app_main. Переименовал её в main, вроде собралось (
http://prntscr.com/9zb0wn). Сделал правильно, или надо переделать?
2) Далее build.bat. Сначала выдал какую-то совсем страшную ошибку (увы, не запомнил). Заглянул внутрь, поправил CC=GCC, к CFLAGS добавил -m32 на всякий пожарный (у меня TDM-GCC-64), снова что-то не собралось. Ещё раз пригляделся, добавил AR=AR, ASM=FASM (скачал с сайта самую свежую версию, положил в C:\fasm, добавил в PATH). Вроде что-то собралось с кучей warning'ов, но melibc.a и start\start.o, упомянутых в инструкции, не появилось (UPD: start.o без проблем собрался из start.asm, а вот melibc.a по прежнему нет). Вот здесь я и затормозился. Что посоветуете?
Bat выглядит так:
Code:
@echo off
echo ####################################################
echo # Melibc builder #
echo # usage: build [clean] #
echo ####################################################
rem #### CONFIG SECTION ####
set LIBNAME=libck.a
set INCLUDE=include
set CC=GCC
set CFLAGS=-c -nostdinc -DGNUC -I"%cd%\%INCLUDE%" -m32
set AR=AR
set ASM=FASM
set dirs=stdio memory kolibrisys string stdlib
rem #### END OF CONFIG SECTION ####
set objs=
set target=%1
if not "%1"=="clean" set target=all
set INCLUDE="%cd%"
call :Target_%target%
if ERRORLEVEL 0 goto Exit_OK
echo Probably at runing has been created error
echo For help send a report...
pause
goto :eof
:Compile_C
%CC% %CFLAGS% %1 -o "%~dpn1.o"
if not %errorlevel%==0 goto Error_Failed
set objs=%objs% "%~dpn1.o"
goto :eof
:Compile_Asm
%ASM% %1 "%~dpn1.o"
if not %errorlevel%==0 goto Error_Failed
set objs=%objs% "%~dpn1.o"
goto :eof
:Target_clean
echo cleaning ...
for %%a in (%dirs%) do del /Q "%%a\*.o"
goto :Exit_OK
:Target_all
echo building all ...
for %%a in (%dirs%) do (
for %%f in ("%%a\*.asm") do call :Compile_Asm "%%f"
for %%f in ("%%a\*.c") do call :Compile_C "%%f"
)
%AR% -ru %LIBNAME% %objs%
if not %errorlevel%==0 goto Error_Failed
goto Exit_OK
:Error_Failed
echo error: execution failed
pause
exit 1
:Exit_OK
echo ####################################################
echo # All operations has been done... #
echo # For cleaning run this script with param " clean" #
echo ####################################################
pause
exit 0
Результат -
так (всё не поместилось на экране, но при беглом просмотре error'ов не вижу, только warning'и).
Заранее спасибо.