mirror of
https://github.com/pezkuwichain/revive.git
synced 2026-06-14 18:01:05 +00:00
bb2f829361
Exposes the following PolkaVM specific options via the standard json interface: - Heap size - Stack size - Whether to emit source level debug information Additionally it is now forbidden to specify those as CLI option in standard JSON mode. They are bytecode altering options and having multiple ways to specify them creates unnecessary room for confusion: The standard JSON input description should be sufficient and succint for reproducible builds. Closes #290 --------- Signed-off-by: xermicus <bigcyrill@hotmail.com>
115 lines
6.4 KiB
Rust
115 lines
6.4 KiB
Rust
//! The LLVM context library.
|
|
|
|
use std::ffi::CString;
|
|
use std::sync::OnceLock;
|
|
|
|
pub use self::debug_config::ir_type::IRType as DebugConfigIR;
|
|
pub use self::debug_config::DebugConfig;
|
|
pub use self::optimizer::settings::size_level::SizeLevel as OptimizerSettingsSizeLevel;
|
|
pub use self::optimizer::settings::Settings as OptimizerSettings;
|
|
pub use self::optimizer::Optimizer;
|
|
pub use self::polkavm::build_assembly_text as polkavm_build_assembly_text;
|
|
pub use self::polkavm::context::address_space::AddressSpace as PolkaVMAddressSpace;
|
|
pub use self::polkavm::context::argument::Argument as PolkaVMArgument;
|
|
pub use self::polkavm::context::attribute::Attribute as PolkaVMAttribute;
|
|
pub use self::polkavm::context::build::Build as PolkaVMBuild;
|
|
pub use self::polkavm::context::code_type::CodeType as PolkaVMCodeType;
|
|
pub use self::polkavm::context::debug_info::DebugInfo;
|
|
pub use self::polkavm::context::function::declaration::Declaration as PolkaVMFunctionDeclaration;
|
|
pub use self::polkavm::context::function::intrinsics::Intrinsics as PolkaVMIntrinsicFunction;
|
|
pub use self::polkavm::context::function::llvm_runtime::LLVMRuntime as PolkaVMLLVMRuntime;
|
|
pub use self::polkavm::context::function::r#return::Return as PolkaVMFunctionReturn;
|
|
pub use self::polkavm::context::function::runtime::arithmetics::Division as PolkaVMDivisionFunction;
|
|
pub use self::polkavm::context::function::runtime::arithmetics::Remainder as PolkaVMRemainderFunction;
|
|
pub use self::polkavm::context::function::runtime::arithmetics::SignedDivision as PolkaVMSignedDivisionFunction;
|
|
pub use self::polkavm::context::function::runtime::arithmetics::SignedRemainder as PolkaVMSignedRemainderFunction;
|
|
pub use self::polkavm::context::function::runtime::deploy_code::DeployCode as PolkaVMDeployCodeFunction;
|
|
pub use self::polkavm::context::function::runtime::entry::Entry as PolkaVMEntryFunction;
|
|
pub use self::polkavm::context::function::runtime::revive::Exit as PolkaVMExitFunction;
|
|
pub use self::polkavm::context::function::runtime::revive::WordToPointer as PolkaVMWordToPointerFunction;
|
|
pub use self::polkavm::context::function::runtime::runtime_code::RuntimeCode as PolkaVMRuntimeCodeFunction;
|
|
pub use self::polkavm::context::function::runtime::sbrk::Sbrk as PolkaVMSbrkFunction;
|
|
pub use self::polkavm::context::function::runtime::FUNCTION_DEPLOY_CODE as PolkaVMFunctionDeployCode;
|
|
pub use self::polkavm::context::function::runtime::FUNCTION_ENTRY as PolkaVMFunctionEntry;
|
|
pub use self::polkavm::context::function::runtime::FUNCTION_RUNTIME_CODE as PolkaVMFunctionRuntimeCode;
|
|
pub use self::polkavm::context::function::yul_data::YulData as PolkaVMFunctionYulData;
|
|
pub use self::polkavm::context::function::Function as PolkaVMFunction;
|
|
pub use self::polkavm::context::global::Global as PolkaVMGlobal;
|
|
pub use self::polkavm::context::pointer::heap::LoadWord as PolkaVMLoadHeapWordFunction;
|
|
pub use self::polkavm::context::pointer::heap::StoreWord as PolkaVMStoreHeapWordFunction;
|
|
pub use self::polkavm::context::pointer::storage::LoadTransientWord as PolkaVMLoadTransientStorageWordFunction;
|
|
pub use self::polkavm::context::pointer::storage::LoadWord as PolkaVMLoadStorageWordFunction;
|
|
pub use self::polkavm::context::pointer::storage::StoreTransientWord as PolkaVMStoreTransientStorageWordFunction;
|
|
pub use self::polkavm::context::pointer::storage::StoreWord as PolkaVMStoreStorageWordFunction;
|
|
pub use self::polkavm::context::pointer::Pointer as PolkaVMPointer;
|
|
pub use self::polkavm::context::r#loop::Loop as PolkaVMLoop;
|
|
pub use self::polkavm::context::solidity_data::SolidityData as PolkaVMContextSolidityData;
|
|
pub use self::polkavm::context::yul_data::YulData as PolkaVMContextYulData;
|
|
pub use self::polkavm::context::Context as PolkaVMContext;
|
|
pub use self::polkavm::evm::arithmetic as polkavm_evm_arithmetic;
|
|
pub use self::polkavm::evm::bitwise as polkavm_evm_bitwise;
|
|
pub use self::polkavm::evm::call as polkavm_evm_call;
|
|
pub use self::polkavm::evm::calldata as polkavm_evm_calldata;
|
|
pub use self::polkavm::evm::comparison as polkavm_evm_comparison;
|
|
pub use self::polkavm::evm::context as polkavm_evm_contract_context;
|
|
pub use self::polkavm::evm::create as polkavm_evm_create;
|
|
pub use self::polkavm::evm::crypto as polkavm_evm_crypto;
|
|
pub use self::polkavm::evm::ether_gas as polkavm_evm_ether_gas;
|
|
pub use self::polkavm::evm::event as polkavm_evm_event;
|
|
pub use self::polkavm::evm::event::EventLog as PolkaVMEventLogFunction;
|
|
pub use self::polkavm::evm::ext_code as polkavm_evm_ext_code;
|
|
pub use self::polkavm::evm::immutable as polkavm_evm_immutable;
|
|
pub use self::polkavm::evm::immutable::Load as PolkaVMLoadImmutableDataFunction;
|
|
pub use self::polkavm::evm::immutable::Store as PolkaVMStoreImmutableDataFunction;
|
|
pub use self::polkavm::evm::math as polkavm_evm_math;
|
|
pub use self::polkavm::evm::memory as polkavm_evm_memory;
|
|
pub use self::polkavm::evm::r#return as polkavm_evm_return;
|
|
pub use self::polkavm::evm::return_data as polkavm_evm_return_data;
|
|
pub use self::polkavm::evm::storage as polkavm_evm_storage;
|
|
pub use self::polkavm::r#const as polkavm_const;
|
|
pub use self::polkavm::Dependency as PolkaVMDependency;
|
|
pub use self::polkavm::DummyDependency as PolkaVMDummyDependency;
|
|
pub use self::polkavm::DummyLLVMWritable as PolkaVMDummyLLVMWritable;
|
|
pub use self::polkavm::WriteLLVM as PolkaVMWriteLLVM;
|
|
pub use self::target_machine::target::Target;
|
|
pub use self::target_machine::TargetMachine;
|
|
|
|
pub(crate) mod debug_config;
|
|
pub(crate) mod optimizer;
|
|
pub(crate) mod polkavm;
|
|
pub(crate) mod target_machine;
|
|
|
|
static DID_INITIALIZE: OnceLock<()> = OnceLock::new();
|
|
|
|
/// Initializes the LLVM compiler backend.
|
|
///
|
|
/// This is a no-op if called subsequentially.
|
|
///
|
|
/// `llvm_arguments` are passed as-is to the LLVM CL options parser.
|
|
pub fn initialize_llvm(target: Target, name: &str, llvm_arguments: &[String]) {
|
|
let Ok(_) = DID_INITIALIZE.set(()) else {
|
|
return; // Tests don't go through a recursive process
|
|
};
|
|
|
|
let argv = [name.to_string()]
|
|
.iter()
|
|
.chain(llvm_arguments)
|
|
.map(|arg| CString::new(arg.as_bytes()).unwrap())
|
|
.collect::<Vec<_>>();
|
|
let argv: Vec<*const libc::c_char> = argv.iter().map(|arg| arg.as_ptr()).collect();
|
|
let overview = CString::new("").unwrap();
|
|
unsafe {
|
|
inkwell::llvm_sys::support::LLVMParseCommandLineOptions(
|
|
argv.len() as i32,
|
|
argv.as_ptr(),
|
|
overview.as_ptr(),
|
|
);
|
|
}
|
|
|
|
inkwell::support::enable_llvm_pretty_stack_trace();
|
|
|
|
match target {
|
|
Target::PVM => inkwell::targets::Target::initialize_riscv(&Default::default()),
|
|
}
|
|
}
|