1include lib/nall/Makefile
2include lib/nall/Makefile-qt
3ui = ui_qt
4
5################
6### compiler ###
7################
8
9c     := $(compiler)
10cpp   := $(subst cc,++,$(compiler))
11flags := -O3 -fomit-frame-pointer -Ilib
12link  :=
13
14# profile-guided instrumentation:
15# flags += -fprofile-generate
16# link += -lgcov
17
18# profile-guided optimization:
19# flags += -fprofile-use
20
21################
22### platform ###
23################
24
25ifeq ($(platform),x)
26  link += -s
27
28  ruby := video.glx video.xv video.qtraster video.sdl
29  ruby += audio.alsa audio.openal audio.oss audio.pulseaudio audio.pulseaudiosimple audio.ao
30  ruby += input.sdl input.x
31
32  link += $(if $(findstring audio.openal,$(ruby)),-lopenal)
33else ifeq ($(platform),osx)
34  ruby := video.qtopengl video.qtraster
35  ruby += audio.openal
36  ruby += input.carbon
37
38  link += $(if $(findstring audio.openal,$(ruby)),-framework OpenAL)
39else ifeq ($(platform),win)
40  link += -mwindows -mthreads
41# link += -mconsole -mthreads
42  link += -s -luuid -lkernel32 -luser32 -lgdi32 -lshell32
43  # statically link Qt for Windows build
44  link += -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc
45
46  ruby := video.direct3d video.wgl video.directdraw video.gdi video.qtraster
47  ruby += audio.directsound
48  ruby += input.rawinput input.directinput
49
50  link += $(if $(findstring audio.openal,$(ruby)),-lopenal32)
51else
52  unknown_platform: help;
53endif
54
55############
56### ruby ###
57############
58
59rubyflags := $(call ifhas,.sdl,$(ruby),`sdl-config --cflags`)
60rubyflags += $(call ifhas,.qt,$(ruby),$(qtinc))
61
62link += $(call ifhas,.sdl,$(ruby),`sdl-config --libs`)
63link += $(call ifhas,video.direct3d,$(ruby),-ld3d9)
64link += $(call ifhas,video.directdraw,$(ruby),-lddraw)
65link += $(call ifhas,video.glx,$(ruby),-lGL)
66link += $(call ifhas,video.wgl,$(ruby),-lopengl32)
67link += $(call ifhas,video.xv,$(ruby),-lXv)
68link += $(call ifhas,audio.alsa,$(ruby),-lasound)
69link += $(call ifhas,audio.ao,$(ruby),-lao)
70link += $(call ifhas,audio.directsound,$(ruby),-ldsound)
71link += $(call ifhas,audio.pulseaudio,$(ruby),-lpulse-simple)
72link += $(call ifhas,input.directinput,$(ruby),-ldinput8 -ldxguid)
73link += $(call ifhas,input.rawinput,$(ruby),-ldinput8 -ldxguid)
74
75###############
76### objects ###
77###############
78
79objects := libco ruby
80objects += system cartridge cheat
81objects += memory smemory cpu cpucore scpu smp smpcore ssmp sdsp ppu bppu
82objects += supergameboy superfx sa1
83objects += bsx srtc sdd1 spc7110 cx4 dsp1 dsp2 dsp3 dsp4 obc1 st010 st011 st018
84objects += 21fx
85
86######################
87### implicit rules ###
88######################
89
90compile = \
91  $(strip \
92    $(if $(filter %.c,$<), \
93      $(c) $(flags) $1 -c $< -o $@, \
94      $(if $(filter %.cpp,$<), \
95        $(cpp) $(flags) $1 -c $< -o $@ \
96      ) \
97    ) \
98  )
99
100%.o: $<; $(call compile)
101
102all: build;
103
104include $(ui)/Makefile
105objects := $(patsubst %,obj/%.o,$(objects))
106rubydef := $(foreach c,$(subst .,_,$(call strupper,$(ruby))),-D$c)
107
108#################
109### libraries ###
110#################
111
112obj/ruby.o: lib/ruby/ruby.cpp $(call rwildcard,lib/ruby/*)
113	$(call compile,$(rubydef) $(rubyflags))
114obj/libco.o: lib/libco/libco.c lib/libco/*
115
116#################
117### utilities ###
118#################
119
120obj/cartridge.o: cartridge/cartridge.cpp cartridge/*
121obj/cheat.o    : cheat/cheat.cpp cheat/*
122
123##############
124### memory ###
125##############
126
127obj/memory.o : memory/memory.cpp memory/*
128obj/smemory.o: memory/smemory/smemory.cpp $(call rwildcard,memory/smemory/)
129
130###########
131### cpu ###
132###########
133
134obj/cpu.o    : cpu/cpu.cpp cpu/*
135obj/cpucore.o: cpu/core/core.cpp $(call rwildcard,cpu/core/)
136obj/scpu.o   : cpu/scpu/scpu.cpp $(call rwildcard,cpu/scpu/)
137
138###########
139### smp ###
140###########
141
142obj/smp.o    : smp/smp.cpp smp/*
143obj/smpcore.o: smp/core/core.cpp $(call rwildcard,smp/core/)
144obj/ssmp.o   : smp/ssmp/ssmp.cpp $(call rwildcard,smp/ssmp/)
145
146###########
147### dsp ###
148###########
149
150obj/adsp.o: dsp/adsp/adsp.cpp dsp/adsp/*
151obj/sdsp.o: dsp/sdsp/sdsp.cpp dsp/sdsp/*
152
153###########
154### ppu ###
155###########
156
157obj/ppu.o : ppu/ppu.cpp ppu/*
158obj/bppu.o: ppu/bppu/bppu.cpp $(call rwildcard,ppu/bppu/)
159
160##############
161### system ###
162##############
163
164obj/system.o: system/system.cpp $(call rwildcard,system/)
165
166#####################
167### special chips ###
168#####################
169
170obj/supergameboy.o: chip/supergameboy/supergameboy.cpp $(call rwildcard,chip/supergameboy/)
171obj/superfx.o     : chip/superfx/superfx.cpp $(call rwildcard,chip/superfx/)
172obj/sa1.o         : chip/sa1/sa1.cpp $(call rwildcard,chip/sa1/)
173obj/bsx.o         : chip/bsx/bsx.cpp chip/bsx/*
174obj/srtc.o        : chip/srtc/srtc.cpp chip/srtc/*
175obj/sdd1.o        : chip/sdd1/sdd1.cpp chip/sdd1/*
176obj/spc7110.o     : chip/spc7110/spc7110.cpp chip/spc7110/*
177obj/cx4.o         : chip/cx4/cx4.cpp chip/cx4/*
178obj/dsp1.o        : chip/dsp1/dsp1.cpp chip/dsp1/*
179obj/dsp2.o        : chip/dsp2/dsp2.cpp chip/dsp2/*
180obj/dsp3.o        : chip/dsp3/dsp3.cpp chip/dsp3/*
181obj/dsp4.o        : chip/dsp4/dsp4.cpp chip/dsp4/*
182obj/obc1.o        : chip/obc1/obc1.cpp chip/obc1/*
183obj/st010.o       : chip/st010/st010.cpp chip/st010/*
184obj/st011.o       : chip/st011/st011.cpp chip/st011/*
185obj/st018.o       : chip/st018/st018.cpp chip/st018/*
186obj/21fx.o        : chip/21fx/21fx.cpp chip/21fx/*
187
188###############
189### targets ###
190###############
191
192build: ui_build $(objects)
193ifeq ($(platform),osx)
194	test -d ../bsnes.app || mkdir -p ../bsnes.app/Contents/MacOS
195	$(strip $(cpp) -o ../bsnes.app/Contents/MacOS/bsnes $(objects) $(link))
196else
197	$(strip $(cpp) -o ../bsnes $(objects) $(link))
198endif
199
200install:
201	install -D -m 755 ../bsnes $(DESTDIR)$(prefix)/bin/bsnes
202	install -D -m 644 data/bsnes.png $(DESTDIR)$(prefix)/share/pixmaps/bsnes.png
203	install -D -m 644 data/bsnes.desktop $(DESTDIR)$(prefix)/share/applications/bsnes.desktop
204
205clean: ui_clean
206	-@$(call delete,obj/*.o)
207	-@$(call delete,*.res)
208	-@$(call delete,*.pgd)
209	-@$(call delete,*.pgc)
210	-@$(call delete,*.ilk)
211	-@$(call delete,*.pdb)
212	-@$(call delete,*.manifest)
213
214help:
215	@echo "Usage: $(MAKE) platform=(os) compiler=(cc) [options]"
216	@echo ""
217	@echo "Supported platforms:"
218	@echo "  x   - Linux / BSD (x86, x86-64)"
219	@echo "  win - Windows (x86, x86-64)"
220	@echo ""
221	@echo "Supported compilers:"
222	@echo "  gcc              - GCC compiler"
223	@echo "  mingw32-gcc      - MinGW compiler"
224	@echo "  i586-mingw32-gcc - MinGW cross compiler"
225	@echo ""
226	@echo "Example: $(MAKE) platform=x compiler=gcc"
227	@echo ""
228