Makefile.libretro 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426
  1. # Makefile for PicoDrive (libretro)
  2. ifeq ($(platform),)
  3. platform = unix
  4. ifeq ($(shell uname -a),)
  5. platform = win
  6. else ifneq ($(findstring MINGW,$(shell uname -a)),)
  7. platform = win
  8. else ifneq ($(findstring Darwin,$(shell uname -a)),)
  9. platform = osx
  10. arch = intel
  11. ifeq ($(shell uname -p),powerpc)
  12. arch = ppc
  13. endif
  14. else ifneq ($(findstring win,$(shell uname -a)),)
  15. platform = win
  16. endif
  17. endif
  18. CC ?= gcc
  19. CXX ?= g++
  20. AS ?= as
  21. CC_AS ?= $(CC)
  22. CFLAGS ?=
  23. STATIC_LINKING:= 0
  24. TARGET_NAME := picodrive
  25. LIBM := -lm
  26. GIT_VERSION ?= $(shell git rev-parse --short HEAD || echo unknown)
  27. ifneq ($(GIT_VERSION),"unknown")
  28. CFLAGS += -DGIT_VERSION=\"$(GIT_VERSION)\"
  29. endif
  30. asm_memory = 0
  31. asm_render = 0
  32. asm_ym2612 = 0
  33. asm_misc = 0
  34. asm_cdmemory = 0
  35. asm_mix = 0
  36. asm_32xdraw = 0
  37. asm_32xmemory = 0
  38. fpic :=
  39. ifeq ($(STATIC_LINKING),1)
  40. EXT=a
  41. endif
  42. # Unix
  43. ifeq ($(platform), unix)
  44. EXT ?= so
  45. TARGET := $(TARGET_NAME)_libretro.$(EXT)
  46. fpic := -fPIC
  47. SHARED := -shared
  48. DONT_COMPILE_IN_ZLIB = 1
  49. CFLAGS += -DFAMEC_NO_GOTOS
  50. use_sh2drc = 1
  51. # Portable Linux
  52. else ifeq ($(platform), linux-portable)
  53. EXT ?= so
  54. TARGET := $(TARGET_NAME)_libretro.$(EXT)
  55. SHARED := -shared -nostdlib
  56. fpic := -fPIC
  57. LIBM :=
  58. DONT_COMPILE_IN_ZLIB = 1
  59. CFLAGS += -DFAMEC_NO_GOTOS
  60. use_sh2drc = 1
  61. # OS X
  62. else ifeq ($(platform), osx)
  63. EXT ?= dylib
  64. TARGET := $(TARGET_NAME)_libretro.$(EXT)
  65. SHARED := -dynamiclib
  66. fpic := -fPIC
  67. APPLE := 1
  68. arch = intel
  69. ifeq ($(shell uname -p),powerpc)
  70. arch = ppc
  71. endif
  72. ifeq ($(arch),ppc)
  73. CFLAGS += -DBLARGG_BIG_ENDIAN=1 -D__ppc__ -DFAMEC_NO_GOTOS
  74. else
  75. use_sh2drc = 1
  76. endif
  77. OSXVER = `sw_vers -productVersion | cut -d. -f 2`
  78. OSX_LT_MAVERICKS = `(( $(OSXVER) <= 9)) && echo "YES"`
  79. SHARED += -mmacosx-version-min=10.1
  80. else ifeq ($(platform), staticios)
  81. TARGET := $(TARGET_NAME)_libretro_ios.a
  82. APPLE := 1
  83. ifeq ($(IOSSDK),)
  84. IOSSDK := $(shell xcodebuild -version -sdk iphoneos Path)
  85. endif
  86. CC = clang -arch armv7 -arch arm64 -isysroot $(IOSSDK)
  87. CXX = clang++ -arch armv7 -arch arm64 -isysroot $(IOSSDK)
  88. CC_AS = perl ./tools/gas-preprocessor.pl $(CC)
  89. CFLAGS += -marm
  90. CFLAGS += -DIOS
  91. CC += -miphoneos-version-min=8.0
  92. CXX += -miphoneos-version-min=8.0
  93. CC_AS += -miphoneos-version-min=8.0
  94. CFLAGS += -miphoneos-version-min=8.0
  95. ARCH := aarch64
  96. STATIC_LINKING = 1
  97. use_cyclone = 0
  98. use_fame = 1
  99. use_drz80 = 0
  100. use_cz80 = 1
  101. use_sh2drc = 1
  102. use_svpdrc = 0
  103. # iOS
  104. else ifneq (,$(findstring ios,$(platform)))
  105. TARGET := $(TARGET_NAME)_libretro_ios.dylib
  106. SHARED := -dynamiclib
  107. fpic := -fPIC
  108. APPLE := 1
  109. ifeq ($(IOSSDK),)
  110. IOSSDK := $(shell xcodebuild -version -sdk iphoneos Path)
  111. endif
  112. CC = clang -arch armv7 -isysroot $(IOSSDK)
  113. CXX = clang++ -arch armv7 -isysroot $(IOSSDK)
  114. CC_AS = perl ./tools/gas-preprocessor.pl $(CC)
  115. CFLAGS += -mcpu=cortex-a8 -mtune=cortex-a8 -mfpu=neon -marm
  116. ASFLAGS += -mcpu=cortex-a8 -mtune=cortex-a8 -mfpu=neon
  117. CFLAGS += -DIOS
  118. ifeq ($(platform),ios9)
  119. CC += -miphoneos-version-min=8.0
  120. CXX += -miphoneos-version-min=8.0
  121. CC_AS += -miphoneos-version-min=8.0
  122. CFLAGS += -miphoneos-version-min=8.0
  123. else
  124. CC += -miphoneos-version-min=5.0
  125. CXX += -miphoneos-version-min=5.0
  126. CC_AS += -miphoneos-version-min=5.0
  127. CFLAGS += -miphoneos-version-min=5.0
  128. endif
  129. ARCH := arm
  130. use_cyclone = 0
  131. use_fame = 1
  132. use_drz80 = 0
  133. use_cz80 = 1
  134. use_sh2drc = 1
  135. use_svpdrc = 1
  136. # PS3
  137. else ifeq ($(platform), ps3)
  138. TARGET := $(TARGET_NAME)_libretro_$(platform).a
  139. CC = $(CELL_SDK)/host-win32/ppu/bin/ppu-lv2-gcc.exe
  140. AR = $(CELL_SDK)/host-win32/ppu/bin/ppu-lv2-ar.exe
  141. CFLAGS += -DBLARGG_BIG_ENDIAN=1 -D__ppc__ -DFAMEC_NO_GOTOS
  142. STATIC_LINKING = 1
  143. NO_MMAP = 1
  144. DONT_COMPILE_IN_ZLIB = 1
  145. use_cyclone = 0
  146. use_fame = 1
  147. use_drz80 = 0
  148. use_cz80 = 1
  149. use_sh2drc = 1
  150. # sncps3
  151. else ifeq ($(platform), sncps3)
  152. TARGET := $(TARGET_NAME)_libretro_ps3.a
  153. CC = $(CELL_SDK)/host-win32/sn/bin/ps3ppusnc.exe
  154. AR = $(CELL_SDK)/host-win32/sn/bin/ps3snarl.exe
  155. CFLAGS += -DBLARGG_BIG_ENDIAN=1 -D__ppc__ -DFAMEC_NO_GOTOS
  156. STATIC_LINKING = 1
  157. NO_MMAP = 1
  158. DONT_COMPILE_IN_ZLIB = 1
  159. use_cyclone = 0
  160. use_fame = 1
  161. use_drz80 = 0
  162. use_cz80 = 1
  163. use_sh2drc = 1
  164. # Lightweight PS3 Homebrew SDK
  165. else ifeq ($(platform), psl1ght)
  166. TARGET := $(TARGET_NAME)_libretro_$(platform).a
  167. CC = $(PS3DEV)/ppu/bin/ppu-gcc$(EXE_EXT)
  168. AR = $(PS3DEV)/ppu/bin/ppu-ar$(EXE_EXT)
  169. CFLAGS += -DBLARGG_BIG_ENDIAN=1 -D__ppc__ -DFAMEC_NO_GOTOS
  170. STATIC_LINKING = 1
  171. NO_MMAP = 1
  172. DONT_COMPILE_IN_ZLIB = 1
  173. use_cyclone = 0
  174. use_fame = 1
  175. use_drz80 = 0
  176. use_cz80 = 1
  177. use_sh2drc = 1
  178. # PSP
  179. else ifeq ($(platform), psp1)
  180. TARGET := $(TARGET_NAME)_libretro_$(platform).a
  181. CC = psp-gcc$(EXE_EXT)
  182. AR = psp-ar$(EXE_EXT)
  183. CFLAGS += -G0 -ftracer
  184. CFLAGS += -DPSP
  185. STATIC_LINKING = 1
  186. NO_MMAP = 1
  187. DONT_COMPILE_IN_ZLIB = 1
  188. asm_render = 1
  189. use_cyclone = 0
  190. use_fame = 1
  191. use_drz80 = 0
  192. use_cz80 = 1
  193. use_sh2drc = 1
  194. # CTR (3DS)
  195. else ifeq ($(platform), ctr)
  196. TARGET := $(TARGET_NAME)_libretro_$(platform).a
  197. CC = $(DEVKITARM)/bin/arm-none-eabi-gcc$(EXE_EXT)
  198. CXX = $(DEVKITARM)/bin/arm-none-eabi-g++$(EXE_EXT)
  199. AR = $(DEVKITARM)/bin/arm-none-eabi-ar$(EXE_EXT)
  200. CFLAGS += -DARM11 -D_3DS
  201. CFLAGS += -march=armv6k -mtune=mpcore -mfloat-abi=hard -marm -mfpu=vfp
  202. CFLAGS += -Wall -mword-relocations
  203. CFLAGS += -fomit-frame-pointer -ffast-math
  204. STATIC_LINKING = 1
  205. NO_MMAP = 1
  206. DONT_COMPILE_IN_ZLIB = 1
  207. ARCH = arm
  208. ARM_ASM = 1
  209. use_cyclone = 1
  210. use_fame = 0
  211. use_drz80 = 1
  212. use_cz80 = 0
  213. use_sh2drc = 1
  214. use_svpdrc = 1
  215. OBJS +=platform/libretro/3ds/3ds_utils.o
  216. # Raspberry Pi (original model) Raspbian
  217. else ifeq ($(platform), raspberrypi)
  218. CFLAGS += -marm -mfpu=vfp -mfloat-abi=hard -march=armv6j
  219. CFLAGS += -Wall -mword-relocations
  220. CFLAGS += -fomit-frame-pointer -ffast-math
  221. ARCH = arm
  222. ARM_ASM = 1
  223. TARGET := $(TARGET_NAME)_libretro.so
  224. SHARED := -shared
  225. fpic := -fPIC
  226. DONT_COMPILE_IN_ZLIB = 1
  227. use_cyclone = 1
  228. use_fame = 0
  229. use_drz80 = 1
  230. use_cz80 = 0
  231. use_sh2drc = 1
  232. use_svpdrc = 1
  233. # Vita
  234. else ifeq ($(platform), vita)
  235. TARGET := $(TARGET_NAME)_libretro_$(platform).a
  236. CC = arm-vita-eabi-gcc$(EXE_EXT)
  237. AR = arm-vita-eabi-ar$(EXE_EXT)
  238. CFLAGS += -DVITA
  239. CFLAGS += -marm -mfpu=neon -mcpu=cortex-a9 -march=armv7-a -mfloat-abi=hard -ffast-math
  240. CFLAGS += -fno-asynchronous-unwind-tables -ftree-vectorize -funroll-loops
  241. CFLAGS += -mword-relocations -fno-unwind-tables
  242. CFLAGS += -fno-optimize-sibling-calls
  243. STATIC_LINKING = 1
  244. NO_MMAP = 1
  245. DONT_COMPILE_IN_ZLIB = 1
  246. ARCH = arm
  247. ARM_ASM = 1
  248. use_cyclone = 1
  249. use_fame = 0
  250. use_drz80 = 1
  251. use_cz80 = 0
  252. use_sh2drc = 1
  253. use_svpdrc = 1
  254. # Xbox 360
  255. else ifeq ($(platform), xenon)
  256. TARGET := $(TARGET_NAME)_libretro_xenon360.a
  257. CC = xenon-gcc$(EXE_EXT)
  258. AR = xenon-ar$(EXE_EXT)
  259. CFLAGS += -D__LIBXENON__ -m32 -D__ppc__
  260. # Nintendo Game Cube
  261. else ifeq ($(platform), ngc)
  262. TARGET := $(TARGET_NAME)_libretro_$(platform).a
  263. CC = $(DEVKITPPC)/bin/powerpc-eabi-gcc$(EXE_EXT)
  264. AR = $(DEVKITPPC)/bin/powerpc-eabi-ar$(EXE_EXT)
  265. CFLAGS += -DGEKKO -DHW_DOL -mrvl -mcpu=750 -meabi -mhard-float -DBLARGG_BIG_ENDIAN=1 -D__ppc__
  266. # Nintendo Wii
  267. else ifeq ($(platform), wii)
  268. TARGET := $(TARGET_NAME)_libretro_$(platform).a
  269. CC = $(DEVKITPPC)/bin/powerpc-eabi-gcc$(EXE_EXT)
  270. AR = $(DEVKITPPC)/bin/powerpc-eabi-ar$(EXE_EXT)
  271. CFLAGS += -DGEKKO -DHW_RVL -mrvl -mcpu=750 -meabi -mhard-float -DBLARGG_BIG_ENDIAN=1 -D__ppc__
  272. # QNX
  273. else ifeq ($(platform), qnx)
  274. TARGET := $(TARGET_NAME)_libretro_$(platform).so
  275. fpic := -fPIC
  276. CC = qcc -Vgcc_ntoarmv7le
  277. CC_AS = $(CC)
  278. CFLAGS += -DBASE_ADDR_FIXED=0 -D__BLACKBERRY_QNX__ -marm -mcpu=cortex-a9 -mtune=cortex-a9 -mfpu=neon -mfloat-abi=softfp
  279. ASFLAGS += -mcpu=cortex-a9 -mfpu=neon -mfloat-abi=softfp
  280. ARCH = arm
  281. ARM_ASM = 1
  282. use_cyclone = 0
  283. use_fame = 1
  284. use_drz80 = 0
  285. use_cz80 = 1
  286. use_sh2drc = 1
  287. use_svpdrc = 1
  288. # ARM
  289. else ifneq (,$(findstring armv,$(platform)))
  290. TARGET := $(TARGET_NAME)_libretro.so
  291. SHARED := -shared -Wl,--no-undefined,-Bsymbolic
  292. fpic := -fPIC
  293. ifneq (,$(findstring cortexa5,$(platform)))
  294. CFLAGS += -marm -mcpu=cortex-a5
  295. ASFLAGS += -mcpu=cortex-a5
  296. else ifneq (,$(findstring cortexa8,$(platform)))
  297. CFLAGS += -marm -mcpu=cortex-a8
  298. ASFLAGS += -mcpu=cortex-a8
  299. else ifneq (,$(findstring cortexa9,$(platform)))
  300. CFLAGS += -marm -mcpu=cortex-a9
  301. ASFLAGS += -mcpu=cortex-a9
  302. else ifneq (,$(findstring cortexa15a7,$(platform)))
  303. CFLAGS += -marm -mcpu=cortex-a15.cortex-a7
  304. ASFLAGS += -mcpu=cortex-a15.cortex-a7
  305. else
  306. CFLAGS += -marm
  307. endif
  308. ifneq (,$(findstring neon,$(platform)))
  309. CFLAGS += -mfpu=neon
  310. ASFLAGS += -mfpu=neon
  311. endif
  312. ifneq (,$(findstring softfloat,$(platform)))
  313. CFLAGS += -mfloat-abi=softfp
  314. ASFLAGS += -mfloat-abi=softfp
  315. else ifneq (,$(findstring hardfloat,$(platform)))
  316. CFLAGS += -mfloat-abi=hard
  317. ASFLAGS += -mfloat-abi=hard
  318. endif
  319. ifneq (,$(findstring armasm,$(platform)))
  320. ARM_ASM = 1
  321. endif
  322. ARCH = arm
  323. # Emscripten
  324. else ifeq ($(platform), emscripten)
  325. TARGET := $(TARGET_NAME)_libretro_$(platform).bc
  326. STATIC_LINKING = 1
  327. DONT_COMPILE_IN_ZLIB = 1
  328. # GCW0
  329. else ifeq ($(platform), gcw0)
  330. TARGET := $(TARGET_NAME)_libretro.so
  331. CC = mipsel-linux-gcc
  332. AR = mipsel-linux-ar
  333. SHARED := -shared -nostdlib
  334. fpic := -fPIC
  335. LIBM :=
  336. DONT_COMPILE_IN_ZLIB = 1
  337. CFLAGS += -ffast-math -march=mips32 -mtune=mips32r2 -mhard-float
  338. use_cyclone = 0
  339. use_fame = 1
  340. use_drz80 = 0
  341. use_cz80 = 1
  342. use_sh2drc = 1
  343. # Windows
  344. else
  345. TARGET := $(TARGET_NAME)_libretro.dll
  346. CC = gcc
  347. fpic := -fPIC
  348. SHARED := -shared -static-libgcc -static-libstdc++
  349. CFLAGS += -D__WIN32__ -D__WIN32_LIBRETRO__
  350. endif
  351. CFLAGS += -DNO_ZLIB
  352. ifeq ($(NO_MMAP),1)
  353. CFLAGS += -DNO_MMAP
  354. endif
  355. ifeq ($(ARM_ASM),1)
  356. asm_memory = 1
  357. asm_render = 1
  358. asm_ym2612 = 1
  359. asm_misc = 1
  360. asm_cdmemory = 1
  361. asm_mix = 1
  362. asm_32xdraw = 1
  363. asm_32xmemory = 1
  364. endif
  365. CFLAGS += $(fpic)
  366. ifeq ($(findstring Haiku,$(shell uname -a)),)
  367. LDLIBS += $(LIBM)
  368. endif
  369. SHARED ?= -shared
  370. LDFLAGS += $(SHARED) $(fpic)
  371. ifneq ($(ARCH), arm)
  372. ARCH = $(shell $(CC) -dumpmachine | awk -F '-' '{print $$1}')
  373. endif
  374. PLATFORM = libretro
  375. NO_CONFIG_MAK = yes
  376. include Makefile