Makefile.libretro 8.4 KB

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