commit -m "better"
2.96K subscribers
870 photos
105 videos
3 files
2.08K links
just random thoughts
Download Telegram
Продолжаю собирать #ladybird.

Процесс этот не быстрый, потому что, например, коллега решил поюзать для рендеринга #skia от Google - https://skia.org/

Кстати, так-то очень хороший выбор, по модулю одной мааленькой проблемки - google не делает ее релизов (потому что совершенно не заинтересованы в ее использовании out of tree), а, значит, для того, чтобы получить дерево ее исходников, нужен depot_tools - https://chromium.googlesource.com/chromium/tools/depot_tools.git

Если кто не знает, то это такой анальный зонд кусок невоспроизводимого бинарного блоба от Google, который заменяет git submodules в их некоторых OSS проектах. Ну а запускать бинарный блоб просто так мне не хочется (да и не можется, потому что glibc).

Ну а чтобы ее собрать, они качают еще 2 куска бинарного блоба - bazel, и свою сборку ninja.

Короче, это мерзость мерзотная, в которую я лезть очень не хотел.

Но, к счастью, относительно недавно они запилили python скрипт, который заменяет depot_tools:

git clone https://skia.googlesource.com/skia.git
# or
# fetch skia
cd skia
python3 tools/git-sync-deps


Это решает первую проблему.

А вторую проблему решает то, что там лежат экспортированные в GN сборочные файлы от Bazel.

GN - это тоже такая система сборки от Google, она написана на C++, и нормально у меня #bootstrap

Ну и, так как Гугл совершенно не заинтересован в распрстранении этой либы, то у нее нет таргета make install, раскладывать по файловой системе все приходится ручками, кто во что горазд:

https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=skia-git#n82

skia я собрал, а вот #ladybird - пока нет, потому что там еще много чего "странного", о чем в следующих сериях.
👍19🙉5🤔4💩1
commit -m "better"
Продолжение истории про #lunasvg. #svg Я закончил на том, что у меня часть иконок была отренжерена через lunasvg в процессе построения пакета с иконками, а часть(которая вне этого пакета) - в процессе работы приложения. Проблема была в том, что иконки, отренжеренные…
Я как-то давно рассказывал, что у меня в репе нет librsvg, и что #svg иконки я отрисовываю без нее.

Вот, раз уж добавил в репозиторий skia (https://t.iss.one/itpgchannel/2035), то было грех не запилить +1 рендер иконок, уже с ее помощью:

https://github.com/pg83/ix/blob/main/pkgs/bin/skia/svg/ss.cpp - это сама тулза, которая рендерит svg через #skia.

https://github.com/pg83/ix/tree/main/pkgs/bld/iconker - заодно похвастаюсь, сколько у меня вообще сейчас способов отрисовать svg иконку - через inkscape, через #lunasvg, через resvg (библиотека на Rust, лучше, чем librsvg, https://github.com/RazrFalcon/resvg), теперь вот через skia, ну и через #svgren.

Рендер через skia (он же рендер из google chrome) весьма неплох, даже по меркам авторов resvg - https://github.com/RazrFalcon/resvg?tab=readme-ov-file#svg-support

librsvg? Принципиально не буду ее добавлять, потому что нехер создавать людям столько трудностей в попытке иметь базовую систему без Rust!
🤡7🐳6👍31
Будни #bootstrap

https://www.phoronix.com/news/WebKitGTK-2.46-Skia

WebKit перешел на #skia (https://t.iss.one/itpgchannel/2047), для рендеринга.

Перешел и перешел, дело хорошее.

Но он сделал это криво!

Дело в том, что они переписывают сборку внешних компонент на cmake, и вендорят их к себе.

В этот раз они решили сэкономить, и добавили в сборку не все исходники. Поэтому получилось так, что часть кода ссылается на недоступные функции и методы. У них в сборке, так уж получилось, это осталось незамеченным, а вот у меня посыпались ошибки линковки.

Чаще всего такие расхождения связаны со слабыми символами, которые линкер учитывает по-разному, для динамической линковки, и для статической. Поэтому у них линкер выкинул часть графа вызовов, потому что посчитал ее недостижимой, а у меня - нет.

Мне настолько надоело чинить это "красиво", что я соорудил очередную #herobora прибегнул к ковровым бомбардировкам - сказал, что недостающие символы надо разрезолвить в вызов abort() - https://github.com/pg83/ix/blob/main/pkgs/bin/epiphany/4/ix.sh#L28-L41 (там какие-то запчасти для отладки).

Это работает в предположении, что эти символы действительно недостижимы, а если достижимы, то получим падение в runtime (которое так и не случилось).

Мораль? Лучше не вендорить зависимости, особенно если у тебя нет команды из 5 человек, которые бы это вылизывали для твоей монорепки.
👍12💯4😱3🐳1🆒1
https://www.phoronix.com/news/Rust-Debian-2025

"around 8% of the source packages in Debian Sid are building against at least one librust-* package. That 8% figure for Debian source packages building against at least one Rust library package is around double of what it is for Debian 12 "Bookworm". Quite a significant uptake over the past few years and it's only continuing to grow with more open-source projects introducing varying levels of Rust integration"

Понятное дело, что это librsvg, или какие-нить кодеки, которые не являются обязательными, но против них нужно собраться, чтобы получить "полный" пакет, но, тем не менее, цифра довольно внушительная.

У меня против Rust собирается ровно 0 от базовой системы, потому что librsvg для загрузки иконок в gtk я переписал на кастомный #svg loader over #lunasvg/#skia/#svgren (по выбору), и убрал все эти опциональные зависимости.

Ну просто потому, что Rust не является #bootstrap абельным (я не могу собрать его из исходников, не имея под рукой готовый компилятор Rust, подробности в моей эпопее с #mrustc), а это зашквар.
🤡8🔥54👍3😁2💯1