| 1 | #ifndef LIBTCC_H |
| 2 | #define LIBTCC_H |
| 3 | |
| 4 | #ifndef LIBTCCAPI |
| 5 | # define LIBTCCAPI |
| 6 | #endif |
| 7 | |
| 8 | #ifdef __cplusplus |
| 9 | extern "C" { |
| 10 | #endif |
| 11 | |
| 12 | struct TCCState; |
| 13 | |
| 14 | typedef struct TCCState TCCState; |
| 15 | |
| 16 | typedef void (*TCCErrorFunc)(void *opaque, const char *msg); |
| 17 | |
| 18 | /* create a new TCC compilation context */ |
| 19 | LIBTCCAPI TCCState *tcc_new(void); |
| 20 | |
| 21 | /* free a TCC compilation context */ |
| 22 | LIBTCCAPI void tcc_delete(TCCState *s); |
| 23 | |
| 24 | /* set CONFIG_TCCDIR at runtime */ |
| 25 | LIBTCCAPI void tcc_set_lib_path(TCCState *s, const char *path); |
| 26 | |
| 27 | /* set error/warning display callback */ |
| 28 | LIBTCCAPI void tcc_set_error_func(TCCState *s, void *error_opaque, TCCErrorFunc error_func); |
| 29 | |
| 30 | /* return error/warning callback */ |
| 31 | LIBTCCAPI TCCErrorFunc tcc_get_error_func(TCCState *s); |
| 32 | |
| 33 | /* return error/warning callback opaque pointer */ |
| 34 | LIBTCCAPI void *tcc_get_error_opaque(TCCState *s); |
| 35 | |
| 36 | /* set options as from command line (multiple supported) */ |
| 37 | LIBTCCAPI void tcc_set_options(TCCState *s, const char *str); |
| 38 | |
| 39 | /*****************************/ |
| 40 | /* preprocessor */ |
| 41 | |
| 42 | /* add include path */ |
| 43 | LIBTCCAPI int tcc_add_include_path(TCCState *s, const char *pathname); |
| 44 | |
| 45 | /* add in system include path */ |
| 46 | LIBTCCAPI int tcc_add_sysinclude_path(TCCState *s, const char *pathname); |
| 47 | |
| 48 | /* define preprocessor symbol 'sym'. value can be NULL, sym can be "sym=val" */ |
| 49 | LIBTCCAPI void tcc_define_symbol(TCCState *s, const char *sym, const char *value); |
| 50 | |
| 51 | /* undefine preprocess symbol 'sym' */ |
| 52 | LIBTCCAPI void tcc_undefine_symbol(TCCState *s, const char *sym); |
| 53 | |
| 54 | /*****************************/ |
| 55 | /* compiling */ |
| 56 | |
| 57 | /* add a file (C file, dll, object, library, ld script). Return -1 if error. */ |
| 58 | LIBTCCAPI int tcc_add_file(TCCState *s, const char *filename); |
| 59 | |
| 60 | /* compile a string containing a C source. Return -1 if error. */ |
| 61 | LIBTCCAPI int tcc_compile_string(TCCState *s, const char *buf); |
| 62 | |
| 63 | /*****************************/ |
| 64 | /* linking commands */ |
| 65 | |
| 66 | /* set output type. MUST BE CALLED before any compilation */ |
| 67 | LIBTCCAPI int tcc_set_output_type(TCCState *s, int output_type); |
| 68 | #define TCC_OUTPUT_MEMORY 1 /* output will be run in memory (default) */ |
| 69 | #define TCC_OUTPUT_EXE 2 /* executable file */ |
| 70 | #define TCC_OUTPUT_DLL 3 /* dynamic library */ |
| 71 | #define TCC_OUTPUT_OBJ 4 /* object file */ |
| 72 | #define TCC_OUTPUT_PREPROCESS 5 /* only preprocess (used internally) */ |
| 73 | |
| 74 | /* equivalent to -Lpath option */ |
| 75 | LIBTCCAPI int tcc_add_library_path(TCCState *s, const char *pathname); |
| 76 | |
| 77 | /* the library name is the same as the argument of the '-l' option */ |
| 78 | LIBTCCAPI int tcc_add_library(TCCState *s, const char *libraryname); |
| 79 | |
| 80 | /* add a symbol to the compiled program */ |
| 81 | LIBTCCAPI int tcc_add_symbol(TCCState *s, const char *name, const void *val); |
| 82 | |
| 83 | /* output an executable, library or object file. DO NOT call |
| 84 | tcc_relocate() before. */ |
| 85 | LIBTCCAPI int tcc_output_file(TCCState *s, const char *filename); |
| 86 | |
| 87 | /* link and run main() function and return its value. DO NOT call |
| 88 | tcc_relocate() before. */ |
| 89 | LIBTCCAPI int tcc_run(TCCState *s, int argc, char **argv); |
| 90 | |
| 91 | /* do all relocations (needed before using tcc_get_symbol()) */ |
| 92 | LIBTCCAPI int tcc_relocate(TCCState *s1, void *ptr); |
| 93 | /* possible values for 'ptr': |
| 94 | - TCC_RELOCATE_AUTO : Allocate and manage memory internally |
| 95 | - NULL : return required memory size for the step below |
| 96 | - memory address : copy code to memory passed by the caller |
| 97 | returns -1 if error. */ |
| 98 | #define TCC_RELOCATE_AUTO (void*)1 |
| 99 | |
| 100 | /* return symbol value or NULL if not found */ |
| 101 | LIBTCCAPI void *tcc_get_symbol(TCCState *s, const char *name); |
| 102 | |
| 103 | /* return symbol value or NULL if not found */ |
| 104 | LIBTCCAPI void tcc_list_symbols(TCCState *s, void *ctx, |
| 105 | void (*symbol_cb)(void *ctx, const char *name, const void *val)); |
| 106 | |
| 107 | #ifdef __cplusplus |
| 108 | } |
| 109 | #endif |
| 110 | |
| 111 | #endif |
| 112 | |