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