Автор Тема: Опакечивание Supermodel - эмулятора Sega Model 3  (Прочитано 8012 раз)

Оффлайн Arbars

  • Давно тут
  • **
  • Сообщений: 66
    • Email
Всем доброго времени суток!

Сегодня задался целью опакетить эмулятор Supermodel, и столкнулся вот с каким вопросом.
Штатно эмулятор собирается через отдельный Makefile для каждой ОС (Win32, OSX, UNIX), в котором есть ссылка на общий Makefile.inc, в котором прописаны общие параметры компиляции бинарника.
Вопрос: имеется ли возможность в макросах "подключить" внешний Makefile, или придётся всю эту красоту в спек засовывать?

Makefile.inc:
###############################################################################
# Build Options
###############################################################################

#
# Verbose progression
#
VERBOSE =
ifneq ($(filter $(strip $(VERBOSE)),0 1),$(strip $(VERBOSE)))
override VERBOSE =
endif
SILENT = @
ifeq ($(strip $(VERBOSE)),1)
SILENT =
endif

#
# Enable render state analyser for the legacy 3D engine (will slow down emulation!)
#
DEBUG =
ifneq ($(filter $(strip $(DEBUG)),0 1),$(strip $(DEBUG)))
override DEBUG =
endif

#
# Enable support for Model3 Net Board emulation
#
NET_BOARD =
ifneq ($(filter $(strip $(NET_BOARD)),0 1),$(strip $(NET_BOARD)))
override NET_BOARD =
endif

#
# Enable Bart's new (experimental) Real3D frame timing
#
NEW_FRAME_TIMING =
ifneq ($(filter $(strip $(NEW_FRAME_TIMING)),0 1),$(strip $(NEW_FRAME_TIMING)))
override NEW_FRAME_TIMING =
endif

#
# Include console-based debugger in emulator ('yes' or 'no')
#
ENABLE_DEBUGGER =
ifneq ($(filter $(strip $(ENABLE_DEBUGGER)),0 1),$(strip $(ENABLE_DEBUGGER)))
override ENABLE_DEBUGGER =
endif


###############################################################################
# Source Files
###############################################################################

SRC_FILES = \
Src/CPU/PowerPC/PPCDisasm.cpp \
Src/BlockFile.cpp \
Src/Pkgs/unzip.cpp \
Src/Pkgs/ioapi.cpp \
Src/Model3/93C46.cpp \
Src/Util/BitRegister.cpp \
Src/JTAG.cpp \
Src/Graphics/Legacy3D/Error.cpp \
Src/Pkgs/glew.cpp \
Src/Graphics/Shader.cpp \
Src/Model3/Real3D.cpp \
Src/Graphics/Legacy3D/Legacy3D.cpp \
Src/Graphics/Legacy3D/Models.cpp \
Src/Graphics/Legacy3D/TextureRefs.cpp \
Src/Graphics/New3D/GLSLShader.cpp \
Src/Graphics/New3D/R3DFrameBuffers.cpp \
Src/Graphics/New3D/New3D.cpp \
Src/Graphics/New3D/Mat4.cpp \
Src/Graphics/New3D/Model.cpp \
Src/Graphics/New3D/PolyHeader.cpp \
Src/Graphics/New3D/Texture.cpp \
Src/Graphics/New3D/TextureSheet.cpp \
Src/Graphics/New3D/VBO.cpp \
Src/Graphics/New3D/Vec.cpp \
Src/Graphics/New3D/R3DShader.cpp \
Src/Graphics/New3D/R3DFloat.cpp \
Src/Graphics/New3D/R3DScrollFog.cpp \
Src/Graphics/Render2D.cpp \
Src/Model3/TileGen.cpp \
Src/Model3/Model3.cpp \
Src/CPU/PowerPC/ppc.cpp \
Src/OSD/SDL/Main.cpp \
Src/OSD/SDL/Audio.cpp \
Src/OSD/SDL/Thread.cpp \
Src/Model3/SoundBoard.cpp \
Src/Sound/SCSP.cpp \
Src/Sound/SCSPDSP.cpp \
Src/CPU/68K/68K.cpp \
$(OBJ_DIR)/m68kcpu.c \
$(OBJ_DIR)/m68kopnz.c \
$(OBJ_DIR)/m68kopdm.c \
$(OBJ_DIR)/m68kopac.c \
$(OBJ_DIR)/m68kops.c \
Src/Model3/DSB.cpp \
Src/CPU/Z80/Z80.cpp \
Src/Model3/IRQ.cpp \
Src/Model3/53C810.cpp \
Src/Model3/PCI.cpp \
Src/Model3/RTC72421.cpp \
Src/Model3/DriveBoard.cpp \
Src/Model3/MPC10x.cpp \
Src/Inputs/Input.cpp \
Src/Inputs/Inputs.cpp \
Src/Inputs/InputSource.cpp \
Src/Inputs/InputSystem.cpp \
Src/Inputs/InputTypes.cpp \
Src/Inputs/MultiInputSource.cpp \
Src/OSD/SDL/SDLInputSystem.cpp \
Src/OSD/Outputs.cpp \
Src/Sound/MPEG/MpegAudio.cpp \
Src/Model3/Crypto.cpp \
Src/OSD/Logger.cpp \
Src/Util/Format.cpp \
Src/Util/NewConfig.cpp \
Src/Util/ByteSwap.cpp \
Src/Util/ConfigBuilders.cpp \
Src/GameLoader.cpp \
Src/Pkgs/tinyxml2.cpp \
Src/ROMSet.cpp \
$(PLATFORM_SRC_FILES)

