2023-02-09 09:57:26 +01:00
cmake_minimum_required ( VERSION 3.19 )
2023-01-11 17:41:03 +01:00
include ( CheckIncludeFile )
2023-01-06 15:21:42 +01:00
# Get version
file ( READ ${ CMAKE_CURRENT_SOURCE_DIR } /props.json PROPS )
string ( JSON VER GET ${ PROPS } version )
2023-03-14 22:50:30 +01:00
project ( Hyprland
2022-03-16 20:50:55 +01:00
D E S C R I P T I O N " A M o d e r n C + + W a y l a n d C o m p o s i t o r "
2023-01-06 15:21:42 +01:00
V E R S I O N $ { V E R }
2022-03-16 20:50:55 +01:00
)
set ( CMAKE_MESSAGE_LOG_LEVEL "STATUS" )
2022-10-27 12:26:35 +02:00
message ( STATUS "Gathering git info" )
2022-03-16 20:50:55 +01:00
2022-04-22 18:14:25 +02:00
# Get git info
# hash and branch
execute_process (
C O M M A N D g i t r e v - p a r s e - - a b b r e v - r e f H E A D
W O R K I N G _ D I R E C T O R Y $ { C M A K E _ S O U R C E _ D I R }
O U T P U T _ V A R I A B L E G I T _ B R A N C H
O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E )
execute_process (
C O M M A N D g i t r e v - p a r s e H E A D
W O R K I N G _ D I R E C T O R Y $ { C M A K E _ S O U R C E _ D I R }
O U T P U T _ V A R I A B L E G I T _ C O M M I T _ H A S H
O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E )
2022-04-22 18:29:32 +02:00
execute_process (
2022-12-09 14:57:39 +01:00
C O M M A N D s h - c " g i t s h o w $ { G I T _ C O M M I T _ H A S H } | h e a d - n 5 | t a i l - n 1 | s e d - e ' s / #//g' -e 's/\"//g'"
2022-04-22 18:29:32 +02:00
W O R K I N G _ D I R E C T O R Y $ { C M A K E _ S O U R C E _ D I R }
O U T P U T _ V A R I A B L E G I T _ C O M M I T _ M E S S A G E
O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E )
2022-04-22 18:33:30 +02:00
execute_process (
2022-10-22 08:23:52 +02:00
C O M M A N D s h - c " g i t d i f f - i n d e x - - q u i e t H E A D - - | | e c h o \ " d i r t y \ " "
2022-04-22 18:33:30 +02:00
W O R K I N G _ D I R E C T O R Y $ { C M A K E _ S O U R C E _ D I R }
O U T P U T _ V A R I A B L E G I T _ D I R T Y
O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E )
2022-04-22 18:14:25 +02:00
#
#
2023-03-14 22:50:30 +01:00
if ( CMAKE_BUILD_TYPE MATCHES Debug OR CMAKE_BUILD_TYPE MATCHES DEBUG )
2022-10-27 12:26:35 +02:00
message ( STATUS "Configuring Hyprland in Debug with CMake" )
2023-03-14 22:50:30 +01:00
add_compile_definitions ( HYPRLAND_DEBUG )
else ( )
add_compile_options ( -O3 )
2022-10-27 12:26:35 +02:00
message ( STATUS "Configuring Hyprland in Release with CMake" )
2023-03-14 22:50:30 +01:00
endif ( )
2022-10-27 12:26:35 +02:00
2023-03-14 22:50:30 +01:00
include_directories (
.
" s u b p r o j e c t s / w l r o o t s / i n c l u d e / "
" s u b p r o j e c t s / w l r o o t s / b u i l d / i n c l u d e / "
" s u b p r o j e c t s / u d i s 8 6 / " )
2022-11-21 22:20:51 +01:00
set ( CMAKE_CXX_STANDARD 23 )
2023-03-14 22:50:30 +01:00
add_compile_definitions ( WLR_USE_UNSTABLE )
2023-04-26 18:23:50 +02:00
add_compile_options ( -Wall -Wextra -Wno-unused-parameter -Wno-unused-value -Wno-missing-field-initializers -Wno-narrowing -Wno-pointer-arith )
2023-03-14 22:50:30 +01:00
add_link_options ( -rdynamic )
set ( CMAKE_ENABLE_EXPORTS TRUE )
2022-10-27 12:26:35 +02:00
message ( STATUS "Checking deps..." )
2022-03-16 20:50:55 +01:00
find_package ( Threads REQUIRED )
find_package ( PkgConfig REQUIRED )
2023-03-20 16:02:47 +01:00
pkg_check_modules ( deps REQUIRED IMPORTED_TARGET wayland-server wayland-client wayland-cursor wayland-protocols cairo libdrm egl xkbcommon libinput pango pangocairo ) # we do not check for wlroots, as we provide it ourselves
2022-03-16 20:50:55 +01:00
2023-03-14 22:50:30 +01:00
file ( GLOB_RECURSE SRCFILES CONFIGURE_DEPENDS "src/*.cpp" )
2022-03-16 20:50:55 +01:00
add_executable ( Hyprland ${ SRCFILES } )
2023-03-16 16:40:50 +01:00
if ( CMAKE_BUILD_TYPE MATCHES Debug OR CMAKE_BUILD_TYPE MATCHES DEBUG )
message ( STATUS "Setting debug flags" )
target_link_libraries ( Hyprland asan )
add_compile_options ( -pg -no-pie -fno-builtin -fsanitize=address )
add_link_options ( -pg -no-pie -fno-builtin )
endif ( )
2023-02-20 15:15:15 +01:00
include ( CheckLibraryExists )
check_library_exists ( execinfo backtrace "" HAVE_LIBEXECINFO )
if ( HAVE_LIBEXECINFO )
target_link_libraries ( Hyprland PRIVATE execinfo )
endif ( )
2023-03-14 22:50:30 +01:00
if ( LEGACY_RENDERER )
2022-04-13 17:34:13 +02:00
message ( STATUS "Using the legacy GLES2 renderer!" )
2023-03-14 22:50:30 +01:00
add_compile_definitions ( LEGACY_RENDERER )
endif ( )
2022-04-13 17:34:13 +02:00
2023-03-14 22:50:30 +01:00
if ( NO_XWAYLAND )
2022-04-20 15:58:02 +02:00
message ( STATUS "Using the NO_XWAYLAND flag, disabling XWayland!" )
2023-03-14 22:50:30 +01:00
add_compile_definitions ( NO_XWAYLAND )
else ( )
2022-10-27 12:26:35 +02:00
message ( STATUS "XWAYLAND Enabled (NO_XWAYLAND not defined) checking deps..." )
pkg_check_modules ( xcbdep REQUIRED xcb )
target_link_libraries ( Hyprland xcb )
2023-03-14 22:50:30 +01:00
endif ( )
2022-03-16 20:50:55 +01:00
2023-03-14 22:50:30 +01:00
if ( NO_SYSTEMD )
2023-01-05 20:17:55 +01:00
message ( STATUS "SYSTEMD support is disabled..." )
2023-03-14 22:50:30 +01:00
else ( )
2023-01-05 20:17:55 +01:00
message ( STATUS "SYSTEMD support is requested (NO_SYSTEMD not defined) checking deps..." )
pkg_check_modules ( LIBSYSTEMD libsystemd )
2023-01-11 17:41:03 +01:00
check_include_file ( "systemd/sd-daemon.h" SYSTEMDH )
2023-03-14 22:50:30 +01:00
if ( LIBSYSTEMD_FOUND AND SYSTEMDH )
add_compile_definitions ( USES_SYSTEMD )
2023-01-05 20:17:55 +01:00
target_link_libraries ( Hyprland "${LIBSYSTEMD_LIBRARIES}" )
2023-03-14 22:50:30 +01:00
else ( )
2023-01-11 17:41:03 +01:00
message ( WARNING "Systemd support requested but libsystemd or systemd headers were not found" )
2023-03-14 22:50:30 +01:00
endif ( )
endif ( )
2023-01-05 20:17:55 +01:00
2023-03-14 22:50:30 +01:00
target_compile_definitions ( Hyprland
P R I V A T E
" G I T _ C O M M I T _ H A S H = \ " $ { G I T _ C O M M I T _ H A S H } \ " "
" G I T _ B R A N C H = \ " $ { G I T _ B R A N C H } \ " "
" G I T _ C O M M I T _ M E S S A G E = \ " $ { G I T _ C O M M I T _ M E S S A G E } \ " "
" G I T _ D I R T Y = \ " $ { G I T _ D I R T Y } \ " " )
2022-04-22 18:14:25 +02:00
2022-03-16 20:50:55 +01:00
target_link_libraries ( Hyprland rt )
set ( CPACK_PROJECT_NAME ${ PROJECT_NAME } )
set ( CPACK_PROJECT_VERSION ${ PROJECT_VERSION } )
include ( CPack )
2022-10-27 12:26:35 +02:00
message ( STATUS "Setting link libraries" )
2022-03-16 20:50:55 +01:00
target_link_libraries ( Hyprland PkgConfig::deps )
target_link_libraries ( Hyprland
2022-12-12 15:38:50 +01:00
$ { C M A K E _ S O U R C E _ D I R } / s u b p r o j e c t s / w l r o o t s / b u i l d / l i b w l r o o t s . s o . 1 2 0 3 2 # wlroots is provided by us
2022-03-21 16:13:43 +01:00
p i x m a n - 1
2022-03-24 17:17:08 +01:00
O p e n G L
G L E S v 2
p t h r e a d
2022-03-16 20:50:55 +01:00
$ { C M A K E _ T H R E A D _ L I B S _ I N I T }
2022-04-11 19:51:37 +02:00
$ { C M A K E _ S O U R C E _ D I R } / e x t - w o r k s p a c e - u n s t a b l e - v 1 - p r o t o c o l . o
2022-12-12 15:56:42 +01:00
$ { C M A K E _ S O U R C E _ D I R } / w l r - f o r e i g n - t o p l e v e l - m a n a g e m e n t - u n s t a b l e - v 1 - p r o t o c o l . o
2022-12-05 18:05:15 +01:00
$ { C M A K E _ S O U R C E _ D I R } / h y p r l a n d - t o p l e v e l - e x p o r t - v 1 - p r o t o c o l . o
2023-04-09 14:48:20 +02:00
$ { C M A K E _ S O U R C E _ D I R } / h y p r l a n d - g l o b a l - s h o r t c u t s - v 1 - p r o t o c o l . o
2023-01-20 19:44:30 +01:00
$ { C M A K E _ S O U R C E _ D I R } / f r a c t i o n a l - s c a l e - v 1 - p r o t o c o l . o
2023-03-14 13:57:50 +01:00
$ { C M A K E _ S O U R C E _ D I R } / t e x t - i n p u t - u n s t a b l e - v 1 - p r o t o c o l . o
2023-04-03 18:01:05 +02:00
$ { C M A K E _ S O U R C E _ D I R } / w l r - s c r e e n c o p y - u n s t a b l e - v 1 - p r o t o c o l . o
2023-02-27 13:32:38 +01:00
$ { C M A K E _ S O U R C E _ D I R } / s u b p r o j e c t s / u d i s 8 6 / b u i l d / l i b u d i s 8 6 / l i b l i b u d i s 8 6 . a
2022-03-16 20:50:55 +01:00
)