Makefile.libretro 10 KB

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