ifeq ($(strip $(NET_BOARD)),1)
SRC_FILES += \
Src/Network/UDPReceive.cpp \
Src/Network/UDPSend.cpp \
Src/Network/WinSockWrap.cpp \
Src/Network/NetBoard.cpp
endif

ifeq ($(strip $(ENABLE_DEBUGGER)),1)
SRC_FILES += \
Src/Debugger/Debugger.cpp \
Src/Debugger/ConsoleDebugger.cpp \
Src/Debugger/SupermodelDebugger.cpp \
Src/Debugger/CPUDebug.cpp \
Src/Debugger/AddressTable.cpp \
Src/Debugger/Breakpoint.cpp \
Src/Debugger/CodeAnalyser.cpp \
Src/Debugger/Exception.cpp \
Src/Debugger/Interrupt.cpp \
Src/Debugger/DebuggerIO.cpp \
Src/Debugger/Label.cpp \
Src/Debugger/Register.cpp \
Src/Debugger/Watch.cpp \
Src/Debugger/CPU/PPCDebug.cpp \
Src/Debugger/CPU/68KDebug.cpp \
Src/Debugger/CPU/Musashi68KDebug.cpp \
Src/Debugger/CPU/Z80Debug.cpp
endif

#
# Sorted-path compile order
#
OBJ_FILES = $(foreach file,$(SRC_FILES),$(OBJ_DIR)/$(basename $(notdir $(file))).o)

#
# Deduce include directories from the source file list. The sort function
# removes duplicates and is used to construct a set.
#
INCLUDE_DIRS = $(sort $(foreach file,$(SRC_FILES),$(dir $(file))))


###############################################################################
# Output Locations
###############################################################################

OBJ_DIR = obj$(strip $(BITS))
BIN_DIR = bin$(strip $(BITS))

OUTFILE = supermodel


###############################################################################
# Compiler Flags
###############################################################################

ARCH = -march=native -mfpmath=sse
BUILD_CFLAGS =
OPT = -O3
WARN = -Wall
CSTD = -std=iso9899:2011
CXXSTD = -std=c++11

COMMON_CFLAGS = -c $(ARCH) $(OPT) $(WARN) $(addprefix -I,$(sort $(INCLUDE_DIRS))) -DGLEW_STATIC

CFLAGS = $(COMMON_CFLAGS) $(CSTD)
CXXFLAGS = $(PLATFORM_CFLAGS) $(COMMON_CFLAGS) $(BUILD_CFLAGS) $(CXXSTD)
LDFLAGS = -o $(BIN_DIR)/$(OUTFILE) $(PLATFORM_LDFLAGS) -s

# If render state analyser is enabled, need to define DEBUG
ifeq ($(strip $(DEBUG)),1)
BUILD_CFLAGS += -DDEBUG
endif

# If Net Board support is enabled, need to define NET_BOARD
ifeq ($(strip $(NET_BOARD)),1)
BUILD_CFLAGS += -DNET_BOARD
endif

