150 lines
3.4 KiB
CMake
150 lines
3.4 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(INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include")
|
|
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
|
|
)
|
|
|
|
option(BUILD_TESTING "Build tests" OFF)
|
|
|
|
add_executable(${APP_NAME}
|
|
${SOURCE_DIR}/wm.c
|
|
${SOURCE_DIR}/base/log.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
|
|
${SOURCE_DIR}/xres.c
|
|
${SOURCE_DIR}/status.c
|
|
${SOURCE_DIR}/audio.c
|
|
${SOURCE_DIR}/rect.c
|
|
${SOURCE_DIR}/wallpaper.c
|
|
${SOURCE_DIR}/config.c
|
|
${SOURCE_DIR}/renderer.c
|
|
${SOURCE_DIR}/image.c
|
|
${SOURCE_DIR}/tray.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
|
|
xcb-xrm
|
|
xkbcommon
|
|
xkbcommon-x11
|
|
|
|
cairo
|
|
cairo-xcb
|
|
pango
|
|
pangocairo
|
|
imlib2
|
|
|
|
libpulse-mainloop-glib
|
|
)
|
|
|
|
target_include_directories(${APP_NAME} SYSTEM
|
|
PRIVATE ${deps_INCLUDE_DIRS}
|
|
PRIVATE ${INCLUDE_DIR}
|
|
)
|
|
target_include_directories(${APP_NAME}
|
|
PRIVATE ${SOURCE_DIR}
|
|
PRIVATE ${BUILD_DIR}
|
|
)
|
|
|
|
target_link_libraries(${APP_NAME}
|
|
PRIVATE m
|
|
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)
|
|
|
|
if(BUILD_TESTING)
|
|
enable_testing()
|
|
add_subdirectory(tests)
|
|
endif()
|