📄 makefile.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 + -