Move EMU_* variables out of platform make files

This commit is contained in:
meepingsnesroms
2018-12-08 10:53:08 -08:00
parent 33c337ae50
commit c09e490d59
13 changed files with 65 additions and 53 deletions

View File

Before

Width:  |  Height:  |  Size: 7.5 KiB

After

Width:  |  Height:  |  Size: 7.5 KiB

View File

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 34 KiB

View File

@@ -14,6 +14,7 @@ Core:
*add ARM optimized 68k CPU core(not fully working yet, SIGSEGVs when running)
*allow safety checks to be disabled with EMU_NO_SAFETY, accuracy is maintained when its not defined
*switch byte buffer orders to optimize for 16 bit opcode fetches
*cyclone68000 reenabled for ARM devices, SIGSEGVs seem to be gone
------------------------------------------
v0.9 to v0.9.5(Sept 22 2018 - Oct 18 2018)

View File

@@ -1,7 +1,7 @@
DEBUG=0
DEBUG = 0
GIT_VERSION := " $(shell git rev-parse --short HEAD)"
STATIC_LINKING=0
STATIC_LINKING_LINK=0
STATIC_LINKING = 0
STATIC_LINKING_LINK = 0
CORE_DIR := .
BUILD_DIR = build
@@ -15,6 +15,10 @@ else ifeq ($(platform),linux_x86)
include $(BUILD_DIR)/Makefile.linux_x86
else ifeq ($(platform),linux_x86_64)
include $(BUILD_DIR)/Makefile.linux_x86_64
else ifeq ($(platform),osx_x86)
include $(BUILD_DIR)/Makefile.osx_x86
else ifeq ($(platform),osx_x86_64)
include $(BUILD_DIR)/Makefile.osx_x86_64
else ifeq ($(platform),mingw_x86)
include $(BUILD_DIR)/Makefile.mingw_x86
else ifeq ($(platform),mingw_x86_64)
@@ -118,7 +122,7 @@ else ifeq ($(platform), osx)
TARGET := $(TARGET_NAME)_libretro.$(EXT)
fpic := -fPIC
ifeq ($(arch),ppc)
CFLAGS += -D__ppc__ -DMSB_FIRST -DWORDS_BIGENDIAN=1 -DEMU_BIG_ENDIAN
CFLAGS += -D__ppc__ -DMSB_FIRST -DWORDS_BIGENDIAN=1
endif
OSXVER = $(shell sw_vers -productVersion | cut -d. -f 2)
OSX_GT_MOJAVE = $(shell (( $(OSXVER) >= 14)) && echo "YES")
@@ -143,8 +147,6 @@ ifeq ($(platform),ios-arm64)
CC = cc -arch arm64 -isysroot $(IOSSDK)
else
CC = cc -arch armv7 -isysroot $(IOSSDK)
# EMU_OPTIMIZE_FOR_ARM = 1
# EMU_NEW_ASM_SYNTAX = 1
endif
LD = armv7-apple-darwin11-ld
@@ -177,7 +179,6 @@ else ifeq ($(platform), qnx)
CC = qcc -Vgcc_ntoarmv7le
AR = qcc -Vgcc_ntoarmv7le
CFLAGS += -D__BLACKBERRY_QNX__
EMU_OPTIMIZE_FOR_ARM = 1
# PS3
else ifeq ($(platform), ps3)
@@ -185,7 +186,7 @@ else ifeq ($(platform), ps3)
TARGET := $(TARGET_NAME)_libretro_ps3.$(EXT)
CC = $(CELL_SDK)/host-win32/ppu/bin/ppu-lv2-gcc.exe
AR = $(CELL_SDK)/host-win32/ppu/bin/ppu-lv2-ar.exe
CFLAGS += -D__ppc__ -DMSB_FIRST -DWORDS_BIGENDIAN=1 -DEMU_BIG_ENDIAN
CFLAGS += -D__ppc__ -DMSB_FIRST -DWORDS_BIGENDIAN=1
STATIC_LINKING = 1
STATIC_LINKING_LINK = 1
@@ -195,7 +196,7 @@ else ifeq ($(platform), sncps3)
TARGET := $(TARGET_NAME)_libretro_ps3.$(EXT)
CC = $(CELL_SDK)/host-win32/sn/bin/ps3ppusnc.exe
AR = $(CELL_SDK)/host-win32/sn/bin/ps3snarl.exe
CFLAGS += -D__ppc__ -DMSB_FIRST -DWORDS_BIGENDIAN=1 -DEMU_BIG_ENDIAN
CFLAGS += -D__ppc__ -DMSB_FIRST -DWORDS_BIGENDIAN=1
STATIC_LINKING = 1
STATIC_LINKING_LINK = 1
@@ -205,7 +206,7 @@ else ifeq ($(platform), psl1ght)
TARGET := $(TARGET_NAME)_libretro_$(platform).$(EXT)
CC = $(PS3DEV)/ppu/bin/ppu-gcc$(EXE_EXT)
AR = $(PS3DEV)/ppu/bin/ppu-ar$(EXE_EXT)
CFLAGS += -D__ppc__ -DMSB_FIRST -DWORDS_BIGENDIAN=1 -DEMU_BIG_ENDIAN
CFLAGS += -D__ppc__ -DMSB_FIRST -DWORDS_BIGENDIAN=1
STATIC_LINKING = 1
STATIC_LINKING_LINK = 1
@@ -238,7 +239,6 @@ else ifeq ($(platform), vita)
CFLAGS += -DVITA
STATIC_LINKING = 1
STATIC_LINKING_LINK = 1
EMU_OPTIMIZE_FOR_ARM = 1
# CTR (3DS)
else ifeq ($(platform), ctr)
@@ -253,7 +253,6 @@ else ifeq ($(platform), ctr)
CFLAGS += -D_3DS
STATIC_LINKING = 1
STATIC_LINKING_LINK = 1
EMU_OPTIMIZE_FOR_ARM = 1
# Raspberry Pi 2
else ifeq ($(platform), rpi2)
@@ -264,7 +263,6 @@ else ifeq ($(platform), rpi2)
CFLAGS += -marm -mcpu=cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard -funsafe-math-optimizations
CFLAGS += -fomit-frame-pointer -ffast-math
HAVE_NEON = 1
EMU_OPTIMIZE_FOR_ARM = 1
# Raspberry Pi 3
else ifeq ($(platform), rpi3)
@@ -307,7 +305,6 @@ else ifeq ($(platform), classic_armv7_a7)
LDFLAGS += -static-libgcc -static-libstdc++
endif
endif
EMU_OPTIMIZE_FOR_ARM = 1
# Xbox 360
else ifeq ($(platform), xenon)
@@ -325,7 +322,7 @@ else ifeq ($(platform), ngc)
TARGET := $(TARGET_NAME)_libretro_$(platform).$(EXT)
CC = $(DEVKITPPC)/bin/powerpc-eabi-gcc$(EXE_EXT)
AR = $(DEVKITPPC)/bin/powerpc-eabi-ar$(EXE_EXT)
CFLAGS += -DGEKKO -DHW_DOL -mrvl -mcpu=750 -meabi -mhard-float -D__ppc__ -DMSB_FIRST -DWORDS_BIGENDIAN=1 -DEMU_BIG_ENDIAN
CFLAGS += -DGEKKO -DHW_DOL -mrvl -mcpu=750 -meabi -mhard-float -D__ppc__ -DMSB_FIRST -DWORDS_BIGENDIAN=1
CFLAGS += -U__INT32_TYPE__ -U __UINT32_TYPE__ -D__INT32_TYPE__=int
STATIC_LINKING = 1
STATIC_LINKING_LINK = 1
@@ -336,7 +333,7 @@ else ifeq ($(platform), wii)
TARGET := $(TARGET_NAME)_libretro_$(platform).$(EXT)
CC = $(DEVKITPPC)/bin/powerpc-eabi-gcc$(EXE_EXT)
AR = $(DEVKITPPC)/bin/powerpc-eabi-ar$(EXE_EXT)
CFLAGS += -DGEKKO -DHW_RVL -mrvl -mcpu=750 -meabi -mhard-float -D__ppc__ -DMSB_FIRST -DWORDS_BIGENDIAN=1 -DEMU_BIG_ENDIAN
CFLAGS += -DGEKKO -DHW_RVL -mrvl -mcpu=750 -meabi -mhard-float -D__ppc__ -DMSB_FIRST -DWORDS_BIGENDIAN=1
CFLAGS += -U__INT32_TYPE__ -U __UINT32_TYPE__ -D__INT32_TYPE__=int
STATIC_LINKING = 1
STATIC_LINKING_LINK = 1
@@ -347,7 +344,7 @@ else ifeq ($(platform), wiiu)
TARGET := $(TARGET_NAME)_libretro_$(platform).$(EXT)
CC = $(DEVKITPPC)/bin/powerpc-eabi-gcc$(EXE_EXT)
AR = $(DEVKITPPC)/bin/powerpc-eabi-ar$(EXE_EXT)
CFLAGS += -DGEKKO -DHW_RVL -mwup -mcpu=750 -meabi -mhard-float -D__ppc__ -DMSB_FIRST -DWORDS_BIGENDIAN=1 -DEMU_BIG_ENDIAN
CFLAGS += -DGEKKO -DHW_RVL -mwup -mcpu=750 -meabi -mhard-float -D__ppc__ -DMSB_FIRST -DWORDS_BIGENDIAN=1
CFLAGS += -U__INT32_TYPE__ -U __UINT32_TYPE__ -D__INT32_TYPE__=int
STATIC_LINKING = 1
STATIC_LINKING_LINK = 1

