Автор Тема: Помощь в использовании makefile для компиляции утилит на С  (Прочитано 5722 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Dport

  • Пользователь
  • Сообщений: 28
    • Просмотр профиля
Всем здравствуйте, хочу скомпилить одну интересную утилиту, транслятор M68K в x86 (вот ссылка на нее: https://sourceforge.net/projects/m682386/?ysclid=moq4nlvhmo726308740) но там используется makefile, а я понятия не имею как через него компилировать. Может кто-то объяснить как это делать, пожалуйста, весь инет облазил. P.S. прикрепляю архив, если ссылка не работает
« Последнее редактирование: 05 Мая 2026, 15:49:08 от Dport »

Оффлайн Беларус

  • Модератор
  • Сообщений: 1549
    • ВКонтакте
    • Steam
    • Просмотр профиля
Просто отдели ссылку пробелом и она станет кликабельной.

К гадалкам нейросетям обращался?
Ты же хотел получить Си-код, а теперь меняеш шыло на мыло?

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5702
    • Просмотр профиля
Для Windows установить MSYS2, через него установить MinGW x64 или MinGW UCRT x64, для обновления https://www.msys2.org/docs/updating/, для удаления кэша после обновления paccache -rk0. Запустить через ярлык в Пуске MSYS2 MinGW нужной версии, ввести команду cd с путём до Makefile (например, cd C:/682386_1_0/src, косые черты) и нажать Enter, выполнить make. Для очистки от .o и .exe файлов выполнить make clean.
Исправил ошибки компиляции, но лучше сделать без -Wno-format-overflow -Wno-stringop-truncation в Makefile. Программа у меня выдаёт пустой файл на тестовом примере, наверно не рабочая.

Оффлайн Werton

  • Пользователь
  • Сообщений: 1068
  • Пол: Мужской
    • Youtube
    • Просмотр профиля
Программа у меня выдаёт пустой файл на тестовом примере, наверно не рабочая.
Думаю, возможно, причина не в этом, а в том что код писался и собирался под древний Portable C Compiler, который даже не поддерживал (на 2001) до конца стандарт c89, и даже не под windows, указано - This translator is written in portable C language (both DOS and UNIX has been actively used in development). Думаю проще найти тот древний PCC (это даже не 1.0, т.к. она вышла только в 2011) и скомпилить бинарник на нем.

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5702
    • Просмотр профиля
найти тот древний PCC
Не тот древний, но скомпилировал с помощью pcc-20111206-win32.exe (https://web.archive.org/web/20230608172831/http://pcc.ludd.ltu.se/ftp/pub/win32/) в папке src через командную строку Windows:
"C:\Program Files (x86)\pcc\bin\pcc.exe" -lm -O2 -Wall -Werror dotlabel.c exp68000.c fcomment.c flaggopt.c generate.c info386.c main.c match86.c memind.c multireg.c numbers.c opmodes.c parser.c regass.c simple68.c test.c x_is_c.c -o 682386.exeЗаменил strcasecmp на stricmp для компиляции. Запускаю как 682386.exe -6er TEST1.S 1.s, но результат такой же (пустой файл).

Оффлайн Dport

  • Пользователь
  • Сообщений: 28
    • Просмотр профиля
Просто отдели ссылку пробелом и она станет кликабельной.

К гадалкам нейросетям обращался?
Ты же хотел получить Си-код, а теперь меняеш шыло на мыло?
Это просто мой другой хак, если его можно так назвать, хотел попробовать портировать соника 1 на пк, но не просто портировать, а в стиле Sonic and Knuckles Collection, который нативно работал на win 95, там использовали переведенный 68к асм на x86 и оболочку на c++, для того чтобы все нормально работало на пк. Причем я знаю, что того же первого соника да и второго с третьим уже портировали также, правда на Saturn (68к на SH-2) (см Sonic Jam)

Оффлайн Werton

  • Пользователь
  • Сообщений: 1068
  • Пол: Мужской
    • Youtube
    • Просмотр профиля
Не тот древний, но скомпилировал с помощью pcc-20111206-win32.exe
Ну теперь осталось найти тот самый и скомпилировать под unix систему :)

Оффлайн Dport

  • Пользователь
  • Сообщений: 28
    • Просмотр профиля
Короче, все получилось,  (спасибо большое, clownacy из sonic retro) оказалось надо через stdout вывод делать, подробнее в моем треде на sonic retro: https://forums.sonicretro.org/threads/cant-find-portable-c-compiler-pcc-version-older-than-2011.44666/#post-1113816 P.S. Вам всем тоже огромное спасибо, вот она сила интернета!

Оффлайн Беларус

  • Модератор
  • Сообщений: 1549
    • ВКонтакте
    • Steam
    • Просмотр профиля
Повезло - тебе попался чел, который написал свой компилятр m68k.

Оффлайн SegaMark

  • Пользователь
  • Сообщений: 150
  • Пол: Мужской
    • Просмотр профиля
А в чем конечная цель? Хочешь таким образом игры на ПК портировать? Или просто в качестве эксперимента посмотреть как это все работает?

Оффлайн Dport

  • Пользователь
  • Сообщений: 28
    • Просмотр профиля
А в чем конечная цель? Хочешь таким образом игры на ПК портировать? Или просто в качестве эксперимента посмотреть как это все работает?
И то и другое, тем более я знаю, что Сега официально портировала игры про Соника таким образом(Sonic & Knuckles collection на windows и Sonic Jam (sega saturn) (68k->x86 и 68k ->SH-2)

Добавлено позже:
Я нашел ещё один транслятор 68k -> x86: http://www.microapl.com/download/pademo68kto86.zip, надо будет их сравнить
« Последнее редактирование: 06 Мая 2026, 18:22:42 от Dport »

Оффлайн SegaMark

  • Пользователь
  • Сообщений: 150
  • Пол: Мужской
    • Просмотр профиля
ссылка не работает

Оффлайн Dport

  • Пользователь
  • Сообщений: 28
    • Просмотр профиля
ссылка не работает
Опять забыл пробел, сорри, с телефона печатал


« Последнее редактирование: 06 Мая 2026, 20:28:08 от Dport »

Оффлайн SegaMark

  • Пользователь
  • Сообщений: 150
  • Пол: Мужской
    • Просмотр профиля
Нет. там 404 not found

Добавлено позже:
Dport Напиши, если получится рабочая игра, хотелось бы тоже попробовать что-нибудь портировать.
« Последнее редактирование: 07 Мая 2026, 10:11:02 от SegaMark »

Оффлайн Dport

  • Пользователь
  • Сообщений: 28
    • Просмотр профиля
Нет. там 404 not found

Добавлено позже:
Dport Напиши, если получится рабочая игра, хотелось бы тоже попробовать что-нибудь портировать.

Relogix похоже, приказал долго жить (все-таки ссылка с форума 2000-х) . P.S. я, скорее всего, тему сделаю под портирование, задокументировав весь процесс, пробовать пока буду на Сонике

Добавлено позже:
В общем, разобрался с Mingw но при компиляции вылезает бяка
Цитата
C:\Users\user\Downloads\68k to x86 translator\682386_1_0\src>make
cc -O2 -Wall -Werror   -c -o dotlabel.o dotlabel.c
process_begin: CreateProcess(NULL, cc -O2 -Wall -Werror -c -o dotlabel.o dotlabel.c, ...) failed.
make (e=2): Не удается найти указанный файл.
<builtin>: recipe for target 'dotlabel.o' failed
make: *** [dotlabel.o] Error 2
Что делать?
« Последнее редактирование: 07 Мая 2026, 23:36:23 от Беларус »

Оффлайн Беларус

  • Модератор
  • Сообщений: 1549
    • ВКонтакте
    • Steam
    • Просмотр профиля
Цитата
Не удается найти указанный файл
Очевидно - найти потерянный файл :biggrin:
Во всех путях ко всем файлам нет ли русских букв?

Оффлайн Dport

  • Пользователь
  • Сообщений: 28
    • Просмотр профиля
Он как будто make не находит, судя по сообщению

Оффлайн Yoti

  • Пользователь
  • Сообщений: 4647
  • Пол: Мужской
  • Не тро-гай ме-ня
    • Steam
    • Просмотр профиля
В общем, разобрался с Mingw но при компиляции вылезает бяка
Получается, не разобрался.

Он как будто make не находит, судя по сообщению
В сообщении написано иное.

Оффлайн Dport

  • Пользователь
  • Сообщений: 28
    • Просмотр профиля
Ура! Я собрал .exe, правда с ошибками:
для этого в начало makefile добавил:
Цитата
CC = gcc
спасибо гадалке Алисе. P.S. Надеюсь, меня тут за использование ии не распнут  :biggrin: P.P.S еще через установщик mingw пришлось установить stdlib++, иначе выскакивала ошибка fatal error: stdlib.h: No such file or directory
« Последнее редактирование: 08 Мая 2026, 20:25:41 от Беларус »

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2958
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
собрал это ты конечно молодес, но что там унутри? :) пашит? не пашит?

Оффлайн Dport

  • Пользователь
  • Сообщений: 28
    • Просмотр профиля
Я еще не до конца собрал, одна ошибка осталась
Цитата
match86.c: In function 'newInstr':
match86.c:371:27: warning: comparison between 'OPSMODE {aka enum <anonymous>}' and 'enum <anonymous>' [-Wenum-compare]
  if(!info || info->opsMode==OP_UNKNOWN) {
Однако ее уже скомпилировал англоязычный эксперт с sonic retro под ником Clownacy, у него программа выдавала такое (конвертировался TEST1.S)
Цитата
    POP  SI
    MOV  EBX,ESI
    MOVSX ESI,BL
    MOV  D0.L,ESI
    POP  BX
    MOVSX EDI,BL
    MOV  D1.L,EDI
    POP  BX
    MOVSX EBP,BL
    MOV  D2.L,EBP
    POP  BX
    MOVSX ECX,BL
    MOV  D3.L,ECX
    POP  BX
    MOVSX EDX,BL
    MOV  D4.L,EDX
    POP  BX
    MOVSX ESI,BL
    MOV  D5.L,ESI
    POP  BX
    MOVSX EDI,BL
    MOV  D6.L,EDI
    POP  BX
    MOVSX EBP,BL
    MOV  D7.L,EBP
;TOTAL: IN 1, INSTR 25, LABELS 0, COMMENTS 0, ERRORS 0

оригинал (TEST1.S):
Цитата
   movem.b   (A7)+,d0-d7


Добавлено позже:
Короче, я решил проверить транслятор в действии, ведь даже несмотря на ошибку он собирается, вот так это выглядит:
313702-0
output.asm пустой, что здесь не так, ума не приложу

Просьба не размещать с помощью тэга img изображение со стороной более 700 пикселей. ghostdog3
« Последнее редактирование: 09 Мая 2026, 14:05:40 от ghostdog3 »

Оффлайн SegaMark

  • Пользователь
  • Сообщений: 150
  • Пол: Мужской
    • Просмотр профиля
Однако ее уже скомпилировал англоязычный эксперт с sonic retro под ником Clownacy
А оно не может свою exe-шку отправить?

Оффлайн Dport

  • Пользователь
  • Сообщений: 28
    • Просмотр профиля
Нет, на вопрос почему, мне отвечает уже другой эксперт с Sonic Retro:
Цитата
If you have the tools properly installed (hint: install MinGW if you are on Windows) then all you need to do is open the source directory with a command line and run the command "make".
Цитата
This is actually very simple to do, if you know even some basic C programming skills. So I think you should take a bit of time to learn some C and try doing this one yourself, rather than have someone else serve you the answer on a silver platter. It'll be far more rewarding in the end.
P.S. последняя цитата как раз связана с причиной, по которой у меня пустой output.asm, оказывается, мне нужно модифицировать numbers.c, чтобы он возвращал NULL если 'in' равно NULL, я больше на python программировал, чем на С, если честно, но посмотрим, что я смогу сделать. P.P.S в файле generate.h в первой строчке опечатка:
Цитата
#ifndef GENRATE_H
должно быть
Цитата
#ifndef GENERATE_H

Добавлено позже:
Итак, после долгих мучений и помощи Алисы, я  наконец-то собрал рабочий (не обращайте внимания на ошибку компиляции, на работу она не влияет) транслятор. P.S. команда для использования: P.P.S кто захочет сам скомпилить, добавьте в функцию OUTPUT *numbers(void) между in=READER() и switch(in->type)(файл numbers.c) эти строки:if (in == NULL) {
        return NULL;
    }
« Последнее редактирование: 09 Мая 2026, 17:35:36 от Беларус »

Оффлайн Беларус

  • Модератор
  • Сообщений: 1549
    • ВКонтакте
    • Steam
    • Просмотр профиля
Алиса - самая слабая нейросеть из всех бесплатных, пробуй chat.deepseek.com и google.ru/aimode

Оффлайн SegaMark

  • Пользователь
  • Сообщений: 150
  • Пол: Мужской
    • Просмотр профиля
чувак пишет типа просто сделай make
ты пишешь
оказывается, мне нужно модифицировать numbers.c, чтобы он возвращал NULL если 'in' равно NULL

в файле generate.h в первой строчке опечатка:

то есть уже не просто make делать. Мне кажется он что то не договаривает

Добавлено позже:
This is actually very simple to do, if you know even some basic C programming skills. So I think you should take a bit of time to learn some C and try doing this one yourself, rather than have someone else serve you the answer on a silver platter. It'll be far more rewarding in the end.
Вот этих умников я никогда не понимал. Типа потрать кучу времени, возможно больше чем я, но релиз который мне не нужен и просто лежит у меня на компе я тебе не дам. Это же пустая трата времени

Добавлено позже:
Dport, Я проверил все работает, спасибо тебе :thumbup:. Теперь смогу лично поэкспериментировать
« Последнее редактирование: 09 Мая 2026, 18:01:38 от SegaMark »

Оффлайн Dport

  • Пользователь
  • Сообщений: 28
    • Просмотр профиля
чувак пишет типа просто сделай make
ты пишешь
то есть уже не просто make делать. Мне кажется он что то не договаривает

Добавлено позже:Вот этих умников я никогда не понимал. Типа потрать кучу времени, возможно больше чем я, но релиз который мне не нужен и просто лежит у меня на компе я тебе не дам. Это же пустая трата времени

Добавлено позже:
Dport, Я проверил все работает, спасибо тебе :thumbup:. Теперь смогу лично поэкспериментировать
Про numbers.c мне писал Clownacy
Цитата
The 'numbers' function in 'numbers.c' needs to be modified to return NULL if 'in' is NULL. Other than that, I just compiled it with 32-bit MinGW with '-Werror' disabled and it worked fine.
а про опечатку писал Technokami, отвечая Clownacy:
Цитата
Huh! I tried taking a stab at compiling it myself with GCC and, after dealing with some typos (generate.h line 1) I got it to compile with warnings, but it would just segfault. Anything else needed to get this thing to build properly? I had to disable error on warnings because I was unsure how to handle the enum comparison issue in one of the files.

Добавлено позже:
Алиса - самая слабая нейросеть из всех бесплатных, пробуй chat.deepseek.com и google.ru/aimode
Беларус, Однако, она здорово помогла
« Последнее редактирование: 09 Мая 2026, 18:37:57 от Dport »