blob: 742d2f0c7304ce118748802be547fa1922b1d2e2 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
|
cmake_minimum_required(VERSION 3.10)
project (
montis
VERSION 0.1
LANGUAGES C)
set(CMAKE_VERBOSE_MAKEFILE ON)
set(CMAKE_BUILD_TYPE Debug)
set(WLROOTS_VERSION "0.18")
set(WLROOTS_URL "https://gitlab.freedesktop.org/wlroots/wlroots/-/archive/${WLROOTS_VERSION}/wlroots-${WLROOTS_VERSION}.tar.gz")
set(WLROOTS_TARBALL "${CMAKE_BINARY_DIR}/wlroots-${WLROOTS_VERSION}.tar.gz")
set(WLROOTS_SOURCE_DIR "${CMAKE_BINARY_DIR}/wlroots-src")
set(WLROOTS_BUILD_DIR "${CMAKE_BINARY_DIR}/wlroots")
set(WLROOTS_LIB_STATIC "${WLROOTS_BUILD_DIR}/libwlroots-${WLROOTS_VERSION}.a")
set(WLROOTS_LIB_LINK "${WLROOTS_BUILD_DIR}/libwlroots.a")
add_custom_command(
OUTPUT "${WLROOTS_LIB_LINK}"
COMMAND sh -c "if [ ! -d \"$1\" ]; then mkdir -p \"$1\" && curl -L \"$2\" | tar xzf - --strip-components=1 -C \"$1\"; fi" sh "${WLROOTS_SOURCE_DIR}" "${WLROOTS_URL}"
COMMAND "${CMAKE_COMMAND}" -E make_directory "${WLROOTS_BUILD_DIR}"
COMMAND meson setup --reconfigure -Ddefault_library=static "${WLROOTS_BUILD_DIR}" "${WLROOTS_SOURCE_DIR}"
COMMAND meson compile -C "${WLROOTS_BUILD_DIR}"
COMMAND "${CMAKE_COMMAND}" -E create_symlink "${WLROOTS_LIB_STATIC}" "${WLROOTS_LIB_LINK}"
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
COMMENT "Building wlroots via Meson (static)"
VERBATIM
)
include_directories(include/ /usr/include/pixman-1
${CMAKE_CURRENT_BINARY_DIR}/
${WLROOTS_SOURCE_DIR}/include
${WLROOTS_BUILD_DIR}/include
${WLROOTS_BUILD_DIR}/protocol
)
add_definitions(-DWLR_USE_UNSTABLE)
execute_process(
COMMAND pkg-config --variable=pkgdatadir wayland-protocols
OUTPUT_VARIABLE WAYLAND_PROTOCOLS
RESULT_VARIABLE ec
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(${ec} EQUAL 0)
else()
message(FATAL_ERROR "Failed to execute pkg-config")
endif()
execute_process(
COMMAND pkg-config --variable=wayland_scanner wayland-scanner
OUTPUT_VARIABLE WAYLAND_SCANNER
RESULT_VARIABLE ec
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(${ec} EQUAL 0)
else()
message(FATAL_ERROR "Failed to execute pkg-config")
endif()
set(PLUGIN_INTF ${CMAKE_BINARY_DIR}/plugin_interface.h)
add_custom_command(
OUTPUT ${PLUGIN_INTF}
COMMAND perl ${PROJECT_SOURCE_DIR}/tools/genintf.pl <
${PROJECT_SOURCE_DIR}/include/plugin.h > ${PLUGIN_INTF}
DEPENDS ${PROJECT_SOURCE_DIR}/include/plugin.h
DEPENDS ${PROJECT_SOURCE_DIR}/tools/genintf.pl
)
set(PLUGIN_LOAD ${CMAKE_BINARY_DIR}/gen_plugin_load.c)
add_custom_command(
OUTPUT ${PLUGIN_LOAD}
COMMAND perl ${PROJECT_SOURCE_DIR}/tools/genbuild.pl <
${PROJECT_SOURCE_DIR}/include/plugin.h > ${PLUGIN_LOAD}
DEPENDS ${PROJECT_SOURCE_DIR}/include/plugin.h
DEPENDS ${PROJECT_SOURCE_DIR}/tools/genbuild.pl
)
add_custom_command(
OUTPUT xdg-shell-protocol.h
COMMAND ${WAYLAND_SCANNER} server-header
${WAYLAND_PROTOCOLS}/stable/xdg-shell/xdg-shell.xml
xdg-shell-protocol.h
)
add_custom_command(
OUTPUT xdg-shell-protocol.c
COMMAND ${WAYLAND_SCANNER} private-code
${WAYLAND_PROTOCOLS}/stable/xdg-shell/xdg-shell.xml
xdg-shell-protocol.c
DEPENDS xdg-shell-protocol.h
)
file (GLOB_RECURSE SOURCES src/*.c)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
add_executable (montis ${SOURCES} ${PLUGIN_LOAD} ${PLUGIN_INTF} ${WLROOTS_LIB_LINK}
xdg-shell-protocol.c)
find_package(PkgConfig REQUIRED)
pkg_check_modules(WLREQ REQUIRED IMPORTED_TARGET
wayland-server
wayland-client
wayland-egl
wayland-cursor
xkbcommon
pixman-1
libinput
libudev
libseat
libdrm
gbm
egl
glesv2
)
target_link_libraries(montis PRIVATE PkgConfig::WLREQ dl pthread ${WLROOTS_LIB_LINK})
pkg_check_modules(WLOPT IMPORTED_TARGET
cairo
lcms2
libdisplay-info
libliftoff
vulkan
xwayland
xcb
xcb-composite
xcb-dri3
xcb-errors
xcb-ewmh
xcb-icccm
xcb-present
xcb-render
xcb-renderutil
xcb-res
xcb-shm
xcb-xfixes
xcb-xinput
)
if(WLOPT_FOUND)
target_link_libraries(montis PRIVATE PkgConfig::WLOPT)
endif()
target_link_directories(montis PUBLIC
"${WLROOTS_BUILD_DIR}")
target_link_options(montis PRIVATE -rdynamic)
|