Makefile.libretro 11 KB

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