build(wayland): setup cmake for wayland module
This commit is contained in:
		
							parent
							
								
									c6dde9ca9d
								
							
						
					
					
						commit
						b0567a569b
					
				
					 4 changed files with 71 additions and 5 deletions
				
			
		| 
						 | 
					@ -7,6 +7,8 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
option(LAYERSHELL "Enable wayland layershell support" ON)
 | 
					option(LAYERSHELL "Enable wayland layershell support" ON)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					option(WAYLAND "Enable wayland support" ON)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
add_compile_options(-Wall -Wextra)
 | 
					add_compile_options(-Wall -Wextra)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# nix workaround
 | 
					# nix workaround
 | 
				
			||||||
| 
						 | 
					@ -19,8 +21,17 @@ if (NOT CMAKE_BUILD_TYPE)
 | 
				
			||||||
	set(CMAKE_BUILD_TYPE Debug)
 | 
						set(CMAKE_BUILD_TYPE Debug)
 | 
				
			||||||
endif()
 | 
					endif()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
find_package(Qt6 REQUIRED COMPONENTS Gui Qml Quick QuickControls2)
 | 
					set(QT_DEPS Qt6::Gui Qt6::Qml Qt6::Quick Qt6::QuickControls2)
 | 
				
			||||||
 | 
					set(QT_FPDEPS Gui Qml Quick QuickControls2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if (WAYLAND)
 | 
				
			||||||
 | 
						list(APPEND QT_DEPS Qt6::WaylandClient Qt6::WaylandClientPrivate)
 | 
				
			||||||
 | 
						list(APPEND QT_FPDEPS WaylandClient)
 | 
				
			||||||
 | 
					endif()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					find_package(Qt6 REQUIRED COMPONENTS ${QT_FPDEPS})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
qt_standard_project_setup(REQUIRES 6.6)
 | 
					qt_standard_project_setup(REQUIRES 6.6)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					add_subdirectory(src/wayland)
 | 
				
			||||||
add_subdirectory(src/core)
 | 
					add_subdirectory(src/core)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -20,6 +20,9 @@ in pkgs.mkShell {
 | 
				
			||||||
    clang-tools_17
 | 
					    clang-tools_17
 | 
				
			||||||
    cmake
 | 
					    cmake
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    pkg-config
 | 
				
			||||||
 | 
					    wayland-scanner
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    qt6.wrapQtAppsHook
 | 
					    qt6.wrapQtAppsHook
 | 
				
			||||||
    makeWrapper
 | 
					    makeWrapper
 | 
				
			||||||
  ];
 | 
					  ];
 | 
				
			||||||
