1. Придётся компилировать ещё и все библиотеки-зависимости.
2. Какая-то системная библиотека может отсутствовать. Например, нет pthread.
3. Какие-то функции в libc могут отсутствовать или быть заглушками. Например, clock() из POSIX возвращает суммарное процессорное время, использованное программой, ядро KolibriOS не отслеживает эту информацию; clock() из menuetlibc возвращает wall clock, clock() из newlibc возвращает ошибку (clock_t)-1.
Кроме того, система сборки сильно усложнена, это же fasm!), и собираться образ должен fasm kernel.asm ))
После того, как создать lang.inc, ядро нормально собирается командой fasm kernel.asm. Проблемы начинаются дальше:
* ядро в дистрибутиве упаковано, возможность вызывать дополнительный шаг kerpack должна быть и при этом должна быть опциональной, чтобы не увеличивать зря порог вхождения,
* образ системы — намного больше, чем ядро, в образе есть много разных файлов,
* автосборка на сервере должна понимать, что при коммите в файл kernel/trunk/fs/fat.inc нужно пересобрать ядро, но необязательно тратить время на пересборку всего остального, от kernel/trunk/bootloader/floppy1440.inc ядро не зависит, но зависит бутсектор,
* программы на си существуют, в том числе и в дистрибутиве, их тоже нужно уметь собирать — можно, конечно, вести долгие холивары вроде того, что идёт прямо здесь, насчёт включения, но ситуация, когда кто-то когда-то один раз собрал что-то и выложил на форуме в виде бинарника без возможности сборки и никто не может это повторить, очень сильно мешает радикальным изменениям во вполне ассемблерных частях проекта. Которые нужны,
* действия по добавлению/редактированию списка собираемых программ должны быть как можно проще, иначе никто этим не будет заниматься.
Вам, лично вам, никто не мешает клонировать наш svn-репозиторий в локальный git-репозиторий и продолжать работать с git — git svn clone svn://kolibrios.org создаст локальный git-репозиторий, с которым можно работать как обычно, только с git svn rebase вместо git pull для подтягивания новых изменений. Впрочем, весь репозиторий с 5179 ревизий на данный момент вам вряд ли нужен, git svn clone svn://kolibrios.org -r5000 && git svn rebase kolibrios.org несколько экономичнее.
gittup.org/tup/lua_parser.html
Tup позволяет задавать правила сборки двумя способами: на своём собственном DSL — синтаксис которого использует большая часть мануала — и на Lua. Lua, будучи полноценным языком программирования, позволяет больше.
Вы взяли в качестве примера файл, который делает магию под капотом, в функциях compile_msvc и link_msvc из programs/use_msvc.lua. К сожалению, сейчас, чтобы получить Колибри-бинарник от gcc или msvc, нужно делать довольно много магических пассов, специфических для компилятора — Tup позволяет затолкать их под капот в use_gcc.lua/use_msvc.lua, но не избавиться от них.
Из того, что оказалось под рукой в репозитории, SDL_image отказался собираться с libpng из-за того, что последняя с какого-то момента перестала выставлять на всеобщее обозрение в png.h внутренности своих структур, а первая до какого-то момента эти внутренности использовала. Я думаю, что это решается обновлением версии, но этим кто-то должен заниматься.
С прозрачностью не должно быть проблем, внутри SDL собственный рендерер, умеющий прозрачность.
SDL_mixer под рукой нет. Если там нет каких-то хитрых зависимостей — не должно быть и проблем. Если есть — вы рискуете получить игрушку размером больше img-образа системы.
SDL 1.2.2, на следующие версии никто не смотрел. SDL_ttf требует FreeType, которого нет. Звук в SDL есть. Файл конфигурации сборки SDL-версии Quake, со звуком: contrib/other/sdlquake-1.0.9/Tupfile.lua.
Бит ED не имеет отношения к тому, как будет использоваться селектор — хоть для стека, хоть для данных. Он влияет на проверки сегментной защиты — если ED=0, то сегментная защита разрешает адреса от 0 до лимита, если ED=1, то сегментная защита разрешает адреса от лимита+1 до максимального. Во время проектирования — в 286-х — сегментная защита была единственным средством защиты, и expand-down сегменты предполагалось использовать для растущих стеков — условно, когда в начале работы программы ей выделяется N байт «вверху» сегмента с SS с выбросом исключения, когда SP опускается ниже выделенного размера, и при необходимости программа запрашивает у системы больше стекового пространства, уменьшая лимит. Отсюда и фразы в документации про «dynamic stack segments», хотя, я повторюсь, ED не имеет отношения к собственно стеку. Потом появилась страничная защита, которая, хоть и с двумя уровнями привилегий против 4-х сегментных, оказалась намного удобней, и flat-модель памяти, в которой сегментные проверки фактически отключены, но выкидывать разные странные биты было уже поздно в интересах совместимости.
Ну да, совсем никаких проблем, и на форуменетдесятковжалобна проблемыс компиляцией.
Факт остаётся фактом: за три года существования автосборки список программ на fasm с компиляцией изменяется постоянно всеми, кому не лень, а все — абсолютно все — программы, использующие libc, включаются строго уже скомпилированными бинарниками или не включаются совсем. Может быть, всё-таки проблемы в консерватории?
В ассемблерном наборе разных полезных и бесполезных макросов события именуются. Признанных заголовков для программ на ЯВУ просто не существует, каждый изобретает свои собственные.
Теоретически — да, есть, например, порт SDL и какое-то количество портированных программ, которые не умеет собирать никто, кроме тех, кто портировал.
Практически — для настройки понадобятся очень крепкие нервы — скажем, мои не выдерживают — и контакт с кем-нибудь из наших ЯВУшников. Можете быть уверены, что с первого раза ничего собрать не получится. ЯВУшники проекта подскажут, что именно вы сделали не так, но делать так, чтобы у всех всё просто собиралось, и не подумают.
Как показала практика, никто так и не смог настроить автосборку чего бы то ни было с libc. Только compiles on my machine, только ручная работа с бубном.
Для коммуникации мы используем форум. Соглашения по стилю программирования есть для ядра, прекоммитный хук проверяет их и не даёт нарушать. Для программ единый зафиксированный стиль менее актуален, потому что редко бывает ситуация, когда над одной программой одновременно работают несколько человек.
2. Какая-то системная библиотека может отсутствовать. Например, нет pthread.
3. Какие-то функции в libc могут отсутствовать или быть заглушками. Например, clock() из POSIX возвращает суммарное процессорное время, использованное программой, ядро KolibriOS не отслеживает эту информацию; clock() из menuetlibc возвращает wall clock, clock() из newlibc возвращает ошибку (clock_t)-1.
После того, как создать lang.inc, ядро нормально собирается командой
fasm kernel.asm
. Проблемы начинаются дальше:* ядро в дистрибутиве упаковано, возможность вызывать дополнительный шаг kerpack должна быть и при этом должна быть опциональной, чтобы не увеличивать зря порог вхождения,
* образ системы — намного больше, чем ядро, в образе есть много разных файлов,
* автосборка на сервере должна понимать, что при коммите в файл kernel/trunk/fs/fat.inc нужно пересобрать ядро, но необязательно тратить время на пересборку всего остального, от kernel/trunk/bootloader/floppy1440.inc ядро не зависит, но зависит бутсектор,
* программы на си существуют, в том числе и в дистрибутиве, их тоже нужно уметь собирать — можно, конечно, вести долгие холивары вроде того, что идёт прямо здесь, насчёт включения, но ситуация, когда кто-то когда-то один раз собрал что-то и выложил на форуме в виде бинарника без возможности сборки и никто не может это повторить, очень сильно мешает радикальным изменениям во вполне ассемблерных частях проекта. Которые нужны,
* действия по добавлению/редактированию списка собираемых программ должны быть как можно проще, иначе никто этим не будет заниматься.
Tup сборку очень сильно упрощает.
git svn clone svn://kolibrios.org
создаст локальный git-репозиторий, с которым можно работать как обычно, только сgit svn rebase
вместо git pull для подтягивания новых изменений. Впрочем, весь репозиторий с 5179 ревизий на данный момент вам вряд ли нужен,git svn clone svn://kolibrios.org -r5000 && git svn rebase kolibrios.org
несколько экономичнее.Пример использования, с многопоточностью: programs/media/ac97snd/ac97snd/ac97wav.c.
Tup позволяет задавать правила сборки двумя способами: на своём собственном DSL — синтаксис которого использует большая часть мануала — и на Lua. Lua, будучи полноценным языком программирования, позволяет больше.
Вы взяли в качестве примера файл, который делает магию под капотом, в функциях compile_msvc и link_msvc из programs/use_msvc.lua. К сожалению, сейчас, чтобы получить Колибри-бинарник от gcc или msvc, нужно делать довольно много магических пассов, специфических для компилятора — Tup позволяет затолкать их под капот в use_gcc.lua/use_msvc.lua, но не избавиться от них.
Если вы хотите понять принципы, я советую начать с более простых fasm или nasm: например, programs/network/ftpc/Tupfile.lua, programs/develop/examples/thread/trunk/Tupfile.lua. Тема на форуме с некоторыми комментариями: board.kolibrios.org/viewtopic.php?f=7&t=2869 — там уклон на сравнение со старой системой автосборки на Make, но и просто информация есть.
под рукойв репозитории, SDL_image отказался собираться с libpng из-за того, что последняя с какого-то момента перестала выставлять на всеобщее обозрение в png.h внутренности своих структур, а первая до какого-то момента эти внутренности использовала. Я думаю, что это решается обновлением версии, но этим кто-то должен заниматься.С прозрачностью не должно быть проблем, внутри SDL собственный рендерер, умеющий прозрачность.
SDL_mixer под рукой нет. Если там нет каких-то хитрых зависимостей — не должно быть и проблем. Если есть — вы рискуете получить игрушку размером больше img-образа системы.
Факт остаётся фактом: за три года существования автосборки список программ на fasm с компиляцией изменяется постоянно всеми, кому не лень, а все — абсолютно все — программы, использующие libc, включаются строго уже скомпилированными бинарниками или не включаются совсем. Может быть, всё-таки проблемы в консерватории?
Практически — для настройки понадобятся очень крепкие нервы — скажем, мои не выдерживают — и контакт с кем-нибудь из наших ЯВУшников. Можете быть уверены, что с первого раза ничего собрать не получится. ЯВУшники проекта подскажут, что именно вы сделали не так, но делать так, чтобы у всех всё просто собиралось, и не подумают.