2023-02-09 11:57:26 +03:00
cmake_minimum_required ( VERSION 3.19 )
2023-01-11 19:41:03 +03:00
include ( CheckIncludeFile )
2023-01-06 17:21:42 +03:00
# Get version
file ( READ ${ CMAKE_CURRENT_SOURCE_DIR } /props.json PROPS )
string ( JSON VER GET ${ PROPS } version )
2022-03-16 22:50:55 +03:00
project ( Hyprland
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 17:21:42 +03:00
V E R S I O N $ { V E R }
2022-03-16 22:50:55 +03:00
)
set ( CMAKE_MESSAGE_LOG_LEVEL "STATUS" )
2022-10-27 13:26:35 +03:00
message ( STATUS "Gathering git info" )
2022-03-16 22:50:55 +03:00
2022-04-22 19:14:25 +03: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 19:29:32 +03:00
execute_process (
2022-12-09 16:57:39 +03: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 19:29:32 +03: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 19:33:30 +03:00
execute_process (
2022-10-22 09:23:52 +03: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 19:33:30 +03: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 19:14:25 +03:00
#
#
2022-10-27 13:26:35 +03:00
IF ( CMAKE_BUILD_TYPE MATCHES Debug OR CMAKE_BUILD_TYPE MATCHES DEBUG )
message ( STATUS "Configuring Hyprland in Debug with CMake" )
add_definitions ( -DHYPRLAND_DEBUG )
ELSE ( )
add_compile_options ( -O3 )
message ( STATUS "Configuring Hyprland in Release with CMake" )
ENDIF ( CMAKE_BUILD_TYPE MATCHES Debug OR CMAKE_BUILD_TYPE MATCHES DEBUG )
2022-06-12 23:57:03 +03:00
include_directories ( . PRIVATE "subprojects/wlroots/include/" )
2022-06-29 14:49:53 +03:00
include_directories ( . PRIVATE "subprojects/wlroots/build/include/" )
2023-02-27 15:32:38 +03:00
include_directories ( . PRIVATE "subprojects/udis86/" )
2022-11-22 00:20:51 +03:00
set ( CMAKE_CXX_STANDARD 23 )
add_compile_options ( -DWLR_USE_UNSTABLE )
2023-02-27 15:32:38 +03:00
add_compile_options ( -Wall -Wextra -Wno-unused-parameter -Wno-unused-value -Wno-missing-field-initializers -Wno-narrowing -Wno-pointer-arith )
2023-02-20 13:57:10 +03:00
ADD_LINK_OPTIONS ( -rdynamic )
SET ( CMAKE_ENABLE_EXPORTS TRUE )
2022-10-27 13:26:35 +03:00
message ( STATUS "Checking deps..." )
2022-03-16 22:50:55 +03:00
find_package ( Threads REQUIRED )
find_package ( PkgConfig REQUIRED )
2022-12-19 15:13:07 +03:00
pkg_check_modules ( deps REQUIRED IMPORTED_TARGET wayland-server wayland-client wayland-cursor wayland-protocols cairo libdrm egl xkbcommon libinput ) # we do not check for wlroots, as we provide it ourselves
2022-03-16 22:50:55 +03:00
file ( GLOB_RECURSE SRCFILES "src/*.cpp" )
add_executable ( Hyprland ${ SRCFILES } )
2023-02-20 17:15:15 +03:00
include ( CheckLibraryExists )
check_library_exists ( execinfo backtrace "" HAVE_LIBEXECINFO )
if ( HAVE_LIBEXECINFO )
target_link_libraries ( Hyprland PRIVATE execinfo )
endif ( )
2022-04-13 18:34:13 +03:00
IF ( LEGACY_RENDERER MATCHES true )
message ( STATUS "Using the legacy GLES2 renderer!" )
add_definitions ( -DLEGACY_RENDERER )
ENDIF ( LEGACY_RENDERER MATCHES true )
2022-04-20 16:58:02 +03:00
IF ( NO_XWAYLAND MATCHES true )
message ( STATUS "Using the NO_XWAYLAND flag, disabling XWayland!" )
add_definitions ( -DNO_XWAYLAND )
2022-03-16 22:50:55 +03:00
ELSE ( )
2022-10-27 13:26:35 +03:00
message ( STATUS "XWAYLAND Enabled (NO_XWAYLAND not defined) checking deps..." )
pkg_check_modules ( xcbdep REQUIRED xcb )
target_link_libraries ( Hyprland xcb )
ENDIF ( NO_XWAYLAND MATCHES true )
2022-03-16 22:50:55 +03:00
2023-01-05 22:17:55 +03:00
IF ( NO_SYSTEMD MATCHES true )
message ( STATUS "SYSTEMD support is disabled..." )
ELSE ( )
message ( STATUS "SYSTEMD support is requested (NO_SYSTEMD not defined) checking deps..." )
pkg_check_modules ( LIBSYSTEMD libsystemd )
2023-01-11 19:41:03 +03:00
check_include_file ( "systemd/sd-daemon.h" SYSTEMDH )
IF ( LIBSYSTEMD_FOUND AND SYSTEMDH )
2023-01-05 22:17:55 +03:00
add_definitions ( -DUSES_SYSTEMD )
target_link_libraries ( Hyprland "${LIBSYSTEMD_LIBRARIES}" )
ELSE ( )
2023-01-11 19:41:03 +03:00
message ( WARNING "Systemd support requested but libsystemd or systemd headers were not found" )
ENDIF ( LIBSYSTEMD_FOUND AND SYSTEMDH )
2023-01-05 22:17:55 +03:00
ENDIF ( NO_SYSTEMD MATCHES true )
2022-04-22 19:14:25 +03:00
target_compile_definitions ( Hyprland PRIVATE "-DGIT_COMMIT_HASH=\" ${ GIT_COMMIT_HASH } \"")
target_compile_definitions ( Hyprland PRIVATE "-DGIT_BRANCH=\" ${ GIT_BRANCH } \"")
2022-04-22 19:29:32 +03:00
target_compile_definitions ( Hyprland PRIVATE "-DGIT_COMMIT_MESSAGE=\" ${ GIT_COMMIT_MESSAGE } \"")
2022-04-22 19:33:30 +03:00
target_compile_definitions ( Hyprland PRIVATE "-DGIT_DIRTY=\" ${ GIT_DIRTY } \"")
2022-04-22 19:14:25 +03:00
2022-03-16 22:50:55 +03:00
target_link_libraries ( Hyprland rt )
set ( CPACK_PROJECT_NAME ${ PROJECT_NAME } )
set ( CPACK_PROJECT_VERSION ${ PROJECT_VERSION } )
include ( CPack )
2022-10-27 13:26:35 +03:00
message ( STATUS "Setting link libraries" )
2022-03-16 22:50:55 +03:00
target_link_libraries ( Hyprland PkgConfig::deps )
2022-12-12 17:38:50 +03:00
IF ( CMAKE_BUILD_TYPE MATCHES Debug OR CMAKE_BUILD_TYPE MATCHES DEBUG )
message ( STATUS "Setting debug flags" )
target_link_libraries ( Hyprland asan )
SET ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pg -no-pie -fno-builtin -fsanitize=address" )
SET ( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pg -no-pie -fno-builtin" )
SET ( CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -pg -no-pie -fno-builtin" )
ENDIF ( CMAKE_BUILD_TYPE MATCHES Debug OR CMAKE_BUILD_TYPE MATCHES DEBUG )
2022-03-16 22:50:55 +03:00
target_link_libraries ( Hyprland
2022-12-12 17:38:50 +03: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 18:13:43 +03:00
p i x m a n - 1
2022-03-24 19:17:08 +03:00
O p e n G L
G L E S v 2
p t h r e a d
2022-03-16 22:50:55 +03:00
$ { C M A K E _ T H R E A D _ L I B S _ I N I T }
2022-04-11 20:51:37 +03: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 17:56:42 +03: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 20:05:15 +03: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-01-20 21:44:30 +03: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-02-27 15:32:38 +03: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 22:50:55 +03:00
)