| 
						 | 
					@ -29,8 +32,11 @@ in pkgs.mkShell {
 | 
				
			||||||
    qt6.qtdeclarative
 | 
					    qt6.qtdeclarative
 | 
				
			||||||
    qt6.qtwayland
 | 
					    qt6.qtwayland
 | 
				
			||||||
    qtlayershell
 | 
					    qtlayershell
 | 
				
			||||||
 | 
					    wayland
 | 
				
			||||||
 | 
					    wayland-protocols
 | 
				
			||||||
  ];
 | 
					  ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  QTWAYLANDSCANNER = "${pkgs.qt6.qtwayland}/libexec/qtwaylandscanner";
 | 
				
			||||||
  TIDYFOX = "${tidyfox}/lib/libtidyfox.so";
 | 
					  TIDYFOX = "${tidyfox}/lib/libtidyfox.so";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  shellHook = ''
 | 
					  shellHook = ''
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -16,10 +16,7 @@ qt_add_executable(quickshell
 | 
				
			||||||
 | 
					
 | 
				
			||||||
qt_add_qml_module(quickshell URI QuickShell)
 | 
					qt_add_qml_module(quickshell URI QuickShell)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# qml type registration requires this
 | 
					target_link_libraries(quickshell PRIVATE ${QT_DEPS} quickshell-wayland)
 | 
				
			||||||
target_include_directories(quickshell PRIVATE src/core)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
target_link_libraries(quickshell PRIVATE Qt6::Gui Qt6::Qml Qt6::Quick Qt6::QuickControls2)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
if (LAYERSHELL)
 | 
					if (LAYERSHELL)
 | 
				
			||||||
	find_package(LayerShellQt REQUIRED)
 | 
						find_package(LayerShellQt REQUIRED)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										52
									
								
								src/wayland/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								src/wayland/CMakeLists.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,52 @@
 | 
				
			||||||
 | 
					qt_add_library(quickshell-wayland STATIC)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					qt_add_qml_module(quickshell-wayland URI QuickShell.Wayland)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					find_package(PkgConfig REQUIRED)
 | 
				
			||||||
 | 
					pkg_check_modules(wayland REQUIRED IMPORTED_TARGET wayland-client wayland-protocols)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					find_package(Qt6 REQUIRED COMPONENTS WaylandClient)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					target_link_libraries(quickshell-wayland PRIVATE ${QT_DEPS} wayland-client)
 | 
				
			||||||
 | 
					message(STATUS Qt6::WaylandClient)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# wayland protocols
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if (DEFINED ENV{QTWAYLANDSCANNER})
 | 
				
			||||||
 | 
						set(qtwaylandscanner $ENV{QTWAYLANDSCANNER})
 | 
				
			||||||
 | 
					else()
 | 
				
			||||||
 | 
						find_program(qtwaylandscanner NAMES qtwaylandscanner)
 | 
				
			||||||
 | 
					endif()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if (qtwaylandscanner STREQUAL "qtwaylandscanner-NOTFOUND")
 | 
				
			||||||
 | 
						message(FATAL_ERROR "qtwaylandscanner not found. Set the QTWAYLANDSCANNER environment variable to specify its path explicity.")
 | 
				
			||||||
 | 
					endif()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					message(STATUS "Found qtwaylandscanner at ${qtwaylandscanner}")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					find_program(waylandscanner NAMES wayland-scanner)
 | 
				
			||||||
 | 
					message(STATUS "Found wayland-scanner at ${waylandscanner}")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					execute_process(
 | 
				
			||||||
 | 
						COMMAND pkg-config --variable=pkgdatadir wayland-protocols
 | 
				
			||||||
 | 
						OUTPUT_VARIABLE WAYLAND_PROTOCOLS_DIR
 | 
				
			||||||
 | 
						OUTPUT_STRIP_TRAILING_WHITESPACE
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					message(STATUS "Found wayland-protocols at ${WAYLAND_PROTOCOLS_DIR}")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set(PROTO_SRC_PATH ${CMAKE_CURRENT_SOURCE_DIR}/wl-proto)
 | 
				
			||||||
 | 
					set(PROTO_BUILD_PATH ${CMAKE_CURRENT_BINARY_DIR}/wl-proto)
 | 
				
			||||||
 | 
					make_directory(${PROTO_BUILD_PATH})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function (wl_proto name path)
 | 
				
			||||||
 | 
						execute_process(COMMAND ${waylandscanner} client-header ${path} ${PROTO_BUILD_PATH}/wayland-${name}-client-protocol.h)
 | 
				
			||||||
 | 
						execute_process(COMMAND ${waylandscanner} private-code ${path} ${PROTO_BUILD_PATH}/wayland-${name}.c)
 | 
				
			||||||
 | 
						execute_process(COMMAND ${qtwaylandscanner} client-header ${path} OUTPUT_FILE ${PROTO_BUILD_PATH}/qwayland-${name}.h)
 | 
				
			||||||
 | 
						execute_process(COMMAND ${qtwaylandscanner} client-code ${path} OUTPUT_FILE ${PROTO_BUILD_PATH}/qwayland-${name}.cpp)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						target_sources(quickshell-wayland PRIVATE ${PROTO_BUILD_PATH}/wayland-${name}.c)
 | 
				
			||||||
 | 
						target_sources(quickshell-wayland PRIVATE ${PROTO_BUILD_PATH}/qwayland-${name}.cpp)
 | 
				
			||||||
 | 
					endfunction()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					target_include_directories(quickshell-wayland PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/wl-proto)
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue