aboutsummaryrefslogtreecommitdiff
path: root/rt/CMakeLists.txt
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)