# If Bart's new frame timing is enabled, need to define NEW_FRAME_TIMING
ifeq ($(strip $(NEW_FRAME_TIMING)),1)
BUILD_CFLAGS += -DNEW_FRAME_TIMING
endif

# If built-in debugger enabled, need to define SUPERMODEL_DEBUGGER
ifeq ($(strip $(ENABLE_DEBUGGER)),1)
BUILD_CFLAGS += -DSUPERMODEL_DEBUGGER
endif


###############################################################################
# Targets
###############################################################################

#
# Default target: build Supermodel binary. Must be specified *before* the auto-
# generated dependencies because otherwise, make gets confused for some reason
# and thinks the default target is just one of the object files.
#
all: $(BIN_DIR)/$(OUTFILE)

$(BIN_DIR)/$(OUTFILE): $(BIN_DIR) $(OBJ_DIR) $(OBJ_FILES)
$(info --------------------------------------------------------------------------------)
$(info Linking Supermodel     : $(BIN_DIR)/$(OUTFILE))
$(SILENT)$(LD) $(OBJ_FILES) $(LDFLAGS)
$(info --------------------------------------------------------------------------------)

$(BIN_DIR):
$(info Creating directory     : $(BIN_DIR))
$(SILENT)mkdir $(BIN_DIR)

$(OBJ_DIR):
$(info Creating directory     : $(OBJ_DIR))
$(SILENT)mkdir $(OBJ_DIR)


###############################################################################
# Rules
###############################################################################

#
# Create list of auto-generated dependency files (which contain rules that make
# understands) and include them all.
#
AUTODEPS := $(patsubst %.o,%.d,$(OBJ_FILES))
-include $(AUTODEPS)

#
# VPATH is the search path for files. This trick allows a single %.cpp rule to
# be matched against files in sub-directories of Src/.
#
VPATH = $(INCLUDE_DIRS)

#
# Compilation rules that both auto-generate the dependency files and compile
# the source code. This technique is described in the reply by user "rr-" at:
# https://stackoverflow.com/questions/8025766/makefile-auto-dependency-generation
#
$(OBJ_DIR)/%.o: %.cpp
$(info Generating dependencies: $< -> $(OBJ_DIR)/$(*F).d)
$(SILENT)$(CXX) -MM -MP -MT $(OBJ_DIR)/$(*F).o -MT $(OBJ_DIR)/$(*F).d $(CXXFLAGS) $< > $(OBJ_DIR)/$(*F).d
$(info Compiling              : $< -> $@)
$(SILENT)$(CXX) $(CXXFLAGS) $< -o $@

$(OBJ_DIR)/%.o: %.c
$(info Generating dependencies: $< -> $(OBJ_DIR)/$(*F).d)
$(SILENT)$(CC) -MM -MP -MT $(OBJ_DIR)/$(*F).o -MT $(OBJ_DIR)/$(*F).d $(CFLAGS) $< > $(OBJ_DIR)/$(*F).d
$(info Compiling              : $< -> $@)
$(SILENT)$(CC) $(CFLAGS) $< -o $@


#
# Musashi 68K emulator
#
# All generated source files are emitted to the object directory. For MSVC,
# INLINE must be redefined as "static __inline", which is the syntax in C mode.
#
# The .exe suffix is absolutely required for native Windows non-MSYS builds!
#

MUSASHI_OUTFILE = $(OBJ_DIR)/m68kmake.exe # do not remove the .exe suffix!
MUSASHI_CFLAGS = -ISrc/CPU/68K/Musashi -I$(OBJ_DIR) -DINLINE="static inline" -Wno-unused-variable
MUSASHI_LDFLAGS = -o $(MUSASHI_OUTFILE) $(OBJ_DIR)/m68kmake.o -s

$(MUSASHI_OUTFILE): Src/CPU/68K/Musashi/m68kmake.c Src/CPU/68K/Musashi/m68k_in.c
$(info --------------------------------------------------------------------------------)
$(info Compiling              : $< -> $(OBJ_DIR)/m68kmake.o)
$(SILENT)$(CC) $< $(CFLAGS) -o $(OBJ_DIR)/m68kmake.o
$(info Linking                : $(MUSASHI_OUTFILE))
$(SILENT)$(LD) $(MUSASHI_LDFLAGS)

