Дописал часть про 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-sysnix = { 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_linux
