| //===-- llvm/LinkTimeOptimizer.h - LTO Public C Interface -------*- C++ -*-===// | |
| // | |
| // The LLVM Compiler Infrastructure | |
| // | |
| // This file is distributed under the University of Illinois Open Source | |
| // License. See LICENSE.TXT for details. | |
| // | |
| //===----------------------------------------------------------------------===// | |
| // | |
| // This header provides a C API to use the LLVM link time optimization | |
| // library. This is intended to be used by linkers which are C-only in | |
| // their implementation for performing LTO. | |
| // | |
| //===----------------------------------------------------------------------===// | |
| #ifndef LLVM_C_LINKTIMEOPTIMIZER_H | |
| #define LLVM_C_LINKTIMEOPTIMIZER_H | |
| #ifdef __cplusplus | |
| extern "C" { | |
| #endif | |
| /** | |
| * @defgroup LLVMCLinkTimeOptimizer Link Time Optimization | |
| * @ingroup LLVMC | |
| * | |
| * @{ | |
| */ | |
| /// This provides a dummy type for pointers to the LTO object. | |
| typedef void* llvm_lto_t; | |
| /// This provides a C-visible enumerator to manage status codes. | |
| /// This should map exactly onto the C++ enumerator LTOStatus. | |
| typedef enum llvm_lto_status { | |
| LLVM_LTO_UNKNOWN, | |
| LLVM_LTO_OPT_SUCCESS, | |
| LLVM_LTO_READ_SUCCESS, | |
| LLVM_LTO_READ_FAILURE, | |
| LLVM_LTO_WRITE_FAILURE, | |
| LLVM_LTO_NO_TARGET, | |
| LLVM_LTO_NO_WORK, | |
| LLVM_LTO_MODULE_MERGE_FAILURE, | |
| LLVM_LTO_ASM_FAILURE, | |
| // Added C-specific error codes | |
| LLVM_LTO_NULL_OBJECT | |
| } llvm_lto_status_t; | |
| /// This provides C interface to initialize link time optimizer. This allows | |
| /// linker to use dlopen() interface to dynamically load LinkTimeOptimizer. | |
| /// extern "C" helps, because dlopen() interface uses name to find the symbol. | |
| extern llvm_lto_t llvm_create_optimizer(void); | |
| extern void llvm_destroy_optimizer(llvm_lto_t lto); | |
| extern llvm_lto_status_t llvm_read_object_file | |
| (llvm_lto_t lto, const char* input_filename); | |
| extern llvm_lto_status_t llvm_optimize_modules | |
| (llvm_lto_t lto, const char* output_filename); | |
| /** | |
| * @} | |
| */ | |
| #ifdef __cplusplus | |
| } | |
| #endif | |
| #endif |