A Gcc Compiler Server A Gcc Compiler Server

Per Bothner

Apple Computer

<per@bothner.com>
<pbothner@apple.com>

May 2003
Classic compiler structure Slow compilation Re-reading header files Inter-module optimization This is work-in-progress Multi-input mode Server mode Initialization Re-using text, tokens, or trees? Dependencies and invalidation vs re-use Inconsistent header file use Extended one-definition rule Fragments cpplib fragment handling Remembering and restoring declarations Fragment/nesting overlap Non-nesting example
//  fragment 1
extern void F1(T1);

struct St {
  int value;
#ifdef __cplusplus
//  fragment 2
  int getValue() { return value; }
#endif
//  fragment 3
};

extern void F2(T2);
Handling non-nesting Other complications Preliminary results
  1. Multiple trivial identical C programs. Each just includes Carbon.h, which includes many of Apple's GUI headers.
    After initial compile, subsequent files 3 times as fast as without server.
  2. Compiling a mix of medium-sized gcc ,c is over 30% faster using client+server.
  3. Compiling 9 Tcl .c files yields similar speed-up.
Conclusion and status