annotate gcc/d/dmd/mars.h @ 145:1830386684a0

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