commit -m "better"
2.96K subscribers
873 photos
106 videos
3 files
2.08K links
just random thoughts
Download Telegram
https://developers.google.com/open-source/gsoc/faq#are_participants_from_ukraine_russia_or_belarus_allowed_to_participate_in_gsoc_2022

А действительно, зачем проводить GSoC на территории стран, в которые нельзя заплатить?

———
#quake

Я тут, для проверки работоспособности opengl и vulkan решил собрать себе quake2. Все шло очень хорошо, пока не пошло совсем наперекосяк.

Очень грубо, клиент quake загружает в себя 2 .so(на самом деле, больше, но для понимания сути рассказа это неважно), каждая из которых устроена примерно так:

client.so = 1.o + 2.o
game.so = 2.o + 3.o

При этом, fun fact - 1.o и 3.o содержат в себе некоторую функцию, с одинаковым именем, которая реально зовется в 2.o, и должна иметь разную семантику в client.so, и в game.so

Ну, для примера, пусть это будет функция printf(), только в одном случае она пишет на экран, а в другом - отправляет сообщение по сети на сервер. Влинковать две функции printf с разной семантикой в одну программу не представляется возможным.

Я тут, конечно, встрял, потому что повторить такую семантику без радикального переписывания системы сборки казалось невозможным.

В конце-концов, я нашел решение, симулировав поведение hidden symbols с помощью objcopy. Конкретно - добавляем к каждому экспортируему символу уникальный для архива префикс - скажем, client_ для client.a, и game_ для game.a, после чего их можно безопасно влинковать в одну и ту же программу.

https://git.sr.ht/~pg/mix/tree/main/item/pkgs/bin/quake/2/yamagi/mix.sh#L34

+ немного магии в моем псевдо-динамеческом загрузчике по переадресации вызовов:

https://git.sr.ht/~pg/mix/tree/main/item/pkgs/bin/quake/2/yamagi/mix.sh#L36

Да, в этот раз я не показал кишки, я показал как это будет выглядеть для конечного мейнтейнера пакета. Кажется не очень всратым.

Думаю, до меня статический бинарник для quake2 не изготовлял никто, потому что это гениальное решение можно проследить еще в исходниках от id software.

Кстати, раз уж начал про quake.

Я редко играю в игрухи, но раз в 2 - 3 года на меня находит желание погонять в первый или второй quake. Вообще, я вам так скажу - софтверный рендер второго quake - это самый красивый графоний в играх, без дурацкого блюра и прочих наворотов. Прекрасные, четкие, квадратные пиксели, сделанные с душой.

Вся эта современная тенденция про увеличение числа полигонов и разрешения текстур - ну это ни о чем, души бы лучше добавили побольше.
👍15
Читал тут, на ночь глядя, unixporn. Нет, это не pornhub, и не xvideos.

Я оттуда ничего не использую, потому что обычно, если сфотать не под тем углом, что фотал автор, оно все разваливается.

Глаз зацепился за https://www.reddit.com/r/unixporn/comments/ut0g7u/kde_catppucin_with_mac_fonts/

Там коллега, на голубом глазу, утверждал, что использует под Linux шрифты из macOS.

Я удивился, потому что думал, что эти шрифты не отчуждаемы.

Но нет, вот они, любой желающий может скачать - https://developer.apple.com/fonts/

Маленькая загвоздка - они в dmg формате, а это, по сути своей, образ HFS+, если я ничего не путаю.

Гугление подсказало, что с dmg умеет справляться 7z - https://askubuntu.com/questions/38112/how-can-i-open-a-dmg-file

Проблема в том, что с dmg умеет справляться только "большой" 7z, а 7za - не умеет. 7z у меня не был собран, потому что он в процессе работы использует две подгружаемые .so - 7z.so, и rar.so.

Когда я в первый раз подходил к снаряду, у меня не получилось это сделать, но сейчас я уже умею больше и сильнее.

Короче, TL;DR - по моей классификации, это "всратейшая" система с #plugin, потому что там экспортируются какие-то левые символы с данными, функциями, .so при загрузке выполняет конструкторы, которые себя где-то регистрируют, и так далее.

Так же, как у меня уже было в #quake 2, обе .so и main driver пересекаются по обжам и по символам. Я и поступил так же - переименовал все символы, написал mapping для моего загрузчика, и все! https://git.sr.ht/~pg/mix/tree/main/item/pkgs/bin/p7zip/z/mix.sh#L29

Забавно, по мере роста пакетной базы и развития инструментария, все это становится все проще и проще. Правда, мой идеал - по compile database вывести все нужные правила для перелинковки, пока еще далеко.

А что шрифты? А шрифты я загрузил, там, внутри dmg лежит pkg, который тоже нужно разжать с помощью 7z. А внутре лежит какой-то файл, который можно разжать только с помощью bsdtar.

Вот такая вот смерть кащея. https://git.sr.ht/~pg/mix/tree/main/item/pkgs/aux/fonts/sf/pro/mix.sh

Шрифты мне не понравились, #freetype рендерит их не очень. Правовой статус мне не очень понятен, при закачке ничего сказано не было, при установке тоже.
👍10💩1