Mercurial > projects > ddmd
view dmd/Macro.d @ 99:903b95002d4e
Id and Macro are quite experimental currently
author | Trass3r |
---|---|
date | Tue, 31 Aug 2010 04:04:33 +0200 |
parents | 10317f0c89a5 |
children | e28b18c23469 |
line wrap: on
line source
module dmd.Macro; struct Macro /// ??? { } /** It is very important to use version control macros correctly - the idea is that host and target are independent. If these are done correctly, cross compilers can be built. The host compiler and host operating system are also different, and are predefined by the host compiler. The ones used in dmd are: Macros defined by the compiler, not the code: Compiler: __DMC__ Digital Mars compiler _MSC_VER Microsoft compiler __GNUC__ Gnu compiler Host operating system: _WIN32 Microsoft NT, Windows 95, Windows 98, Win32s, Windows 2000, Win XP, Vista _WIN64 Windows for AMD64 linux Linux __APPLE__ Mac OSX __FreeBSD__ FreeBSD __sun&&__SVR4 Solaris, OpenSolaris (yes, both macros are necessary) For the target systems, there are the target operating system and the target object file format: Target operating system: TARGET_WINDOS Covers 32 bit windows and 64 bit windows TARGET_LINUX Covers 32 and 64 bit linux TARGET_OSX Covers 32 and 64 bit Mac OSX TARGET_FREEBSD Covers 32 and 64 bit FreeBSD TARGET_SOLARIS Covers 32 and 64 bit Solaris TARGET_NET Covers .Net It is expected that the compiler for each platform will be able to generate 32 and 64 bit code from the same compiler binary. Target object module format: OMFOBJ Intel Object Module Format, used on Windows ELFOBJ Elf Object Module Format, used on linux, FreeBSD and Solaris MACHOBJ Mach-O Object Module Format, used on Mac OSX There are currently no macros for byte endianness order. */ //version definitions from mars.h version(IN_GCC) // Changes for the GDC compiler by David Friedman { static assert(false, "GDC not supported"); } // default to DMDV2 version(DMDV1) {} else version = DMDV2; // Version 2.0 features version = BREAKABI; // 0 if not ready to break the ABI just yet version(DMDV2) { version = STRUCTTHISREF; // if 'this' for struct is a reference, not a pointer version = SNAN_DEFAULT_INIT;// if floats are default initialized to signalling NaN version = SARRAYVALUE; // static arrays are value types } // Set if C++ mangling is done by the front end version(DMDV2) { version(POSIX) // TARGET_LINUX || TARGET_OSX || TARGET_FREEBSD || TARGET_SOLARIS version = CPP_MANGLE; } /* Other targets are TARGET_LINUX, TARGET_OSX, TARGET_FREEBSD and * TARGET_SOLARIS, which are * set on the command line via the compiler makefile. */ version(_WIN32) { version = TARGET_WINDOS; // Windows dmd generates Windows targets version = OMFOBJ; } version(TARGET_LINUX) version = ELFOBJ; version(TARGET_FREEBSD) version = ELFOBJ; version(TARGET_SOLARIS) version = ELFOBJ; version(TARGET_OSX) version = MACHOBJ; /* TODO: //Modify OutBuffer::writewchar to write the correct size of wchar #if _WIN32 #define writewchar writeword #else //This needs a configuration test... #define writewchar write4 #endif #define INTERFACE_OFFSET 0 // if 1, put classinfo as first entry //in interface vtbl[]'s #define INTERFACE_VIRTUAL 0 // 1 means if an interface appears //in the inheritance graph multiple //times, only one is used */