Makefile 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316
  1. include lib/nall/Makefile.string
  2. prefix = /usr/local
  3. ui = ui_qt
  4. ################
  5. ### compiler ###
  6. ##########:######
  7. platform=x
  8. compiler=gcc
  9. enable_gzip=false
  10. ifneq ($(findstring gcc,$(compiler)),) # GCC family
  11. flags = -O2 -fomit-frame-pointer -Ilib
  12. libcoflags := $(flags) -static
  13. c = $(compiler)
  14. cpp = $(subst cc,++,$(compiler))
  15. obj = o
  16. rule = -c $< -o $@
  17. link =
  18. mkbin = -o$1
  19. mkdef = -D$1
  20. mkincpath = -I$1
  21. mklib = -l$1
  22. mklibpath = -L$1
  23. # profile-guided optimization:
  24. #flags += -fprofile-generate
  25. #link += -lgcov
  26. #flags += -fprofile-use
  27. flags += -g -ggdb -export-symbols
  28. else ifeq ($(compiler),cl) # Visual C++
  29. flags = /nologo /wd4355 /wd4805 /wd4996 /Ox /GL /EHsc /Ilib
  30. libcoflags = $(flags)
  31. c = cl
  32. cpp = cl
  33. obj = obj
  34. rule = /c $< /Fo$@
  35. link = /link
  36. mkbin = /Fe$1
  37. mkdef = /D$1
  38. mkincpath = /I$1
  39. mklib = $1.lib
  40. mklibpath = /L$1
  41. else
  42. unknown_compiler: help;
  43. endif
  44. ##########
  45. ### os ###
  46. ##########
  47. ifeq ($(platform),mac) #Mac
  48. ruby = video.glx video.xv video.sdl audio.alsa audio.openal audio.oss audio.pulseaudio audio.ao input.sdl input.x
  49. mkbin = -o $1
  50. delete = rm -f $1
  51. link += -L/opt/local/lib \
  52. -lSDL -framework,Cocoa \
  53. -lX11 \
  54. -lm \
  55. -framework Foundation\
  56. -framework Cocoa \
  57. -framework AGL \
  58. -framework OpenAL\
  59. -framework ApplicationServices \
  60. -framework Foundation\
  61. -framework OpenGL\
  62. -framework GLUT \
  63. -lz \
  64. -lgl \
  65. -lao
  66. flags +=-I/opt/local/include \
  67. -I/System/Library/Frameworks/OpenAL.framework/Versions/A/Headers/\
  68. -DVIDEO_SDL \
  69. -DINPUT_SDL \
  70. -DVIDEO_GLX \
  71. -DAUDIO_AO \
  72. -DAUDIO_OPENAL
  73. endif
  74. ifeq ($(platform),x) # X11
  75. ruby = video.glx video.xv video.sdl audio.alsa audio.openal audio.oss audio.pulseaudio audio.ao input.sdl input.x
  76. delete = rm -f $1
  77. else ifeq ($(platform),win) # Windows
  78. mingw_link_flags = -mwindows
  79. # mingw_links_flags = -mconsole
  80. # enable static linking to Qt for Windows build
  81. mingw_link_flags += -enable-stdcall-fixup -Wl,-s -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc
  82. ruby = video.direct3d video.wgl video.directdraw video.gdi audio.directsound input.rawinput input.directinput
  83. delete = $(if $(findstring i586-mingw-gcc,$(compiler)),rm -f $1,del $(subst /,\,$1))
  84. link += $(if $(findstring mingw,$(compiler)),$(mingw_link_flags))
  85. link += $(call mklib,uuid)
  86. link += $(call mklib,kernel32)
  87. link += $(call mklib,user32)
  88. link += $(call mklib,gdi32)
  89. link += $(call mklib,shell32)
  90. endif
  91. ############
  92. ### ruby ###
  93. ############
  94. rubyflags = $(if $(findstring .sdl,$(ruby)),`sdl-config --cflags`)
  95. link += $(if $(findstring .sdl,$(ruby)),`sdl-config --libs`)
  96. link += $(if $(findstring video.direct3d,$(ruby)),$(call mklib,d3d9))
  97. link += $(if $(findstring video.directdraw,$(ruby)),$(call mklib,ddraw))
  98. link += $(if $(findstring video.glx,$(ruby)),$(call mklib,GL))
  99. link += $(if $(findstring video.wgl,$(ruby)),$(call mklib,opengl32))
  100. link += $(if $(findstring video.xv,$(ruby)),$(call mklib,Xv))
  101. link += $(if $(findstring audio.alsa,$(ruby)),$(call mklib,asound))
  102. link += $(if $(findstring audio.ao,$(ruby)),$(call mklib,ao))
  103. link += $(if $(findstring audio.directsound,$(ruby)),$(call mklib,dsound))
  104. link += $(if $(findstring audio.openal,$(ruby)),$(if $(call streq,$(platform),x),$(call mklib,openal),$(call mklib,openal32)))
  105. link += $(if $(findstring audio.pulseaudio,$(ruby)),$(call mklib,pulse-simple))
  106. link += $(if $(findstring input.directinput,$(ruby)),$(call mklib,dinput8) $(call mklib,dxguid))
  107. link += $(if $(findstring input.rawinput,$(ruby)),$(call mklib,xinput) $(call mklib,dinput8) $(call mklib,dxguid))
  108. ####################
  109. ### core objects ###
  110. ####################
  111. objects = libco ruby libfilter string \
  112. reader cart cheat \
  113. memory smemory cpu scpu smp ssmp sdsp ppu bppu snes \
  114. bsx srtc sdd1 spc7110 cx4 dsp1 dsp2 dsp3 dsp4 obc1 st010 cmmio fatfs diskio
  115. ifeq ($(enable_gzip),true)
  116. #objects += adler32 compress crc32 deflate gzio inffast inflate inftrees ioapi trees unzip zip zutil
  117. #flags += $(call mkdef,GZIP_SUPPORT)
  118. endif
  119. ifeq ($(enable_jma),true)
  120. #objects += jma jcrc32 lzmadec 7zlzma iiostrm inbyte lzma winout
  121. #flags += $(call mkdef,JMA_SUPPORT)
  122. endif
  123. ######################
  124. ### implicit rules ###
  125. ######################
  126. compile = \
  127. $(strip \
  128. $(if $(filter %.c,$<), \
  129. $(c) $(flags) $1 $(rule), \
  130. $(if $(filter %.cpp,$<), \
  131. $(cpp) $(flags) $1 $(rule) \
  132. ) \
  133. ) \
  134. )
  135. %.$(obj): $<; $(call compile)
  136. all: build;
  137. include $(ui)/Makefile
  138. objects := $(patsubst %,obj/%.$(obj),$(objects))
  139. rubydef := $(foreach c,$(subst .,_,$(call strupper,$(ruby))),$(call mkdef,$c))
  140. #################
  141. ### libraries ###
  142. #################
  143. obj/ruby.$(obj): lib/ruby/ruby.cpp lib/ruby/* lib/ruby/video/* lib/ruby/audio/* lib/ruby/input/*
  144. $(call compile,$(rubydef) $(rubyflags))
  145. obj/libco.$(obj): lib/libco/libco.c lib/libco/*
  146. $(c) $(libcoflags) $(rule)
  147. obj/libfilter.$(obj): lib/libfilter/libfilter.cpp lib/libfilter/*
  148. obj/string.$(obj): lib/nall/string.cpp lib/nall/*
  149. #################
  150. ### utilities ###
  151. #################
  152. obj/reader.$(obj): reader/reader.cpp reader/*
  153. obj/cart.$(obj) : cart/cart.cpp cart/*
  154. obj/cheat.$(obj) : cheat/cheat.cpp cheat/*
  155. ##############
  156. ### memory ###
  157. ##############
  158. obj/memory.$(obj) : memory/memory.cpp memory/*
  159. obj/smemory.$(obj): memory/smemory/smemory.cpp memory/smemory/* memory/smemory/mapper/*
  160. ###########
  161. ### cpu ###
  162. ###########
  163. obj/cpu.$(obj) : cpu/cpu.cpp cpu/*
  164. obj/scpu.$(obj): cpu/scpu/scpu.cpp cpu/scpu/* cpu/scpu/core/* cpu/scpu/dma/* cpu/scpu/memory/* cpu/scpu/mmio/* cpu/scpu/timing/*
  165. ###########
  166. ### smp ###
  167. ###########
  168. obj/smp.$(obj) : smp/smp.cpp smp/*
  169. obj/ssmp.$(obj): smp/ssmp/ssmp.cpp smp/ssmp/* smp/ssmp/core/* smp/ssmp/memory/* smp/ssmp/timing/*
  170. ###########
  171. ### dsp ###
  172. ###########
  173. obj/adsp.$(obj): dsp/adsp/adsp.cpp dsp/adsp/*
  174. obj/sdsp.$(obj): dsp/sdsp/sdsp.cpp dsp/sdsp/*
  175. ###########
  176. ### ppu ###
  177. ###########
  178. obj/ppu.$(obj) : ppu/ppu.cpp ppu/*
  179. obj/bppu.$(obj): ppu/bppu/bppu.cpp ppu/bppu/*
  180. ############
  181. ### snes ###
  182. ############
  183. obj/snes.$(obj): snes/snes.cpp snes/* snes/scheduler/* snes/video/* snes/audio/* snes/input/*
  184. #####################
  185. ### special chips ###
  186. #####################
  187. obj/bsx.$(obj) : chip/bsx/bsx.cpp chip/bsx/*
  188. obj/srtc.$(obj) : chip/srtc/srtc.cpp chip/srtc/*
  189. obj/sdd1.$(obj) : chip/sdd1/sdd1.cpp chip/sdd1/*
  190. obj/spc7110.$(obj): chip/spc7110/spc7110.cpp chip/spc7110/*
  191. obj/cx4.$(obj) : chip/cx4/cx4.cpp chip/cx4/*
  192. obj/dsp1.$(obj) : chip/dsp1/dsp1.cpp chip/dsp1/*
  193. obj/dsp2.$(obj) : chip/dsp2/dsp2.cpp chip/dsp2/*
  194. obj/dsp3.$(obj) : chip/dsp3/dsp3.cpp chip/dsp3/*
  195. obj/dsp4.$(obj) : chip/dsp4/dsp4.cpp chip/dsp4/*
  196. obj/obc1.$(obj) : chip/obc1/obc1.cpp chip/obc1/*
  197. obj/st010.$(obj) : chip/st010/st010.cpp chip/st010/*
  198. obj/cmmio.$(obj) : chip/cmmio/cmmio.cpp chip/cmmio/*
  199. obj/fatfs.$(obj) : chip/fatfs/fatfs.cpp chip/fatfs/*
  200. obj/diskio.$(obj) : chip/fatfs/diskio.cpp chip/fatfs/*
  201. ############
  202. ### zlib ###
  203. ############
  204. obj/adler32.$(obj) : reader/zlib/adler32.c reader/zlib/*
  205. obj/compress.$(obj): reader/zlib/compress.c reader/zlib/*
  206. obj/crc32.$(obj) : reader/zlib/crc32.c reader/zlib/*
  207. obj/deflate.$(obj) : reader/zlib/deflate.c reader/zlib/*
  208. obj/gzio.$(obj) : reader/zlib/gzio.c reader/zlib/*
  209. obj/inffast.$(obj) : reader/zlib/inffast.c reader/zlib/*
  210. obj/inflate.$(obj) : reader/zlib/inflate.c reader/zlib/*
  211. obj/inftrees.$(obj): reader/zlib/inftrees.c reader/zlib/*
  212. obj/ioapi.$(obj) : reader/zlib/ioapi.c reader/zlib/*
  213. obj/trees.$(obj) : reader/zlib/trees.c reader/zlib/*
  214. obj/unzip.$(obj) : reader/zlib/unzip.c reader/zlib/*
  215. obj/zip.$(obj) : reader/zlib/zip.c reader/zlib/*
  216. obj/zutil.$(obj) : reader/zlib/zutil.c reader/zlib/*
  217. ###########
  218. ### jma ###
  219. ###########
  220. obj/jma.$(obj) : reader/jma/jma.cpp reader/jma/*
  221. obj/jcrc32.$(obj) : reader/jma/jcrc32.cpp reader/jma/*
  222. obj/lzmadec.$(obj): reader/jma/lzmadec.cpp reader/jma/*
  223. obj/7zlzma.$(obj) : reader/jma/7zlzma.cpp reader/jma/*
  224. obj/iiostrm.$(obj): reader/jma/iiostrm.cpp reader/jma/*
  225. obj/inbyte.$(obj) : reader/jma/inbyte.cpp reader/jma/*
  226. obj/lzma.$(obj) : reader/jma/lzma.cpp reader/jma/*
  227. obj/winout.$(obj) : reader/jma/winout.cpp reader/jma/*
  228. ###############
  229. ### targets ###
  230. ###############
  231. build: ui_build $(objects)
  232. g++ $(call mkbin,bsnes) $(objects) $(link)
  233. install:
  234. install -D -m 755 ../bsnes $(DESTDIR)$(prefix)/bin/bsnes
  235. install -D -m 644 data/bsnes.png $(DESTDIR)$(prefix)/share/pixmaps/bsnes.png
  236. install -D -m 644 data/bsnes.desktop $(DESTDIR)$(prefix)/share/applications/bsnes.desktop
  237. clean: ui_clean
  238. -@$(call delete,obj/*.$(obj))
  239. -@$(call delete,*.res)
  240. -@$(call delete,*.pgd)
  241. -@$(call delete,*.pgc)
  242. -@$(call delete,*.ilk)
  243. -@$(call delete,*.pdb)
  244. -@$(call delete,*.manifest)
  245. help:
  246. @echo "Usage: $(MAKE) platform=(os) compiler=(cc) [options]"
  247. @echo ""
  248. @echo "Supported platforms:"
  249. @echo " x - Linux / BSD (x86, x86-64)"
  250. @echo " win - Windows (x86, x86-64)"
  251. @echo ""
  252. @echo "Supported compilers:"
  253. @echo " gcc - GCC compiler"
  254. @echo " mingw32-gcc - MinGW compiler"
  255. @echo " i586-mingw32-gcc - MinGW cross compiler"
  256. @echo " cl - Visual C++"
  257. @echo ""
  258. @echo "Available options:"
  259. @echo " enable_gzip=[true|false] - Enable ZIP / GZ support (default=false)"
  260. @echo " enable_jma=[true|false] - Enable JMA support (default=false)"
  261. @echo ""
  262. @echo "Example: $(MAKE) platform=x compiler=gcc enable_gzip=true"
  263. @echo ""