Skip to content

Commit ddd60fa

Browse files
authored
fix(evm): linker interfaces (#319)
1 parent bc9c0fb commit ddd60fa

5 files changed

Lines changed: 77 additions & 48 deletions

File tree

.gitmodules

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[submodule "llvm"]
22
path = llvm
33
url = https://github.com/matter-labs/era-compiler-llvm
4-
branch = v2.0.0
4+
branch = main
55
update = none

Cargo.lock

Lines changed: 59 additions & 36 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

era-compiler-solidity/src/build_evm/contract/object.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -143,15 +143,18 @@ impl Object {
143143
&mut self,
144144
linker_symbols: &BTreeMap<String, [u8; era_compiler_common::BYTE_LENGTH_ETH_ADDRESS]>,
145145
) -> anyhow::Result<()> {
146-
let memory_buffer = inkwell::memory_buffer::MemoryBuffer::create_from_memory_range(
146+
let bytecode_buffer = inkwell::memory_buffer::MemoryBuffer::create_from_memory_range(
147147
self.bytecode.as_slice(),
148148
self.identifier.as_str(),
149149
false,
150150
);
151151

152-
let (linked_object, object_format) =
153-
era_compiler_llvm_context::evm_link(memory_buffer, linker_symbols)?;
154-
self.format = object_format;
152+
let linked_object = era_compiler_llvm_context::evm_link(bytecode_buffer, linker_symbols)?;
153+
self.format = if linked_object.is_elf_evm() {
154+
era_compiler_common::ObjectFormat::ELF
155+
} else {
156+
era_compiler_common::ObjectFormat::Raw
157+
};
155158

156159
self.bytecode = linked_object.as_slice().to_owned();
157160
Ok(())

era-compiler-solidity/src/project/contract/mod.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,8 @@ impl Contract {
338338
.map_err(|error| {
339339
anyhow::anyhow!("{runtime_code_segment} code LLVM IR generator: {error}")
340340
})?;
341-
let runtime_build = runtime_context.build(false, true)?;
341+
let runtime_build =
342+
runtime_context.build(false, true, unlinked_libraries.clone())?;
342343
let runtime_object = EVMContractObject::new(
343344
runtime_code_identifier,
344345
self.name.clone(),
@@ -378,7 +379,7 @@ impl Contract {
378379
.map_err(|error| {
379380
anyhow::anyhow!("{deploy_code_segment} code LLVM IR generator: {error}")
380381
})?;
381-
let deploy_build = deploy_context.build(false, true)?;
382+
let deploy_build = deploy_context.build(false, true, unlinked_libraries.clone())?;
382383
let deploy_object = EVMContractObject::new(
383384
deploy_code_identifier,
384385
self.name.clone(),
@@ -435,7 +436,8 @@ impl Contract {
435436
.map_err(|error| {
436437
anyhow::anyhow!("{runtime_code_segment} code LLVM IR generator: {error}")
437438
})?;
438-
let runtime_build = runtime_context.build(false, true)?;
439+
let runtime_build =
440+
runtime_context.build(false, true, unlinked_libraries.clone())?;
439441
let runtime_object = EVMContractObject::new(
440442
runtime_code_identifier,
441443
self.name.clone(),
@@ -471,7 +473,7 @@ impl Contract {
471473
.map_err(|error| {
472474
anyhow::anyhow!("{deploy_code_segment} code LLVM IR generator: {error}")
473475
})?;
474-
let deploy_build = deploy_context.build(false, true)?;
476+
let deploy_build = deploy_context.build(false, true, unlinked_libraries.clone())?;
475477
let deploy_object = EVMContractObject::new(
476478
deploy_code_identifier,
477479
self.name.clone(),
@@ -538,7 +540,8 @@ impl Contract {
538540
optimizer.clone(),
539541
debug_config.clone(),
540542
);
541-
let runtime_build = runtime_context.build(false, true)?;
543+
let runtime_build =
544+
runtime_context.build(false, true, unlinked_libraries.clone())?;
542545
let runtime_object = EVMContractObject::new(
543546
runtime_code_identifier,
544547
self.name.clone(),
@@ -564,7 +567,7 @@ impl Contract {
564567
optimizer,
565568
debug_config,
566569
);
567-
let deploy_build = deploy_context.build(false, true)?;
570+
let deploy_build = deploy_context.build(false, true, unlinked_libraries.clone())?;
568571
let deploy_object = EVMContractObject::new(
569572
deploy_code_identifier,
570573
self.name.clone(),

0 commit comments

Comments
 (0)