Сборка SDL-INSTEAD для Windows 95 и процессора Pentium
С этим есть несколько сложностей:
- Visual C Runtime 8.0, используемый существующими сборками некоторых зависимостей несовместим с Windows 95 (минимум Windows 98).
- Большинство компонентов собраны с инструкциями i686, которые доступны начиная с процессоров Pentium Pro.
Эта статья может обновляться позже, если я найду способы упростить/улучшить некоторые шаги, или для новых версий mingw-w64. Пожалуйста напишите нам если вы найдете какие-либо ошибки или если у вас есть какие-то предложения.
1. Подготовка стандартной библиотеки
В mingw-w64 10.0 в Debian 12, CRT собрана для архитектуры i686. Это означает, что нам потребуется собственная сборка. Это описано в отдельной статье: Использование mingw-w64 с отдельным CRT.
Я буду использовать crt_prefix в этой статье как замену пути установки CRT.
2. Сборка зависимостей
Я только перечислю зависимости, которые потребуется пересобрать. Вы можете скачать собранные библиотеки из пакета INSTEAD-9x: Скачать INSTEAD-9x.
Для всего написанного ниже, вам понадобятся эти переменные окружения:
export CC="i686-w64-mingw32-gcc -static-libgcc"
export CXX="i686-w64-mingw32-g++ -static-libgcc"
export CFLAGS="-O2 -march=i486 -Bcrt_prefix/lib"
export CPPFLAGS="-O2 -march=i486 -Bcrt_prefix/lib"
export CXXFLAGS="${CPPFLAGS} -static-libstdc++"
Если вы опустите параметры -static-libgcc
или -static-libstdc++
, сборка не будет работать без дополнительных dll-библиотек.
2.1. SDL
Вам понадобится SDL 1.2.15. Скачать SDL-1.2.15.
Команды для сборки:
./configure --build=amd64-linux\
--host=i686-w64-mingw32\
--prefix=sdl_prefix
make
make install
Обязательно укажите sdl_prefix и вызовите make install. Это потребуется для сборки библиотек SDL_*.
2.2. iconv
Я использовал libiconv-1.18 со следующими командами:
./configure --host=i686-w64-mingw32\
--prefix=iconv_prefix
make
make install
2.3. zlib
Я использовал zlib 1.2.3. Должно получиться и с последней версией.
./configure --build=amd64-linux\
--host=i686-w64-mingw32\
--prefix=zlib_prefix
make
Библиотека будет собрана в той же директории и вы можете указать ее напрямую (В дальнейшем упоминается как zlib_path).
2.3. libpng
Я использовал libpng 15. Должно получиться и с последней версией. Для этой библиотеки понадобится несколько дополнительных шагов.
Скопируйте scripts/makefile.linux в makefile.linux.
- Отредактируйте файл. Вам понадобится изменить значения некоторых переменных. Замените существующие объявления следующими:
LIBSO=$(LIBNAME).dll LIBSOMAJ=$(LIBNAME)-$(PNGMAJ).dll OLDSO=libpng.dll # Эти будут в файле чуть ниже AR_RC=i686-w64-mingw32-ar rc CC=i686-w64-mingw32-gcc -static-libgcc RANLIB=i686-w64-mingw32-ranlib ZLIBLIB=zlib_path ZLIBINC=zlib_path
Замените все упоминания -lz на -lzdll.
Вызовите make.
Библиотека будет собрана в той же директории, и вы сможете передать ее зависимостям напрямую (упоминается в дальнейшем как png_path).
2.4. freetype
Я использовал freetype 2.6.5. Вы можете использовать и более новые версии, однако в 2.13.3 есть проблемы с растровыми шрифтами Windows, поэтому я решил использовать проверенную версию.
Я отключил часть зависимостей, потому что они нужны только в специальных случаях.
./configure --build=amd64-linux\
--host=i686-w64-mingw32\
--with-harfbuzz=no\
--with-zlib=yes\
--with-bzip2=no\
--with-png=yes\
--prefix=freetype_prefix\
ZLIB_CFLAGS="-Izlib_path"\
ZLIB_LIBS="-Lzlib_path -lzdll"\
LIBPNG_CFLAGS="-Ipng_path"\
LIBPNG_LIBS="-Lpng_path -lpng15-15"
make
make install
Не забудьте исправить имя библиотеки png если вы используете другую версию.
2.5. libjpeg
Я использовал jpeg-8d.
./configure --host=i686-w64-mingw32\
--prefix=libjpeg_prefix
make
make install
2.6. libtiff
Я использовал tiff-4.7.0. Должно получиться и с другими версиями.
./configure --host=i686-w64-mingw32\
--prefix=libtiff_prefix
make
make install
2.7. libwebp
Я использовал libwebp-1.5.0. Должно получиться и с другими версиями.
Потребуется отключить многопоточность, поскольку она использует современные API, недоступные на классических версиях ОС.
export CFLAGS="${CFLAGS} -Izlib_path"
export CXXFLAGS="${CFLAGS} -static-libstdc++"
export INCLUDE_PATH="zlib_path:$INCLUDE_PATH"
./configure --build=amd64-linux\
--host=i686-w64-mingw32\
--prefix=libwebp_prefix\
--disable-threading
make
2.8. SDL_image
Я использовал SDL_image-1.2.12.
Вам понадобится укзаать все библиотеки форматов, так же как и zlib, чтобы корректно собрать SDL_image.
export CFLAGS="${CFLAGS} -Izlib_path"
export CPPFLAGS="-Ipng_path -Ilibjpeg_prefix/include -Ilibtiff_prefix/include -Ilibwebp_prefix/include -Izlib_path ${CLAGS}"
export CXXFLAGS="${CFLAGS} -static-libstdc++"
export INCLUDE_PATH="zlib_path:$INCLUDE_PATH"
export LDFLAGS="-Lpng_path -Llibjpeg_prefix/lib -Llibtiff_prefix/lib -Llibwebp_prefix/lib -Lzlib_path"
./configure --build=amd64-linux\
--host=i686-w64-mingw32\
--prefix=sdl_image_prefix\
--with-sdl-prefix=sdl_prefix
make
2.9. SDL_ttf
Я использовал SDL_ttf-2.0.11.
Вам потребуется указать freetype, zlib and iconv2.
export CFLAGS="${CFLAGS} -Izlib_path"
export CPPFLAGS="-Iiconv_prefix/include -Isdl_prefix ${CLAGS}"
export CXXFLAGS="${CFLAGS} -static-libstdc++"
export INCLUDE_PATH="zlib_path:$INCLUDE_PATH"
export LDFLAGS="-Lsdl_prefix/lib -Liconv_prefix -liconv2 -with-freetype-prefix=freetype_prefix"
./configure --build=amd64-linux\
--host=i686-w64-mingw32\
--prefix=sdl_ttf_prefix\
--with-sdl-prefix=sdl_prefix
make
2.10. Другие библиотеки
Я не пересобирал аудио-библиотеки, потому что существующие работают. Вы можете пересобрать их аналогичным способом.
3. Сборка INSTEAD
Сейчас нет планов по добавлению поддержки SDL1 в основной INSTEAD. Вам потребуется исходный код отсюда: Исходный код INSTEAD-9x.
- Скопируйте или создайте символическю ссылку на``Rules.mingw.sdl1`` в Rules.make
- Соберите исполняемый файл командой CFLAGS="-O2 -Bcrt_prefix/lib -march=i486" make -f Makefile.mingw.sdl1 all. В CFLAGS вам потребуется указать архитектуру и собственную CRT если вам требуется поддержка i486/Pentium.