2013-12-19 17:10:14 +00:00
|
|
|
/*
|
2015-07-25 06:16:53 +00:00
|
|
|
reicast build options
|
|
|
|
|
|
|
|
Reicast can support a lot of stuff, and this is an attempt
|
|
|
|
to organize the build time options
|
|
|
|
|
|
|
|
Option categories
|
2013-12-19 17:10:14 +00:00
|
|
|
|
2015-07-25 06:16:53 +00:00
|
|
|
BUILD_* - BUILD_COMPILER, etc...
|
|
|
|
definitions about the build machine
|
2013-12-19 17:10:14 +00:00
|
|
|
|
2015-07-25 06:16:53 +00:00
|
|
|
HOST_*
|
|
|
|
definitions about the host machine
|
2013-12-19 17:10:14 +00:00
|
|
|
|
2015-07-25 06:16:53 +00:00
|
|
|
FEAT_*
|
|
|
|
definitions about the features that this build targets
|
|
|
|
This is higly related to HOST_*, but it's for options that might
|
|
|
|
or might not be avaiable depending on the target host, or that
|
|
|
|
features that are irrelevant of the host
|
2013-12-19 17:10:14 +00:00
|
|
|
|
2015-07-25 06:16:53 +00:00
|
|
|
Eg, Alsa, Pulse Audio and OSS might sense as HOST dedinitions
|
|
|
|
but it usually makes more sense to detect them as runtime. In
|
|
|
|
that context, HOST_ALSA makes no sense because the host might
|
|
|
|
or might not have alsa installed/ running
|
|
|
|
|
|
|
|
MMU makes no sense as a HOST definition at all, so it should
|
|
|
|
be FEAT_HAS_MMU
|
|
|
|
|
|
|
|
TARGET_*
|
|
|
|
A preconfigured default. Eg TARGET_WIN86.
|
|
|
|
|
|
|
|
Naming of options, option values, and how to use them
|
|
|
|
|
|
|
|
for options that makes sense to have a list of values
|
|
|
|
{CATEGORY}_{OPTION}
|
|
|
|
{OPTION}_{VALUE}
|
|
|
|
|
|
|
|
eg.
|
|
|
|
BUILD_COMPILER == COMPILER_GCC, HOST_CPU != CPU_X64, ...
|
|
|
|
|
|
|
|
for options that are boolean
|
|
|
|
{CATEGORY}_IS_{OPTION} or {CATEGORY}_HAS_{OPTION}
|
|
|
|
|
|
|
|
Evaluates to 0 or 1
|
|
|
|
|
|
|
|
If an configuration cannot be neatly split into a set of
|
|
|
|
of orthogonal options, then it makes sense to break things
|
|
|
|
to "sets" or have a hierarchy of options.
|
|
|
|
|
|
|
|
Example
|
|
|
|
-------
|
|
|
|
|
|
|
|
In the beggining it made sense to have an audio backend
|
|
|
|
per operating system. It made sense to have it depend
|
|
|
|
on HOST_OS and seleect DirectSound or alsa.
|
|
|
|
|
|
|
|
// no option needed
|
|
|
|
|
|
|
|
Then, as android was introduced, which also uses OS_LINUX
|
|
|
|
atm, the audio could have been made an option. It could be
|
|
|
|
a HOST_* option, or FEAT_* one. I'd prefer FEAT_*.
|
|
|
|
FEAT_* makes more sense as future wise we might want
|
|
|
|
to support multiple backends.
|
|
|
|
|
|
|
|
FEAT_AUDIO_BACKEND
|
|
|
|
AUDIO_BACKEND_NONE
|
|
|
|
AUDIO_BACKEND_DS
|
|
|
|
AUDIO_BACKEND_ALSA
|
|
|
|
AUDIO_BACKEND_ANDROID
|
|
|
|
|
|
|
|
Used like
|
|
|
|
#if FEAT_AUDIO_BACKEND == AUDIO_BACKEND_DS ....
|
|
|
|
|
|
|
|
At some point, we might have multiple audio backends that
|
|
|
|
can be compiled in and autodetected/selected at runtime.
|
|
|
|
In that case, it might make sense to have the options like
|
|
|
|
|
|
|
|
FEAT_HAS_ALSA
|
|
|
|
FEAT_HAS_DIRECTSOUND
|
|
|
|
FEAT_HAS_ANDROID_AUDIO
|
|
|
|
|
|
|
|
or
|
|
|
|
FEAT_HAS_AUDIO_ALSA
|
|
|
|
FEAT_HAS_AUDIO_DS
|
|
|
|
FEAT_HAS_AUDIO_ANDROID
|
|
|
|
|
|
|
|
The none option might or might not make sense. In this
|
|
|
|
case it can be removed, as it should always be avaiable.
|
|
|
|
|
|
|
|
Guidelines
|
|
|
|
----------
|
|
|
|
|
|
|
|
General rule of thumb, don't overcomplicate things. Start
|
|
|
|
with a simple option, and then make it more complicated
|
|
|
|
as new uses apply (see the example above)
|
|
|
|
|
|
|
|
Don't use too long names, don't use too cryptic names.
|
|
|
|
Most team developers should be able to understand or
|
|
|
|
figure out most of the acronyms used.
|
|
|
|
|
|
|
|
Try to be consistent on the acronyms across all definitions
|
|
|
|
|
|
|
|
Code shouldn't depend on build level options whenever possible
|
|
|
|
|
|
|
|
Generally, the file should compile even if the option/module is
|
|
|
|
disabled. This makes makefiles etc much easier to write
|
|
|
|
|
|
|
|
TARGET_* options should generally only be used in this file
|
|
|
|
|
|
|
|
The current source is *not* good example of these guidelines
|
|
|
|
|
|
|
|
We'll try to be smart and figure out some options/defaults on this file
|
|
|
|
but this shouldn't get too complicated
|
2013-12-19 17:10:14 +00:00
|
|
|
|
2015-07-25 06:16:53 +00:00
|
|
|
|
|
|
|
*/
|
2013-12-19 17:10:14 +00:00
|
|
|
|
2019-04-15 16:02:34 +00:00
|
|
|
//#define NO_MMU
|
|
|
|
#define FAST_MMU
|
|
|
|
#define USE_WINCE_HACK
|
2013-12-19 17:10:14 +00:00
|
|
|
|
2013-12-24 00:56:44 +00:00
|
|
|
#define DC_PLATFORM_MASK 7
|
2015-08-09 04:34:02 +00:00
|
|
|
#define DC_PLATFORM_DREAMCAST 0 /* Works, for the most part */
|
2013-12-24 00:56:44 +00:00
|
|
|
#define DC_PLATFORM_DEV_UNIT 1 /* This is missing hardware */
|
|
|
|
#define DC_PLATFORM_NAOMI 2 /* Works, for the most part */
|
|
|
|
#define DC_PLATFORM_NAOMI2 3 /* Needs to be done, 2xsh4 + 2xpvr + custom TNL */
|
2019-09-27 20:00:52 +00:00
|
|
|
#define DC_PLATFORM_ATOMISWAVE 4 /* Works, for the most part */
|
2013-12-24 00:56:44 +00:00
|
|
|
#define DC_PLATFORM_HIKARU 5 /* Needs to be done, 2xsh4, 2x aica , custom vpu */
|
|
|
|
#define DC_PLATFORM_AURORA 6 /* Needs to be done, Uses newer 300 mhz sh4 + 150 mhz pvr mbx SoC */
|
2013-12-19 17:10:14 +00:00
|
|
|
|
|
|
|
|
2019-04-12 20:59:39 +00:00
|
|
|
|
2013-12-19 17:10:14 +00:00
|
|
|
//HOST_OS
|
2013-12-24 00:56:44 +00:00
|
|
|
#define OS_WINDOWS 0x10000001
|
|
|
|
#define OS_LINUX 0x10000002
|
2014-02-07 02:58:27 +00:00
|
|
|
#define OS_DARWIN 0x10000003
|
2019-04-12 20:59:39 +00:00
|
|
|
#define OS_IOS 0x10000004
|
|
|
|
#define OS_ANDROID 0x10000005
|
|
|
|
|
|
|
|
#define OS_UWP 0x10000011
|
|
|
|
#define OS_NSW_HOS 0x80000001
|
|
|
|
#define OS_PS4_BSD 0x80000002
|
|
|
|
|
2013-12-19 17:10:14 +00:00
|
|
|
|
|
|
|
//HOST_CPU
|
2013-12-24 00:56:44 +00:00
|
|
|
#define CPU_X86 0x20000001
|
|
|
|
#define CPU_ARM 0x20000002
|
|
|
|
#define CPU_MIPS 0x20000003
|
2014-12-11 13:02:10 +00:00
|
|
|
#define CPU_X64 0x20000004
|
2015-07-29 02:58:41 +00:00
|
|
|
#define CPU_GENERIC 0x20000005 //used for pnacl, emscripten, etc
|
2019-04-12 20:59:39 +00:00
|
|
|
#define CPU_PPC 0x20000006
|
|
|
|
#define CPU_PPC64 0x20000007
|
2019-05-12 20:02:57 +00:00
|
|
|
#define CPU_ARM64 0x20000008
|
2019-04-12 20:59:39 +00:00
|
|
|
#define CPU_MIPS64 0x20000009
|
2013-12-19 17:10:14 +00:00
|
|
|
|
2015-07-25 06:39:35 +00:00
|
|
|
//FEAT_SHREC, FEAT_AREC, FEAT_DSPREC
|
2015-07-25 06:16:53 +00:00
|
|
|
#define DYNAREC_NONE 0x40000001
|
|
|
|
#define DYNAREC_JIT 0x40000002
|
|
|
|
#define DYNAREC_CPP 0x40000003
|
|
|
|
|
|
|
|
|
|
|
|
//automatic
|
|
|
|
|
2019-04-12 20:59:39 +00:00
|
|
|
#ifndef CMAKE_BUILD
|
|
|
|
|
2015-07-25 06:16:53 +00:00
|
|
|
#if defined(_WIN32) && !defined(TARGET_WIN86) && !defined(TARGET_WIN64)
|
2018-09-17 10:59:52 +00:00
|
|
|
#if !defined(_M_AMD64) && !defined(__x86_64__)
|
2015-07-25 06:16:53 +00:00
|
|
|
#define TARGET_WIN86
|
|
|
|
#else
|
|
|
|
#define TARGET_WIN64
|
|
|
|
#endif
|
2014-03-05 09:42:00 +00:00
|
|
|
#endif
|
2013-12-19 17:10:14 +00:00
|
|
|
|
2015-07-25 06:16:53 +00:00
|
|
|
//Targets
|
|
|
|
#if defined(TARGET_WIN86)
|
2013-12-19 17:10:14 +00:00
|
|
|
#define HOST_OS OS_WINDOWS
|
|
|
|
#define HOST_CPU CPU_X86
|
2015-07-25 06:16:53 +00:00
|
|
|
#elif defined(TARGET_WIN64)
|
|
|
|
#define HOST_OS OS_WINDOWS
|
|
|
|
#define HOST_CPU CPU_X64
|
|
|
|
#elif defined(TARGET_PANDORA)
|
2013-12-20 15:24:38 +00:00
|
|
|
#define HOST_OS OS_LINUX
|
|
|
|
#define HOST_CPU CPU_ARM
|
2015-07-25 06:16:53 +00:00
|
|
|
#elif defined(TARGET_LINUX_ARMELv7)
|
2013-12-19 17:10:14 +00:00
|
|
|
#define HOST_OS OS_LINUX
|
|
|
|
#define HOST_CPU CPU_ARM
|
2019-01-07 20:50:46 +00:00
|
|
|
#elif defined(TARGET_LINUX_ARMv8)
|
|
|
|
#define HOST_OS OS_LINUX
|
|
|
|
#define HOST_CPU CPU_ARM64
|
2015-07-25 06:16:53 +00:00
|
|
|
#elif defined(TARGET_LINUX_x86)
|
2014-03-03 12:06:00 +00:00
|
|
|
#define HOST_OS OS_LINUX
|
|
|
|
#define HOST_CPU CPU_X86
|
2015-07-25 06:16:53 +00:00
|
|
|
#elif defined(TARGET_LINUX_x64)
|
2015-07-14 01:35:34 +00:00
|
|
|
#define HOST_OS OS_LINUX
|
|
|
|
#define HOST_CPU CPU_X64
|
2015-07-25 06:16:53 +00:00
|
|
|
#elif defined(TARGET_LINUX_MIPS)
|
2014-03-05 10:24:03 +00:00
|
|
|
#define HOST_OS OS_LINUX
|
|
|
|
#define HOST_CPU CPU_MIPS
|
2015-07-25 06:16:53 +00:00
|
|
|
#elif defined(TARGET_GCW0)
|
2013-12-19 17:10:14 +00:00
|
|
|
#define HOST_OS OS_LINUX
|
|
|
|
#define HOST_CPU CPU_MIPS
|
2015-07-25 06:16:53 +00:00
|
|
|
#elif defined(TARGET_IPHONE)
|
2014-02-07 02:58:27 +00:00
|
|
|
#define HOST_OS OS_DARWIN
|
|
|
|
#define HOST_CPU CPU_ARM
|
2015-08-05 19:04:17 +00:00
|
|
|
#elif defined(TARGET_OSX)
|
|
|
|
#define HOST_OS OS_DARWIN
|
2018-05-14 07:31:03 +00:00
|
|
|
#define HOST_CPU CPU_X86
|
2018-04-29 14:07:54 +00:00
|
|
|
#elif defined(TARGET_OSX_X64)
|
|
|
|
#define HOST_OS OS_DARWIN
|
|
|
|
#define HOST_CPU CPU_X64
|
2013-12-19 17:10:14 +00:00
|
|
|
#else
|
|
|
|
#error Invalid Target: TARGET_* not defined
|
|
|
|
#endif
|
|
|
|
|
2015-07-25 06:16:53 +00:00
|
|
|
#if defined(TARGET_NO_REC)
|
|
|
|
#define FEAT_SHREC DYNAREC_NONE
|
|
|
|
#define FEAT_AREC DYNAREC_NONE
|
2015-07-25 06:39:35 +00:00
|
|
|
#define FEAT_DSPREC DYNAREC_NONE
|
2015-07-25 06:16:53 +00:00
|
|
|
#endif
|
|
|
|
|
2015-07-25 07:08:20 +00:00
|
|
|
#if defined(TARGET_NO_AREC)
|
|
|
|
#define FEAT_SHREC DYNAREC_JIT
|
|
|
|
#define FEAT_AREC DYNAREC_NONE
|
|
|
|
#define FEAT_DSPREC DYNAREC_NONE
|
|
|
|
#endif
|
|
|
|
|
2015-07-25 06:16:53 +00:00
|
|
|
#if defined(TARGET_NO_JIT)
|
|
|
|
#define FEAT_SHREC DYNAREC_CPP
|
|
|
|
#define FEAT_AREC DYNAREC_NONE
|
2015-07-25 06:39:35 +00:00
|
|
|
#define FEAT_DSPREC DYNAREC_NONE
|
2015-07-25 06:16:53 +00:00
|
|
|
#endif
|
|
|
|
|
2019-04-12 20:59:39 +00:00
|
|
|
#endif // !CMAKE_BUILD
|
|
|
|
|
2015-02-16 22:48:44 +00:00
|
|
|
|
|
|
|
#if defined(TARGET_NO_NIXPROF)
|
|
|
|
#define FEAT_HAS_NIXPROF 0
|
|
|
|
#endif
|
|
|
|
|
2015-08-03 09:14:27 +00:00
|
|
|
#if defined(TARGET_NO_COREIO_HTTP)
|
|
|
|
#define FEAT_HAS_COREIO_HTTP 0
|
|
|
|
#endif
|
|
|
|
|
2015-07-25 06:16:53 +00:00
|
|
|
//defaults
|
2015-08-09 04:34:02 +00:00
|
|
|
|
2015-07-25 06:16:53 +00:00
|
|
|
#ifndef FEAT_SHREC
|
2015-07-25 06:39:35 +00:00
|
|
|
#define FEAT_SHREC DYNAREC_JIT
|
2015-07-25 06:16:53 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef FEAT_AREC
|
2019-01-23 20:14:51 +00:00
|
|
|
#if HOST_CPU == CPU_ARM || HOST_CPU == CPU_ARM64
|
2015-07-25 06:16:53 +00:00
|
|
|
#define FEAT_AREC DYNAREC_JIT
|
|
|
|
#else
|
|
|
|
#define FEAT_AREC DYNAREC_NONE
|
2014-03-24 22:12:30 +00:00
|
|
|
#endif
|
|
|
|
#endif
|
2015-07-25 06:16:53 +00:00
|
|
|
|
2015-07-25 06:39:35 +00:00
|
|
|
#ifndef FEAT_DSPREC
|
2020-02-26 17:38:05 +00:00
|
|
|
#if HOST_CPU == CPU_X86 || HOST_CPU == CPU_ARM64 || HOST_CPU == CPU_X64
|
2015-07-25 06:39:35 +00:00
|
|
|
#define FEAT_DSPREC DYNAREC_JIT
|
|
|
|
#else
|
|
|
|
#define FEAT_DSPREC DYNAREC_NONE
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
2015-02-16 22:48:44 +00:00
|
|
|
#ifndef FEAT_HAS_NIXPROF
|
2019-08-25 17:29:56 +00:00
|
|
|
#ifndef _WIN32
|
2015-02-16 22:48:44 +00:00
|
|
|
#define FEAT_HAS_NIXPROF 1
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
2015-08-03 09:14:27 +00:00
|
|
|
#ifndef FEAT_HAS_COREIO_HTTP
|
|
|
|
#define FEAT_HAS_COREIO_HTTP 1
|
|
|
|
#endif
|
|
|
|
|
2019-04-29 16:23:00 +00:00
|
|
|
#if HOST_CPU == CPU_X64 || HOST_CPU == CPU_ARM64
|
|
|
|
#define HOST_64BIT_CPU
|
|
|
|
#endif
|
|
|
|
|
2015-07-25 06:16:53 +00:00
|
|
|
//Depricated build configs
|
|
|
|
#ifdef HOST_NO_REC
|
2015-07-25 07:08:20 +00:00
|
|
|
#error Dont use HOST_NO_REC
|
2015-07-25 06:16:53 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef HOST_NO_AREC
|
2015-07-25 07:08:20 +00:00
|
|
|
#error Dont use HOST_NO_AREC
|
2015-09-29 01:17:26 +00:00
|
|
|
#endif
|
2019-03-28 10:41:48 +00:00
|
|
|
|
2019-04-12 20:59:39 +00:00
|
|
|
|
|
|
|
// Compiler Related
|
|
|
|
|
2019-08-25 16:39:44 +00:00
|
|
|
#ifndef _MSC_VER
|
2019-04-12 20:59:39 +00:00
|
|
|
#define ATTR_USED __attribute__((used))
|
|
|
|
#define ATTR_UNUSED __attribute__((used))
|
|
|
|
#else
|
|
|
|
#define ATTR_USED
|
|
|
|
#define ATTR_UNUSED
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
2019-05-12 20:02:57 +00:00
|
|
|
// Some restrictions on FEAT_NO_RWX_PAGES
|
|
|
|
#if defined(FEAT_NO_RWX_PAGES) && FEAT_SHREC == DYNAREC_JIT
|
|
|
|
#if HOST_CPU != CPU_X64 && HOST_CPU != CPU_ARM64
|
|
|
|
#error "FEAT_NO_RWX_PAGES Only implemented for X64 and ARMv8"
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
2019-04-12 20:59:39 +00:00
|
|
|
|
2019-03-28 10:41:48 +00:00
|
|
|
// TARGET PLATFORM
|
|
|
|
|
|
|
|
#define RAM_SIZE_MAX (32*1024*1024)
|
|
|
|
#define VRAM_SIZE_MAX (16*1024*1024)
|
|
|
|
#define ARAM_SIZE_MAX (8*1024*1024)
|
|
|
|
|
|
|
|
#define GD_CLOCK 33868800 //GDROM XTAL -- 768fs
|
|
|
|
|
|
|
|
#define AICA_CORE_CLOCK (GD_CLOCK*4/3) //[45158400] GD->PLL 3:4 -> AICA CORE -- 1024fs
|
|
|
|
#define ADAC_CLOCK (AICA_CORE_CLOCK/2) //[11289600] 44100*256, AICA CORE -> PLL 4:1 -> ADAC -- 256fs
|
|
|
|
#define AICA_ARM_CLOCK (AICA_CORE_CLOCK/2) //[22579200] AICA CORE -> PLL 2:1 -> ARM
|
|
|
|
#define AICA_SDRAM_CLOCK (GD_CLOCK*2) //[67737600] GD-> PLL 2 -> SDRAM
|
|
|
|
#define SH4_MAIN_CLOCK (200*1000*1000) //[200000000] XTal(13.5) -> PLL (33.3) -> PLL 1:6 (200)
|
|
|
|
#define SH4_RAM_CLOCK (100*1000*1000) //[100000000] XTal(13.5) -> PLL (33.3) -> PLL 1:3 (100) , also suplied to HOLLY chip
|
|
|
|
#define G2_BUS_CLOCK (25*1000*1000) //[25000000] from Holly, from SH4_RAM_CLOCK w/ 2 2:1 plls
|
|
|
|
|
2019-05-15 10:54:03 +00:00
|
|
|
#if defined(GLES) && !defined(GLES3)
|
|
|
|
// Only use GL ES 2.0 API functions
|
|
|
|
#define GLES2
|
|
|
|
#endif
|