Добро пожаловать в Логово Силвервинга



Сборка SDL-INSTEAD для Windows 95 и процессора Pentium

С этим есть несколько сложностей:

  1. Visual C Runtime 8.0, используемый существующими сборками некоторых зависимостей несовместим с Windows 95 (минимум Windows 98).
  2. Большинство компонентов собраны с инструкциями 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. Должно получиться и с последней версией. Для этой библиотеки понадобится несколько дополнительных шагов.

  1. Скопируйте scripts/makefile.linux в makefile.linux.

  2. Отредактируйте файл. Вам понадобится изменить значения некоторых переменных. Замените существующие объявления следующими:
    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
    
  3. Замените все упоминания -lz на -lzdll.

  4. Вызовите 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.

  1. Скопируйте или создайте символическю ссылку на``Rules.mingw.sdl1`` в Rules.make
  2. Соберите исполняемый файл командой CFLAGS="-O2 -Bcrt_prefix/lib -march=i486" make -f Makefile.mingw.sdl1 all. В CFLAGS вам потребуется указать архитектуру и собственную CRT если вам требуется поддержка i486/Pentium.