⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 makefile.all

📁 NES game Emulator in Linux.c and asm codes.
💻 ALL
字号:
#
#
# SNEeSe, an Open Source Super NES emulator.
#
#
# Copyright (c) 1998-2004 Charles Bilyue'.
# Portions Copyright (c) 2003-2004 Daniel Horchner.
#
# This is free software.  See 'LICENSE' for details.
# You must read and accept the license prior to use.
#
#


# Set up some defaults
ifndef PROFILE
PROFILE := 0
endif

ifndef DEBUG
DEBUG := 0
endif

ifndef SAVE_ASM_OUTPUT
SAVE_ASM_OUTPUT := 1
endif

ifndef FAST_SPC
FAST_SPC := 0
endif

ifndef NO_SELF_MODIFY
NO_SELF_MODIFY := 0
endif


# Base paths for source and object trees
BASE   := .

SRC      := $(BASE)/src
INCLUDE  := $(BASE)/include
OBJ_BASE := $(BASE)/obj

AFLAGS += -i$(INCLUDE)/

ASM_OBJ_EXT := o

ifneq ($(DEBUG),0)

OBJ    := $(OBJ_BASE)/$(PLATFORM)/debug
PFLAGS = -ggdb3
EXE    := sneese$(SUFFIX)d$(EXE_EXT)
OFLAGS = $(PFLAGS)

else


ifneq ($(PROFILE),0)

OBJ    := $(OBJ_BASE)/$(PLATFORM)/profile
PFLAGS = -pg
EXE    := sneese$(SUFFIX)p$(EXE_EXT)

else

OBJ    := $(OBJ_BASE)/$(PLATFORM)/release
PFLAGS = -fomit-frame-pointer
EXE    := sneese$(SUFFIX)$(EXE_EXT)

endif


all: maketree $(EXE)


ifdef OBJFIX_INCLUDE
include $(OBJFIX_INCLUDE)
endif

OFLAGS = -march=i486 -mcpu=pentium -O3 -ffast-math $(PFLAGS) \
 -fstrength-reduce -fthread-jumps -fexpensive-optimizations \
 -fschedule-insns2 -fgcse

# Probably just a gcc < 3 problem. I'll upgrade soon. Really ;-)
ifneq ($(OSTYPE),beos)
OFLAGS += -foptimize-sibling-calls -fgcse-lm -fgcse-sm

# gcc version 2.9-beos-991026 (the "default" gcc version for BeOS
# R5 PE) is broken. Adding -fschedule-insns produces faulty code
# and causes SNEeSe to crash when opening a ROM.
OFLAGS += -fschedule-insns
endif


endif

DFLAGS = -DDEBUG


ifneq ($(NO_SELF_MODIFY),0)
endif

ifneq ($(FAST_SPC),0)
DFLAGS += -DFAST_SPC
endif


CFLAGS = $(OFLAGS) -ggdb3 -I$(INCLUDE)/
ifdef ZLIB
CFLAGS += -DZLIB
endif
CPPFLAGS = $(CFLAGS) -fno-rtti -fno-exceptions

ifneq ($(SAVE_ASM_OUTPUT),0)
OBJBASE := s
else
OBJBASE := o
endif


ASMOBJS := $(addsuffix .$(ASM_OBJ_EXT), \
            $(addprefix cpu/, 65c816 memmap dma) \
            $(addprefix apu/, spc700 apuskip) \
            $(addprefix ppu/, screen windows mode7 tiles sprites ppu \
             bg8 bg8m bg8o bg8om bg16 bg16m bg16o bg16om bg16e bg16me \
             bg16oe bg16ome) \
           clear scrmode font)
OBJS   := $(ASMOBJS) main.o romload.o snes.o timers.o debug.o input.o \
           helper.o apu/sound.o dos.o guicore.o emugui.o map.o multiio.o
ifdef ZLIB
OBJS += unzip.o
endif

OBJDIRS = $(OBJ_BASE) $(OBJ_BASE)/$(PLATFORM) $(OBJ) \
    $(addprefix $(OBJ)/, cpu apu ppu $(PLATFORM_OBJDIRS))

maketree: $(sort $(OBJDIRS))

$(sort $(OBJDIRS)):
	@-$(MD) $@

