145
|
1
|
|
2 /* Compiler implementation of the D programming language
|
|
3 * Copyright (C) 1999-2019 by The D Language Foundation, All Rights Reserved
|
|
4 * written by Walter Bright
|
|
5 * http://www.digitalmars.com
|
|
6 * Distributed under the Boost Software License, Version 1.0.
|
|
7 * http://www.boost.org/LICENSE_1_0.txt
|
|
8 * https://github.com/dlang/dmd/blob/master/src/dmd/mars.h
|
|
9 */
|
|
10
|
|
11 #pragma once
|
|
12
|
|
13 /*
|
|
14 It is very important to use version control macros correctly - the
|
|
15 idea is that host and target are independent. If these are done
|
|
16 correctly, cross compilers can be built.
|
|
17 The host compiler and host operating system are also different,
|
|
18 and are predefined by the host compiler. The ones used in
|
|
19 dmd are:
|
|
20
|
|
21 Macros defined by the compiler, not the code:
|
|
22
|
|
23 Compiler:
|
|
24 __DMC__ Digital Mars compiler
|
|
25 _MSC_VER Microsoft compiler
|
|
26 __GNUC__ Gnu compiler
|
|
27 __clang__ Clang compiler
|
|
28
|
|
29 Host operating system:
|
|
30 _WIN32 Microsoft NT, Windows 95, Windows 98, Win32s,
|
|
31 Windows 2000, Win XP, Vista
|
|
32 _WIN64 Windows for AMD64
|
|
33 __linux__ Linux
|
|
34 __APPLE__ Mac OSX
|
|
35 __FreeBSD__ FreeBSD
|
|
36 __OpenBSD__ OpenBSD
|
|
37 __sun Solaris, OpenSolaris, SunOS, OpenIndiana, etc
|
|
38
|
|
39 For the target systems, there are the target operating system and
|
|
40 the target object file format:
|
|
41
|
|
42 Target operating system:
|
|
43 TARGET_WINDOS Covers 32 bit windows and 64 bit windows
|
|
44 TARGET_LINUX Covers 32 and 64 bit linux
|
|
45 TARGET_OSX Covers 32 and 64 bit Mac OSX
|
|
46 TARGET_FREEBSD Covers 32 and 64 bit FreeBSD
|
|
47 TARGET_OPENBSD Covers 32 and 64 bit OpenBSD
|
|
48 TARGET_SOLARIS Covers 32 and 64 bit Solaris
|
|
49
|
|
50 It is expected that the compiler for each platform will be able
|
|
51 to generate 32 and 64 bit code from the same compiler binary.
|
|
52
|
|
53 There are currently no macros for byte endianness order.
|
|
54 */
|
|
55
|
|
56
|
|
57 #include "root/dsystem.h"
|
|
58
|
|
59 #ifdef __DMC__
|
|
60 #ifdef DEBUG
|
|
61 #undef assert
|
|
62 #define assert(e) (static_cast<void>((e) || (printf("assert %s(%d) %s\n", __FILE__, __LINE__, #e), halt())))
|
|
63 #endif
|
|
64 #endif
|
|
65
|
|
66 void unittests();
|
|
67
|
|
68 struct OutBuffer;
|
|
69
|
|
70 #include "globals.h"
|
|
71
|
|
72 #include "root/ctfloat.h"
|
|
73
|
|
74 #include "complex_t.h"
|
|
75
|
|
76 #include "errors.h"
|
|
77
|
|
78 class Dsymbol;
|
|
79 class Library;
|
|
80 struct File;
|
|
81 void obj_start(char *srcfile);
|
|
82 void obj_end(Library *library, File *objfile);
|
|
83 void obj_append(Dsymbol *s);
|
|
84 void obj_write_deferred(Library *library);
|
|
85
|
|
86 /// Utility functions used by both main and frontend.
|
|
87 void readFile(Loc loc, File *f);
|
|
88 void writeFile(Loc loc, File *f);
|
|
89 void ensurePathToNameExists(Loc loc, const char *name);
|
|
90
|
|
91 const char *importHint(const char *s);
|
|
92 /// Little helper function for writing out deps.
|
|
93 void escapePath(OutBuffer *buf, const char *fname);
|