OpenXRay / xray-16

Improved version of the X-Ray Engine, the game engine used in the world-famous S.T.A.L.K.E.R. game series by GSC Game World. Join OpenXRay! ;)
https://discord.gg/sjRMQwv
Other
3.05k stars 456 forks source link

General Linux port discussion (Russian) #231

Closed johndoe71rus closed 5 years ago

johndoe71rus commented 6 years ago

Буквально несколько дней назад, когда узнал о проекте в ридми была отметка что на линуксе собирается. Обновил гит и модули сегодня, получил ошибку при сборке. https://paste.ubuntu.com/p/TMTsGmMDHD/ лог

q4a commented 6 years ago

Приветствую. Основная работа над Linux-портом идет в бранче linux вот тут: https://github.com/q4a/xray-16 В https://github.com/OpenXRay/xray-16 изменения переносятся спустя некоторое время. Такую же ошибку при сборке я воспроизвел у себя и поправил. Скоро смержим и закроем тикет.

johndoe71rus commented 6 years ago

да, как раз на той странице и видел плашку об успешной сборке. спутал потому что ссылка на issues ведет сюда же. тот проект у меня тоже не собирается, https://paste.ubuntu.com/p/2JJsVzzMZh/

q4a commented 6 years ago

Расскажи пару слов про твой дистрибутив, какая версия SDL2 стоит, покажи вывод 2 команд: pkg-config --cflags --libs sdl2 pkg-config --cflags sdl2

У меня вот такой вывод: $ pkg-config --modversion sdl2 2.0.8 $ pkg-config --cflags sdl2 -D_REENTRANT -I/usr/include/SDL2

И посмотри внимательно на вот это файл: https://github.com/q4a/xray-16/blob/linux/doc/howto/build-linux.txt Я только что добавил туда описание грязного хака, от которого пока не не получается избавиться) И любые мелкие вещи проще спросить в discord-е (можно прям из браузера): https://discord.gg/sjRMQwv

johndoe71rus commented 6 years ago

Calculate Linux Desktop 17.12.2 LXQt (gentoo based) $ pkg-config --cflags --libs sdl2 -D_REENTRANT -I/usr/include/SDL2 -lSDL2 $ pkg-config --cflags sdl2 -D_REENTRANT -I/usr/include/SDL2 $ pkg-config --modversion sdl2 2.0.8 Тут практически все собирается, есть почти все нужные зависимости изкоробки. В отличии от убунту. Использую как полигон для сборки и запуска разных проектов

Если cmake .. отрабатывает без ошибок, значит зависимости для сборки удовлетворены? без cryptopp тоже ошибка https://paste.ubuntu.com/p/Hrctx3YZbW/

q4a commented 6 years ago

Странно. Версия SDL2 нормальная. Тогда посмотри, что система скажет на вот этот запрос: apt-file search SDL_platform.h

Вот что выдает у меня: $ apt-file search SDL_platform.h emscripten: /usr/share/emscripten/system/include/SDL/SDL_platform.h libsdl1.2-dev: /usr/include/SDL/SDL_platform.h libsdl2-dev: /usr/include/SDL2/SDL_platform.h

И дальше проверь, стоит ли libsdl2-dev

johndoe71rus commented 6 years ago

$ locate SDL_platform.h /home/test/build/game/RealRTCW/code/SDL2/include/SDL_platform.h /home/test/build/game/iortcw/MP/code/SDL2/include/SDL_platform.h /home/test/build/game/iortcw/MP/code/SDL2/include-2.0.1/SDL_platform.h /home/test/build/game/iortcw/SP/code/SDL2/include/SDL_platform.h /home/test/build/game/iortcw/SP/code/SDL2/include-2.0.1/SDL_platform.h /usr/include/SDL/SDL_platform.h /usr/include/SDL2/SDL_platform.h

gentoo ориентирована на сборку из исходников. так что нет отдельных *-dev пакетов как в дебиане/убунту. eix libsdl2 [I] media-libs/libsdl2 Доступные версии: 2.0.4 2.0.8-r1 ~2.0.8-r2 {X alsa altivec aqua custom-cflags dbus fusionsound gles haptic +joystick kms libsamplerate nas opengl oss pulseaudio +sound static-libs +threads tslib udev +video wayland xinerama xscreensaver ABI_MIPS="n32 n64 o32" ABI_PPC="32 64" ABI_S390="32 64" ABI_X86="32 64 x32" CPU_FLAGS_X86="3dnow mmx sse sse2" VIDEO_CARDS="vc4"} Установленные версии: 2.0.8-r1(13:40:46 28.06.2018)(X alsa dbus gles haptic joystick opengl pulseaudio sound threads udev video xinerama -altivec -aqua -custom-cflags -libsamplerate -nas -oss -static-libs -tslib -wayland -xscreensaver ABI_MIPS="-n32 -n64 -o32" ABI_PPC="-32 -64" ABI_S390="-32 -64" ABI_X86="32 64 -x32" CPU_FLAGS_X86="3dnow mmx sse sse2") Домашняя страница: http://www.libsdl.org Описание: Simple Direct Media Layer

