Skip to content

Commit

Permalink
use cargo workspace
Browse files Browse the repository at this point in the history
This reduces the build time a little bit.
  • Loading branch information
Be-ing committed Jul 24, 2022
1 parent eae14e7 commit 0d985af
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 16 deletions.
29 changes: 15 additions & 14 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -125,9 +125,9 @@ find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Gui REQUIRED)

if(CMAKE_BUILD_TYPE STREQUAL "Release")
set(CARGO_BUILD_TYPE "--release")
set(CARGO_TARGET_DIR "target/release")
set(CARGO_BUILD_TYPE_DIR "release")
else()
set(CARGO_TARGET_DIR "target/debug")
set(CARGO_BUILD_TYPE_DIR "debug")
endif()

# FIXME: cxx's build.rs fails without this.
Expand All @@ -136,24 +136,25 @@ if(APPLE)
set(ENV{SDKROOT} ${CMAKE_OSX_SYSROOT})
endif()

message(STATUS "Building C++ code generator")
message(STATUS "Building C++ code generator and generating C++ library")
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS cxx-qt-lib)
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS cxx-qt-cli)
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS cxx-qt-gen)
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS cxx-qt-build)
execute_process(
COMMAND ${CMAKE_COMMAND} -E env "SDKROOT=${CMAKE_OSX_SYSROOT}" cargo build ${CARGO_BUILD_TYPE}
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/cxx-qt-cli"
)
set(CXXQTBRIDGE_EXECUTABLE "${CMAKE_CURRENT_SOURCE_DIR}/cxx-qt-cli/${CARGO_TARGET_DIR}/cxxqtbridge${EXE_SUFFIX}")

message(STATUS "Generating cxxqt C++ library")
# Regenerate C++ library whenever any files in cxx-qt-lib change
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS cxx-qt-lib)
set(CARGO_TARGET_DIR "${CMAKE_BINARY_DIR}/cargo")
set(CXXQT_CPP_LIB_GENERATED_DIR "${CMAKE_CURRENT_BINARY_DIR}/cxx-qt-cpplib")
execute_process(
COMMAND ${CMAKE_COMMAND} -E env "CXX_QT_LIB_OUT_DIR=${CXXQT_CPP_LIB_GENERATED_DIR}" cargo build ${CARGO_BUILD_TYPE}
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/cxx-qt-lib"
COMMAND ${CMAKE_COMMAND} -E env
"CARGO_TARGET_DIR=${CARGO_TARGET_DIR}"
"SDKROOT=${CMAKE_OSX_SYSROOT}"
"CXX_QT_LIB_OUT_DIR=${CXXQT_CPP_LIB_GENERATED_DIR}"
cargo build ${CARGO_BUILD_TYPE}
--manifest-path "${CMAKE_CURRENT_SOURCE_DIR}/Cargo.toml"
--package cxx-qt-cli
--package cxx-qt-lib
)
set(CXXQTBRIDGE_EXECUTABLE "${CARGO_TARGET_DIR}/${CARGO_BUILD_TYPE_DIR}/cxxqtbridge${EXE_SUFFIX}")

add_subdirectory(${CXXQT_CPP_LIB_GENERATED_DIR})

# This is extremely hacky, but such is CMake. The find_package calls
Expand Down
22 changes: 22 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# SPDX-FileCopyrightText: 2021 Klarälvdalens Datakonsult AB, a KDAB Group company <[email protected]>
# SPDX-FileContributor: Be Wilson <[email protected]>
#
# SPDX-License-Identifier: MIT OR Apache-2.0

[workspace]
members = [
"cxx-qt",
"cxx-qt-build",
"cxx-qt-cli",
"cxx-qt-gen",

"examples/demo_threading",
"examples/qml_extension_plugin/core",
"examples/qml_features",
"examples/qml_minimal",
"examples/qml_with_threaded_logic",

"tests/basic_cxx_only",
"tests/basic_cxx_qt",
"tests/qt_types_standalone",
]
8 changes: 7 additions & 1 deletion cxx-qt-lib/CxxQt.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,12 @@ function(cxx_qt_create_target)
if(APPLE)
set(ENV{SDKROOT} ${CMAKE_OSX_SYSROOT})
endif()
corrosion_import_crate(MANIFEST_PATH ${CXXQT_MANIFEST_PATH})

# corrosion_import_crate cannot be called multiple times within
# one project.
list(GET CXXQT_CRATES 0 CORROSION_TARGET)
if(NOT TARGET ${CORROSION_TARGET})
corrosion_import_crate(MANIFEST_PATH ${CXXQT_MANIFEST_PATH})
endif()
target_link_libraries(${CXXQT_TARGET} INTERFACE ${CXXQT_CRATES})
endfunction()
1 change: 0 additions & 1 deletion tests/basic_cxx_only/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ target_include_directories(${APP_NAME} PRIVATE
"${CXXQTBRIDGE_OUTPUT_DIR}/include"
)

corrosion_import_crate(MANIFEST_PATH Cargo.toml)
target_link_libraries(${APP_NAME} PRIVATE basic-cxx-only)

target_include_directories(${APP_NAME} PRIVATE include)
Expand Down

0 comments on commit 0d985af

Please sign in to comment.