refactor: 迁移 CMake 到模块化目录构建并添加新入口
This commit is contained in:
115
CMakeLists.txt
115
CMakeLists.txt
@@ -10,8 +10,6 @@ set(SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src")
|
|||||||
set(INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include")
|
set(INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include")
|
||||||
set(BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}")
|
set(BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}")
|
||||||
|
|
||||||
add_compile_definitions(LOG_FILE="$ENV{HOME}/${APP_NAME}-log.txt")
|
|
||||||
|
|
||||||
# generate compile_commands.json for clangd
|
# generate compile_commands.json for clangd
|
||||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||||
|
|
||||||
@@ -28,58 +26,54 @@ project(${APP_NAME}
|
|||||||
option(BUILD_TESTING "Build tests" OFF)
|
option(BUILD_TESTING "Build tests" OFF)
|
||||||
|
|
||||||
add_executable(${APP_NAME}
|
add_executable(${APP_NAME}
|
||||||
${SOURCE_DIR}/wm.c
|
${SOURCE_DIR}/backend/output_utils.c
|
||||||
|
${SOURCE_DIR}/backend/x11/backend.c
|
||||||
|
${SOURCE_DIR}/backend/x11/event.c
|
||||||
|
${SOURCE_DIR}/backend/x11/window.c
|
||||||
|
|
||||||
|
${SOURCE_DIR}/base/color.c
|
||||||
${SOURCE_DIR}/base/log.c
|
${SOURCE_DIR}/base/log.c
|
||||||
${SOURCE_DIR}/buffer.c
|
${SOURCE_DIR}/base/window_list.c
|
||||||
${SOURCE_DIR}/backtrace.c
|
|
||||||
${SOURCE_DIR}/monitor.c
|
${SOURCE_DIR}/config/defaults.c
|
||||||
${SOURCE_DIR}/client.c
|
${SOURCE_DIR}/config/loader.c
|
||||||
${SOURCE_DIR}/text.c
|
${SOURCE_DIR}/config/runtime_config.c
|
||||||
${SOURCE_DIR}/color.c
|
|
||||||
${SOURCE_DIR}/xcursor.c
|
${SOURCE_DIR}/core/action.c
|
||||||
${SOURCE_DIR}/xwindow.c
|
${SOURCE_DIR}/core/binding.c
|
||||||
${SOURCE_DIR}/event.c
|
${SOURCE_DIR}/core/command_buffer.c
|
||||||
${SOURCE_DIR}/action.c
|
${SOURCE_DIR}/core/event.c
|
||||||
${SOURCE_DIR}/xkb.c
|
${SOURCE_DIR}/core/layer.c
|
||||||
${SOURCE_DIR}/atoms.c
|
${SOURCE_DIR}/core/layout.c
|
||||||
${SOURCE_DIR}/layout.c
|
${SOURCE_DIR}/core/plan.c
|
||||||
${SOURCE_DIR}/xres.c
|
${SOURCE_DIR}/core/policy.c
|
||||||
${SOURCE_DIR}/status.c
|
${SOURCE_DIR}/core/rules.c
|
||||||
${SOURCE_DIR}/audio.c
|
${SOURCE_DIR}/core/runtime.c
|
||||||
${SOURCE_DIR}/rect.c
|
${SOURCE_DIR}/core/state.c
|
||||||
${SOURCE_DIR}/wallpaper.c
|
${SOURCE_DIR}/core/window.c
|
||||||
${SOURCE_DIR}/config.c
|
|
||||||
${SOURCE_DIR}/renderer.c
|
${SOURCE_DIR}/layouts/fair.c
|
||||||
${SOURCE_DIR}/image.c
|
${SOURCE_DIR}/layouts/fullscreen.c
|
||||||
${SOURCE_DIR}/tray.c
|
${SOURCE_DIR}/layouts/maximize.c
|
||||||
|
|
||||||
|
${SOURCE_DIR}/main.c
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# target_compile_definitions(${APP_NAME}
|
||||||
|
# PRIVATE LOG_FILE="$ENV{HOME}/${APP_NAME}-log.txt"
|
||||||
|
# )
|
||||||
|
|
||||||
find_package(PkgConfig REQUIRED)
|
find_package(PkgConfig REQUIRED)
|
||||||
|
|
||||||
pkg_check_modules(deps REQUIRED
|
pkg_check_modules(deps REQUIRED
|
||||||
glib-2.0
|
|
||||||
|
|
||||||
x11
|
|
||||||
xcb
|
xcb
|
||||||
xcb-aux
|
xcb-aux
|
||||||
xcb-cursor
|
|
||||||
xcb-icccm
|
xcb-icccm
|
||||||
xcb-keysyms
|
xcb-keysyms
|
||||||
xcb-randr
|
xcb-randr
|
||||||
xcb-xfixes
|
xcb-xfixes
|
||||||
xcb-xinerama
|
xcb-xinerama
|
||||||
xcb-xkb
|
|
||||||
xcb-xrm
|
|
||||||
xkbcommon
|
xkbcommon
|
||||||
xkbcommon-x11
|
|
||||||
|
|
||||||
cairo
|
|
||||||
cairo-xcb
|
|
||||||
pango
|
|
||||||
pangocairo
|
|
||||||
imlib2
|
|
||||||
|
|
||||||
libpulse-mainloop-glib
|
|
||||||
)
|
)
|
||||||
|
|
||||||
target_include_directories(${APP_NAME} SYSTEM
|
target_include_directories(${APP_NAME} SYSTEM
|
||||||
@@ -96,53 +90,12 @@ target_link_libraries(${APP_NAME}
|
|||||||
PRIVATE ${deps_LIBRARIES}
|
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"
|
configure_file("${SOURCE_DIR}/app.h.in"
|
||||||
"${BUILD_DIR}/app.h"
|
"${BUILD_DIR}/app.h"
|
||||||
ESCAPE_QUOTES
|
ESCAPE_QUOTES
|
||||||
@ONLY
|
@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)
|
if(BUILD_TESTING)
|
||||||
enable_testing()
|
enable_testing()
|
||||||
add_subdirectory(tests)
|
add_subdirectory(tests)
|
||||||
|
|||||||
57
src/main.c
Normal file
57
src/main.c
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
#include <errno.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include "base/log.h"
|
||||||
|
#include "config/runtime_config.h"
|
||||||
|
#include "core/backend.h"
|
||||||
|
#include "core/runtime.h"
|
||||||
|
|
||||||
|
static void bootstrap(runtime_t *runtime) {
|
||||||
|
auto backend = backend_create(nullptr);
|
||||||
|
auto detect = backend_detect(backend);
|
||||||
|
if (!backend || !detect || detect->output_count == 0) {
|
||||||
|
fatal("backend detect failed");
|
||||||
|
}
|
||||||
|
|
||||||
|
runtime_init_desc_t desc = {
|
||||||
|
.backend = backend,
|
||||||
|
.outputs = detect->outputs,
|
||||||
|
.output_count = detect->output_count,
|
||||||
|
};
|
||||||
|
if (!runtime_config_load(nullptr, &desc)) {
|
||||||
|
fatal("failed to build runtime inputs");
|
||||||
|
}
|
||||||
|
|
||||||
|
backend = nullptr;
|
||||||
|
|
||||||
|
bool inited = runtime_init(runtime, &desc);
|
||||||
|
|
||||||
|
runtime_init_desc_cleanup(&desc);
|
||||||
|
backend_detect_destroy(detect);
|
||||||
|
|
||||||
|
if (!inited) {
|
||||||
|
fatal("runtime init failed");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
char **cmd_argv = nullptr;
|
||||||
|
|
||||||
|
int main(int argc, char *argv[]) {
|
||||||
|
cmd_argv = argv;
|
||||||
|
|
||||||
|
runtime_t runtime = {0};
|
||||||
|
|
||||||
|
bootstrap(&runtime);
|
||||||
|
runtime_setup(&runtime);
|
||||||
|
runtime_scan(&runtime);
|
||||||
|
runtime_run(&runtime);
|
||||||
|
runtime_shutdown(&runtime);
|
||||||
|
|
||||||
|
if (runtime.will_restart) {
|
||||||
|
execvp(cmd_argv[0], cmd_argv);
|
||||||
|
fatal("execvp() failed: %s", strerror(errno));
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user