diff --git a/webview/CMakeLists.txt b/webview/CMakeLists.txt new file mode 100644 index 000000000..81fc94b60 --- /dev/null +++ b/webview/CMakeLists.txt @@ -0,0 +1,49 @@ +cmake_minimum_required(VERSION 3.5) + +project(AnthiasWebView LANGUAGES CXX) + +set(CMAKE_INCLUDE_CURRENT_DIR ON) + +set(CMAKE_AUTOUIC ON) +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +find_package( + Qt6 COMPONENTS + Core + DBus + Widgets + WebEngineCore + WebEngineWidgets + REQUIRED +) + +set( + CMAKE_C_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wl,-rpath-link, ${CMAKE_SYSROOT}/usr/lib/${CMAKE_LIBRARY_ARCHITECTURE} -L${CMAKE_SYSROOT}/usr/lib/${CMAKE_LIBRARY_ARCHITECTURE}" +) +set( + CMAKE_CXX_FLAGS + "${CMAKE_CXX_FLAGS} -fPIC -Wl,-rpath-link,${CMAKE_SYSROOT}/usr/lib/${CMAKE_LIBRARY_ARCHITECTURE} -L${CMAKE_SYSROOT}/usr/lib/${CMAKE_LIBRARY_ARCHITECTURE}" +) + +add_executable( + ScreenlyWebview + src/main.cpp + src/mainwindow.cpp + src/view.cpp + src/mainwindow.h + src/view.h +) + +target_link_libraries( + ScreenlyWebview PRIVATE + Qt6::Core + Qt6::DBus + Qt6::WebEngineCore + Qt6::WebEngineWidgets +) + +target_include_directories(ScreenlyWebview PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src) diff --git a/webview/docker/Dockerfile.qt6 b/webview/docker/Dockerfile.qt6 new file mode 100644 index 000000000..5a0ec528f --- /dev/null +++ b/webview/docker/Dockerfile.qt6 @@ -0,0 +1,12 @@ +FROM arm32v7/debian:bookworm + +RUN apt-get update -y && \ + apt-get install -y \ + cmake \ + rsync \ + gcc-arm-linux-gnueabihf \ + g++-arm-linux-gnueabihf \ + qt6-base-dev \ + qt6-webengine-dev + +WORKDIR /build diff --git a/webview/scripts/build_webview.sh b/webview/scripts/build_webview.sh new file mode 100755 index 000000000..4ba78fef6 --- /dev/null +++ b/webview/scripts/build_webview.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +set -euo pipefail + +CORE_COUNT="$(nproc)" + +function build_webview() { + local ARCHIVE_NAME="webview.tar.gz" + local ARCHIVE_DESTINATION="/build/${ARCHIVE_NAME}" + + rsync -aP /webview /build + cd /build/webview + mkdir -p build && cd build + cmake .. + cmake --build . --parallel "${CORE_COUNT}" + + mkdir -p fakeroot/bin fakeroot/share/ScreenlyWebview + mv ScreenlyWebview fakeroot/bin/ + cp -rf ../res fakeroot/share/ScreenlyWebview/ + + cd fakeroot + + tar cfz ${ARCHIVE_DESTINATION} . +} + +function main() { + local RELEASE_DIR='/build/release' + mkdir -p ${RELEASE_DIR} + + build_webview +} + +main diff --git a/webview/scripts/initialize_builder.sh b/webview/scripts/initialize_builder.sh new file mode 100755 index 000000000..55cf29d16 --- /dev/null +++ b/webview/scripts/initialize_builder.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +set -euo pipefail + +WEBVIEW_BUILDER_IMAGE_NAME='webview-builder' +WEBVIEW_BUILDER_CONTAINER_NAME='webview-builder-container' + +BUILDX_ARGS=( + '-f' 'docker/Dockerfile.qt6' + '--platform' 'linux/arm/v7' + '-t' "${WEBVIEW_BUILDER_IMAGE_NAME}" +) + +RUN_ARGS=( + '-itd' + '--name' "${WEBVIEW_BUILDER_CONTAINER_NAME}" + '-v' './build:/build' + '-v' './src:/webview/src' + '-v' './res:/webview/res' + '-v' './CMakeLists.txt:/webview/CMakeLists.txt' + '-v' './ScreenlyWebview.pro:/webview/ScreenlyWebview.pro' + '-v' './scripts/build_webview.sh:/scripts/build_webview.sh' + "${WEBVIEW_BUILDER_IMAGE_NAME}" +) + +docker buildx build --load "${BUILDX_ARGS[@]}" . +docker rm -f "${WEBVIEW_BUILDER_CONTAINER_NAME}" || true +docker run "${RUN_ARGS[@]}" bash diff --git a/webview/src/main.cpp b/webview/src/main.cpp index ed5d61f7b..2ffdccd76 100644 --- a/webview/src/main.cpp +++ b/webview/src/main.cpp @@ -1,6 +1,7 @@ #include #include -#include +#include +#include #include #include "mainwindow.h"