]>
Commit | Line | Data |
---|---|---|
223e47cc LB |
1 | Design Of lib/System |
2 | ==================== | |
3 | ||
4 | The software in this directory is designed to completely shield LLVM from any | |
5 | and all operating system specific functionality. It is not intended to be a | |
6 | complete operating system wrapper (such as ACE), but only to provide the | |
7 | functionality necessary to support LLVM. | |
8 | ||
9 | The software located here, of necessity, has very specific and stringent design | |
10 | rules. Violation of these rules means that cracks in the shield could form and | |
11 | the primary goal of the library is defeated. By consistently using this library, | |
12 | LLVM becomes more easily ported to new platforms since the only thing requiring | |
13 | porting is this library. | |
14 | ||
15 | Complete documentation for the library can be found in the file: | |
16 | llvm/docs/SystemLibrary.html | |
17 | or at this URL: | |
18 | http://llvm.org/docs/SystemLibrary.html | |
19 | ||
20 | While we recommend that you read the more detailed documentation, for the | |
21 | impatient, here's a high level summary of the library's requirements. | |
22 | ||
23 | 1. No system header files are to be exposed through the interface. | |
24 | 2. Std C++ and Std C header files are okay to be exposed through the interface. | |
25 | 3. No exposed system-specific functions. | |
26 | 4. No exposed system-specific data. | |
27 | 5. Data in lib/System classes must use only simple C++ intrinsic types. | |
28 | 6. Errors are handled by returning "true" and setting an optional std::string | |
29 | 7. Library must not throw any exceptions, period. | |
30 | 8. Interface functions must not have throw() specifications. | |
31 | 9. No duplicate function impementations are permitted within an operating | |
32 | system class. | |
33 | ||
34 | To accomplish these requirements, the library has numerous design criteria that | |
35 | must be satisfied. Here's a high level summary of the library's design criteria: | |
36 | ||
37 | 1. No unused functionality (only what LLVM needs) | |
38 | 2. High-Level Interfaces | |
39 | 3. Use Opaque Classes | |
40 | 4. Common Implementations | |
41 | 5. Multiple Implementations | |
42 | 6. Minimize Memory Allocation | |
43 | 7. No Virtual Methods |