From fd0112425f165aff786bcfec8c610114324c37a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20=22sp1rit=22=E2=80=8B?= Date: Sun, 12 Jun 2022 22:57:03 +0200 Subject: [PATCH] Added meson buildfiles this makes for a far better experience in combination with wlroots, since that whole makefile mess is not required. Additionaly, handling of wayland protocol sources is also slightly better, but could be improved with mesons inbuilt wayland module. To build Hyprland using meson: meson _build -Ddefault_library=static ninja -C _build ninja -C _build install --- .gitmodules | 2 +- CMakeLists.txt | 2 +- Makefile | 10 +-- example/meson.build | 2 + hyprctl/meson.build | 3 + meson.build | 8 ++ meson_options.txt | 1 + protocols/meson.build | 51 +++++++++++ src/helpers/WLClasses.hpp | 4 +- src/includes.hpp | 106 +++++++++++------------ src/meson.build | 77 ++++++++++++++++ src/wlrunstable/wlr_ext_workspace_v1.cpp | 2 +- wlroots => subprojects/wlroots | 0 13 files changed, 205 insertions(+), 63 deletions(-) create mode 100644 example/meson.build create mode 100644 hyprctl/meson.build create mode 100644 meson.build create mode 100644 meson_options.txt create mode 100644 protocols/meson.build create mode 100644 src/meson.build rename wlroots => subprojects/wlroots (100%) diff --git a/.gitmodules b/.gitmodules index 91f54c59..01c7b0d5 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "wlroots"] - path = wlroots + path = subprojects/wlroots url = https://github.com/ThatOneCalculator/wlroots-mirror diff --git a/CMakeLists.txt b/CMakeLists.txt index a3b3584e..e78eea0e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -35,7 +35,7 @@ execute_process( # # -include_directories(.) +include_directories(. PRIVATE "subprojects/wlroots/include/") add_compile_options(-std=c++20 -DWLR_USE_UNSTABLE ) add_compile_options(-Wall -Wextra -Wno-unused-parameter -Wno-unused-value -Wno-missing-field-initializers -Wno-narrowing) find_package(Threads REQUIRED) diff --git a/Makefile b/Makefile index 425618b4..eb306932 100644 --- a/Makefile +++ b/Makefile @@ -129,11 +129,11 @@ protocols: xdg-shell-protocol.o wlr-layer-shell-unstable-v1-protocol.o wlr-scree config: make protocols - sed -i -E 's/(soversion = 11)([^032]|$$)/soversion = 11032/g' ./wlroots/meson.build + sed -i -E 's/(soversion = 11)([^032]|$$)/soversion = 11032/g' subprojects/wlroots/meson.build - rm -rf ./wlroots/build + rm -rf ./subprojects/wlroots/build - cd wlroots && meson ./build --prefix=/usr --buildtype=release - cd wlroots && ninja -C build/ + cd subprojects/wlroots && meson ./build --prefix=/usr --buildtype=release + cd subprojects/wlroots && ninja -C build/ - cd wlroots && sudo ninja -C build/ install + cd subprojects/wlroots && sudo ninja -C build/ install diff --git a/example/meson.build b/example/meson.build new file mode 100644 index 00000000..cf4a2ff0 --- /dev/null +++ b/example/meson.build @@ -0,0 +1,2 @@ +install_data('hyprland.conf', install_dir: join_paths(get_option('datadir'), 'hyprland')) +install_data('hyprland.desktop', install_dir: join_paths(get_option('datadir'), 'wayland-sessions')) diff --git a/hyprctl/meson.build b/hyprctl/meson.build new file mode 100644 index 00000000..2b941d6d --- /dev/null +++ b/hyprctl/meson.build @@ -0,0 +1,3 @@ +executable('hyprctl', 'main.cpp', + install: true +) diff --git a/meson.build b/meson.build new file mode 100644 index 00000000..ea030c23 --- /dev/null +++ b/meson.build @@ -0,0 +1,8 @@ +project('Hyprland', 'cpp', 'c', + version : '0.1', + default_options : ['warning_level=3', 'cpp_std=c++20']) + +subdir('protocols') +subdir('src') +subdir('hyprctl') +subdir('example') diff --git a/meson_options.txt b/meson_options.txt new file mode 100644 index 00000000..d34c6170 --- /dev/null +++ b/meson_options.txt @@ -0,0 +1 @@ +option('xwayland', type: 'feature', value: 'auto', description: 'Enable support for X11 applications') diff --git a/protocols/meson.build b/protocols/meson.build new file mode 100644 index 00000000..31a799d8 --- /dev/null +++ b/protocols/meson.build @@ -0,0 +1,51 @@ +wayland_protos = dependency('wayland-protocols', + version: '>=1.25', + fallback: 'wayland-protocols', + default_options: ['tests=false'], +) +wl_protocol_dir = wayland_protos.get_variable('pkgdatadir') + +wayland_scanner_dep = dependency('wayland-scanner', native: true) +wayland_scanner = find_program( + wayland_scanner_dep.get_variable('wayland_scanner'), + native: true, +) + +protocols = [ + [wl_protocol_dir, 'stable/xdg-shell/xdg-shell.xml'], + ['wlr-layer-shell-unstable-v1.xml'], + ['ext-workspace-unstable-v1.xml'], + ['pointer-constraints-unstable-v1.xml'], + ['tablet-unstable-v2.xml'], + ['idle.xml'] +] +wl_protos_src = [] +wl_protos_headers = [] +foreach p : protocols + xml = join_paths(p) + wl_protos_src += custom_target( + xml.underscorify() + '_server_c', + input: xml, + output: '@BASENAME@-protocol.c', + command: [wayland_scanner, 'private-code', '@INPUT@', '@OUTPUT@'], + ) + wl_protos_headers += custom_target( + xml.underscorify() + '_server_h', + input: xml, + output: '@BASENAME@-protocol.h', + command: [wayland_scanner, 'server-header', '@INPUT@', '@OUTPUT@'], + ) +endforeach + +wayland_server = dependency('wayland-server', version: '>=1.20.0') + +lib_server_protos = static_library( + 'server_protos', + wl_protos_src + wl_protos_headers, + dependencies: wayland_server.partial_dependency(compile_args: true), +) + +server_protos = declare_dependency( + link_with: lib_server_protos, + sources: wl_protos_headers, +) diff --git a/src/helpers/WLClasses.hpp b/src/helpers/WLClasses.hpp index 534b0de6..2a2d3c93 100644 --- a/src/helpers/WLClasses.hpp +++ b/src/helpers/WLClasses.hpp @@ -2,7 +2,7 @@ #include "../events/Events.hpp" #include "../defines.hpp" -#include "../../wlr-layer-shell-unstable-v1-protocol.h" +#include "wlr-layer-shell-unstable-v1-protocol.h" #include "../Window.hpp" #include "SubsurfaceTree.hpp" #include "AnimatedVariable.hpp" @@ -205,4 +205,4 @@ struct STabletPad { bool operator==(const STabletPad& b) { return wlrTabletPadV2 == b.wlrTabletPadV2; } -}; \ No newline at end of file +}; diff --git a/src/includes.hpp b/src/includes.hpp index 6793604b..3aca4331 100644 --- a/src/includes.hpp +++ b/src/includes.hpp @@ -34,60 +34,60 @@ #define static extern "C" { -#include "../wlroots/include/wlr/backend.h" -#include "../wlroots/include/wlr/backend/libinput.h" -#include "../wlroots/include/wlr/render/allocator.h" -#include "../wlroots/include/wlr/render/wlr_renderer.h" -#include "../wlroots/include/wlr/types/wlr_compositor.h" -#include "../wlroots/include/wlr/types/wlr_cursor.h" -#include "../wlroots/include/wlr/types/wlr_data_control_v1.h" -#include "../wlroots/include/wlr/types/wlr_data_device.h" -#include "../wlroots/include/wlr/types/wlr_export_dmabuf_v1.h" -#include "../wlroots/include/wlr/types/wlr_linux_dmabuf_v1.h" -#include "../wlroots/include/wlr/types/wlr_gamma_control_v1.h" -#include "../wlroots/include/wlr/types/wlr_idle.h" -#include "../wlroots/include/wlr/types/wlr_input_device.h" -#include "../wlroots/include/wlr/types/wlr_keyboard.h" -#include "../wlroots/include/wlr/types/wlr_layer_shell_v1.h" -#include "../wlroots/include/wlr/types/wlr_matrix.h" -#include "../wlroots/include/wlr/types/wlr_output.h" -#include "../wlroots/include/wlr/types/wlr_output_layout.h" -#include "../wlroots/include/wlr/types/wlr_output_management_v1.h" -#include "../wlroots/include/wlr/types/wlr_pointer.h" -#include "../wlroots/include/wlr/types/wlr_presentation_time.h" -#include "../wlroots/include/wlr/types/wlr_primary_selection.h" -#include "../wlroots/include/wlr/types/wlr_primary_selection_v1.h" -#include "../wlroots/include/wlr/types/wlr_screencopy_v1.h" -#include "../wlroots/include/wlr/types/wlr_seat.h" -#include "../wlroots/include/wlr/types/wlr_server_decoration.h" -#include "../wlroots/include/wlr/types/wlr_viewporter.h" -#include "../wlroots/include/wlr/types/wlr_virtual_keyboard_v1.h" -#include "../wlroots/include/wlr/types/wlr_xcursor_manager.h" -#include "../wlroots/include/wlr/types/wlr_xdg_activation_v1.h" -#include "../wlroots/include/wlr/types/wlr_xdg_decoration_v1.h" -#include "../wlroots/include/wlr/types/wlr_xdg_output_v1.h" -#include "../wlroots/include/wlr/types/wlr_xdg_shell.h" -#include "../wlroots/include/wlr/types/wlr_subcompositor.h" -#include "../wlroots/include/wlr/types/wlr_scene.h" -#include "../wlroots/include/wlr/types/wlr_output_damage.h" -#include "../wlroots/include/wlr/types/wlr_input_inhibitor.h" -#include "../wlroots/include/wlr/types/wlr_keyboard_shortcuts_inhibit_v1.h" -#include "../wlroots/include/wlr/types/wlr_virtual_pointer_v1.h" -#include "../wlroots/include/wlr/types/wlr_foreign_toplevel_management_v1.h" -#include "../wlroots/include/wlr/util/log.h" -#include "../wlroots/include/wlr/xwayland.h" -#include "../wlroots/include/wlr/util/region.h" -#include "../wlroots/include/wlr/types/wlr_tablet_pad.h" -#include "../wlroots/include/wlr/types/wlr_tablet_tool.h" -#include "../wlroots/include/wlr/types/wlr_tablet_v2.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include -#include "../wlroots/include/wlr/render/egl.h" -#include "../wlroots/include/wlr/render/gles2.h" -#include "../wlroots/include/wlr/render/wlr_texture.h" -#include "../wlroots/include/wlr/types/wlr_pointer_constraints_v1.h" -#include "../wlroots/include/wlr/types/wlr_relative_pointer_v1.h" -#include "../wlroots/include/wlr/interfaces/wlr_keyboard.h" +#include +#include +#include +#include +#include +#include } #undef class @@ -113,4 +113,4 @@ extern "C" { #include "helpers/Vector2D.hpp" -#include "../ext-workspace-unstable-v1-protocol.h" \ No newline at end of file +#include "ext-workspace-unstable-v1-protocol.h" diff --git a/src/meson.build b/src/meson.build new file mode 100644 index 00000000..6a351b9b --- /dev/null +++ b/src/meson.build @@ -0,0 +1,77 @@ +src = [ + 'config/ConfigManager.cpp', + 'debug/HyprCtl.cpp', + 'debug/HyprDebugOverlay.cpp', + 'debug/Log.cpp', + 'events/Devices.cpp', + 'events/Layers.cpp', + 'events/Misc.cpp', + 'events/Monitors.cpp', + 'events/Popups.cpp', + 'events/Windows.cpp', + 'helpers/Color.cpp', + 'helpers/Vector2D.cpp', + 'helpers/WLListener.cpp', + 'helpers/AnimatedVariable.cpp', + 'helpers/BezierCurve.cpp', + 'helpers/MiscFunctions.cpp', + 'helpers/SubsurfaceTree.cpp', + 'helpers/WLClasses.cpp', + 'helpers/Workspace.cpp', + 'hyprerror/HyprError.cpp', + 'layout/DwindleLayout.cpp', + 'managers/LayoutManager.cpp', + 'managers/ThreadManager.cpp', + 'managers/AnimationManager.cpp', + 'managers/EventManager.cpp', + 'managers/KeybindManager.cpp', + 'managers/XWaylandManager.cpp', + 'managers/input/InputManager.cpp', + 'managers/input/Tablets.cpp', + 'render/Shader.cpp', + 'render/Texture.cpp', + 'render/Framebuffer.cpp', + 'render/OpenGL.cpp', + 'render/Renderer.cpp', + 'render/decorations/CHyprGroupBarDecoration.cpp', + 'render/decorations/IHyprWindowDecoration.cpp', + 'wlrunstable/wlr_ext_workspace_v1.cpp', + 'Compositor.cpp', + 'Window.cpp', + 'init/initHelpers.cpp', + 'main.cpp' +] + +wlroots = subproject('wlroots', default_options: ['examples=false']) +have_xwlr = wlroots.get_variable('features').get('xwayland') +xcb_dep = dependency('xcb', required: get_option('xwayland')) + +if get_option('xwayland').enabled() and not have_xwlr + error('Cannot enable Xwayland in Hyperland: wlroots has been built without Xwayland support') +endif +have_xwayland = xcb_dep.found() and have_xwlr + +if not have_xwayland +add_project_arguments('-DNO_XWAYLAND', language: 'cpp') +endif + +executable('Hyprland', src, + cpp_args: ['-DWLR_USE_UNSTABLE'], + dependencies: [ + server_protos, + wlroots.get_variable('wlroots'), + dependency('cairo'), + dependency('pango'), + dependency('pangocairo'), + dependency('libdrm'), + dependency('egl'), + dependency('xkbcommon'), + dependency('libinput'), + xcb_dep, + + dependency('pixman-1'), + dependency('GL'), + dependency('threads') + ], + install : true +) diff --git a/src/wlrunstable/wlr_ext_workspace_v1.cpp b/src/wlrunstable/wlr_ext_workspace_v1.cpp index 4d6de7ae..50a43c7b 100644 --- a/src/wlrunstable/wlr_ext_workspace_v1.cpp +++ b/src/wlrunstable/wlr_ext_workspace_v1.cpp @@ -2,7 +2,7 @@ #include "../includes.hpp" #include "../helpers/MiscFunctions.hpp" -#include "../../ext-workspace-unstable-v1-protocol.h" +#include "ext-workspace-unstable-v1-protocol.h" #include #include diff --git a/wlroots b/subprojects/wlroots similarity index 100% rename from wlroots rename to subprojects/wlroots