q4a commented 6 years ago

Хорошо. Про Calculate Linux я ничего не знаю, поэтому просто ориентируюсь на ошибку из https://paste.ubuntu.com/p/2JJsVzzMZh/ - файл SDL_config.h содержит инклюд SDL_platform.h , но не видит его. Попробую поспрашивать у коллег-линуксоидов, но как-то странно выглядит.

/usr/include/x86_64-pc-linux-gnu/SDL2/SDL_config.h:33:10: фатальная ошибка: SDL_platform.h: Нет такого файла или каталога

include "SDL_platform.h"

      ^~~~~~~~~~~~~~~~

компиляция прервана.

UPD: попробуй сделать не просто make, а VERBOSE=1 make

johndoe71rus commented 6 years ago

https://paste.ubuntu.com/p/rvMKF8VTgp/ в каталоге /usr/include/x86_64-pc-linux-gnu/SDL2/ только один файл SDL_config.h

q4a commented 6 years ago

У нас походу в xrMiscMath не прописаны SDL инклюды. Вечером постараюсь поправить

q4a commented 6 years ago

Попробуй заменить содержимое файла src/utils/xrMiscMath/CMakeLists.txt на вот это: https://paste.ubuntu.com/p/DTZttcnv6f/ - там добавлена только 1 строка: в список директорий инклюдов добавлен ${SDL_INCLUDE_DIR}

johndoe71rus commented 6 years ago

то место проехали, но затык на новом https://paste.ubuntu.com/p/jVnxT77DyV/ но тоже SDL2.

eagleivg commented 6 years ago

Добавил сдл инклюды для OPCODE, перестяни.

johndoe71rus commented 6 years ago

https://paste.ubuntu.com/p/8RFwMCbSJX/ есть прогресс, но снова ошибка. кстати, хак про Externals/cryptopp может тоже в коде закрепишь. Модуль снова скачался и я его удалял.

eagleivg commented 6 years ago

Переделал поиск SDL, указал в зависимых проектах инклуды. Перед проверкой удали папку сборки и заново её создай, и выполни из нее cmake ..

johndoe71rus commented 6 years ago

теперь все собралось. Лог где нибудь пишется? в терминале не хватило буфера на полный лог. Правильно понимаю что на линукс пока только сборка отдельных модулей. Играть нельзя. А судя по вики, на видеокартах ATI тем более.

q4a commented 6 years ago

Лог, который виден на экране вроде не пишется. Всегда можно сделать >> output.log Есть лог cmake-а: bin/CMakeFiles/CMakeOutput.log - но там другое На Linux идет почти полная сборка (за исключением отдельных модулей). Запуск идет через бинарник bin/src/xr_3da/xr_3da Я пробовал его запускать - он начинает искать файлы с игрой, конфиги игры и т.п. Дальше этого места я пока не прошел)

johndoe71rus commented 6 years ago

если лог нужен, могу пересобрать.

Посмотрел, кроме бинарника по папкам модулей раскиданы *.so файлы которые надо скопировать на свои места. Этот движок для Зова Припяти?

q4a commented 6 years ago

Да нет, логов сборки полно. *.so файлы собираются и пока не перемещаются в нужную папку. Сначала хочется избавиться от ошибок сборки вроде: https://clbin.com/z9IEF И грязных хаков вроде: https://github.com/q4a/xray-16/commit/9d9b1e770f30bf20d591420418ca7668a33d56c7 А движок этот для Зова Припяти.

johndoe71rus commented 6 years ago

когда собирал последний раз не удалял cryptopp. хотя возможно он где то в конфигах просто отключен уже был

johndoe71rus commented 6 years ago

можно наверно тут про запуск продолжить. Игры пока нет, не нашел источник чистый без модов. Просто сделал папаку, туда скопировал бинарник и в папку so модули. Не знаю куда их правильно размещать. Запустил бинарник, он ругнулся на файл https://i.imgur.com/8ZEiLZO.png скачал отдельно этот файл, в нем поправил путь $app_data_root$ = true | false | ./SCoP при запуске создалась папка scop но в нижнем регистре. И папка и файл лога со \ в названии. https://i.imgur.com/c0TqHqe.png Хотя они должны быть созданы в папке scop. Создает их xr_3da, надо в нем пути пофиксить.

eagleivg commented 6 years ago

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

johndoe71rus commented 6 years ago

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

eagleivg commented 6 years ago