$(OBJ_DIR)/m68kops.h $(OBJ_DIR)/m68kops.c $(OBJ_DIR)/m68kopac.c $(OBJ_DIR)/m68kopdm.c $(OBJ_DIR)/m68kopnz.c: $(MUSASHI_OUTFILE) Src/CPU/68K/Musashi/m68k_in.c Src/CPU/68K/Musashi/m68k.h Src/CPU/68K/Musashi/m68kconf.h
$(info Generating 68K emulator: $@)
@$(MUSASHI_OUTFILE) $(OBJ_DIR) Src/CPU/68K/Musashi/m68k_in.c

$(OBJ_DIR)/m68kcpu.o: Src/CPU/68K/Musashi/m68kcpu.c $(OBJ_DIR)/m68kops.h Src/CPU/68K/Musashi/m68k.h Src/CPU/68K/Musashi/m68kconf.h
$(info Compiling              : $< -> $@)
@$(CC) $< $(CFLAGS) $(MUSASHI_CFLAGS) -o $(OBJ_DIR)/m68kcpu.o

$(OBJ_DIR)/m68kops.o: $(OBJ_DIR)/m68kops.c $(OBJ_DIR)/m68kops.h Src/CPU/68K/Musashi/m68k.h Src/CPU/68K/Musashi/m68kconf.h $(MUSASHI_OUTFILE)
$(info Compiling              : $< -> $@)
@$(CC) $< $(CFLAGS) $(MUSASHI_CFLAGS) -o $@

$(OBJ_DIR)/m68kopac.o: $(OBJ_DIR)/m68kopac.c $(OBJ_DIR)/m68kops.h Src/CPU/68K/Musashi/m68k.h Src/CPU/68K/Musashi/m68kconf.h $(MUSASHI_OUTFILE)
$(info Compiling              : $< -> $@)
@$(CC) $< $(CFLAGS) $(MUSASHI_CFLAGS) -o $@

$(OBJ_DIR)/m68kopdm.o: $(OBJ_DIR)/m68kopdm.c $(OBJ_DIR)/m68kops.h Src/CPU/68K/Musashi/m68k.h Src/CPU/68K/Musashi/m68kconf.h $(MUSASHI_OUTFILE)
$(info Compiling              : $< -> $@)
@$(CC) $< $(CFLAGS) $(MUSASHI_CFLAGS) -o $@

$(OBJ_DIR)/m68kopnz.o: $(OBJ_DIR)/m68kopnz.c $(OBJ_DIR)/m68kops.h Src/CPU/68K/Musashi/m68k.h Src/CPU/68K/Musashi/m68kconf.h $(MUSASHI_OUTFILE)
$(info Compiling              : $< -> $@)
@$(CC) $< $(CFLAGS) $(MUSASHI_CFLAGS) -o $@

Makefile.UNIX
###############################################################################
# Build Options
###############################################################################

DELETE = rm -d -r -f


###############################################################################
# Platform Configuration
#
# Edit library and include paths as needed.
###############################################################################

#
# Toolchain
#
CC = gcc
CXX = g++
LD = gcc

#
# SDL
#

SDL_CFLAGS = `sdl-config --cflags`
SDL_LIBS = `sdl-config --libs`

#
# UNIX-specific
#

PLATFORM_CFLAGS = $(SDL_CFLAGS)
PLATFORM_LDFLAGS = $(SDL_LIBS) -lGL -lGLU -lz -lm -lstdc++


###############################################################################
# Core Makefile
###############################################################################

include Makefiles/Makefile.inc

clean:
$(SILENT)echo Cleaning up \"$(BIN_DIR)\" and \"$(OBJ_DIR)\"...
$(SILENT)$(DELETE) $(BIN_DIR)
$(SILENT)$(DELETE) $(OBJ_DIR)

Заранее всем спасибо!
ОС: Альт К Рабочая Станция х86_64
"Spec-файлы кривые у всех." Г. Курячий, практикум по настройке сборочного окружения

Оффлайн Arbars

  • Давно тут
  • **
  • Сообщений: 66
    • Email
