Найти в Дзене
Toxblh

Spot - Spotify клиент на GTK4

Spot - Spotify клиент на GTK4 Дописал часть про fork, как оно бывает когда нужно портировать. Попробовал собрать Spot, аналогично пришлось поднимать версии некоторых библиотек руками и я упрёся снова в необходимость форка теперь уже aws-lc-rs и понеслась. Клонурем себе репозиторий, он с сабмодулями: git clone --recurse-submodules -j8 https://github.com/aws/aws-lc-rs cd aws-lc-rs Теперь нужно добавить его в наш ~/.cargo/config.toml в конец. Только теперь мы будем использовать path до нашей локальной папки, у меня это /home/toxblh/git/aws-lc-rs/, но так как сам пакет, это под-папка, то указываем ещё и её на хвосте aws-lc-sys nix = { git = 'https://github.com/helce/nix', branch = 'devel_e2k_24' } + aws-lc-sys = { path = '/home/toxblh/git/aws-lc-rs/aws-lc-sys' } А дальше начинается довольно длинное путешествие устранения ошибок. Работает это так. Мы исправляем что-то в aws-lc-sys и сразу пробуем пересобрать Spot уже который его использует. Можно ли иначе? Наверное с cargo test, но у

Spot - Spotify клиент на GTK4

Дописал часть про fork, как оно бывает когда нужно портировать. Попробовал собрать Spot, аналогично пришлось поднимать версии некоторых библиотек руками и я упрёся снова в необходимость форка теперь уже aws-lc-rs и понеслась.

Клонурем себе репозиторий, он с сабмодулями:

git clone --recurse-submodules -j8 https://github.com/aws/aws-lc-rs

cd aws-lc-rs

Теперь нужно добавить его в наш ~/.cargo/config.toml в конец. Только теперь мы будем использовать path до нашей локальной папки, у меня это /home/toxblh/git/aws-lc-rs/, но так как сам пакет, это под-папка, то указываем ещё и её на хвосте aws-lc-sys

nix = { git = 'https://github.com/helce/nix', branch = 'devel_e2k_24' }

+ aws-lc-sys = { path = '/home/toxblh/git/aws-lc-rs/aws-lc-sys' }

А дальше начинается довольно длинное путешествие устранения ошибок.

Работает это так. Мы исправляем что-то в aws-lc-sys и сразу пробуем пересобрать Spot уже который его использует. Можно ли иначе? Наверное с cargo test, но у лучше всего вышло через использование сразу.

Для примеров рекомендую использовать уже портированые пакеты Helce. Я например быстро нашёл патч для OpenSSL

https://github.com/helce/ring/commit/06856e11e7c0342ebdf473da137e8c12cdc700c3

И ещё есть https://github.com/ilyakurdyukov/e2k-ports от Ильи Курдюкова куда тоже можно и нужно подглядывать

По итогу имеем исправления в двух местах, это в сабмодуле aws-lc-sys/aws-lc/include/openssl/target.h:

--- a/include/openssl/target.h

+++ b/include/openssl/target.h

@@ -34,6 +34,8 @@

#elif defined(__ARMEL__) || defined(_M_ARM)

#define OPENSSL_32_BIT

#define OPENSSL_ARM

+#elif defined(__e2k__)

+#define OPENSSL_64_BIT

#elif (defined(__PPC64__) || defined(__powerpc64__)) && defined(_LITTLE_ENDIAN)

#define OPENSSL_64_BIT

#define OPENSSL_PPC64LE

и нужно немного расслабить правила сборки LCC прокидывая флаги сборки сабмодулей:

--- a/aws-lc-sys/builder/cmake_builder.rs

+++ b/aws-lc-sys/builder/cmake_builder.rs

@@ -166,6 +166,14 @@ impl CmakeBuilder {

// We only consider compiler CFLAGS when no cmake toolchain is set

self.apply_universal_build_options(&mut cmake_cfg);

+ cmake_cfg.cflag("-Wno-error=deprecated-declarations");

+ cmake_cfg.cflag("-Wno-error=sign-compare");

+ cmake_cfg.cflag("-Wno-error=signed-one-bit-field");

+ cmake_cfg.cxxflag("-Wno-error=deprecated-declarations");

+ cmake_cfg.cxxflag("-Wno-error=sign-compare");

+ cmake_cfg.cxxflag("-Wno-error=signed-one-bit-field");

И вот такими не хитрыми изменениями на которые ушло пара-тройка часов. Библиотека собралась и работает.

Далее сам Spot. Так как пришлось поднять по версиям zbus, а он потребовал небольшую миграцию кода на новую версию: https://github.com/xou816/spot/pull/754/files

Теперь не только Я.Музыка Cassetta работает на e2k но и Spotify в Spot!

@toxblh