Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ macro(qsk_setup_options)
option(BUILD_EXAMPLES "Build qskinny examples" ON)
option(BUILD_PLAYGROUND "Build qskinny playground" ON)

option(BUILD_WITH_PRECOMPILED_HEADERS "Build qskinny with precompiled headers" ON)

# we actually want to use cmake_dependent_option - minimum cmake version ??

option( BUILD_SVG2QVG_STANDALONE "Build svg2qvg without qskinny library dependency" ON )
Expand Down Expand Up @@ -81,7 +83,7 @@ endmacro()
############################################################################

project(QSkinny
LANGUAGES C CXX
LANGUAGES C CXX
HOMEPAGE_URL "https://github.com/uwerat/qskinny"
VERSION 0.8.0)

Expand All @@ -103,6 +105,10 @@ qsk_setup_Qt()
qsk_setup_build()
qsk_setup_install()

if(BUILD_WITH_PRECOMPILED_HEADERS)
include("QskPreCompiledHeader")
endif()

add_subdirectory(src)
add_subdirectory(designsystems)

Expand Down
16 changes: 14 additions & 2 deletions cmake/QskBuildFunctions.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ function(qsk_add_executable target)
qt6_add_executable(${ARGV})

# we manually export our APIs to QML - might change in the future
set_target_properties(${target} PROPERTIES
set_target_properties(${target} PROPERTIES
QT_QML_MODULE_NO_IMPORT_SCAN 1)
else()
add_executable(${ARGV})
Expand All @@ -18,6 +18,9 @@ function(qsk_add_executable target)
set_target_properties(${target} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin )

if(BUILD_WITH_PRECOMPILED_HEADERS)
target_precompile_headers(${target} REUSE_FROM PCH)
endif()
endfunction()

function(qsk_add_library target)
Expand All @@ -31,6 +34,9 @@ function(qsk_add_library target)
set_target_properties(${target} PROPERTIES
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib )

if(BUILD_WITH_PRECOMPILED_HEADERS)
target_precompile_headers(${target} REUSE_FROM PCH)
endif()
endfunction()

function(qsk_add_plugin target TYPE CLASS_NAME)
Expand Down Expand Up @@ -79,6 +85,9 @@ function(qsk_add_plugin target TYPE CLASS_NAME)
set_target_properties(${target} PROPERTIES
INSTALL_RPATH "\${ORIGIN}/../../lib" )

if(BUILD_WITH_PRECOMPILED_HEADERS)
target_precompile_headers(${target} REUSE_FROM PCH)
endif()
endfunction()

function(qsk_add_example target)
Expand All @@ -105,9 +114,12 @@ function(qsk_add_example target)
target_link_libraries(${target} PRIVATE qskqmlexport)
endif()

# for examples with subdirectories
# for examples with subdirectories
target_include_directories(${target} PRIVATE ${CMAKE_CURRENT_LIST_DIR})

if(BUILD_WITH_PRECOMPILED_HEADERS)
target_precompile_headers(${target} REUSE_FROM PCH)
endif()
endfunction()

function(qsk_add_shaders target)
Expand Down
273 changes: 273 additions & 0 deletions cmake/QskPreCompiledHeader.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,273 @@
message(STATUS "Using precompiled headers")

# C Standard Library Headers
set(C_STANDARD_HEADERS
<cassert>
<cctype>
<cerrno>
<cfloat>
<cinttypes>
<climits>
<clocale>
<cmath>
<csetjmp>
<csignal>
<cstdarg>
<cstdbool>
<cstddef>
<cstdint>
<cstdio>
<cstdlib>
<cstring>
<ctime>
<cwchar>
<cwctype>
)

# C++ Standard Library Headers
set(CPLUSPLUS_STANDARD_HEADERS
<algorithm>
<array>
<atomic>
<bitset>
<chrono>
<codecvt>
<complex>
<condition_variable>
<deque>
<exception>
<execution>
<filesystem>
<forward_list>
<fstream>
<functional>
<future>
<initializer_list>
<iomanip>
<ios>
<iosfwd>
<iostream>
<istream>
<iterator>
<limits>
<list>
<locale>
<map>
<memory>
<mutex>
<new>
<numeric>
<optional>
<ostream>
<queue>
<random>
<ratio>
<regex>
<set>
<shared_mutex>
<sstream>
<stack>
<stdexcept>
<streambuf>
<string>
<string_view>
<strstream>
<system_error>
<thread>
<tuple>
<type_traits>
<typeindex>
<typeinfo>
<unordered_map>
<unordered_set>
<utility>
<valarray>
<variant>
<vector>
<version>
)

# C++20 Specific Headers
set(CPLUSPLUS20_HEADERS
<concepts>
<ranges>
<span>
<source_location>
<stop_token>
<synchronization>
<barrier>
<latch>
<semaphore>
)

set(QSK_QT_HEADERS
<QApplication>
<QBrush>
<QByteArray>
<QColor>
<QCoreApplication>
<QDebug>
<QDir>
<QDoubleValidator>
<QElapsedTimer>
<QEvent>
<QFile>
<QFont>
<QFontDatabase>
<QFontMetrics>
<QFontMetricsF>
<QGraphicsGridLayout>
<QGraphicsScene>
<QGraphicsView>
<QGraphicsWidget>
<QGridLayout>
<QGuiApplication>
<QImage>
<QKeySequence>
<QLabel>
<QLineF>
<QListWidget>
<QLocale>
<QMetaMethod>
<QMetaProperty>
<QMetaType>
<QObject>
<QPainter>
<QPainterPath>
<QPen>
<QPointer>
<QPolygonF>
<QQmlApplicationEngine>
<QQuickFramebufferObject>
<QQuickItem>
<QQuickWidget>
<QQuickWindow>
<QRectF>
<QSGFlatColorMaterial>
<QSGGeometryNode>
<QSGMaterialRhiShader>
<QSGNode>
<QSize>
<QStringList>
<QSvgRenderer>
<Qt>
<QThread>
<QTime>
<QTimer>
<QtMath>
<QtQml>
<QTransform>
<QUrl>
<QVariant>
<QVector>
<QWidget>
)

if(TRUE) # build break on gcc
list(REMOVE_ITEM CPLUSPLUS_STANDARD_HEADERS <execution>)
endif()

if(TRUE) # NOT TARGET Qt::Widgets
list(REMOVE_ITEM QSK_QT_HEADERS <QApplication>)
list(REMOVE_ITEM QSK_QT_HEADERS <QGraphicsWidget>)
list(REMOVE_ITEM QSK_QT_HEADERS <QGraphicsGridLayout>)
list(REMOVE_ITEM QSK_QT_HEADERS <QGraphicsScene>)
list(REMOVE_ITEM QSK_QT_HEADERS <QGraphicsView>)
list(REMOVE_ITEM QSK_QT_HEADERS <QGridLayout>)
list(REMOVE_ITEM QSK_QT_HEADERS <QLabel>)
list(REMOVE_ITEM QSK_QT_HEADERS <QListWidget>)
list(REMOVE_ITEM QSK_QT_HEADERS <QWidget>)
list(REMOVE_ITEM QSK_QT_HEADERS <QQuickWidget>)
endif()

if(NOT TARGET Qt::QuickWidgets)
list(REMOVE_ITEM QSK_QT_HEADERS <QQuickWidget>)
endif()

if(TRUE) # NOT TARGET Qt::Svg
list(REMOVE_ITEM QSK_QT_HEADERS <QSvgRenderer>)
endif()

if(TRUE) # NOT TARGET Qt::Qml
list(REMOVE_ITEM QSK_QT_HEADERS <QQmlApplicationEngine>)
endif()

if(TRUE) # NOT TARGET Qt::Quick
list(REMOVE_ITEM QSK_QT_HEADERS <QQuickFramebufferObject>)
endif()

if(QT_VERSION_MAJOR VERSION_GREATER_EQUAL 6)
list(REMOVE_ITEM QSK_QT_HEADERS <QSGMaterialRhiShader>)
endif()

set(ALL_STANDARD_HEADERS
${C_STANDARD_HEADERS}
${CPLUSPLUS_STANDARD_HEADERS}
# ${CPLUSPLUS20_HEADERS}
${QSK_QT_HEADERS}
)

file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/pch.cpp "enum {};")
add_library(PCH OBJECT ${CMAKE_CURRENT_BINARY_DIR}/pch.cpp)
target_precompile_headers(PCH PRIVATE ${ALL_STANDARD_HEADERS})
set_target_properties(PCH PROPERTIES AUTOMOC OFF AUTOUIC OFF AUTORCC OFF)
if(MSVC)
# TODO check why we need this
# Set the desired compiler options
# target_compile_options(PCH PRIVATE
# /Zc:referenceBinding
# /Zc:__cplusplus
# /Zc:hiddenFriend
# /Zc:externC
# /Zc:externConstexpr
# /permissive-
# #/source-charset:utf-8
# #/execution-charset:utf-8
# /utf-8
# )
endif()

