388 lines
11 KiB
CMake
388 lines
11 KiB
CMake
## config module
|
|
#
|
|
# get luserx0 to doc this shit or something, vars in all caps are to be exported as defs if they aren't in build.h already
|
|
# handle options for FEAT per platform, so rec isn't built for targets w.o one...
|
|
# *TODO* fix Android for build system in emu too, OS_LINUX is hardly fitting: prob works better as PLATFORM_ANDROID_{S,N}DK or something
|
|
# *TODO* setup git version like it's done in VS/make and configure header so --version works still
|
|
# *TODO* lots of other shit to improve build, add enabling/disabling libs/features, setting 3rd party libs as either built in static, dynamic or shared/system
|
|
#
|
|
#
|
|
|
|
|
|
set(ZBUILD Off)
|
|
|
|
|
|
|
|
set(BUILD_LIBS OFF) ## Scope:Local If set will build libs { dreamcast, osd, ... }
|
|
set(BUILD_LIB_TYPE STATIC) ## Scope:Local If BUILD_LIBS is set, will use this as type of lib to use { STATIC, SHARED, MODULE (plugin) } *TODO*
|
|
set(BUILD_SHARED_LIBS OFF) ## Scope:CMAKE If type is not specified in add_library, use SHARED
|
|
|
|
|
|
|
|
|
|
## Build flags ##
|
|
#
|
|
|
|
set(DC_PLATFORM_MASK 7) # Z: Uh, not a bitset
|
|
set(DC_PLATFORM_DREAMCAST 0) # /* Works, for the most part */
|
|
set(DC_PLATFORM_DEV_UNIT 1) # /* This is missing hardware */
|
|
set(DC_PLATFORM_NAOMI 2) # /* Works, for the most part */
|
|
set(DC_PLATFORM_NAOMI2 3) # /* Needs to be done, 2xsh4 + 2xpvr + custom TNL */
|
|
set(DC_PLATFORM_ATOMISWAVE 4) # /* Needs to be done, DC-like hardware with possibly more ram */
|
|
set(DC_PLATFORM_HIKARU 5) # /* Needs to be done, 2xsh4, 2x aica , custom vpu */
|
|
set(DC_PLATFORM_AURORA 6) # /* Needs to be done, Uses newer 300 mhz sh4 + 150 mhz pvr mbx SoC */
|
|
|
|
|
|
|
|
set(OS_WINDOWS 0x10000001) # HOST_OS
|
|
set(OS_LINUX 0x10000002)
|
|
set(OS_DARWIN 0x10000003)
|
|
set(OS_IOS 0x10000004) # todo: iOS != OS_DARWIN
|
|
set(OS_ANDROID 0x10000005) # todo: should be SYSTEM_ANDROID but ! OS_LINUX
|
|
|
|
set(OS_UWP 0x10000011)
|
|
set(OS_NSW_HOS 0x80000001)
|
|
set(OS_PS4_BSD 0x80000002)
|
|
|
|
|
|
|
|
set(CPU_X86 0x20000001) # HOST_CPU
|
|
set(CPU_X64 0x20000004)
|
|
set(CPU_ARM 0x20000002)
|
|
set(CPU_A64 0x20000008)
|
|
set(CPU_MIPS 0x20000003)
|
|
set(CPU_MIPS64 0x20000009)
|
|
set(CPU_PPC 0x20000006)
|
|
set(CPU_PPC64 0x20000007)
|
|
set(CPU_GENERIC 0x20000005) # used for pnacl, emscripten, etc
|
|
|
|
set(DYNAREC_NONE 0x40000001) # FEAT_SHREC, FEAT_AREC, FEAT_DSPREC
|
|
set(DYNAREC_JIT 0x40000002)
|
|
set(DYNAREC_CPP 0x40000003)
|
|
|
|
set(COMPILER_VC 0x30000001) # BUILD_COMPILER
|
|
set(COMPILER_GCC 0x30000002)
|
|
set(COMPILER_CLANG 0x30000003)
|
|
set(COMPILER_INTEL 0x30000004)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## These default to host, but are used for cross so make sure not to contaminate
|
|
#
|
|
# CMAKE_SYSTEM ${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_VERSION}.
|
|
# CMAKE_SYSTEM_NAME CMAKE_HOST_SYSTEM_NAME uname -s Linux, Windows, and Darwin
|
|
# CMAKE_SYSTEM_VERSION CMAKE_HOST_SYSTEM_VERSION uname -r
|
|
# CMAKE_SYSTEM_PROCESSOR CMAKE_HOST_SYSTEM_PROCESSOR uname -p
|
|
#
|
|
#
|
|
#
|
|
# BOOL: CMAKE_HOST_UNIX CMAKE_HOST_WIN32 CMAKE_HOST_APPLE
|
|
#
|
|
#
|
|
# CMAKE_LIBRARY_ARCHITECTURE CMAKE_<LANG>_LIBRARY_ARCHITECTURE <prefix>/lib/<arch>
|
|
#
|
|
#
|
|
|
|
|
|
|
|
|
|
## strings are used to append to path/file names, and to filter multiple possibilities down to one
|
|
# AMD64/x86_64:x64, i*86:x86, ppc/powerpc[64][b|l]e:ppc[64] etc
|
|
#
|
|
if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "i686") # todo: check MATCHES "i.86" ?
|
|
set(host_arch "x86")
|
|
set(HOST_CPU ${CPU_X86})
|
|
#
|
|
elseif(("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "AMD64") OR
|
|
("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64"))
|
|
set(host_arch "x64")
|
|
set(HOST_CPU ${CPU_X64})
|
|
#
|
|
elseif("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "aarch64")
|
|
set(host_arch "arm64")
|
|
set(HOST_CPU ${CPU_A64})
|
|
#
|
|
elseif("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "arm")
|
|
set(host_arch "arm")
|
|
set(HOST_CPU ${CPU_ARM})
|
|
#
|
|
elseif("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "ppc64")
|
|
set(host_arch "ppc64")
|
|
set(HOST_CPU ${CPU_PPC64})
|
|
#
|
|
elseif("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "ppc") # has to be done after ppc64 obv
|
|
set(host_arch "ppc")
|
|
set(HOST_CPU ${CPU_PPC})
|
|
#
|
|
elseif("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "mips64") # todo: check , r* names?
|
|
set(host_arch "mips64")
|
|
set(HOST_CPU ${CPU_MIPS64})
|
|
#
|
|
elseif("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "mips") # todo: check , r* names?
|
|
set(host_arch "mips")
|
|
set(HOST_CPU ${CPU_MIPS})
|
|
#
|
|
else()
|
|
message("Warning: Unknown Host System Processor: \"${CMAKE_SYSTEM_PROCESSOR}\"")
|
|
set(host_arch "${CMAKE_SYSTEM_PROCESSOR}")
|
|
set(HOST_CPU ${CPU_GENERIC})
|
|
endif()
|
|
|
|
|
|
|
|
|
|
string(TOLOWER ${CMAKE_SYSTEM_NAME} host_os)
|
|
|
|
#message(" - testing cmake host_os: \"${host_os}\"")
|
|
|
|
## HOST_* is not TARGET_* ;; change ndc-e internal naming it's wrong , then change this ;;
|
|
|
|
if("android" STREQUAL "${host_os}" OR ANDROID)
|
|
set(HOST_OS ${OS_LINUX}) # *FIXME* we might have to keep as OS_LINUX or add to full cleanup list :|
|
|
|
|
elseif("windowsstore" STREQUAL "${host_os}")
|
|
set(HOST_OS ${OS_UWP})
|
|
set(HOST_CPU ${CPU_X64})
|
|
|
|
elseif(CMAKE_HOST_WIN32)
|
|
set(HOST_OS ${OS_WINDOWS})
|
|
|
|
elseif(CMAKE_HOST_APPLE)
|
|
|
|
if("${host_arch}" MATCHES "arm")
|
|
set(HOST_OS ${OS_IOS})
|
|
set(TARGET_IOS On)
|
|
add_definitions(-DTARGET_IPHONE -DTARGET_IOS)
|
|
else()
|
|
set(HOST_OS ${OS_DARWIN}) # todo ios check, check compiler/arch?
|
|
set(TARGET_OSX On)
|
|
add_definitions(-DTARGET_OSX)
|
|
endif()
|
|
|
|
elseif(CMAKE_HOST_UNIX) # GP UNIX MUST BE AFTER OTHER UNIX'ish options such as APPLE , it matches both
|
|
|
|
set(HOST_OS ${OS_LINUX}) # todo android check, just check android vars?
|
|
endif()
|
|
|
|
|
|
|
|
#option(TARGET_NO_REC BOOL "")
|
|
#option(TARGET_NO_AREC BOOL "")
|
|
#option(TARGET_NO_JIT BOOL "")
|
|
|
|
|
|
|
|
## Dynarec avail on x86,x64,arm and aarch64 in arm.32 compat
|
|
#
|
|
if((${HOST_CPU} EQUAL ${CPU_X86}) OR (${HOST_CPU} EQUAL ${CPU_X64}) OR
|
|
(${HOST_CPU} EQUAL ${CPU_ARM}) OR (${HOST_CPU} EQUAL ${CPU_A64}))
|
|
#
|
|
message("Dynarec Features Available")
|
|
|
|
set(FEAT_SHREC ${DYNAREC_JIT})
|
|
set(FEAT_AREC ${DYNAREC_NONE})
|
|
set(FEAT_DSPREC ${DYNAREC_NONE})
|
|
#
|
|
else()
|
|
set(FEAT_SHREC ${DYNAREC_CPP})
|
|
set(FEAT_AREC ${DYNAREC_NONE})
|
|
set(FEAT_DSPREC ${DYNAREC_NONE})
|
|
endif()
|
|
|
|
## Handle TARGET_* to FEAT_ *FIXME* stupid use one or the other and propogate : part of build cleanup , TARGET_ will only be for platform specifics and FEAT_ as OPTIONS
|
|
#
|
|
if(TARGET_NO_REC)
|
|
set(FEAT_SHREC ${DYNAREC_NONE})
|
|
set(FEAT_AREC ${DYNAREC_NONE})
|
|
set(FEAT_DSPREC ${DYNAREC_NONE})
|
|
endif()
|
|
|
|
if(TARGET_NO_AREC)
|
|
set(FEAT_SHREC ${DYNAREC_JIT})
|
|
set(FEAT_AREC ${DYNAREC_NONE})
|
|
set(FEAT_DSPREC ${DYNAREC_NONE})
|
|
endif()
|
|
|
|
if(TARGET_NO_JIT)
|
|
set(FEAT_SHREC ${DYNAREC_CPP})
|
|
set(FEAT_AREC ${DYNAREC_NONE})
|
|
set(FEAT_DSPREC ${DYNAREC_NONE})
|
|
endif()
|
|
|
|
|
|
|
|
|
|
|
|
######## Looks like something to delete, but if we're going to handle options here and NOT in libosd/lib* #########
|
|
|
|
# FindNativeCompilers()
|
|
## options BUILD_COMPILER { GCC, Clang, Intel, RealView? }
|
|
|
|
|
|
#set(CMAKE_C_COMPILER clang)
|
|
#set(CMAKE_C_COMPILER_TARGET ${triple})
|
|
#set(CMAKE_CXX_COMPILER clang++)
|
|
#set(CMAKE_CXX_COMPILER_TARGET ${triple})
|
|
|
|
|
|
|
|
if(${HOST_OS} EQUAL ${OS_LINUX})
|
|
# option SUPPORT_X11
|
|
# option FEAT_HAS_NIXPROF
|
|
# option EMSCripten
|
|
endif()
|
|
|
|
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
|
#
|
|
set(BUILD_COMPILER ${COMPILER_VC})
|
|
message("MSVC Platform: ${CMAKE_VS_PLATFORM_NAME}")
|
|
message("MSVC Toolset: ${CMAKE_VS_PLATFORM_TOOLSET}")
|
|
|
|
|
|
add_definitions(/D_CRT_SECURE_NO_WARNINGS /D_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1)
|
|
|
|
if("${HOST_OS}" STREQUAL "${OS_UWP}")
|
|
set(_CXX_FLAGS "/ZW ")
|
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /AppContainer")
|
|
endif()
|
|
#
|
|
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
|
set(BUILD_COMPILER ${COMPILER_GCC})
|
|
#
|
|
elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") # AppleClang ffs
|
|
set(BUILD_COMPILER ${COMPILER_CLANG})
|
|
#
|
|
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel")
|
|
set(BUILD_COMPILER ${COMPILER_INTEL})
|
|
#
|
|
else()
|
|
message("Unknown Compiler: ${CMAKE_CXX_COMPILER_ID}")
|
|
endif()
|
|
|
|
|
|
|
|
## Setup some common flags
|
|
#
|
|
if ((${BUILD_COMPILER} EQUAL ${COMPILER_VC}) OR
|
|
(${BUILD_COMPILER} EQUAL ${COMPILER_CLANG}) AND (${HOST_OS} STREQUAL ${OS_WINDOWS}))
|
|
|
|
|
|
add_definitions(/D_CRT_SECURE_NO_WARNINGS /D_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1)
|
|
|
|
if(${BUILD_COMPILER} EQUAL ${COMPILER_CLANG})
|
|
add_definitions(/DXBYAK_NO_OP_NAMES /DTARGET_NO_OPENMP) #*FIXME* check openmp on clang-cl
|
|
remove_definitions(/U_HAS_STD_BYTE)
|
|
set(_CXX_FLAGS "/std:c++14") # /U_HAS_STD_BYTE not working, have to use c++14 not 17 :|
|
|
set(_C_FLAGS "-Wno-unused-function -Wno-unused-variable")
|
|
endif()
|
|
|
|
|
|
elseif ((${BUILD_COMPILER} EQUAL ${COMPILER_GCC}) OR
|
|
(${BUILD_COMPILER} EQUAL ${COMPILER_CLANG})) # AND NOT ${HOST_OS} EQUAL ${OS_WINDOWS}))
|
|
|
|
if(USE_32B OR TARGET_LINUX_X86)
|
|
set(_C_FLAGS "${_C_FLAGS} -m32")
|
|
endif()
|
|
|
|
if((${HOST_CPU} EQUAL ${CPU_X86}) OR (${HOST_CPU} EQUAL ${CPU_X64}))
|
|
set(_C_FLAGS "${_C_FLAGS} -msse4")
|
|
|
|
if(NOT CMAKE_HOST_APPLE)
|
|
set(_C_FLAGS "${_C_FLAGS} -fopenmp")
|
|
endif()
|
|
endif() # X86 family
|
|
|
|
|
|
set(_CXX_FLAGS "${_CXX_FLAGS} -fno-operator-names -fpermissive -std=c++11") # -fcxx-exceptions") ## xbyak needs exceptions
|
|
|
|
|
|
endif()
|
|
|
|
|
|
set(_CXX_FLAGS "${_CXX_FLAGS} ${_C_FLAGS}")
|
|
|
|
|
|
|
|
set(CMAKE_C_FLAGS " ${_C_FLAGS}") # ${CMAKE_C_FLAGS} -- these hold default VC flags for non VC Build ?
|
|
set(CMAKE_CXX_FLAGS " ${_CXX_FLAGS}") # ${CMAKE_CXX_FLAGS}
|
|
|
|
|
|
#if defined(TARGET_NO_NIXPROF)
|
|
#define FEAT_HAS_NIXPROF 0
|
|
#endif
|
|
|
|
#if defined(TARGET_NO_COREIO_HTTP)
|
|
#define FEAT_HAS_COREIO_HTTP 0
|
|
#endif
|
|
|
|
#if defined(TARGET_SOFTREND) # need -fopenmp
|
|
#define FEAT_HAS_SOFTREND 1
|
|
#endif
|
|
|
|
|
|
if (TARGET_NSW) # -DCMAKE_TOOLCHAIN_FILE=./cmake/devkitA64.cmake -DTARGET_NSW=ON
|
|
set(HOST_OS ${OS_NSW_HOS})
|
|
|
|
message(" DEVKITA64: ${DEVKITA64} ")
|
|
message("HOST_OS ${HOST_OS}")
|
|
|
|
add_definitions(-D__SWITCH__ -DGLES -DMESA_EGL_NO_X11_HEADERS)
|
|
add_definitions(-DTARGET_NO_THREADS -DTARGET_NO_EXCEPTIONS -DTARGET_NO_NIXPROF)
|
|
add_definitions(-DTARGET_NO_COREIO_HTTP -UTARGET_SOFTREND)
|
|
add_definitions(-D_GLIBCXX_USE_C99_MATH_TR1 -D_LDBL_EQ_DBL)
|
|
|
|
endif()
|
|
|
|
if (TARGET_PS4) # -DCMAKE_TOOLCHAIN_FILE=./cmake/{ps4sdk,clang_scei}.cmake -DTARGET_PS4=ON
|
|
set(HOST_OS ${OS_PS4_BSD})
|
|
message("HOST_OS ${HOST_OS}")
|
|
|
|
|
|
add_definitions(-DPS4 -DTARGET_PS4 -DTARGET_BSD -D__ORBIS__ -DGLES -DMESA_EGL_NO_X11_HEADERS) ## last needed for __unix__ on eglplatform.h
|
|
add_definitions(-DTARGET_NO_THREADS -DTARGET_NO_EXCEPTIONS -DTARGET_NO_NIXPROF)
|
|
add_definitions(-DTARGET_NO_COREIO_HTTP -UTARGET_SOFTREND)
|
|
|
|
|
|
message("*******FIXME******** LARGE PAGES !!")
|
|
endif()
|
|
|
|
if(ZBUILD)
|
|
set(DEBUG_CMAKE ON)
|
|
add_definitions(-D_Z_) # Get rid of some warnings and internal dev testing
|
|
|
|
if(NOT TARGET_PS4 AND NOT TARGET_NSW AND
|
|
NOT TARGET_OSX AND NOT TARGET_IOS )
|
|
set(USE_QT ON)
|
|
endif()
|
|
endif()
|
|
|
|
# configure options for osd/ui
|
|
# osd_default, osd_qt
|
|
# ui_default, ui_sdl, ui_qt
|
|
# USE_NATIVE , USE_SDL , USE_QT -- these (can) define multiple
|
|
|
|
option(USE_QT False "Use Qt5 for UI and support OS Deps.")
|
|
|
|
#option(BUILD_TESTS "Build tests" OFF) # todo: luserx0 this is your arena, you want tests add em
|
|
|
|
add_definitions(-DCMAKE_BUILD)
|
|
|
|
add_definitions(-DHOST_OS=${HOST_OS})
|
|
add_definitions(-DHOST_CPU=${HOST_CPU})
|
|
|
|
add_definitions(-DFEAT_AREC=${FEAT_AREC})
|
|
add_definitions(-DFEAT_SHREC=${FEAT_SHREC})
|
|
add_definitions(-DFEAT_DSPREC=${FEAT_DSPREC})
|
|
|
|
add_definitions(-DBUILD_COMPILER=${BUILD_COMPILER})
|
|
|
|
add_definitions(-DDEF_CONSOLE)
|
|
|
|
|
|
set(RE_CMAKE_CONFIGURED 1)
|
|
#add_definitions(-D=${})
|