11set (TARGET sd-server)
22
3+ option (SD_SERVER_BUILD_FRONTEND "Build server frontend with pnpm" ON )
4+
5+ set (FRONTEND_DIR "${CMAKE_CURRENT_SOURCE_DIR} /frontend" )
6+ set (GENERATED_HTML_HEADER "${FRONTEND_DIR} /dist/gen_index_html.h" )
7+
8+ set (HAVE_FRONTEND_BUILD OFF )
9+
10+ if (SD_SERVER_BUILD_FRONTEND AND EXISTS "${FRONTEND_DIR} " )
11+ if (WIN32 )
12+ find_program (PNPM_EXECUTABLE NAMES pnpm.cmd pnpm )
13+ else ()
14+ find_program (PNPM_EXECUTABLE NAMES pnpm )
15+ endif ()
16+
17+ if (PNPM_EXECUTABLE)
18+ message (STATUS "Frontend dir found: ${FRONTEND_DIR} " )
19+ message (STATUS "pnpm found: ${PNPM_EXECUTABLE} " )
20+
21+ set (HAVE_FRONTEND_BUILD ON )
22+
23+ add_custom_target (${TARGET} _frontend_install
24+ COMMAND "${PNPM_EXECUTABLE} " -C "${FRONTEND_DIR} " install
25+ WORKING_DIRECTORY "${FRONTEND_DIR} "
26+ COMMENT "Installing frontend dependencies"
27+ VERBATIM
28+ )
29+
30+ add_custom_target (${TARGET} _frontend_build
31+ COMMAND "${PNPM_EXECUTABLE} " -C "${FRONTEND_DIR} " run build
32+ WORKING_DIRECTORY "${FRONTEND_DIR} "
33+ COMMENT "Building frontend"
34+ VERBATIM
35+ )
36+
37+ add_custom_target (${TARGET} _frontend_header
38+ COMMAND "${PNPM_EXECUTABLE} " -C "${FRONTEND_DIR} " run build :header
39+ WORKING_DIRECTORY "${FRONTEND_DIR} "
40+ COMMENT "Generating gen_index_html.h"
41+ VERBATIM
42+ )
43+
44+ add_dependencies (${TARGET} _frontend_build ${TARGET} _frontend_install )
45+ add_dependencies (${TARGET} _frontend_header ${TARGET} _frontend_build )
46+
47+ add_custom_target (${TARGET} _frontend
48+ DEPENDS ${TARGET} _frontend_header
49+ )
50+
51+ set_source_files_properties ("${GENERATED_HTML_HEADER} " PROPERTIES GENERATED TRUE )
52+ else ()
53+ message (WARNING "pnpm not found, frontend build disabled" )
54+ endif ()
55+ else ()
56+ message (STATUS "Frontend disabled or directory not found: ${FRONTEND_DIR} " )
57+ endif ()
58+
359add_executable (${TARGET} main.cpp )
60+
61+ if (HAVE_FRONTEND_BUILD)
62+ add_dependencies (${TARGET} ${TARGET} _frontend )
63+ target_sources (${TARGET} PRIVATE "${GENERATED_HTML_HEADER} " )
64+ target_include_directories (${TARGET} PRIVATE "${FRONTEND_DIR} /dist" )
65+ target_compile_definitions (${TARGET} PRIVATE HAVE_INDEX_HTML )
66+ message (STATUS "HAVE_INDEX_HTML enabled" )
67+ else ()
68+ message (STATUS "HAVE_INDEX_HTML disabled" )
69+ endif ()
70+
471install (TARGETS ${TARGET} RUNTIME )
572target_link_libraries (${TARGET} PRIVATE stable-diffusion ${CMAKE_THREAD_LIBS_INIT} )
673target_compile_features (${TARGET} PUBLIC c_std_11 cxx_std_17 )
0 commit comments