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
|
|
|
|
|
|
|
#define NO_MMU
|
|
|
|
|
2013-12-24 00:56:44 +00:00
|
|
|
#define DC_PLATFORM_MASK 7
|
|
|
|
#define DC_PLATFORM_NORMAL 0 /* Works, for the most part */
|
|
|
|
#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 */
|
|
|
|
#define DC_PLATFORM_ATOMISWAVE 4 /* Needs to be done, DC-like hardware with possibly more ram */
|
|
|
|
#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
|
|
|
|
|
|
|
|
|
|
|
#define DC_PLATFORM DC_PLATFORM_NORMAL
|
|
|
|
|
|
|
|
|
|
|
|
//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
|
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
|
2013-12-19 17:10:14 +00:00
|
|
|
|
|
|
|
//BUILD_COMPILER
|
2013-12-24 00:56:44 +00:00
|
|
|
#define COMPILER_VC 0x30000001
|
|
|
|
#define COMPILER_GCC 0x30000002
|
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
|
|
|
|
|
|
|
|
#if defined(_WIN32) && !defined(TARGET_WIN86) && !defined(TARGET_WIN64)
|
|
|
|
#if !defined(_M_AMD64)
|
|
|
|
#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
|
|
|
|
2014-12-09 21:09:51 +00:00
|
|
|
#ifdef __GNUC__
|
|
|
|
#define BUILD_COMPILER COMPILER_GCC
|
|
|
|
#else
|
|
|
|
#define BUILD_COMPILER COMPILER_VC
|
|
|
|
#endif
|
|
|
|
|
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
|
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-29 02:58:41 +00:00
|
|
|
#elif defined(TARGET_NACL32) || defined(TARGET_EMSCRIPTEN)
|
2013-12-19 17:10:14 +00:00
|
|
|
#define HOST_OS OS_LINUX
|
2015-07-29 02:58:41 +00:00
|
|
|
#define HOST_CPU CPU_GENERIC
|
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
|
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
|
|
|
|
|
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
|
|
|
|
#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
|
|
|
|
#if HOST_CPU == CPU_ARM || HOST_CPU == CPU_X86
|
|
|
|
#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
|
|
|
|
#if HOST_CPU == CPU_X86
|
|
|
|
#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
|
|
|
|
#if HOST_OS != OS_WINDOWS
|
|
|
|
#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
|
|
|
|
|
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-07-25 06:16:53 +00:00
|
|
|
#endif
|