View File

@@ -15,11 +15,27 @@ ifneq (,$(findstring msvc200,$(platform)))
endif
ifneq (,$(findstring msvc20,$(platform)))
#Mu is dependent on stdbool.h and the standard inline directive existing
# Mu is dependent on stdbool.h and the standard inline directive existing
INCFLAGS += -I$(CORE_DIR)/fixIncludes/stdbool
COREDEFINES += -Dinline=_inline -DINLINE=_inline
endif
ifneq (,$(filter ps3 sncps3 psl1ght ngc wii wiiu,$(platform)))
COREDEFINES += -DEMU_BIG_ENDIAN
else ifeq ($(platform), osx)
ifeq ($(arch), ppc)
COREDEFINES += -DEMU_BIG_ENDIAN
endif
endif
ifneq (,$(filter qnx vita ctr rpi2 classic_armv7_a7,$(platform)))
EMU_OPTIMIZE_FOR_ARM32 = 1
else ifneq (,$(findstring armv7,$(platform)))
EMU_OPTIMIZE_FOR_ARM32 = 1
else ifneq (,$(findstring armv6,$(platform)))
EMU_OPTIMIZE_FOR_ARM32 = 1
endif
include $(EMU_PATH)/makefile.all
COREDEFINES += $(EMU_DEFINES)