target_link_libraries(PCH PRIVATE
Qt::Core
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::Quick
Qt::QuickPrivate)

if(TARGET Qt::OpenGL)
target_link_libraries(PCH PRIVATE Qt::OpenGL)
endif()
if(TARGET Qt::OpenGLPrivate)
target_link_libraries(PCH PRIVATE Qt::OpenGLPrivate)
endif()
if(TARGET Qt::Widgets)
target_link_libraries(PCH PRIVATE Qt::Widgets)
endif()
if(TARGET Qt::Svg)
target_link_libraries(PCH PRIVATE Qt::Svg)
endif()
if(TARGET Qt::Quick)
target_link_libraries(PCH PRIVATE Qt::Quick)
endif()
if(TARGET Qt::QuickPrivate)
target_link_libraries(PCH PRIVATE Qt::QuickPrivate)
endif()
if(TARGET Qt::QuickShapesPrivate)
target_link_libraries(PCH PRIVATE Qt::QuickShapesPrivate)
endif()
if(TARGET Qt::QuickWidgets)
target_link_libraries(PCH PRIVATE Qt::QuickWidgets)
endif()
if(TARGET Qt::WebEngine)
target_link_libraries(PCH PRIVATE Qt::WebEngine)
endif()
if(TARGET Qt::WebEngineCore)
target_link_libraries(PCH PRIVATE Qt::WebEngineCore)
endif()
if(TARGET Qt::WebEngineQuick)
target_link_libraries(PCH PRIVATE Qt::WebEngineQuick)
endif()
if(TARGET Qt::WebEngineQuickPrivate)
target_link_libraries(PCH PRIVATE Qt::WebEngineQuickPrivate)
endif()
6 changes: 3 additions & 3 deletions playground/grids/GridGraphics.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
#include <QGraphicsScene>
#include <QDebug>

namespace
namespace GridGraphicsImpl
{
class Rectangle : public QGraphicsWidget
{
Expand Down Expand Up @@ -68,7 +68,7 @@ GridGraphics::GridGraphics( QWidget* parent )
setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff );

auto grid = new Grid();
auto grid = new GridGraphicsImpl::Grid();

m_layout = new QGraphicsGridLayout( grid );
m_layout->setSpacing( 5 );
Expand All @@ -86,7 +86,7 @@ GridGraphics::~GridGraphics()
void GridGraphics::insert( const QByteArray& colorName,
int row, int column, int rowSpan, int columnSpan )
{
m_layout->addItem( new Rectangle( colorName ),
m_layout->addItem( new GridGraphicsImpl::Rectangle( colorName ),
row, column, rowSpan, columnSpan );
}

Expand Down
Loading