refal-5-lambda
refal-5-lambda copied to clipboard
Сборка под DOS с помошью DJGPP
Я попытался собрать данный компилятор Рефала под DOS используя DJGPP - компиляция останавливается на этапе генерации srefc-core.exe
файл rasl-appender\_rasl-appender.exe
успешно компилируется сборочным скриптом, но с таким именем он почему-то не вызывается (видимо сказываются какие-то внутренние ограничения на длину имени самого DJGPP)
поэтому в файл bootstrap.bat были внесены такие правки
@echo off
setlocal
mkdir bin >NUL 2>NUL
call scripts\load-config.bat || exit /b 1
%CPPLINEE%raslap\raslap.exe raslap\raslap.cpp
...
Скриншоты:
Компилятор жалуется, что не может найти точку входа (main функцию) и поэтому отказывается собирать
Параметры для c-plus-plus.conf.bat
:
set PATH=%PATH%;E:\DJGPP\bin
set DJGPP=E:\DJGPP\DJGPP.env
set CPPLINEE=gxx -Wall -o
http://www.delorie.com/djgpp/zip-picker.html - это своего рода генератор инструкции по установке компилятора DJGPP. Надо выбрать нужные опции и нажать Tell me which files I need
- будет выдан список архивов которые надо скачать и инструкция что с ними делать, чтобы получить рабочий компилятор.
В README.md сказано
Компилятор в рамках текущей архитектуры потребляет много памяти (30 Мбайт). Перенос под DOS с сохранением лёгкой компиляции под другие платформы потребует много работы и неоправданно усложнит компилятор и рантайм. Поэтому DOS не поддерживается.
Тут проблем с нехваткой памяти не будет т.к. DJGPP компилирует под 32 bit в защищенном режиме с DPMI http://www.delorie.com/djgpp/v2faq/faq2.html
Programs compiled with DJGPP, and all development tools provided as part of DJGPP, look on the outside like normal DOS programs, and they rely on MS-DOS and BIOS for file I/O and other basic functions such as keyboard input, screen cursor position, etc. However, the bulk of the code in a DJGPP program is 32-bit protected-mode code; DJGPP programs use DPMI (the DOS Protected Mode Interface) to allow DOS/BIOS calls from protected mode. Therefore, any environment that can run DOS programs and provides DPMI services, will run DJGPP programs as well. Environments that are known to be compatible with DJGPP include MS-DOS, Caldera's DR-DOS, NWDOS, FreeDOS, Windows 3.X, 9X and NT, OS/2, and Linux DOSEmu. When DJGPP programs run on Windows 9X and Caldera's DR-DOS, they support long filenames.
Функция main
находится в refalrts-main.cpp
.
Возможно, DJGPP не понимает в данном случае длинных имён и все файлы рантайма срезаются до REFALRTS-.CPP
, но это вряд ли. Но попробуй в bootstrap.bat
заменить строки
set FILELIST=%FILELIST% %1
на
set FILELIST=%FILELIST% %~s1
Под поддержкой DOS в README.md
имеется ввиду то, что компиляция и раскрутка должны вестись непосредственно из-под DOS, а не кросс-компилятором для DOS’а. Кстати, Windows 9x тоже не поддерживается — все батники написаны для Windows NT.
Под поддержкой DOS в
README.md
имеется ввиду то, что компиляция и раскрутка должны вестись непосредственно из-под DOS, а не кросс-компилятором для DOS’а.
С этим тоже не будет проблем т.к. DJGPP сам отлично запускается под DOS'ом, и тоже через DPMI.
Но попробуй в bootstrap.bat заменить строки ...
Не помогает
Чтобы вести разработку компилятора и из-под DOS тоже, придётся переписать все .bat
-файлы и переименовать исходники в 8.3. А мне с этим возиться лень, есть куча других задач, подразумевающих не меньший объём возни (например, поддержка DLL-ок).
У меня, например, предполагается поддержка сборки на MinGW/MSys и Cygwin (через bootstrap.sh
, запущенный под ихним башем), но я её очень давно не тестировал. Поддержка любых других платформ, кроме Windows NT, Linux, macOS, MinGW/MSys и Cygwin отсутствует, поскольку в platform-unknown/refalrts-platform-specific.cpp
есть ошибка, до которой у меня руки не доходят.
Можно попробовать отдельно скомпилировать все файлы refalrts*.cpp
— должен получиться работоспособный экзешник, который при запуске выдаёт ошибку, что RASL не найден. Потому что исполнимые файлы Рефала-5λ состоят из примерно такого префикса-интерпретатора, к которому в конец приписан интерпретируемый код. Как самораспаковывающиеся архивы.
Еще можно попробовать HX DOS Extender - https://wayback.archive.org/web/20141003032417fw_/http://www.japheth.de/HX.html
HX DOS-Extender is a free DOS extender with built-in Win32 PE file format support. Usually the purpose of a DOS extender is to make protected-mode features available for DOS applications. HX fully supports this goal, but goes some steps further. A Win32 API emulation layer is part of HX which allows many Win32 console applications to run in DOS. This emulation goes far beyond similiar approaches in other extenders (Borland's PowerPack, WDOSX or Phar Lab TNT). Furthermore HX implements - limited - support for windows, DirectDraw, GDI and even OpenGL graphics. This allows to run "simple" Win32 GUI apps in DOS as well.
https://sourceforge.net/projects/hx-dos/
Читал когда-то про эту штуку.
Может быть, когда-нибудь попробую.
Кстати, Рефал-05 гораздо проще перенести под DOS. Один нюанс: для раскрутки используется переславский компилятор Рефала-5, который тоже придётся перенести под DOS (у него доступны исходники). Причём с некоторыми изменениями кодогенерации можно существенно сократить потребление памяти (сейчас он ест менее 3-х мегабайт, можно уменьшить на порядок).