gentee/c-gentee

gentee портирование под Linux

niolay1982 opened this issue · 4 comments

Это я обращался по поводу развития проекта. У меня получилось портировать gentee(3.6.3) под Linux. Много проверял, все нормально работает. Есть только некоторые нюансы. Портировал stdlib.ge под Linux через import syscall из libc. Файловые операции работают, остались некоторые функции отключенными(пустышки) - ffind.g и unistd.g, может еще что-то.
Нужен набор скриптов для тестирования валидности собранного компилятора и stdlib.ge.

Взялся переписывать vm_run() для возможности портирования на другие платформы.
Мне удалось создать код vm_run() без применения ассемблера. Моя версия исходников может компилироваться без использованием inline asm кода за счет макросов. То есть чистый "C". Но только для типа вызова внешних функий cdecl и тех что в embfuncaddr[]. Это подходит для Unix подобных систем с LE-endian.

Сильно изменил os/uses/defines.h и common/types.h. В них вся конфигурация под платформы, за счет макросов.
Пробовал скомпилировать под Debian-armel Linux(на эмуляторе qemu). На эмуляторе работает, правда без stdlib. На реальном устройстве думаю не будет работать, поскольку на ARM системах есть проблема с использованием не выравненых указателей.

Смог скомпилировать под Symbian, но на устройстве не работает, думаю по вышеуказанной причине.

Могу поделится моими изыcканиями портирования gentee. Надо дальше тестировать. Если есть какой-то набор тестовых g скиптов, то было бы хорошо мне их получить.

Ассемблерные вставки у нас использовались при вызове stdcall и cdecl функции. На Linux только cdecl функции? Еще мы делали ассемблерную замену некоторых команд в оптимизаторе, но это я думаю вам не нужно.
У нас есть src-linux папка, я предлагаю заменить ее вашими наработками, чтобы вы размещали туда все относящееся к портированию на Linux. Даже лучше переименовать ее типа в linux или еще как. Можете, в общем, сделать pull request на новую директорию и я приму ее.

Могу поделится моими изыcканиями портирования gentee. Надо дальше тестировать. Если есть какой-то набор тестовых g скиптов, то было бы хорошо мне их получить.

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

Ого это круто. Я бы помог потом после портирования на Linux портировать на Mac OS.

gentee, Думаю лучше создать новую директорию, скажем src-cros.
Я не убирал возможности компиляции под Window, и для тестирования я использую сборки и под mingw.
Еще много нужно доделать, на github пока не заливаю,
Но оставлю времененую ссылку:
http://ok512.my1.ru/load/programmirovanie_iskhodniki_i_binarniki/1-1-0-3
Добавлены изменения:

  1. Порт stdlib на Linux
  2. Реализация функции callback на Linux
  3. Поддержка import
  4. Gentee библиотека импорта FLTK-1.3(GUI).Работает на Windows, Linux.
    Теперь можно создавть GUI приложения одинаково работающие как на Windows, так и на Linux,
    с одинаковым исходным кодом.
  5. Поддержка макро-конструкции _IS_DEFINED_XXXX
  6. Пути поиска gentee.ini:
    "C:\Gentee\gentee.ini",
    "E:\Gentee\gentee.ini",
    "/etc/gentee/gentee.ini",
    "/usr/share/gentee/gentee.ini"
  7. Возможность перенаправления stdout в файл. Опция -log <log_file>
  8. Gentee работает на Linux Debian ARMEL на эмуляторе.
  9. Возможность скомпилировать gentee полностью без использования inline asm кода.
    То есть можно пробывать компилировать его на Unix подобных платформах не X86. Только Little Endian.
    Для BE думаю что надо править много кода.

3 Пункт Поддержка import msthiscall. я вообщето вводил между "меньше" и "больше", github понял как tag