Не, это плохая идея, для любой из операционок. И в винде и в линуксе рекомендуется данные возникающие в процессе работы отдельно от бинарей хранить. В линуксе ещё и потому, что если игру опакетить, то у пользователя может не быть прав для сохранения в папку установки.

johndoe71rus commented 6 years ago

так делают практически все портабл приложения. Не важно на какой системе их запустили, все настройки и данные на месте. Такую игру никто опакечивать не будет. Вариант получить данные игры - папка уже установленной игры из винды или установка через wine. Возможность играть на 2 системах и иметь единые сохраненки думаю будет востребована.

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

eagleivg commented 6 years ago

Возможность играть на 2 системах и иметь единые сохраненки думаю будет востребована.

Думаю не очень-то.

Такую игру никто опакечивать не будет

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

Вариант получить данные игры - папка уже установленной игры из винды или установка через wine.

Уже в текущем варианте можно либо указать расположение fgame.ltx через командную строку, либо запустить бинарь из папки с этим файлом. Также думаю над вариантом автоматического поиска этого файла через mlocate на линуксе и WindowsSearch на винде. Для владельцев игры в Steam напишу скрипт для steamcmd для получения ресурсов напрямую из стима

Xottab-DUTY commented 6 years ago

Сомнительная идея насчёт переносимого пакета.. Прав на игру у нас нет: возьмёт GSC да как даст нам по башке...

Xottab-DUTY commented 6 years ago

Кстати, если искать fsgame.ltx поиском, то он может не тот файл найти, ибо их может быть несколько.

eagleivg commented 6 years ago

Кстати, если искать fsgame.ltx поиском, то он может не тот файл найти, ибо их может быть несколько.

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

johndoe71rus commented 6 years ago

обычно портированные бинарники просто копируются рядом с родными. И с путями ничего мудрить не надо

Xottab-DUTY commented 6 years ago

Тогда, да, хорошо. Я думаю сделать лучше так:

  1. Как обычно, попробовать взять файл из рабочей папки.
  2. Если он не нашёлся, попытаться взять его из папки ../
  3. Если он опять не нашёлся, то взять его уже из папки ../../
  4. И только последним вариантом использовать поиск.. При этом предусмотреть, тот факт, что он может быть медленный, что-то с этим сделать...
johndoe71rus commented 6 years ago

git submodule update --init --recursive error: Сервер не поддерживает запрос необъявленного объекта b025b01c5b9d23f6218c7d72b7aafa3f1ab1e08a Получен по пути подмодуля «Externals/LuaJIT», но не содержит b025b01c5b9d23f6218c7d72b7aafa3f1ab1e08a. Сбой при прямом получении коммита.

я не правильно обновляю подмодули. или надо исправить.

johndoe71rus commented 6 years ago

мы можем положить бинарники просто в директорию bin-linux или bin_linux?

попробовал, не работает. Правки искать fsgame.ltx уровнем выше еще не было? положил xr_3da в папку игры рядом с fsgame.ltx стало ругаться что нет папки scop и scop/logs. в конфиге написал $app_data_root$ = true| false| .\scop Папки не создаются при необходимости. А раньше создавались, пусть и со слешем в названии. сделал, запустил https://paste.ubuntu.com/p/JWPQRkzg3b/

Xottab-DUTY commented 6 years ago

Для подмодулей надо сделать так:

cd Externals/LuaJIT
git reset --hard origin/HEAD

И тоже самое, только для luabind

Xottab-DUTY commented 6 years ago

Правки на поиск уровнем выше ещё не было. только вручную запускать из нужной рабочей папки. И да: а что если взять fsgame.ltx из Steam версии игры?

johndoe71rus commented 6 years ago

эта виндовс версия и виндовый бинарник собраны из "одного кода"? Слышал что вы рефакторили код. Но изначально был один источник. Тогда виндовая версия из игры без проблем сразу находит конфиг уровнем выше бинарника. Потому что виндовый бинарник лежит в /bin у меня сейчас вроде как gog версия. Не думаю что будет разница в конфигах. Как понял в fsgame.ltx прописаны приоритеты где искать ресурсы игры и путь для папки с логом и сейвами. при установке $app_data_root$ прописывается самим установщиком. Еще до запуска игры там путь в папку пользователя. У меня был случай запуска ShOC в wine. Не сохранялись настройки. Потом вспомнил что виндовс стояла на разделе Е и путь $app_data_root$ был прописан на Е. А в конфигурации wine не было этого диска. Поправил в конфиге Е на С и все стало отлично.

Xottab-DUTY commented 6 years ago

Неа, виндовая версия тоже не находит конфиг уровнем выше. Код, конкретно в этом месте, не рефакторился)

Не совсем понял про из "одного кода" и один источник.

В fsgame.ltx прописаны не приоритеты (не совсем понял, что имелось ввиду), а просто пути к необходимым папкам..