clean:
	@echo Removing C/C++ output files
	@-$(RM) $(OBJ)/*.o
	@-$(RM) $(OBJ)/apu/*.o
	@-$(RM) $(OBJ)/cpu/*.o
	@-$(RM) $(OBJ)/ppu/*.o
ifneq ($(SAVE_ASM_OUTPUT),0)
	@-$(RM) $(OBJ)/*.s
	@-$(RM) $(OBJ)/apu/*.s
	@-$(RM) $(OBJ)/cpu/*.s
	@-$(RM) $(OBJ)/ppu/*.s
endif
	@echo Removing ASM output files
	@-$(RM) $(OBJ)/*.$(ASM_OBJ_EXT)
	@-$(RM) $(OBJ)/apu/*.$(ASM_OBJ_EXT)
	@-$(RM) $(OBJ)/cpu/*.$(ASM_OBJ_EXT)
	@-$(RM) $(OBJ)/ppu/*.$(ASM_OBJ_EXT)

$(OBJ)/%.$(ASM_OBJ_EXT): $(SRC)/%.asm $(OBJFIX)
	$(NASM) $(AFLAGS) $(DFLAGS) -o $@ $<
ifdef OBJFIX
	$(OBJFIX) $@
endif

$(OBJ)/%.o: $(OBJ)/%.s
	$(GCC) -c $(DFLAGS) -o $@ $<

$(OBJ)/%.s: $(SRC)/%.c
	$(GCC) -S $(CFLAGS) $(DFLAGS) -o $@ $<

$(OBJ)/%.s: $(SRC)/%.cpp
	$(GCC) -S $(CPPFLAGS) $(DFLAGS) -o $@ $<

$(OBJ)/%.o: $(SRC)/%.c
	$(GCC) -c $(CFLAGS) $(DFLAGS) -o $@ $<

$(OBJ)/%.o: $(SRC)/%.cpp
	$(GCC) -c $(CPPFLAGS) $(DFLAGS) -o $@ $<

$(EXE): $(addprefix $(OBJ)/, $(OBJS))
	$(GXX) $(PFLAGS) $(DFLAGS) -o $(EXE) $(addprefix $(OBJ)/, $(OBJS)) $(MIOFLAGS) $(ALLEG)
# Note that the order of arguments matters for libraries!


$(OBJ)/cpu/65c816.$(ASM_OBJ_EXT): $(SRC)/cpu/65c816.asm $(OBJFIX) \
 $(addprefix $(INCLUDE)/, cpu/cpuaddr.inc cpu/cpumacro.inc cpu/cpuops.inc \
 cpu/ops_s.inc cpu/ops_sm.inc cpu/ops_sx.inc cpu/ops_smx.inc cpu/ops_m.inc \
 cpu/ops_x.inc cpu/ops_mx.inc cpu/timing.inc cpu/regs.inc cpu/cpumem.inc \
 cpu/dma.inc apu/spc.inc cycles.inc misc.inc ppu/ppu.inc ppu/screen.inc \
 ppu/sprites.inc)
$(OBJ)/apu/spc700.$(ASM_OBJ_EXT): $(SRC)/apu/spc700.asm $(OBJFIX) \
 $(addprefix $(INCLUDE)/, apu/spc.inc apu/regs.inc apu/spcaddr.inc \
 apu/spcmacro.inc apu/spcops.inc cpu/regs.inc cycles.inc misc.inc \
 ppu/ppu.inc)
$(OBJ)/cpu/memmap.$(ASM_OBJ_EXT): $(SRC)/cpu/memmap.asm $(OBJFIX) \
 $(addprefix $(INCLUDE)/, misc.inc cpu/memmap.inc cpu/cpumem.inc \
 cpu/regs.inc ppu/ppu.inc cpu/dma.inc cycles.inc)
$(OBJ)/cpu/dma.$(ASM_OBJ_EXT): $(SRC)/cpu/dma.asm $(OBJFIX) \
 $(addprefix $(INCLUDE)/, misc.inc cpu/dma.inc cpu/regs.inc ppu/ppu.inc \
 cpu/cpumem.inc)
$(OBJ)/ppu/ppu.$(ASM_OBJ_EXT): $(SRC)/ppu/ppu.asm $(OBJFIX) \
 $(addprefix $(INCLUDE)/, misc.inc ppu/ppu.inc cpu/dma.inc ppu/sprites.inc \
 ppu/screen.inc ppu/tiles.inc cpu/cpumem.inc cycles.inc cpu/regs.inc)
$(OBJ)/apu/apuskip.$(ASM_OBJ_EXT): $(SRC)/apu/apuskip.asm $(OBJFIX) \
 $(addprefix $(INCLUDE)/, misc.inc ppu/ppu.inc)
$(OBJ)/clear.$(ASM_OBJ_EXT): $(SRC)/clear.asm $(INCLUDE)/misc.inc $(OBJFIX) 
$(OBJ)/ppu/mode7.$(ASM_OBJ_EXT): $(SRC)/ppu/mode7.asm $(OBJFIX) \
 $(addprefix $(INCLUDE)/, misc.inc ppu/sprites.inc ppu/screen.inc \
 ppu/ppu.inc)
$(OBJ)/ppu/screen.$(ASM_OBJ_EXT): $(SRC)/ppu/screen.asm $(OBJFIX) \
 $(addprefix $(INCLUDE)/, ppu/sprites.inc ppu/ppu.inc ppu/tiles.inc \
 ppu/screen.inc misc.inc clear.inc)

$(OBJ)/ppu/bg8.$(ASM_OBJ_EXT): $(SRC)/ppu/bg8.asm $(OBJFIX) \
 $(addprefix $(INCLUDE)/, misc.inc ppu/ppu.inc ppu/tiles.inc \
 ppu/screen.inc)
$(OBJ)/ppu/bg8m.$(ASM_OBJ_EXT): $(SRC)/ppu/bg8m.asm $(OBJFIX) \
 $(addprefix $(INCLUDE)/, misc.inc ppu/ppu.inc ppu/tiles.inc \
 ppu/screen.inc)
$(OBJ)/ppu/bg8o.$(ASM_OBJ_EXT): $(SRC)/ppu/bg8o.asm $(OBJFIX) \
 $(addprefix $(INCLUDE)/, misc.inc ppu/ppu.inc ppu/tiles.inc \
 ppu/screen.inc)
$(OBJ)/ppu/bg8om.$(ASM_OBJ_EXT): $(SRC)/ppu/bg8om.asm $(OBJFIX) \
 $(addprefix $(INCLUDE)/, misc.inc ppu/ppu.inc ppu/tiles.inc \
 ppu/screen.inc)
$(OBJ)/ppu/bg16.$(ASM_OBJ_EXT): $(SRC)/ppu/bg16.asm $(OBJFIX) \
 $(addprefix $(INCLUDE)/, misc.inc ppu/ppu.inc ppu/tiles.inc \
 ppu/screen.inc)
$(OBJ)/ppu/bg16m.$(ASM_OBJ_EXT): $(SRC)/ppu/bg16m.asm $(OBJFIX) \
 $(addprefix $(INCLUDE)/, misc.inc ppu/ppu.inc ppu/tiles.inc \
 ppu/screen.inc)
$(OBJ)/ppu/bg16o.$(ASM_OBJ_EXT): $(SRC)/ppu/bg16o.asm $(OBJFIX) \
 $(addprefix $(INCLUDE)/, misc.inc ppu/ppu.inc ppu/tiles.inc \
 ppu/screen.inc)
$(OBJ)/ppu/bg16om.$(ASM_OBJ_EXT): $(SRC)/ppu/bg16om.asm $(OBJFIX) \
 $(addprefix $(INCLUDE)/, misc.inc ppu/ppu.inc ppu/tiles.inc \
 ppu/screen.inc)
$(OBJ)/ppu/bg16e.$(ASM_OBJ_EXT): $(SRC)/ppu/bg16e.asm $(OBJFIX) \
 $(addprefix $(INCLUDE)/, misc.inc ppu/ppu.inc ppu/tiles.inc \
 ppu/screen.inc)
$(OBJ)/ppu/bg16me.$(ASM_OBJ_EXT): $(SRC)/ppu/bg16me.asm $(OBJFIX) \
 $(addprefix $(INCLUDE)/, misc.inc ppu/ppu.inc ppu/tiles.inc \
 ppu/screen.inc)
$(OBJ)/ppu/bg16oe.$(ASM_OBJ_EXT): $(SRC)/ppu/bg16oe.asm $(OBJFIX) \
 $(addprefix $(INCLUDE)/, misc.inc ppu/ppu.inc ppu/tiles.inc \
 ppu/screen.inc)
$(OBJ)/ppu/bg16ome.$(ASM_OBJ_EXT): $(SRC)/ppu/bg16ome.asm $(OBJFIX) \
 $(addprefix $(INCLUDE)/, misc.inc ppu/ppu.inc ppu/tiles.inc \
 ppu/screen.inc)

$(OBJ)/ppu/windows.$(ASM_OBJ_EXT): $(SRC)/ppu/windows.asm $(OBJFIX) \
 $(addprefix $(INCLUDE)/, ppu/ppu.inc ppu/screen.inc misc.inc)
$(OBJ)/ppu/tiles.$(ASM_OBJ_EXT): $(SRC)/ppu/tiles.asm $(OBJFIX) \
 $(addprefix $(INCLUDE)/, misc.inc ppu/ppu.inc ppu/tiles.inc ppu/screen.inc)
$(OBJ)/ppu/sprites.$(ASM_OBJ_EXT): $(SRC)/ppu/sprites.asm $(OBJFIX) \
 $(addprefix $(INCLUDE)/, misc.inc clear.inc ppu/tiles.inc ppu/screen.inc \
 ppu/ppu.inc)
$(OBJ)/scrmode.$(ASM_OBJ_EXT): $(SRC)/scrmode.asm $(OBJFIX) \
 $(addprefix $(INCLUDE)/, misc.inc ppu/screen.inc)
$(OBJ)/font.$(ASM_OBJ_EXT): $(SRC)/font.asm $(INCLUDE)/misc.inc $(OBJFIX)

$(OBJ)/main.$(OBJBASE): $(SRC)/main.cpp \
 $(addprefix $(INCLUDE)/, platform.h font.h misc.h romload.h helper.h \
 guicore.h emugui.h debug.h snes.h timers.h types.h scrmode.h wrapaleg.h \
 version.h)
$(OBJ)/guicore.$(OBJBASE): $(SRC)/guicore.cpp \
 $(addprefix $(INCLUDE)/, guicore.h types.h font.h misc.h helper.h \
 romload.h wrapaleg.h)
$(OBJ)/emugui.$(OBJBASE): $(SRC)/emugui.cpp \
 $(addprefix $(INCLUDE)/, guicore.h types.h font.h misc.h cpu/cpu.h \
 apu/spc.h apu/sound.h romload.h debug.h snes.h wrapaleg.h)
$(OBJ)/romload.$(OBJBASE): $(SRC)/romload.cpp \
 $(addprefix $(INCLUDE)/, romload.h helper.h misc.h cpu/cpu.h apu/spc.h \
 cpu/mem.h snes.h wrapaleg.h)
$(OBJ)/snes.$(OBJBASE): $(SRC)/snes.c \
 $(addprefix $(INCLUDE)/, timers.h helper.h platform.h apu/sound.h \
 cpu/cpu.h apu/spc.h apu/apuskip.h misc.h wrapaleg.h)
$(OBJ)/timers.$(OBJBASE): $(SRC)/timers.c $(INCLUDE)/wrapaleg.h
$(OBJ)/debug.$(OBJBASE): $(SRC)/debug.c \
 $(addprefix $(INCLUDE)/, debug.h misc.h cpu/cpu.h apu/sound.h apu/spc.h \
 helper.h snes.h wrapaleg.h)
$(OBJ)/dos.$(OBJBASE): $(SRC)/dos.c \
 $(addprefix $(INCLUDE)/, platform.h misc.h helper.h input.h romload.h \
 apu/sound.h cpu/cpu.h apu/spc.h guicore.h wrapaleg.h version.h)
$(OBJ)/helper.$(OBJBASE): $(SRC)/helper.c \
 $(addprefix $(INCLUDE)/, helper.h apu/sound.h apu/spc.h misc.h cpu/cpu.h \
 wrapaleg.h)
$(OBJ)/input.$(OBJBASE): $(SRC)/input.c \
 $(addprefix $(INCLUDE)/, input.h helper.h cpu/cpu.h apu/sound.h misc.h \
 wrapaleg.h)
$(OBJ)/apu/sound.$(OBJBASE): $(SRC)/apu/sound.c \
 $(addprefix $(INCLUDE)/, helper.h apu/sound.h apu/sounddef.h apu/spc.h \
 misc.h wrapaleg.h)
$(OBJ)/map.$(OBJBASE): $(SRC)/map.c \
 $(addprefix $(INCLUDE)/, map.h version.h)
$(OBJ)/multiio.$(OBJBASE): $(SRC)/multiio.c \
 $(addprefix $(INCLUDE)/, multiio.h map.h version.h)

.PHONY: all maketree clean badplatform $(sort $(OBJDIRS))

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -