blob: e2236a1af26f6d6fc659ba1f8bdbb1837b162b73 [file]
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
option(CELIX_RUST_EXPERIMENTAL "Enable experimental rust bundle" OFF)
if (CELIX_RUST_EXPERIMENTAL)
include(FetchContent)
FetchContent_Declare(
Corrosion
GIT_REPOSITORY https://github.com/corrosion-rs/corrosion.git
GIT_TAG v0.4.2
)
FetchContent_MakeAvailable(Corrosion)
#Prepare a list of include paths needed to generating bindings for the Apache Celix C API
file(GENERATE
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/include_paths.txt"
CONTENT "$<TARGET_PROPERTY:framework,INTERFACE_INCLUDE_DIRECTORIES>;$<TARGET_PROPERTY:utils,INTERFACE_INCLUDE_DIRECTORIES>"
)
corrosion_import_crate(MANIFEST_PATH Cargo.toml)
corrosion_add_target_local_rustflags(rust_bundle_activator "-Cprefer-dynamic")
corrosion_link_libraries(rust_bundle_activator Celix::framework)
#Note corrosion_import_crate import creates a rust_bundle_activator CMake target, but this is a INTERFACE target.
#Using the INTERFACE_LINK_LIBRARIES property we can get the actual target.
get_target_property(ACTUAL_LIB_TARGET rust_bundle_activator INTERFACE_LINK_LIBRARIES)
add_celix_bundle(rust_bundle ACTIVATOR ${ACTUAL_LIB_TARGET})
add_dependencies(rust_bundle rust_bundle_activator)
add_celix_container(rust_container
NO_COPY
BUNDLES
Celix::shell
Celix::shell_tui
rust_bundle
)
endif ()