View File

@@ -42,8 +42,8 @@ LIBEXT = .ps3_ppc.a
STATIC_LINKING = 1
platform = ps3
PLATDEFS = -D__CELLOS_LV2__
PLATCFLAGS = -DMSB_FIRST -DWORDS_BIGENDIAN=1 -DEMU_BIG_ENDIAN
PLATCXXFLAGS = -DMSB_FIRST -DWORDS_BIGENDIAN=1 -DEMU_BIG_ENDIAN
PLATCFLAGS = -DMSB_FIRST -DWORDS_BIGENDIAN=1
PLATCXXFLAGS = -DMSB_FIRST -DWORDS_BIGENDIAN=1
PLATLDFLAGS = -shared -lm
PLATLDXFLAGS = -shared -lm

View File

@@ -46,7 +46,6 @@ PLATCFLAGS = -ftree-vectorize -mfloat-abi=hard -ffast-math -fsingle-precisio
PLATCXXFLAGS = -ftree-vectorize -mfloat-abi=hard -ffast-math -fsingle-precision-constant -funroll-loops -fno-short-enums
PLATLDFLAGS = -shared -lm -mthumb -mcpu=cortex-a9 -mfloat-abi=hard
PLATLDXFLAGS = -shared -lm -mthumb -mcpu=cortex-a9 -mfloat-abi=hard
EMU_OPTIMIZE_FOR_ARM = 1
################
# libretro setup

