Go to the documentation of this file.
26 #include <sys/types.h>
29 #if !defined(_MSC_VER)
49 #define LTO_API_VERSION 29
136 const char* target_triple_prefix);
162 const char* target_triple_prefix);
238 size_t map_size, off_t offset);
312 unsigned int *out_cputype,
313 unsigned int *out_cpusubtype);
574 const char *
const *,
int number);
709 const char *identifier,
const char *data,
783 const char *save_temps_dir);
794 const char *save_temps_dir);
886 const char *cache_dir);
921 unsigned expiration);
932 unsigned max_size_bytes);
942 unsigned max_size_megabytes);
951 unsigned max_size_files);
struct LLVMOpaqueLTOModule * lto_module_t
opaque reference to a loaded object module
lto_code_gen_t lto_codegen_create(void)
Instantiates a code generator.
@ LTO_SYMBOL_SCOPE_DEFAULT
lto_codegen_diagnostic_severity_t
Diagnostic severity.
@ LTO_SYMBOL_SCOPE_PROTECTED
const char *const * lto_runtime_lib_symbols_list(size_t *size)
Returns the list of libcall symbols that can be generated by LTO that might not be visible from the s...
const char * lto_module_get_symbol_name(lto_module_t mod, unsigned int index)
Returns the name of the ith symbol in the object module.
@ LTO_SYMBOL_DEFINITION_TENTATIVE
const void * lto_codegen_compile_optimized(lto_code_gen_t cg, size_t *length)
Generates code for the optimized merged module into one native object file.
void lto_codegen_set_diagnostic_handler(lto_code_gen_t, lto_diagnostic_handler_t, void *)
Set a diagnostic handler and the related context (void *).
void lto_codegen_set_should_internalize(lto_code_gen_t cg, lto_bool_t ShouldInternalize)
Sets if we should run internalize pass during optimization and code generation.
unsigned int thinlto_module_get_num_objects(thinlto_code_gen_t cg)
Returns the number of object files produced by the ThinLTO CodeGenerator.
void lto_codegen_debug_options_array(lto_code_gen_t cg, const char *const *, int number)
Same as the previous function, but takes every option separately through an array.
lto_module_t lto_module_create_in_local_context(const void *mem, size_t length, const char *path)
Loads an object file in its own context.
void thinlto_debug_options(const char *const *options, int number)
Parse -mllvm style debug options.
lto_bool_t lto_module_is_object_file_in_memory(const void *mem, size_t length)
Checks if a buffer is a loadable object file.
lto_module_t lto_module_create(const char *path)
Loads an object file from disk.
lto_symbol_attributes lto_module_get_symbol_attribute(lto_module_t mod, unsigned int index)
Returns the attributes of the ith symbol in the object module.
lto_bool_t lto_module_is_thinlto(lto_module_t mod)
Test if a module has support for ThinLTO linking.
lto_bool_t lto_module_is_object_file_in_memory_for_target(const void *mem, size_t length, const char *target_triple_prefix)
Checks if a buffer is a loadable object compiled for requested target.
const char * thinlto_module_get_object_file(thinlto_code_gen_t cg, unsigned int index)
Returns the path to the ith object file produced by the ThinLTO CodeGenerator.
@ LTO_SYMBOL_PERMISSIONS_MASK
void thinlto_codegen_dispose(thinlto_code_gen_t cg)
Frees the generator and all memory it internally allocated.
void lto_input_dispose(lto_input_t input)
Frees all memory internally allocated by the LTO input file.
void lto_codegen_set_module(lto_code_gen_t cg, lto_module_t mod)
Sets the object module for code generation.
lto_module_t lto_module_create_from_fd_at_offset(int fd, const char *path, size_t file_size, size_t map_size, off_t offset)
Loads an object file from disk.
void lto_codegen_set_assembler_args(lto_code_gen_t cg, const char **args, int nargs)
Sets extra arguments that libLTO should pass to the assembler.
void lto_codegen_set_assembler_path(lto_code_gen_t cg, const char *path)
Sets the location of the assembler tool to run.
lto_module_t lto_module_create_in_codegen_context(const void *mem, size_t length, const char *path, lto_code_gen_t cg)
Loads an object file in the codegen context.
@ LTO_SYMBOL_DEFINITION_WEAKUNDEF
@ LTO_SYMBOL_PERMISSIONS_RODATA
thinlto_code_gen_t thinlto_create_codegen(void)
Instantiates a ThinLTO code generator.
const void * lto_codegen_compile(lto_code_gen_t cg, size_t *length)
Generates code for all added modules into one native object file.
void thinlto_codegen_set_cache_size_megabytes(thinlto_code_gen_t cg, unsigned max_size_megabytes)
Same as thinlto_codegen_set_cache_size_bytes, except the maximum size is in megabytes (2^20 bytes).
unsigned int lto_module_get_num_symbols(lto_module_t mod)
Returns the number of symbols in the object module.
lto_bool_t lto_module_is_object_file_for_target(const char *path, const char *target_triple_prefix)
Checks if a file is a loadable object compiled for requested target.
void thinlto_codegen_add_module(thinlto_code_gen_t cg, const char *identifier, const char *data, int length)
Add a module to a ThinLTO code generator.
lto_bool_t lto_codegen_set_pic_model(lto_code_gen_t cg, lto_codegen_model)
Sets which PIC code model to generated.
struct LLVMOpaqueThinLTOCodeGenerator * thinlto_code_gen_t
opaque reference to a thin code generator
lto_input_t lto_input_create(const void *buffer, size_t buffer_size, const char *path)
Creates an LTO input file from a buffer.
@ LTO_SYMBOL_DEFINITION_UNDEFINED
The initial backend is deliberately restricted to z10 We should add support for later architectures at some point If an asm ties an i32 r result to an i64 input
void lto_codegen_set_should_embed_uselists(lto_code_gen_t cg, lto_bool_t ShouldEmbedUselists)
Set whether to embed uselists in bitcode.
@ LTO_SYMBOL_SCOPE_DEFAULT_CAN_BE_HIDDEN
@ LTO_CODEGEN_PIC_MODEL_DYNAMIC_NO_PIC
lto_bool_t lto_codegen_compile_to_file(lto_code_gen_t cg, const char **name)
Generates code for all added modules into one native object file.
unsigned int thinlto_module_get_num_object_files(thinlto_code_gen_t cg)
Returns the number of object files produced by the ThinLTO CodeGenerator.
void lto_module_set_target_triple(lto_module_t mod, const char *triple)
Sets triple string with which the object will be codegened.
void thinlto_set_generated_objects_dir(thinlto_code_gen_t cg, const char *save_temps_dir)
Set the path to a directory where to save generated object files.
void thinlto_codegen_process(thinlto_code_gen_t cg)
Optimize and codegen all the modules added to the codegenerator using ThinLTO.
void thinlto_codegen_set_cache_entry_expiration(thinlto_code_gen_t cg, unsigned expiration)
Sets the expiration (in seconds) for an entry in the cache.
struct LLVMOpaqueLTOInput * lto_input_t
Opaque reference to an LTO input file.
unsigned int lto_api_version(void)
Returns the runtime API version.
void thinlto_codegen_set_savetemps_dir(thinlto_code_gen_t cg, const char *save_temps_dir)
Sets the path to a directory to use as a storage for temporary bitcode files.
lto_module_t lto_module_create_from_memory_with_path(const void *mem, size_t length, const char *path)
Loads an object file from memory with an extra path argument.
struct LLVMOpaqueLTOCodeGenerator * lto_code_gen_t
opaque reference to a code generator
lto_module_t lto_module_create_from_memory(const void *mem, size_t length)
Loads an object file from memory.
lto_bool_t thinlto_codegen_set_pic_model(thinlto_code_gen_t cg, lto_codegen_model)
Sets which PIC code model to generate.
@ LTO_SYMBOL_DEFINITION_MASK
const LLVM_C_EXTERN_C_BEGIN char * lto_get_version(void)
Returns a printable string.
const char * lto_input_get_dependent_library(lto_input_t input, size_t index, size_t *size)
Returns the ith dependent library specifier for the given LTO input file.
@ LTO_SYMBOL_DEFINITION_WEAK
void(* lto_diagnostic_handler_t)(lto_codegen_diagnostic_severity_t severity, const char *diag, void *ctxt)
Diagnostic handler type.
@ LTO_SYMBOL_DEFINITION_REGULAR
void thinlto_codegen_set_codegen_only(thinlto_code_gen_t cg, lto_bool_t codegen_only)
Perform CodeGen only: disable all other stages.
void lto_codegen_debug_options(lto_code_gen_t cg, const char *)
Sets options to help debug codegen bugs.
lto_bool_t lto_module_has_ctor_dtor(lto_module_t mod)
This function can be used by the linker to check if a given module has any constructor or destructor ...
lto_code_gen_t lto_codegen_create_in_local_context(void)
Instantiate a code generator in its own context.
const char * lto_get_error_message(void)
Returns the last error string or NULL if last operation was successful.
void lto_set_debug_options(const char *const *options, int number)
Parses options immediately, making them available as early as possible.
LTOObjectBuffer thinlto_module_get_object(thinlto_code_gen_t cg, unsigned int index)
Returns a reference to the ith object file produced by the ThinLTO CodeGenerator.
lto_bool_t lto_module_is_object_file(const char *path)
Checks if a file is a loadable object file.
lto_bool_t lto_codegen_optimize(lto_code_gen_t cg)
Runs optimization for the merged module.
lto_bool_t lto_module_has_objc_category(const void *mem, size_t length)
Return true if Buffer contains a bitcode file with ObjC code (category or class) in it.
void thinlto_codegen_disable_codegen(thinlto_code_gen_t cg, lto_bool_t disable)
Disable CodeGen, only run the stages till codegen and stop.
#define LLVM_C_EXTERN_C_END
@ LTO_SYMBOL_SCOPE_INTERNAL
lto_module_t lto_module_create_from_fd(int fd, const char *path, size_t file_size)
Loads an object file from disk.
@ LTO_CODEGEN_PIC_MODEL_STATIC
void lto_codegen_set_cpu(lto_code_gen_t cg, const char *cpu)
Sets the cpu to generate code for.
const char * lto_module_get_linkeropts(lto_module_t mod)
Returns the module's linker options.
void lto_initialize_disassembler(void)
Initializes LLVM disassemblers.
Type to wrap a single object returned by ThinLTO.
@ LTO_SYMBOL_SCOPE_HIDDEN
lto_bool_t lto_codegen_set_debug_model(lto_code_gen_t cg, lto_debug_model)
Sets if debug info should be generated.
The object format emitted by the WebAssembly backed is documented see the home and packaging for producing WebAssembly applications that can run in browsers and other environments wasi sdk provides a more minimal C C SDK based on llvm and a libc based on for producing WebAssemmbly applictions that use the WASI ABI Rust provides WebAssembly support integrated into Cargo There are two main options
lto_bool_t lto_codegen_add_module(lto_code_gen_t cg, lto_module_t mod)
Add an object module to the set of modules for which code will be generated.
@ LTO_CODEGEN_PIC_MODEL_DYNAMIC
void thinlto_codegen_set_cache_pruning_interval(thinlto_code_gen_t cg, int interval)
Sets the cache pruning interval (in seconds).
void lto_codegen_add_must_preserve_symbol(lto_code_gen_t cg, const char *symbol)
Adds to a list of all global symbols that must exist in the final generated code.
@ LTO_SYMBOL_ALIGNMENT_MASK
#define LLVM_C_EXTERN_C_BEGIN
lto_bool_t lto_module_get_macho_cputype(lto_module_t mod, unsigned int *out_cputype, unsigned int *out_cpusubtype)
If targeting mach-o on darwin, this function gets the CPU type and subtype that will end up being enc...
@ LTO_CODEGEN_PIC_MODEL_DEFAULT
void thinlto_codegen_set_final_cache_size_relative_to_available_space(thinlto_code_gen_t cg, unsigned percentage)
Sets the maximum cache size that can be persistent across build, in terms of percentage of the availa...
void thinlto_codegen_set_cache_size_files(thinlto_code_gen_t cg, unsigned max_size_files)
Sets the maximum number of files in the cache directory.
@ LTO_SYMBOL_PERMISSIONS_DATA
void thinlto_codegen_add_cross_referenced_symbol(thinlto_code_gen_t cg, const char *name, int length)
Adds a symbol to the list of global symbols that are cross-referenced between ThinLTO files.
lto_bool_t lto_codegen_write_merged_modules(lto_code_gen_t cg, const char *path)
Writes a new object file at the specified path that contains the merged contents of all modules added...
std::error_code file_size(const Twine &Path, uint64_t &Result)
Get file size.
unsigned lto_input_get_num_dependent_libraries(lto_input_t input)
Returns the number of dependent library specifiers for the given LTO input file.
void thinlto_codegen_set_cache_dir(thinlto_code_gen_t cg, const char *cache_dir)
Sets the path to a directory to use as a cache storage for incremental build.
void lto_codegen_dispose(lto_code_gen_t)
Frees all code generator and all memory it internally allocated.
void thinlto_codegen_set_cache_size_bytes(thinlto_code_gen_t cg, unsigned max_size_bytes)
Sets the maximum size of the cache directory (in bytes).
void thinlto_codegen_set_cpu(thinlto_code_gen_t cg, const char *cpu)
Sets the cpu to generate code for.
void lto_module_dispose(lto_module_t mod)
Frees all memory internally allocated by the module.
void thinlto_codegen_add_must_preserve_symbol(thinlto_code_gen_t cg, const char *name, int length)
Adds a symbol to the list of global symbols that must exist in the final generated code.
@ LTO_SYMBOL_PERMISSIONS_CODE
const char * lto_module_get_target_triple(lto_module_t mod)
Returns triple string which the object module was compiled under.