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)