View File

@@ -42,8 +42,8 @@ LIBEXT = .wii_ppc.a
STATIC_LINKING = 1
platform = wii
PLATDEFS = -DGEKKO -DHW_RVL
PLATCFLAGS = -m32 -fstrict-aliasing -mrvl -mcpu=750 -meabi -mhard-float -DMSB_FIRST -DWORDS_BIGENDIAN=1 -DEMU_BIG_ENDIAN
PLATCXXFLAGS = -m32 -fstrict-aliasing -mrvl -mcpu=750 -meabi -mhard-float -DMSB_FIRST -DWORDS_BIGENDIAN=1 -DEMU_BIG_ENDIAN
PLATCFLAGS = -m32 -fstrict-aliasing -mrvl -mcpu=750 -meabi -mhard-float -DMSB_FIRST -DWORDS_BIGENDIAN=1
PLATCXXFLAGS = -m32 -fstrict-aliasing -mrvl -mcpu=750 -meabi -mhard-float -DMSB_FIRST -DWORDS_BIGENDIAN=1
PLATLDFLAGS = -shared -lm
PLATLDXFLAGS = -shared -lm

View File

@@ -14,7 +14,7 @@ endif
#set ASM CPU core, only use with ARMv4<->7, ARMv8 is its own architecture
ifeq ($(TARGET_ARCH),arm)
ifneq ($(TARGET_ARCH_ABI),arm64-v8a)
EMU_OPTIMIZE_FOR_ARM = 1
EMU_OPTIMIZE_FOR_ARM32 = 1
endif
endif

View File

