Makefile 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. include lib/nall/Makefile
  2. ui = ui_qt
  3. platform=mac
  4. compiler=gcc
  5. enable_gzip=false
  6. ################
  7. ### compiler ###
  8. ################
  9. c := $(compiler)
  10. cpp := $(subst cc,++,$(compiler))
  11. flags := -ggdb3 -O3 -fomit-frame-pointer -Ilib
  12. link :=
  13. ################
  14. ### platform ###
  15. ################
  16. ifeq ($(platform),mac)
  17. flags +=-I/Developer/SDKs/Qt/include \
  18. -I/Developer/SDKs/Qt/include/QtCore \
  19. -I/Developer/SDKs/Qt/include/QtGui \
  20. -I/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers \
  21. -I/System/Library/Frameworks/AGL.framework/Headers \
  22. -I/System/Library/Frameworks/OpenAL.framework/Versions/A/Headers \
  23. -I/usr/X11R6/include \
  24. -I/opt/local/include
  25. link += -lz \
  26. -lm \
  27. -lao \
  28. -framework ApplicationServices \
  29. -framework OpenGL \
  30. -framework OpenAL \
  31. -framework AGL \
  32. -L/opt/local/lib \
  33. -lSDL -Wl,-framework,Cocoa \
  34. -lXext \
  35. -lgl \
  36. -lX11
  37. #ruby := video.glx video.sdl
  38. #ruby += audio.openal audio.ao
  39. #ruby += input.sdl
  40. #-DVIDEO_GLX -DVIDEO_XV -DVIDEO_SDL -DAUDIO_ALS
  41. #-DAUDIO_OPENAL -DAUDIO_OSS -DAUDIO_PULSEAUDIO
  42. #-DAUDIO_AO -DINPUT_SDL -DINPUT_X
  43. flags += -DVIDEO_SDL -DINPUT_SDL -DVIDEO_GLX -DAUDIO_AO -DAUDIO_OPENAL
  44. endif
  45. ifeq ($(platform),x)
  46. ruby := video.glx video.xv video.sdl
  47. ruby += audio.alsa audio.openal audio.oss audio.pulseaudio audio.ao
  48. ruby += input.sdl input.x
  49. else ifeq ($(platform),win)
  50. ruby := video.direct3d video.wgl video.directdraw video.gdi
  51. ruby += audio.directsound
  52. ruby += input.rawinput input.directinput
  53. link += -mwindows
  54. link += -luuid -lkernel32 -luser32 -lgdi32 -lshell32
  55. # statically link Qt for Windows build
  56. link += -enable-stdcall-fixup -Wl,-s -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc
  57. endif
  58. ############
  59. ### ruby ###
  60. ############
  61. rubyflags = $(call ifhas,.sdl,$(ruby),`sdl-config --cflags`)
  62. link += $(call ifhas,.sdl,$(ruby),`sdl-config --libs`)
  63. link += $(call ifhas,video.direct3d,$(ruby),-ld3d9)
  64. link += $(call ifhas,video.directdraw,$(ruby),-lddraw)
  65. link += $(call ifhas,video.glx,$(ruby),-lGL)
  66. link += $(call ifhas,video.wgl,$(ruby),-lopengl32)
  67. link += $(call ifhas,video.xv,$(ruby),-lXv)
  68. link += $(call ifhas,audio.alsa,$(ruby),-lasound)
  69. link += $(call ifhas,audio.ao,$(ruby),-lao)
  70. link += $(call ifhas,audio.directsound,$(ruby),-ldsound)
  71. link += $(call ifhas,audio.openal,$(ruby),$(if $(call streq,$(platform),x),-lopenal,-lopenal32))
  72. link += $(call ifhas,audio.pulseaudio,$(ruby),-lpulse-simple)
  73. link += $(call ifhas,input.directinput,$(ruby),-ldinput8 -ldxguid)
  74. link += $(call ifhas,input.rawinput,$(ruby),-lxinput -ldinput8 -ldxguid)
  75. ####################
  76. ### core objects ###
  77. ####################
  78. objects = libco ruby libreader libfilter string \
  79. system cartridge cheat \
  80. memory smemory cpu cpucore scpu smp smpcore ssmp sdsp ppu bppu \
  81. sgb sa1 bsx srtc sdd1 spc7110 cx4 dsp1 dsp2 dsp3 dsp4 obc1 st010
  82. ifeq ($(enable_gzip),true)
  83. objects += adler32 compress crc32 deflate gzio inffast inflate inftrees ioapi trees unzip zip zutil
  84. flags += -DGZIP_SUPPORT
  85. endif
  86. ifeq ($(enable_jma),true)
  87. objects += jma jcrc32 lzmadec 7zlzma iiostrm inbyte lzma winout
  88. flags += -DJMA_SUPPORT
  89. endif
  90. ######################
  91. ### implicit rules ###
  92. ######################
  93. compile = \
  94. $(strip \
  95. $(if $(filter %.c,$<), \
  96. $(c) $(flags) $1 -c $< -o $@, \
  97. $(if $(filter %.cpp,$<), \
  98. $(cpp) $(flags) $1 -c $< -o $@ \
  99. ) \
  100. ) \
  101. )
  102. %.o: $<; $(call compile)
  103. all: build;
  104. include $(ui)/Makefile
  105. objects := $(patsubst %,obj/%.o,$(objects))
  106. rubydef := $(foreach c,$(subst .,_,$(call strupper,$(ruby))),-D$c)
  107. #################
  108. ### libraries ###
  109. #################
  110. obj/ruby.o: lib/ruby/ruby.cpp $(call rwildcard,lib/ruby/*)
  111. $(call compile,$(rubydef) $(rubyflags))
  112. obj/libco.o: lib/libco/libco.c lib/libco/*
  113. $(c) -O3 -fomit-frame-pointer -static -Ilib -c $< -o $@
  114. obj/libreader.o: lib/libreader/libreader.cpp lib/libreader/*
  115. obj/libfilter.o: lib/libfilter/libfilter.cpp lib/libfilter/*
  116. obj/string.o: lib/nall/string.cpp lib/nall/*
  117. #################
  118. ### utilities ###
  119. #################
  120. obj/cartridge.o: cartridge/cartridge.cpp cartridge/*
  121. obj/cheat.o : cheat/cheat.cpp cheat/*
  122. ##############
  123. ### memory ###
  124. ##############
  125. obj/memory.o : memory/memory.cpp memory/*
  126. obj/smemory.o: memory/smemory/smemory.cpp $(call rwildcard,memory/smemory/)
  127. ###########
  128. ### cpu ###
  129. ###########
  130. obj/cpu.o : cpu/cpu.cpp cpu/*
  131. obj/cpucore.o: cpu/core/core.cpp $(call rwildcard,cpu/core/)
  132. obj/scpu.o : cpu/scpu/scpu.cpp $(call rwildcard,cpu/scpu/)
  133. ###########
  134. ### smp ###
  135. ###########
  136. obj/smp.o : smp/smp.cpp smp/*
  137. obj/smpcore.o: smp/core/core.cpp $(call rwildcard,smp/core/)
  138. obj/ssmp.o : smp/ssmp/ssmp.cpp $(call rwildcard,smp/ssmp/)
  139. ###########
  140. ### dsp ###
  141. ###########
  142. obj/adsp.o: dsp/adsp/adsp.cpp dsp/adsp/*
  143. obj/sdsp.o: dsp/sdsp/sdsp.cpp dsp/sdsp/*
  144. ###########
  145. ### ppu ###
  146. ###########
  147. obj/ppu.o : ppu/ppu.cpp ppu/*
  148. obj/bppu.o: ppu/bppu/bppu.cpp ppu/bppu/*
  149. ##############
  150. ### system ###
  151. ##############
  152. obj/system.o: system/system.cpp $(call rwildcard,system/)
  153. #####################
  154. ### special chips ###
  155. #####################
  156. obj/sgb.o : chip/sgb/sgb.cpp $(call rwildcard,chip/sgb/)
  157. obj/sa1.o : chip/sa1/sa1.cpp $(call rwildcard,chip/sa1/)
  158. obj/bsx.o : chip/bsx/bsx.cpp chip/bsx/*
  159. obj/srtc.o : chip/srtc/srtc.cpp chip/srtc/*
  160. obj/sdd1.o : chip/sdd1/sdd1.cpp chip/sdd1/*
  161. obj/spc7110.o: chip/spc7110/spc7110.cpp chip/spc7110/*
  162. obj/cx4.o : chip/cx4/cx4.cpp chip/cx4/*
  163. obj/dsp1.o : chip/dsp1/dsp1.cpp chip/dsp1/*
  164. obj/dsp2.o : chip/dsp2/dsp2.cpp chip/dsp2/*
  165. obj/dsp3.o : chip/dsp3/dsp3.cpp chip/dsp3/*
  166. obj/dsp4.o : chip/dsp4/dsp4.cpp chip/dsp4/*
  167. obj/obc1.o : chip/obc1/obc1.cpp chip/obc1/*
  168. obj/st010.o : chip/st010/st010.cpp chip/st010/*
  169. ############
  170. ### zlib ###
  171. ############
  172. obj/adler32.o : lib/zlib/adler32.c lib/zlib/*
  173. obj/compress.o: lib/zlib/compress.c lib/zlib/*
  174. obj/crc32.o : lib/zlib/crc32.c lib/zlib/*
  175. obj/deflate.o : lib/zlib/deflate.c lib/zlib/*
  176. obj/gzio.o : lib/zlib/gzio.c lib/zlib/*
  177. obj/inffast.o : lib/zlib/inffast.c lib/zlib/*
  178. obj/inflate.o : lib/zlib/inflate.c lib/zlib/*
  179. obj/inftrees.o: lib/zlib/inftrees.c lib/zlib/*
  180. obj/ioapi.o : lib/zlib/ioapi.c lib/zlib/*
  181. obj/trees.o : lib/zlib/trees.c lib/zlib/*
  182. obj/unzip.o : lib/zlib/unzip.c lib/zlib/*
  183. obj/zip.o : lib/zlib/zip.c lib/zlib/*
  184. obj/zutil.o : lib/zlib/zutil.c lib/zlib/*
  185. ##############
  186. ### libjma ###
  187. ##############
  188. obj/jma.o : lib/libjma/jma.cpp lib/libjma/*
  189. obj/jcrc32.o : lib/libjma/jcrc32.cpp lib/libjma/*
  190. obj/lzmadec.o: lib/libjma/lzmadec.cpp lib/libjma/*
  191. obj/7zlzma.o : lib/libjma/7zlzma.cpp lib/libjma/*
  192. obj/iiostrm.o: lib/libjma/iiostrm.cpp lib/libjma/*
  193. obj/inbyte.o : lib/libjma/inbyte.cpp lib/libjma/*
  194. obj/lzma.o : lib/libjma/lzma.cpp lib/libjma/*
  195. obj/winout.o : lib/libjma/winout.cpp lib/libjma/*
  196. ###############
  197. ### targets ###
  198. ###############
  199. build: ui_build $(objects)
  200. $(strip g++ -o bsnes $(objects) $(link))
  201. install:
  202. install -D -m 755 ../bsnes $(DESTDIR)$(prefix)/bin/bsnes
  203. install -D -m 644 data/bsnes.png $(DESTDIR)$(prefix)/share/pixmaps/bsnes.png
  204. install -D -m 644 data/bsnes.desktop $(DESTDIR)$(prefix)/share/applications/bsnes.desktop
  205. clean: ui_clean
  206. rm obj/*.o
  207. help:
  208. @echo "Usage: $(MAKE) platform=(os) compiler=(cc) [options]"
  209. @echo ""
  210. @echo "Supported platforms:"
  211. @echo " x - Linux / BSD (x86, x86-64)"
  212. @echo " win - Windows (x86, x86-64)"
  213. @echo ""
  214. @echo "Supported compilers:"
  215. @echo " gcc - GCC compiler"
  216. @echo " mingw32-gcc - MinGW compiler"
  217. @echo " i586-mingw32-gcc - MinGW cross compiler"
  218. @echo ""
  219. @echo "Available options:"
  220. @echo " enable_gzip=[true|false] - Enable ZIP / GZ support (default=false)"
  221. @echo " enable_jma=[true|false] - Enable JMA support (default=false)"
  222. @echo ""
  223. @echo "Example: $(MAKE) platform=x compiler=gcc enable_gzip=true"
  224. @echo ""