В стимовской версии папка $appdata$ лежит прямо в папке с игрой. Посоветовал её именно из-за этого.

johndoe71rus commented 6 years ago

Не совсем понял про из "одного кода" и один источник.

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

В fsgame.ltx прописаны не приоритеты (не совсем понял, что имелось ввиду), а просто пути к необходимым папкам..

Если не путаю то в fsgame.ltx надо делать правки что бы данные ресурсов брались из gamedata а не из архивов. это и назвал приоритетом.

В стимовской версии папка $appdata$ лежит прямо в папке с игрой. Посоветовал её именно из-за этого.

Так выше я делал примерно тоже самое. правил путь https://i.imgur.com/c0TqHqe.png вот при запуске рядом с бинарником была создана папка scop и scop\logs. А сегодняшний билд уже не создает папку для логов и сейвов. Пришлось самому сделать.

Xottab-DUTY commented 6 years ago

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

А, ты имеешь ввиду, что в главном репозитории код не менялся, но в этом репозитории его причесали?

Если не путаю то в fsgame.ltx надо делать правки что бы данные ресурсов брались из gamedata а не из архивов. это и назвал приоритетом.

Либо это было нужно в очень старой версии версии ТЧ либо это просто миф. Тут не могу сказать, откуда это взялось, но ни в одной игре ничего менять не надо. Всё прекрасно читается и так) @KRodinn, можешь подсказать, нужно ли было в старых версиях менять fsgame или оно всегда читало приоритно из геймдаты и непонятно почему решили, что надо менять?

А сегодняшний билд уже не создает папку для логов и сейвов. Пришлось самому сделать.

Странно это, надо сказать)

johndoe71rus commented 6 years ago

вроде как до сих пор рекомендуют https://steamcommunity.com/sharedfiles/filedetails/?l=russian&id=302750759 раздел II. Preparations

вобщем не важно, в одном из видео про openxray было упомянуто что вы провели работу по "чистке кода".

Главное, fsgame.ltx лежит в папке игры. бинарник xr_3da.exe в папке bin рядом с fsgame.ltx. Игра запускается ярлыком в папке игры. если только в ярлыке прописан путь к fsgame.ltx. а так получается что xr_3da.exe отлично находит конфиг fsgame.ltx уровнем выше.

johndoe71rus commented 6 years ago

test@test ~/build/game/xray-16/Externals/LuaJIT $ git reset --hard origin/HEAD HEAD сейчас на a3b6904 remove unused cmake file test@test ~/build/game/xray-16/Externals/luabind $ git reset --hard origin/HEAD HEAD сейчас на 735481f Update all CMakeLists.txt from Linux branch

так нормально?

Xottab-DUTY commented 6 years ago

Да.

johndoe71rus commented 6 years ago

как тогда обновить подмодули пачкой? git submodule update --init --recursive получаю то же сообщение что выше. пробовал удалять эти подмодули, что бы скачало снова, так же ошибка. где то нашел команду git checkout -f в пустую папку скачивает какой то код.

мне подсказали что забыли сделать что то типа git rm или mv. Но я точно не знаю.

Xottab-DUTY commented 6 years ago

А не надо второй раз вызывать git submodule update --init --recursive Это если грубо говоря))

johndoe71rus commented 6 years ago

хорошо. Git pull обновляет только этот проект. Как обновить связанные подмодули?

Xottab-DUTY commented 6 years ago

Ты их уже обновил же

Xottab-DUTY commented 6 years ago

Вообще, у меня есть предположения, что эти ошибки возникают из-за того, что я сделал force push в эти подмодули, в результате чего, некоторые коммиты затёрлись.. Слушай, а можешь заново склонировать? (если у тебя там своих изменений нет)

Если изменения есть, то git submodule update --recursive (приставка --init нужна если подмодули ещё не скачаны, поэтому она особо-то не нужна) Потом, после этого, сделай те reset --hard, о которых я писал выше и подмодули будут в обновленном состоянии..

johndoe71rus commented 6 years ago

нет, у меня на собственные правки кода знаний не хватает. попробую заново скачать. Можешь сам попробовать, в другую папку или на другой системе/пользователе. Я как то удалял подмодуль целиком, и потом запускал git submodule update --init --recursive с логикой что гит проверит какие подмодули подключены, какие в наличии и если есть отсутствующие докачает. И так сработало, скачалось 2 подмодуля без сообщений.

johndoe71rus commented 6 years ago

https://paste.ubuntu.com/p/n4pQHdz3Yj/ stack trace печатает

eagleivg commented 6 years ago

Угу, отлично. Работаем дальше.

johndoe71rus commented 6 years ago

https://paste.ubuntu.com/p/2Fpvpvcjp9/ свежие патчи. изменилась строка в xr_ini.cpp