@@ -32,14 +32,13 @@ windows{
macx{
# QMAKE_CFLAGS += -std=c89 -D__STDBOOL_H -Dinline= -Dbool=char -Dtrue=1 -Dfalse=0 # tests C89 mode
CONFIG += sdk_no_version_check # using 10.14 SDK which Qt only unofficialy supports
# CONFIG += sdk_no_version_check # using 10.14 SDK which Qt only unofficialy supports
ICON = macos/Mu.icns
QMAKE_INFO_PLIST = macos/Info.plist
DEFINES += EMU_MULTITHREADED
}
linux-g++{
message(This really shouldnt trigger yet!)
QMAKE_CFLAGS += -fopenmp
QMAKE_CXXFLAGS += -fopenmp
QMAKE_LFLAGS += -fopenmp
@@ -51,20 +50,20 @@ android{
QMAKE_CXXFLAGS += -fopenmp
QMAKE_LFLAGS += -fopenmp
DEFINES += EMU_MULTITHREADED
# CONFIG += optimize_for_arm # for now, later this will check if building for ARMv4<->7
CONFIG += optimize_for_arm32 # for now, later this will check if building for ARMv4<->7
}
# ios{
# QMAKE_INFO_PLIST = ios/Info.plist
# DEFINES += EMU_MULTITHREADED
# CONFIG += optimize_for_arm
# }
ios{
# QMAKE_INFO_PLIST = ios/Info.plist
DEFINES += EMU_MULTITHREADED
# iOS is now ARMv8 only, cyclone wont work
}
CONFIG(debug, debug|release){
# debug build, be accurate, fail hard, and add logging
DEFINES += EMU_DEBUG EMU_CUSTOM_DEBUG_LOG_HANDLER
!optimize_for_arm:DEFINES += EMU_SANDBOX
!optimize_for_arm32:DEFINES += EMU_SANDBOX
macx|linux-g++{
# DEFINES += EMU_SANDBOX_OPCODE_LEVEL_DEBUG
# DEFINES += EMU_SANDBOX_LOG_APIS
@@ -84,8 +83,8 @@ CONFIG += c++11
INCLUDEPATH += $$PWD/qt-common/include
# only use with ARMv4<->7, ARMv8 is its own architecture
optimize_for_arm{
DEFINES += EMU_OPTIMIZE_FOR_ARM
optimize_for_arm32{
DEFINES += EMU_OPTIMIZE_FOR_ARM32
SOURCES += ../../src/m68k/cyclone/CycloneNew.S
}else{
SOURCES += ../../src/m68k/musashi/m68kcpu.c \

View File

@@ -17,7 +17,7 @@ extern "C" {
//DEFINE INFO!!!
//define EMU_MULTITHREADED to speed up long loops
//define EMU_OPTIMIZE_FOR_ARM to use ASM CPU core
//define EMU_OPTIMIZE_FOR_ARM32 to use ASM CPU core
//define EMU_NO_SAFETY to remove all safety checks
//define EMU_BIG_ENDIAN on big endian systems
//to enable degguging define EMU_DEBUG, all options below do nothing unless EMU_DEBUG is defined

View File

@@ -6,7 +6,7 @@
#include "hardwareRegisters.h"
#include "memoryAccess.h"
#if defined(EMU_OPTIMIZE_FOR_ARM)
#if defined(EMU_OPTIMIZE_FOR_ARM32)
#include <stdlib.h>//for exit(1)
#include "m68k/cyclone/Cyclone.h"
#else
@@ -14,7 +14,7 @@
#endif
#if defined(EMU_OPTIMIZE_FOR_ARM)
#if defined(EMU_OPTIMIZE_FOR_ARM32)
static struct Cyclone cycloneCpu;
@@ -57,7 +57,7 @@ void flx68000Init(void){
static bool inited = false;
if(!inited){
#if defined(EMU_OPTIMIZE_FOR_ARM)
#if defined(EMU_OPTIMIZE_FOR_ARM32)
CycloneInit();
cycloneCpu.read8 = m68k_read_memory_8;
cycloneCpu.read16 = m68k_read_memory_16;
@@ -87,7 +87,7 @@ void flx68000Init(void){
void flx68000Reset(void){
resetHwRegisters();
resetAddressSpace();//address space must be reset after hardware registers because it is dependent on them
#if defined(EMU_OPTIMIZE_FOR_ARM)
#if defined(EMU_OPTIMIZE_FOR_ARM32)
CycloneReset(&cycloneCpu);
#else
m68k_pulse_reset();
@@ -97,7 +97,7 @@ void flx68000Reset(void){
uint64_t flx68000StateSize(void){
uint64_t size = 0;
#if defined(EMU_OPTIMIZE_FOR_ARM)
#if defined(EMU_OPTIMIZE_FOR_ARM32)
size += 0x80;//specified in Cyclone.h, line 82
#else
size += sizeof(uint32_t) * 50;//m68ki_cpu
@@ -108,7 +108,7 @@ uint64_t flx68000StateSize(void){
void flx68000SaveState(uint8_t* data){
uint64_t offset = 0;
#if defined(EMU_OPTIMIZE_FOR_ARM)
#if defined(EMU_OPTIMIZE_FOR_ARM32)
CyclonePack(&cycloneCpu, data + offset);
offset += 0x80;//specified in Cyclone.h, line 82
#else
@@ -182,7 +182,7 @@ void flx68000SaveState(uint8_t* data){
void flx68000LoadState(uint8_t* data){
uint64_t offset = 0;
#if defined(EMU_OPTIMIZE_FOR_ARM)
#if defined(EMU_OPTIMIZE_FOR_ARM32)
CycloneUnpack(&cycloneCpu, data + offset);
offset += 0x80;//specified in Cyclone.h, line 82
#else
@@ -263,7 +263,7 @@ void flx68000Execute(void){
int32_t cpuCycles = sysclks * pctlrCpuClockDivider * palmClockMultiplier;
if(cpuCycles > 0){
#if defined(EMU_OPTIMIZE_FOR_ARM)
#if defined(EMU_OPTIMIZE_FOR_ARM32)
cycloneCpu.cycles = cpuCycles;
CycloneRun(&cycloneCpu);
#else
@@ -279,7 +279,7 @@ void flx68000Execute(void){
}
void flx68000SetIrq(uint8_t irqLevel){
#if defined(EMU_OPTIMIZE_FOR_ARM)
#if defined(EMU_OPTIMIZE_FOR_ARM32)
cycloneCpu.irq = irqLevel;
CycloneFlushIrq(&cycloneCpu);
#else
@@ -288,7 +288,7 @@ void flx68000SetIrq(uint8_t irqLevel){
}
void flx68000RefreshAddressing(void){
#if defined(EMU_OPTIMIZE_FOR_ARM)
#if defined(EMU_OPTIMIZE_FOR_ARM32)
//cycloneCpu.pc = cycloneCpu.checkpc(cycloneCpu.pc);
#else
//C implementation doesnt cache address information
@@ -296,7 +296,7 @@ void flx68000RefreshAddressing(void){
}
bool flx68000IsSupervisor(void){
#if defined(EMU_OPTIMIZE_FOR_ARM)
#if defined(EMU_OPTIMIZE_FOR_ARM32)
return CycloneGetSr(&cycloneCpu) & 0x2000;
#else
return !!(m68k_get_reg(NULL, M68K_REG_SR) & 0x2000);
@@ -304,7 +304,7 @@ bool flx68000IsSupervisor(void){
}
void flx68000BusError(uint32_t address, bool isWrite){
#if defined(EMU_OPTIMIZE_FOR_ARM)
#if defined(EMU_OPTIMIZE_FOR_ARM32)
//no bus error callback
#else
//never call outsize of a 68k opcode, behavior is undefined due to longjmp
@@ -335,7 +335,7 @@ uint32_t flx68000GetRegister(uint8_t reg){
M68K_REG_SR
*/
#if defined(EMU_OPTIMIZE_FOR_ARM)
#if defined(EMU_OPTIMIZE_FOR_ARM32)
if(reg < 8)
return cycloneCpu.d[reg];
else if(reg < 16)
@@ -352,7 +352,7 @@ uint32_t flx68000GetRegister(uint8_t reg){
}
uint32_t flx68000GetPc(void){
#if defined(EMU_OPTIMIZE_FOR_ARM)
#if defined(EMU_OPTIMIZE_FOR_ARM32)
return cycloneCpu.prev_pc;
#else
return m68k_get_reg(NULL, M68K_REG_PPC);
@@ -362,7 +362,7 @@ uint32_t flx68000GetPc(void){
uint64_t flx68000ReadArbitraryMemory(uint32_t address, uint8_t size){
uint64_t data = UINT64_MAX;//invalid access
#if defined(EMU_OPTIMIZE_FOR_ARM)
#if defined(EMU_OPTIMIZE_FOR_ARM32)
//reading from a hardware register FIFO will corrupt it!
if(bankType[START_BANK(address)] != CHIP_NONE){
uint16_t m68kSr = CycloneGetSr(&cycloneCpu);

View File

@@ -13,8 +13,8 @@ EMU_SOURCES_C := $(EMU_PATH)/emulator.c \
$(EMU_PATH)/debug/sandbox.c
#only use with ARMv4<->7, ARMv8 is its own architecture
ifeq ($(EMU_OPTIMIZE_FOR_ARM), 1)
EMU_DEFINES += -DEMU_OPTIMIZE_FOR_ARM
ifeq ($(EMU_OPTIMIZE_FOR_ARM32), 1)
EMU_DEFINES += -DEMU_OPTIMIZE_FOR_ARM32
ifeq ($(EMU_NEW_ASM_SYNTAX), 1)
EMU_SOURCES_ASM += $(EMU_PATH)/m68k/cyclone/CycloneNew.S
else