Skip to content

Commit

Permalink
Restructure building the C API (#7341)
Browse files Browse the repository at this point in the history
This commit introduces a wrapper crate which is now the new "real" C
API. The purpose of this change is to enable using LTO when building the
C API. Currently LTO is disabled because one of the crate types of the C
API is an "rlib" which means that it can't have LTO performed due to
rustc limitations. The solution here is to remove the "cdylib" and
"staticlib" crate types from the "wasmtime-c-api" crate, rename that
crate to "wasmtime-c-api-impl", and reintroduce 'wasmtime-c-api' as a
new crate which wraps the previous crate and reexports it.

This way LTO can be enabled when just building the artifacts and the use
case from #6765 is still satisfied by having a crate that can be linked
to from Rust. Locally this reduces the size of the C API artifact for me
by nearly 1M.
  • Loading branch information
alexcrichton authored Oct 24, 2023
1 parent d9be6e1 commit 282edac
Show file tree
Hide file tree
Showing 6 changed files with 55 additions and 16 deletions.
7 changes: 7 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ members = [
"cranelift/isle/islec",
"cranelift/serde",
"crates/bench-api",
"crates/c-api",
"crates/c-api/artifact",
"crates/environ/fuzz",
"crates/test-programs",
"crates/wasi-preview1-component-adapter",
Expand Down
4 changes: 2 additions & 2 deletions crates/c-api/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ ExternalProject_Add(
CONFIGURE_COMMAND ""
INSTALL_COMMAND "${WASMTIME_INSTALL_COMMAND}"
BUILD_COMMAND ${WASMTIME_PREBUILD_COMMAND} ${WASMTIME_CARGO_BINARY} build ${WASMTIME_BUILD_TYPE_FLAG} ${WASMTIME_USER_CARGO_BUILD_OPTIONS} ${WASMTIME_BUILD_TARGET}
BINARY_DIR ${CMAKE_CURRENT_SOURCE_DIR}
BINARY_DIR ${CMAKE_CURRENT_SOURCE_DIR}/artifact
BUILD_ALWAYS ${WASMTIME_ALWAYS_BUILD}
BUILD_BYPRODUCTS ${WASMTIME_BUILD_PRODUCT})
add_library(wasmtime INTERFACE)
Expand Down Expand Up @@ -137,5 +137,5 @@ install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/wasm-c-api/include/wasm.h
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/wasmtime
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
install(FILES ${WASMTIME_BUILD_PRODUCT}
install(FILES ${WASMTIME_BUILD_PRODUCT}
DESTINATION ${CMAKE_INSTALL_LIBDIR})
15 changes: 2 additions & 13 deletions crates/c-api/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[package]
name = "wasmtime-c-api"
name = "wasmtime-c-api-impl"
version.workspace = true
authors.workspace = true
description = "C API to expose the Wasmtime runtime"
Expand All @@ -10,8 +10,7 @@ edition.workspace = true
publish = false

[lib]
name = "wasmtime"
crate-type = ["staticlib", "cdylib", "rlib"]
name = "wamstime_c_api"
doc = false
test = false
doctest = false
Expand All @@ -38,16 +37,6 @@ wasi-common = { workspace = true, optional = true }
futures = { workspace = true, optional = true }

[features]
default = [
'profiling',
'wat',
'wasi',
'cache',
'parallel-compilation',
'async',
'coredump',
'addr2line',
]
async = ['wasmtime/async', 'futures']
profiling = ["wasmtime/profiling"]
cache = ["wasmtime/cache"]
Expand Down
42 changes: 42 additions & 0 deletions crates/c-api/artifact/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
[package]
name = "wasmtime-c-api"
version.workspace = true
authors.workspace = true
description = "C API to expose the Wasmtime runtime"
license = "Apache-2.0 WITH LLVM-exception"
repository = "https://github.com/bytecodealliance/wasmtime"
readme = "README.md"
edition.workspace = true
publish = false

[lib]
name = "wasmtime"
crate-type = ["staticlib", "cdylib"]
doc = false
test = false
doctest = false

[dependencies]
wasmtime-c-api = { path = '..', package = 'wasmtime-c-api-impl' }

[features]
default = [
'profiling',
'wat',
'wasi',
'cache',
'parallel-compilation',
'async',
'coredump',
'addr2line',
]
async = ['wasmtime-c-api/async']
profiling = ["wasmtime-c-api/profiling"]
cache = ["wasmtime-c-api/cache"]
parallel-compilation = ['wasmtime-c-api/parallel-compilation']
wasi = ['wasmtime-c-api/wasi']
logging = ['wasmtime-c-api/logging']
disable-logging = ["wasmtime-c-api/disable-logging"]
coredump = ["wasmtime-c-api/coredump"]
addr2line = ["wasmtime-c-api/addr2line"]
wat = ["wasmtime-c-api/wat"]
1 change: 1 addition & 0 deletions crates/c-api/artifact/src/lib.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
pub use wasmtime_c_api::*;

0 comments on commit 282edac

Please sign in to comment.