| // Copyright 2009 The Go Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file. | |
| /* | |
| Godefs is a bootstrapping tool for porting the Go runtime to new systems. | |
| It translates C type declarations into C or Go type declarations | |
| with the same memory layout. | |
| Usage: godefs [-g package] [-c cc] [-f cc-arg]... [defs.c ...] | |
| Godefs takes as input a host-compilable C file that includes | |
| standard system headers. From that input file, it generates | |
| a standalone (no #includes) C or Go file containing equivalent | |
| definitions. | |
| The input to godefs is a C input file that can be compiled by | |
| the host system's standard C compiler (typically gcc). | |
| This file is expected to define new types and enumerated constants | |
| whose names begin with $ (a legal identifier character in gcc). | |
| Godefs compile the given input file with the host compiler and | |
| then parses the debug info embedded in the assembly output. | |
| This is far easier than reading system headers on most machines. | |
| The output from godefs is either C output intended for the | |
| Plan 9 C compiler tool chain (6c, 8c, or 5c) or Go output. | |
| The options are: | |
| -g package | |
| generate Go output using the given package name. | |
| In the Go output, struct fields have leading xx_ prefixes | |
| removed and the first character capitalized (exported). | |
| -c cc | |
| set the name of the host system's C compiler (default "gcc") | |
| -f cc-arg | |
| add cc-arg to the command line when invoking the system C compiler | |
| (for example, -f -m64 to invoke gcc -m64). | |
| Repeating this option adds multiple flags to the command line. | |
| For example, if this is x.c: | |
| #include <sys/stat.h> | |
| typedef struct timespec $Timespec; | |
| enum { | |
| $S_IFMT = S_IFMT, | |
| $S_IFIFO = S_IFIFO, | |
| $S_IFCHR = S_IFCHR, | |
| }; | |
| then "godefs x.c" generates: | |
| // godefs x.c | |
| // MACHINE GENERATED - DO NOT EDIT. | |
| // Constants | |
| enum { | |
| S_IFMT = 0xf000, | |
| S_IFIFO = 0x1000, | |
| S_IFCHR = 0x2000, | |
| }; | |
| // Types | |
| #pragma pack on | |
| typedef struct Timespec Timespec; | |
| struct Timespec { | |
| int64 tv_sec; | |
| int64 tv_nsec; | |
| }; | |
| #pragma pack off | |
| and "godefs -g MyPackage x.c" generates: | |
| // godefs -g MyPackage x.c | |
| // MACHINE GENERATED - DO NOT EDIT. | |
| package MyPackage | |
| // Constants | |
| const ( | |
| S_IFMT = 0xf000; | |
| S_IFIFO = 0x1000; | |
| S_IFCHR = 0x2000; | |
| ) | |
| // Types | |
| type Timespec struct { | |
| Sec int64; | |
| Nsec int64; | |
| } | |
| */ | |
| package documentation |