diff --git a/demo/CMakeLists.txt b/demo/CMakeLists.txt index 9fc9571..d0fda46 100644 --- a/demo/CMakeLists.txt +++ b/demo/CMakeLists.txt @@ -1,58 +1,65 @@ set(CMAKE_AUTORCC ON) # generate c++ and rust code from bindings.json add_custom_command( OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/rust/src/interface.rs" "${CMAKE_CURRENT_SOURCE_DIR}/src/Bindings.h" # if the cpp file is marked GENERATED, CMake will not check it for moc # "${CMAKE_CURRENT_SOURCE_DIR}/src/Bindings.cpp" COMMAND ${RustQtBindingGenerator_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/bindings.json" DEPENDS rust_qt_binding_generator bindings.json ) +SET(RUST_DIR "${CMAKE_CURRENT_SOURCE_DIR}/rust") +if (MSVC) + SET(RUST_LIB "${RUST_DIR}/${RUST_TARGET_DIR}/rust.lib") +else() + SET(RUST_LIB "${RUST_DIR}/${RUST_TARGET_DIR}/librust.a") +endif() + # compile the rust code into a static library add_custom_command( - OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/rust/${RUST_TARGET_DIR}/librust.a" + OUTPUT "${RUST_LIB}" COMMAND ${Cargo_EXECUTABLE} build ${RUST_BUILD_FLAG} DEPENDS rust/src/lib.rs rust/src/implementation/mod.rs rust/src/implementation/time_series.rs rust/src/implementation/fibonacci.rs rust/src/implementation/processes.rs rust/src/interface.rs WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/rust" ) -add_custom_target(rust_target DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/rust/${RUST_TARGET_DIR}/librust.a") +add_custom_target(rust_target DEPENDS "${RUST_LIB}") -list(APPEND DemoLibs "${CMAKE_CURRENT_SOURCE_DIR}/rust/${RUST_TARGET_DIR}/librust.a") +list(APPEND DemoLibs "${RUST_LIB}") list(APPEND DemoLibs Qt5::Widgets Qt5::Svg Threads::Threads ${DL_LIBRARY}) if (Qt5Quick_FOUND) list(APPEND DemoLibs Qt5::Quick) endif() if (Qt5QuickControls2_FOUND) add_definitions(-DQTQUICKCONTROLS2) list(APPEND DemoLibs Qt5::QuickControls2) endif() if (Qt5Charts_FOUND) list(APPEND DemoLibs Qt5::Charts) endif() if (KF5Kirigami2_FOUND) add_definitions(-DKIRIGAMI2) endif() if (ECM_FOUND) ecm_create_qm_loader(Demo_QM_LOADER rqbgdemo_qt) endif() set(Demo_SRCS src/main.cpp src/Bindings.cpp src/SortedModel.cpp resource_file.qrc ${Demo_QM_LOADER}) add_executable(Demo ${Demo_SRCS}) add_dependencies(Demo rust_target) target_link_libraries(Demo ${DemoLibs}) set_target_properties(Demo PROPERTIES CXX_STANDARD 11 CXX_STANDARD_REQUIRED ON ) diff --git a/examples/todos/CMakeLists.txt b/examples/todos/CMakeLists.txt index 9a940af..8400542 100644 --- a/examples/todos/CMakeLists.txt +++ b/examples/todos/CMakeLists.txt @@ -1,72 +1,79 @@ project (my_rust_qt_quick_project) cmake_minimum_required(VERSION 3.10 FATAL_ERROR) cmake_policy(SET CMP0046 NEW) cmake_policy(SET CMP0063 NEW) cmake_policy(SET CMP0071 NEW) LIST(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") string(TOUPPER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_UPPER) if(CMAKE_BUILD_TYPE_UPPER STREQUAL DEBUG) set(RUST_TARGET_DIR target/debug/) set(RUST_BUILD_FLAG) else() set(RUST_TARGET_DIR target/release/) set(RUST_BUILD_FLAG --release) endif() ### find dependencies ### include(FeatureSummary) find_package(Cargo REQUIRED) find_package(Rust REQUIRED) set(CMAKE_THREAD_PREFER_PTHREAD TRUE) find_package(Threads REQUIRED) set(QT_MIN_VERSION "5.6.0") find_package(Qt5 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS Core Quick ) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) find_package(RustQtBindingGenerator REQUIRED) feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES) ### build commands ### SET(RUST_DIR "${CMAKE_CURRENT_SOURCE_DIR}/rust") -SET(RUST_LIB "${RUST_DIR}/${RUST_TARGET_DIR}/librust.a") +if (MSVC) + SET(RUST_LIB "${RUST_DIR}/${RUST_TARGET_DIR}/rust.lib") +else() + SET(RUST_LIB "${RUST_DIR}/${RUST_TARGET_DIR}/librust.a") +endif() # generate c++ and rust code from bindings.json add_custom_command( OUTPUT "${RUST_DIR}/src/interface.rs" "${CMAKE_CURRENT_SOURCE_DIR}/src/Bindings.h" "${CMAKE_CURRENT_SOURCE_DIR}/src/Bindings.cpp" COMMAND "${RustQtBindingGenerator_EXECUTABLE}" #--overwrite-implementation "${CMAKE_CURRENT_SOURCE_DIR}/bindings.json" DEPENDS bindings.json ) # compile the rust code into a static library add_custom_command( OUTPUT "${RUST_LIB}" COMMAND ${Cargo_EXECUTABLE} build ${RUST_BUILD_FLAG} DEPENDS rust/src/lib.rs rust/src/implementation.rs rust/src/interface.rs WORKING_DIRECTORY "${RUST_DIR}" ) add_custom_target(rust_target DEPENDS "${RUST_LIB}") list(APPEND Libs "${RUST_LIB}") +if (MSVC) + list(APPEND Libs WS2_32.LIB Userenv.lib) +endif() list(APPEND Libs Qt5::Core Qt5::Quick Threads::Threads ${CMAKE_DL_LIBS}) set(SRCS src/main.cpp src/Bindings.cpp "qml.qrc") add_executable(todos ${SRCS}) add_dependencies(todos rust_target) target_link_libraries(todos ${Libs}) set_target_properties(todos PROPERTIES CXX_STANDARD 11 CXX_STANDARD_REQUIRED ON ) diff --git a/templates/qt_quick/CMakeLists.txt b/templates/qt_quick/CMakeLists.txt index 092527b..68463a2 100644 --- a/templates/qt_quick/CMakeLists.txt +++ b/templates/qt_quick/CMakeLists.txt @@ -1,73 +1,77 @@ project (my_rust_qt_quick_project) cmake_minimum_required(VERSION 3.10 FATAL_ERROR) cmake_policy(SET CMP0046 NEW) cmake_policy(SET CMP0063 NEW) cmake_policy(SET CMP0071 NEW) LIST(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") string(TOUPPER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_UPPER) if(CMAKE_BUILD_TYPE_UPPER STREQUAL DEBUG) set(RUST_TARGET_DIR target/debug/) set(RUST_BUILD_FLAG) else() set(RUST_TARGET_DIR target/release/) set(RUST_BUILD_FLAG --release) endif() ### find dependencies ### include(FeatureSummary) find_package(Cargo REQUIRED) find_package(Rust REQUIRED) set(CMAKE_THREAD_PREFER_PTHREAD TRUE) find_package(Threads REQUIRED) set(QT_MIN_VERSION "5.6.0") find_package(Qt5 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS Core Quick ) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTORCC ON) find_package(RustQtBindingGenerator REQUIRED) feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES) ### build commands ### SET(RUST_DIR "${CMAKE_CURRENT_SOURCE_DIR}/rust") -SET(RUST_LIB "${RUST_DIR}/${RUST_TARGET_DIR}/librust.a") +if (MSVC) + SET(RUST_LIB "${RUST_DIR}/${RUST_TARGET_DIR}/rust.lib") +else() + SET(RUST_LIB "${RUST_DIR}/${RUST_TARGET_DIR}/librust.a") +endif() # generate c++ and rust code from bindings.json add_custom_command( OUTPUT "${RUST_DIR}/src/interface.rs" "${CMAKE_CURRENT_SOURCE_DIR}/src/Bindings.h" "${CMAKE_CURRENT_SOURCE_DIR}/src/Bindings.cpp" COMMAND "${RustQtBindingGenerator_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/bindings.json" DEPENDS bindings.json ) # compile the rust code into a static library add_custom_command( OUTPUT "${RUST_LIB}" COMMAND ${Cargo_EXECUTABLE} build ${RUST_BUILD_FLAG} DEPENDS rust/src/lib.rs rust/src/implementation.rs rust/src/interface.rs WORKING_DIRECTORY "${RUST_DIR}" ) add_custom_target(rust_target DEPENDS "${RUST_LIB}") list(APPEND Libs "${RUST_LIB}") list(APPEND Libs Qt5::Core Qt5::Quick Threads::Threads ${CMAKE_DL_LIBS}) set(SRCS src/main.cpp src/Bindings.cpp "qml.qrc") add_executable(MyExe ${SRCS}) add_dependencies(MyExe rust_target) target_link_libraries(MyExe ${Libs}) set_target_properties(MyExe PROPERTIES CXX_STANDARD 11 CXX_STANDARD_REQUIRED ON ) diff --git a/templates/qt_widgets/CMakeLists.txt b/templates/qt_widgets/CMakeLists.txt index 490a4a5..0bd5648 100644 --- a/templates/qt_widgets/CMakeLists.txt +++ b/templates/qt_widgets/CMakeLists.txt @@ -1,73 +1,77 @@ project (my_rust_qt_widgets_project) cmake_minimum_required(VERSION 3.10 FATAL_ERROR) cmake_policy(SET CMP0046 NEW) cmake_policy(SET CMP0063 NEW) cmake_policy(SET CMP0071 NEW) LIST(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") string(TOUPPER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_UPPER) if(CMAKE_BUILD_TYPE_UPPER STREQUAL DEBUG) set(RUST_TARGET_DIR target/debug/) set(RUST_BUILD_FLAG) else() set(RUST_TARGET_DIR target/release/) set(RUST_BUILD_FLAG --release) endif() ### find dependencies ### include(FeatureSummary) find_package(Cargo REQUIRED) find_package(Rust REQUIRED) set(CMAKE_THREAD_PREFER_PTHREAD TRUE) find_package(Threads REQUIRED) set(QT_MIN_VERSION "5.6.0") find_package(Qt5 ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS Widgets ) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTORCC ON) find_package(RustQtBindingGenerator REQUIRED) feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES) ### build commands ### SET(RUST_DIR "${CMAKE_CURRENT_SOURCE_DIR}/rust") -SET(RUST_LIB "${RUST_DIR}/${RUST_TARGET_DIR}/librust.a") +if (MSVC) + SET(RUST_LIB "${RUST_DIR}/${RUST_TARGET_DIR}/rust.lib") +else() + SET(RUST_LIB "${RUST_DIR}/${RUST_TARGET_DIR}/librust.a") +endif() # generate c++ and rust code from bindings.json add_custom_command( OUTPUT "${RUST_DIR}/src/interface.rs" "${CMAKE_CURRENT_SOURCE_DIR}/src/Bindings.h" "${CMAKE_CURRENT_SOURCE_DIR}/src/Bindings.cpp" COMMAND "${RustQtBindingGenerator_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/bindings.json" DEPENDS bindings.json ) # compile the rust code into a static library add_custom_command( OUTPUT "${RUST_LIB}" COMMAND ${Cargo_EXECUTABLE} build ${RUST_BUILD_FLAG} DEPENDS rust/src/lib.rs rust/src/implementation.rs rust/src/interface.rs WORKING_DIRECTORY "${RUST_DIR}" ) add_custom_target(rust_target DEPENDS "${RUST_LIB}") list(APPEND Libs "${RUST_LIB}") list(APPEND Libs Qt5::Widgets Threads::Threads ${CMAKE_DL_LIBS}) set(SRCS src/main.cpp src/Bindings.cpp) add_executable(MyExe ${SRCS}) add_dependencies(MyExe rust_target) target_link_libraries(MyExe ${Libs}) set_target_properties(MyExe PROPERTIES CXX_STANDARD 11 CXX_STANDARD_REQUIRED ON ) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index b34b41d..58a1004 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,66 +1,71 @@ set(GENERATOR "${RustQtBindingGenerator_EXECUTABLE}") include_directories("${CMAKE_CURRENT_BINARY_DIR}") add_custom_target("clean-rust") function(rust_test NAME DIRECTORY) set(SRC "${CMAKE_CURRENT_SOURCE_DIR}") set(DIR "${SRC}/${DIRECTORY}") + if (MSVC) + SET(RUST_LIB "${DIR}/${RUST_TARGET_DIR}/rust.lib") + else() + SET(RUST_LIB "${DIR}/${RUST_TARGET_DIR}/librust.a") + endif() set_property(SOURCE "${SRC}/${NAME}_rust.h" PROPERTY SKIP_AUTOGEN OFF) add_custom_command( OUTPUT "${DIR}/src/interface.rs" "${SRC}/${NAME}_rust.h" "${SRC}/${NAME}_rust.cpp" COMMAND "${GENERATOR}" "${SRC}/${NAME}.json" MAIN_DEPENDENCY "${NAME}.json" DEPENDS rust_qt_binding_generator ) add_custom_command( - OUTPUT "${DIR}/${RUST_TARGET_DIR}/librust.a" + OUTPUT "${RUST_LIB}" COMMAND ${Cargo_EXECUTABLE} build ${RUST_BUILD_FLAG} DEPENDS "${DIR}/src/lib.rs" "${DIR}/src/implementation.rs" "${DIR}/src/interface.rs" WORKING_DIRECTORY "${DIR}" ) add_custom_target("test_${DIRECTORY}" - DEPENDS "${DIR}/${RUST_TARGET_DIR}/librust.a") + DEPENDS "${RUST_LIB}") add_executable("${NAME}" "${NAME}.cpp" "${NAME}_rust.cpp" "${NAME}_rust.h") set_target_properties("${NAME}" PROPERTIES CXX_STANDARD 11 CXX_STANDARD_REQUIRED ON ) add_dependencies("${NAME}" "test_${DIRECTORY}") target_link_libraries("${NAME}" Qt5::Core Qt5::Test - "${DIR}/${RUST_TARGET_DIR}/librust.a" + "${RUST_LIB}" Threads::Threads ${DL_LIBRARY} ) add_test("build_${NAME}" "${CMAKE_COMMAND}" --build ${CMAKE_BINARY_DIR} --target "${NAME}") add_test("${NAME}" "${NAME}") set_tests_properties("${NAME}" PROPERTIES DEPENDS "build_${NAME}") add_custom_command( OUTPUT "clean_${NAME}" COMMAND ${Cargo_EXECUTABLE} clean WORKING_DIRECTORY "${DIR}" ) add_custom_target("clean-${NAME}" DEPENDS "clean_${NAME}") add_dependencies("clean-rust" "clean-${NAME}") endfunction(rust_test) rust_test(test_object rust_object) rust_test(test_object_types rust_object_types) rust_test(test_list rust_list) rust_test(test_list_types rust_list_types) rust_test(test_tree rust_tree) rust_test(test_objects rust_objects) rust_test(test_functions rust_functions)