diff --git a/cmake/QskBuildFunctions.cmake b/cmake/QskBuildFunctions.cmake index ca679293..ebc20a23 100644 --- a/cmake/QskBuildFunctions.cmake +++ b/cmake/QskBuildFunctions.cmake @@ -47,10 +47,16 @@ function(qsk_add_plugin target TYPE CLASS_NAME) # So for the moment better don't do: # qt6_add_plugin(${target} SHARED ${CLASS_NAME} ) - if(QT_VERSION_MAJOR VERSION_GREATER_EQUAL 6) - qt6_add_library(${target} SHARED ) + if(BUILD_QSKDLL) + set(library_type SHARED) else() - add_library(${target} SHARED ) + set(library_type STATIC) + endif() + + if(QT_VERSION_MAJOR VERSION_GREATER_EQUAL 6) + qt6_add_library(${target} ${library_type}) + else() + add_library(${target} ${library_type}) endif() set_target_properties(${target} PROPERTIES @@ -118,4 +124,10 @@ function(qsk_add_shaders target) qt6_add_shaders( ${target} "qskshaders" BATCHABLE PRECOMPILE QUIET PREFIX "/qskinny/shaders" ${ARGV} OUTPUTS ${outfiles} ) + # pass on OUTPUT_TARGETS to the caller of this function + cmake_parse_arguments(PARSE_ARGV 1 arg "" "OUTPUT_TARGETS" "") + if (arg_OUTPUT_TARGETS) + set(${arg_OUTPUT_TARGETS} ${${arg_OUTPUT_TARGETS}} PARENT_SCOPE) + endif() + endfunction() diff --git a/qmlexport/CMakeLists.txt b/qmlexport/CMakeLists.txt index e1b78483..f0ea7541 100644 --- a/qmlexport/CMakeLists.txt +++ b/qmlexport/CMakeLists.txt @@ -17,7 +17,12 @@ set(SOURCES QskQml.cpp) set(target qskqmlexport) -qsk_add_library(${target} SHARED ${SOURCES} ${HEADERS}) + +if(BUILD_QSKDLL) + qsk_add_library(${target} SHARED ${SOURCES} ${HEADERS}) +else() + qsk_add_library(${target} STATIC ${SOURCES} ${HEADERS}) +endif() target_link_libraries(${target} PRIVATE qskinny) target_include_directories(${target} PUBLIC diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 87f89b12..29aca47d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -482,17 +482,14 @@ set(target qskinny) if(BUILD_QSKDLL) qsk_add_library(${target} SHARED ${SOURCES} ${HEADERS} ${PRIVATE_HEADERS}) + target_compile_definitions(${target} PUBLIC QSK_DLL ) + set_target_properties(${target} PROPERTIES DEFINE_SYMBOL QSK_MAKEDLL) else() qsk_add_library(${target} STATIC ${SOURCES} ${HEADERS} ${PRIVATE_HEADERS}) endif() -if(BUILD_QSKDLL) - target_compile_definitions(${target} PUBLIC QSK_DLL ) - set_target_properties(${target} PROPERTIES DEFINE_SYMBOL QSK_MAKEDLL) -endif() - if (QT_VERSION_MAJOR VERSION_GREATER_EQUAL 6) - qsk_add_shaders( ${target} FILES ${SHADERS} ) + qsk_add_shaders( ${target} FILES ${SHADERS} OUTPUT_TARGETS shader_target) endif() target_include_directories(${target} PUBLIC @@ -542,8 +539,14 @@ set_target_properties(${target} PROPERTIES # packaging set(PACKAGE_NAME ${PROJECT_NAME}) +set(exported_targets ${target}) +if(NOT BUILD_QSKDLL) + list(APPEND exported_targets ${shader_target}) +endif() + + # setup destination file paths for qskinny target -install(TARGETS ${target} EXPORT ${PACKAGE_NAME}Targets +install(TARGETS ${exported_targets} EXPORT ${PACKAGE_NAME}Targets LIBRARY DESTINATION ${QSK_INSTALL_LIBS} ARCHIVE DESTINATION ${QSK_INSTALL_LIBS} RUNTIME DESTINATION ${QSK_INSTALL_LIBS} diff --git a/src/common/QskMetaFunction.cpp b/src/common/QskMetaFunction.cpp index 9b3bea0d..45f7e7cb 100644 --- a/src/common/QskMetaFunction.cpp +++ b/src/common/QskMetaFunction.cpp @@ -7,7 +7,9 @@ #include #include +#if QT_CONFIG(thread) #include +#endif #include QSK_QT_PRIVATE_BEGIN @@ -188,6 +190,8 @@ void QskMetaFunction::invoke( QObject* object, ? Qt::QueuedConnection : Qt::DirectConnection; } + const auto argc = parameterCount() + 1; // return value + arguments + switch ( invokeType ) { case Qt::DirectConnection: @@ -206,10 +210,13 @@ void QskMetaFunction::invoke( QObject* object, #if QT_CONFIG(thread) QSemaphore semaphore; -#endif auto event = new QMetaCallEvent( m_functionCall, nullptr, 0, argv, &semaphore ); +#else + auto event = new QMetaCallEvent( + m_functionCall, nullptr, 0, argc ); +#endif QCoreApplication::postEvent( receiver, event ); @@ -224,8 +231,6 @@ void QskMetaFunction::invoke( QObject* object, if ( receiver.isNull() ) return; - const auto argc = parameterCount() + 1; // return value + arguments - auto event = new QMetaCallEvent( m_functionCall, nullptr, 0, argc ); auto types = event->types(); diff --git a/src/common/QskMetaInvokable.cpp b/src/common/QskMetaInvokable.cpp index 64c118f0..27828c3b 100644 --- a/src/common/QskMetaInvokable.cpp +++ b/src/common/QskMetaInvokable.cpp @@ -9,7 +9,9 @@ #include #include #include +#if QT_CONFIG(thread) #include +#endif #include QSK_QT_PRIVATE_BEGIN @@ -163,6 +165,12 @@ static void qskInvokeMetaCall( ? Qt::QueuedConnection : Qt::DirectConnection; } +#if 1 + // should be doable without QMetaMethod. TODO ... + const auto method = metaObject->method( offset + index ); +#endif + const int argc = method.parameterCount() + 1; + switch ( invokeType ) { case Qt::DirectConnection: @@ -194,11 +202,15 @@ static void qskInvokeMetaCall( #if QT_CONFIG(thread) QSemaphore semaphore; -#endif auto event = new MetaCallEvent( call, metaObject, offset, index, args, &semaphore ); +#else + auto event = new MetaCallEvent( call, metaObject, + offset, index, argc ); +#endif + QCoreApplication::postEvent( receiver, event ); #if QT_CONFIG(thread) @@ -216,12 +228,6 @@ static void qskInvokeMetaCall( if ( call == QMetaObject::InvokeMetaMethod ) { -#if 1 - // should be doable without QMetaMethod. TODO ... - const auto method = metaObject->method( offset + index ); -#endif - const int argc = method.parameterCount() + 1; - event = new MetaCallEvent( call, metaObject, offset, index, argc ); /* diff --git a/src/nodes/QskTreeNode.cpp b/src/nodes/QskTreeNode.cpp index a3f70f23..82f4c5eb 100644 --- a/src/nodes/QskTreeNode.cpp +++ b/src/nodes/QskTreeNode.cpp @@ -5,7 +5,7 @@ #include "QskTreeNode.h" -static constexpr auto extraFlag = +static const auto extraFlag = static_cast< QSGNode::Flag >( QSGNode::IsVisitableNode << 1 ); static inline QSGNode* qskCheckedNode( const QSGNode* node, QSGNode::NodeType type )