tcc-stupidos/libtcc/include/libtcc.h

179 lines
No EOL
4 KiB
C

#ifndef LIBTCC_H
# define LIBTCC_H 1
# ifdef __cplusplus
extern "C" {
# endif /* __cplusplus */
typedef void *TCCReallocFunc(void *ptr, unsigned long size);
/**
* @brief set custom allocator for all allocations (optional), NULL for default.
*/
void tcc_set_realloc(TCCReallocFunc *my_realloc);
typedef struct TCCState TCCState;
/**
* @brief create a new TCC compilation context.
*/
TCCState *tcc_new(void);
/**
* @brief free a TCC compilation context.
*/
void tcc_delete(TCCState *s);
/**
* @brief set CONFIG_TCCDIR at runtime.
*/
void tcc_set_lib_path(TCCState *s, const char *path);
typedef void TCCErrorFunc(void *opaque, const char *msg);
/**
* @brief set error/warning callback (optional).
*/
void tcc_set_error_func(TCCState *s, void *error_opaque, TCCErrorFunc *error_func);
/**
* @brief set options as from command line (multiple supported)
*/
int tcc_set_options(TCCState *s, const char *str);
/**
* @defgroup preprocessor Preprocessor
* @{
*/
/**
* @brief add include path
*/
int tcc_add_include_path(TCCState *s, const char *pathname);
/**
* @brief add in system include path
*/
int tcc_add_sysinclude_path(TCCState *s, const char *pathname);
/**
* @brief define preprocessor symbol 'sym'. value can be NULL, sym can be "sym=val"
*/
void tcc_define_symbol(TCCState *s, const char *sym, const char *value);
/**
* @brief undefine preprocess symbol 'sym'
*/
void tcc_undefine_symbol(TCCState *s, const char *sym);
/**
* @}
*/
/**
* @defgroup compiling Compiling
* @{
*/
/**
* @brief add a file (C file, object, library, ld script). Return -1 if error.
*/
int tcc_add_file(TCCState *s, const char *filename);
/**
* @brief compile a string containing a C source. Return -1 if error.
*
* Tip: to have more specific errors/warnings from tcc_compile_string(),
* you can prefix the string with "#line <num> \"<filename>\"\n"
*/
int tcc_compile_string(TCCState *s, const char *buf);
/**
* @}
*/
/**
* @defgroup linking Linking commands
* @{
*/
# define TCC_OUTPUT_MEMORY 1 /** output will be run in memory */
# define TCC_OUTPUT_EXE 2 /** executable file */
# define TCC_OUTPUT_OBJ 3 /** object file */
# define TCC_OUTPUT_PREPROCESS 5 /** only preprocess */
/**
* @brief set output type. MUST BE CALLED before any compilation.
*/
int tcc_set_output_type(TCCState *s, int output_type);
/**
* @brief equivalent to -Lpath option.
*/
int tcc_add_library_path(TCCState *s, const char *pathname);
/**
* @brief the library name is the same as the argument of the '-l' option.
*/
int tcc_add_library(TCCState *s, const char *libraryname);
/**
* @brief add a symbol to the compiled program.
*/
int tcc_add_symbol(TCCState *s, const char *name, const void *val);
/**
* @brief output an executable, library or object file.
*
* DO NOT call tcc_relocate() before.
*/
int tcc_output_file(TCCState *s, const char *filename);
/**
* @brief do all relocations (needed before using tcc_get_symbol()).
*/
int tcc_relocate(TCCState *s1);
/**
* @brief return symbol value or NULL if not found.
*/
void *tcc_get_symbol(TCCState *s, const char *name);
typedef void (TCCSymbolFunc)(void *ctx, const char *name, const void *val);
/**
* @brief list all (global) symbols and their values via 'symbol_cb()'.
*/
void tcc_list_symbols(TCCState *s, void *ctx, TCCSymbolFunc *symbol_cb);
/**
* @}
*/
/**
* experimental/advanced section (see libtcc_test_mt.c for an example).
* @defgroup experimental Experimental/Advanced
* @{
*/
/**
* @brief catch runtime exceptions (optionally limit backtraces at top_func), when using tcc_set_options("-bt").
*/
void *_tcc_setjmp(TCCState *s1, void *jmp_buf, void *top_func, void *longjmp);
# define tcc_setjmp(s1,jb,f) setjmp(_tcc_setjmp(s1, jb, f, longjmp))
typedef int TCCBtFunc(void *udata, void *pc, const char *file, int line, const char* func, const char *msg);
/**
* @brief custom error printer for runtime exceptions. Returning 0 stops backtrace.
*/
void tcc_set_backtrace_func(TCCState *s1, void* userdata, TCCBtFunc*);
/**
* @}
*/
# ifdef __cplusplus
}
# endif /* __cplusplus */
#endif /* !TCC_H */