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