Итак, по ходу разбора было принято решение убрать ненужные Makefile, перенести нужные в корень. В корне же будет лежать бинарник, для чего для Makefile.inc был создан патч. Сейчас застрял на том, что ни в Hasher, ни через rpmbuild пакет не собирается - make тупо не может найти, что устанавливать  :-o ...

Спек пока что такой:

Name: supermodel
Version: 0.3
Release: alt1
Summary: A cross-platform Sega Model 3 arcade machine emulator
Group: Games
License: GPLv2
Url: http://www.supermodel3.com/
Packager: Arbars Zagadkin <ubuntigroid@mail.ru>
Source: %name-%version.tar.gz
Patch0: supermodel-0.3-alt1-Makefile.patch


# Automatically added by buildreq on Sat Jul 27 2019
# optimized out: libGL-devel libGLU-devel libX11-devel libgpg-error libjson-c libstdc++-devel python-base python-modules python3 python3-base xorg-xproto-devel
BuildRequires: gcc-c++ i586-libxcb libSDL-devel python3-module-yieldfrom zlib-devel

%description
Supermodel emulates Sega's Model 3 arcade platform, allowing you
to play a number of ground-breaking arcade classics on your PC.
It uses OpenGL and the SDL library, and can run on Windows,
Linux, and Mac OS X. The source code is freely available under
the terms of the GNU General Public License.

%prep

%setup -n %name-%version

%patch0 -p1
 
%build

%make_build OPTIMISE="%optflags"

%install

%makeinstall_std

