Files
zdwm/CMakeLists.txt

127 lines
2.9 KiB
CMake

cmake_minimum_required(VERSION 3.24)
# use GNU23
set(CMAKE_C_STANDARD 23)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS ON)
set(APP_NAME "zdwm")
set(SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src")
set(BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}")
add_compile_definitions(LOG_FILE="$ENV{HOME}/${APP_NAME}-log.txt")
# generate compile_commands.json for clangd
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# compile flags
add_compile_options(-g)
add_compile_options(-Wall)
# add_link_options(-fsanitize=address)
project(${APP_NAME}
VERSION 0.0.1
LANGUAGES C
)
add_executable(${APP_NAME}
${SOURCE_DIR}/wm.c
${SOURCE_DIR}/utils.c
${SOURCE_DIR}/buffer.c
${SOURCE_DIR}/backtrace.c
${SOURCE_DIR}/monitor.c
${SOURCE_DIR}/client.c
${SOURCE_DIR}/text.c
${SOURCE_DIR}/color.c
${SOURCE_DIR}/xcursor.c
${SOURCE_DIR}/xwindow.c
${SOURCE_DIR}/event.c
${SOURCE_DIR}/action.c
${SOURCE_DIR}/xkb.c
${SOURCE_DIR}/atoms.c
${SOURCE_DIR}/layout.c
)
find_package(PkgConfig REQUIRED)
pkg_check_modules(deps REQUIRED
glib-2.0
x11
xcb
xcb-aux
xcb-cursor
xcb-icccm
xcb-keysyms
xcb-randr
xcb-xfixes
xcb-xinerama
xcb-xkb
xkbcommon-x11
cairo
cairo-xcb
pango
pangocairo
)
target_include_directories(${APP_NAME} SYSTEM
PRIVATE ${deps_INCLUDE_DIRS}
)
target_include_directories(${APP_NAME}
PRIVATE ${SOURCE_DIR}
PRIVATE ${BUILD_DIR}
)
target_link_libraries(${APP_NAME}
PRIVATE ${deps_LIBRARIES}
)
## 配置项
# Check for backtrace_symbols()
include(CheckSymbolExists)
check_symbol_exists(backtrace_symbols execinfo.h HAS_EXECINFO)
if(NOT HAS_EXECINFO)
find_library(LIB_EXECINFO execinfo)
if(LIB_EXECINFO)
set(HAS_EXECINFO TRUE)
target_link_libraries(${APP_NAME} ${LIB_EXECINFO})
endif()
endif()
if(HAS_EXECINFO)
message(STATUS "checking for execinfo -- found")
else()
message(STATUS "checking for execinfo -- not found")
endif()
configure_file("${SOURCE_DIR}/app.h.in"
"${BUILD_DIR}/app.h"
ESCAPE_QUOTES
@ONLY
)
set(ATOM_LIST_FILE "${SOURCE_DIR}/atoms-list.txt")
add_custom_command(
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/build-utils/atoms-extern.sh
ARGS ${ATOM_LIST_FILE} > ${BUILD_DIR}/atoms-extern.h
OUTPUT ${BUILD_DIR}/atoms-extern.h
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS ${ATOM_LIST_FILE}
COMMENT "Generating atoms-extern.h"
VERBATIM
)
add_custom_command(
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/build-utils/atoms-intern.sh
ARGS ${ATOM_LIST_FILE} > ${BUILD_DIR}/atoms-intern.h
OUTPUT ${BUILD_DIR}/atoms-intern.h
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS ${ATOM_LIST_FILE}
COMMENT "Generating atoms-intern.h"
VERBATIM
)
add_custom_target(generate_atoms
DEPENDS ${BUILD_DIR}/atoms-extern.h ${BUILD_DIR}/atoms-intern.h
)
add_dependencies(${APP_NAME} generate_atoms)