%files
%_bindir
%_datadir/Config/*
%doc Docs/*

%changelog
-------------------------

Нашёл причину "неустановки" - автор просто не указал в Makefile, что программу нужно установить... Ещё один патч? Или вообще взять и слить оба Makefile в один, и уже для него запилить патч? Так много вопросов, и так мало ответов...
« Последнее редактирование: 27.07.2019 23:40:11 от Arbars »
ОС: Альт К Рабочая Станция х86_64
"Spec-файлы кривые у всех." Г. Курячий, практикум по настройке сборочного окружения

Оффлайн andrew_b

  • Завсегдатай
  • *
  • Сообщений: 535
Вопрос: имеется ли возможность в макросах "подключить" внешний Makefile, или придётся всю эту красоту в спек засовывать?
Вопрос непонятен.

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 19 916
    • Домашняя страница
    • Email
Собственные Makefile – верх криворукости. Нормальные люди используют autotools/cmake/meson.
Андрей Черепанов (cas@)

Оффлайн Arbars

  • Давно тут
  • **
  • Сообщений: 66
    • Email
Собственные Makefile – верх криворукости. Нормальные люди используют autotools/cmake/meson.
Значит, "резать к чёртовой матери, не дожидаясь перетонитов". Ну ничего, тяжело в учении, легко в бою :)
ОС: Альт К Рабочая Станция х86_64
"Spec-файлы кривые у всех." Г. Курячий, практикум по настройке сборочного окружения

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 19 916
    • Домашняя страница
    • Email
1. Запускайте в хэшере.
2. Подбирайте вручную зависимости по ошибкам.
3. Если не помогает – патчите Makefile.
Андрей Черепанов (cas@)

Оффлайн Arbars

  • Давно тут
  • **
  • Сообщений: 66
    • Email
Я его собрал. С матами, подушками, 7 дней и 2 (MAME и Attract Mode) параллельно собранных пакета спустя я его таки добил.
Потери по ходу пакетирования:
  • - удалены Makefile.OSX и Makefile.Win32 вместе с каталогом Makefiles
  • - оставшийся Makefile.UNIX перенесён в корень вместе с Makefiles.inc (для первого был создан патч, чтобы он не "скучал" по каталогу Makefiles)
Что осталось сделать:
  • - запилить man-страницу (ибо эмулятор консольный, параметров куча - одна настройка управления чего стоит :-D )
  • - оформить эмулятор так, чтобы он видел свой конфиг и список игр (пока что установленный эмулятор ругается на потерянный xml-файл со списком игр, но его можно указать вручную, а вот путь к конфигу, походу, прибит гвоздями в бинарнике)
  • - запилить возможность при установке создавать в домашнем каталоге подкаталог .supermodel, с последующим копированием туда конфигов и каталогов для сохранений и насроек управления
Что я узнал и чему я научился за эту неделю:
 - пакет может собираться с пол-пинка с такой же вероятностью, с какой он же может НЕ собираться неделю;
 - подход "ледокола" реально работает: 2 шага вперёд - 1 шаг назад. Благодаря этому подходу удалось собрать MAME - эмулятор кучи аркадных машин, и Attract Mode - оболочку для него и кучи других эмуляторов.
 - научился делать патчи (как выяснилось, делать патчи достаточно просто, нужно только быть внимательным)
 - вполне сносно научился работать в hasher (освоил работу с hsh-rebuild, будем учиться собирать пакеты для Сизифа и девятки под восьмёркой  :-) )
 
Всем причастным за советы и рекомендации огромное спасибо!
ОС: Альт К Рабочая Станция х86_64
"Spec-файлы кривые у всех." Г. Курячий, практикум по настройке сборочного окружения

Оффлайн Arbars

  • Давно тут
  • **
  • Сообщений: 66
    • Email
Выложу пока наработки, чтоб спокойней было, авось кому-то будет полегче, если решит поковыряться... А сам пока запилю компиляцию MAME под ARM. Да и Attract, пожалуй, тоже :)

Название программы - supermodel
Категория - Игры / аркады
Назначение - эмуляция аркадной платформы Sega Model 3
Версия - 0.3-alpha (svn 775)
Сборка в hasher - успех (см. лог)
Платформа - p8

Спек:
Name: supermodel
Version: 0.3
Release: alt1
Summary: A cross-platform Sega Model 3 arcade machine emulator
Summary(ru_RU.UTF-8): Кросплатформенный эмулятор аркадного автомата Sega Model 3
Group: Games
License: GPLv2
Url: http://www.supermodel3.com/
Packager: Arbars Zagadkin <ubuntigroid@mail.ru>
Source: %name-%version.tar.gz
Source1: %name.6
Patch: supermodel-0.3-alt1-Makefile.patch

# Automatically added by buildreq on Sat Jul 27 2019
# optimized out: libGL-devel libGLU-devel libX11-devel libgpg-error libjson-c libstdc++-devel python-base python-modules python3 python3-base xorg-xproto-devel
BuildRequires: gcc-c++ i586-libxcb libSDL-devel zlib-devel

%description
Supermodel emulates Sega's Model 3 arcade platform, allowing you
to play a number of ground-breaking arcade classics on your PC.
It uses OpenGL and the SDL library, and can run on Windows,
Linux, and Mac OS X. The source code is freely available under
the terms of the GNU General Public License.

%description -l ru_RU.UTF-8
Supermodel эмулирует аркадную платформу Sega Model 3, позволяя
играть в несколько сногшибательных аркадных игр на ПК.
Эмулятор использует OPenGL и библиотеки SDL, благодаря чему
эмулятор работает на Windows, Mac OS X и Linux. Исходный код
доступен на условиях лицензии GNU GPL.

%prep
%setup -n %name-%version
%patch0 -p1

%build
%make_build

%install
# %makeinstall_std
mkdir -p %buildroot%_datadir/%name/Config
mkdir -p %buildroot/%_man6dir
mv Config/* %buildroot%_datadir/%name/Config
install -D -m 755 bin/%name %buildroot%_bindir/%name
install -p -m 644 %SOURCE1  %buildroot/%_man6dir
%files
%_bindir/%name
%_datadir/%name/Config/*
%doc Docs/*
%_man6dir/*

%changelog
* Thu Aug 01 2019 Arbars Zagadkin <ubuntigroid@mail.ru> 0.3-alt1
- Adding man page
- Reworking Makefiles system

* Wed Jul 24 2019 Arbars Zagadkin <ubuntigroid@mail.ru> 0.3-alt1
- initial build for ALT Sisyphus

Пакеты:
RPM: https://mega.nz/#!l0V3XaII!fSbLF6Qg03SjssPJKasbUqtrrzp5WntXUVtnb3mB9SQ
SRC-RPM: https://mega.nz/#!19VzXQCQ!LLNrgXUg18ptmzqHt_iWzlHf2mI5t7d4PfOEiryv2cc
ОС: Альт К Рабочая Станция х86_64
"Spec-файлы кривые у всех." Г. Курячий, практикум по настройке сборочного окружения