set(DIST_DIR "${UI_BINARY_DIR}/dist")
set(SRC_DIST_DIR "${UI_SOURCE_DIR}/dist")
+set(WORK_DIR "${UI_BINARY_DIR}/ui-src")
set(STAMP_FILE "${UI_BINARY_DIR}/.ui-stamp")
set(UI_CPP "${UI_BINARY_DIR}/ui.cpp")
set(UI_H "${UI_BINARY_DIR}/ui.h")
set(${out_var} TRUE PARENT_SCOPE)
endfunction()
+function(stage_sources)
+ if(EXISTS "${WORK_DIR}")
+ file(GLOB staged RELATIVE "${WORK_DIR}" "${WORK_DIR}/*")
+ list(REMOVE_ITEM staged "node_modules")
+ foreach(entry ${staged})
+ file(REMOVE_RECURSE "${WORK_DIR}/${entry}")
+ endforeach()
+ endif()
+
+ file(COPY "${UI_SOURCE_DIR}/"
+ DESTINATION "${WORK_DIR}"
+ NO_SOURCE_PERMISSIONS
+ PATTERN "node_modules" EXCLUDE
+ )
+endfunction()
+
function(npm_build out_var)
set(${out_var} FALSE PARENT_SCOPE)
return()
endif()
+ stage_sources()
+
# npm writes node_modules/.package-lock.json on every successful install,
# so a package-lock.json newer than this marker means node_modules is stale
- set(NPM_MARKER "${UI_SOURCE_DIR}/node_modules/.package-lock.json")
+ set(NPM_MARKER "${WORK_DIR}/node_modules/.package-lock.json")
set(need_install FALSE)
if(NOT EXISTS "${NPM_MARKER}")
set(need_install TRUE)
else()
- file(TIMESTAMP "${UI_SOURCE_DIR}/package-lock.json" lock_ts)
+ file(TIMESTAMP "${WORK_DIR}/package-lock.json" lock_ts)
file(TIMESTAMP "${NPM_MARKER}" marker_ts)
if(lock_ts STRGREATER marker_ts)
set(need_install TRUE)
message(STATUS "UI: running npm install")
execute_process(
COMMAND ${NPM_EXECUTABLE} install
- WORKING_DIRECTORY "${UI_SOURCE_DIR}"
+ WORKING_DIRECTORY "${WORK_DIR}"
RESULT_VARIABLE rc
ERROR_VARIABLE err
)
execute_process(
COMMAND ${CMAKE_COMMAND} -E env "LLAMA_UI_OUT_DIR=${DIST_DIR}" "LLAMA_UI_VERSION=${HF_VERSION}" "LLAMA_BUILD_NUMBER=${LLAMA_BUILD_NUMBER}"
${NPM_EXECUTABLE} run build
- WORKING_DIRECTORY "${UI_SOURCE_DIR}"
+ WORKING_DIRECTORY "${WORK_DIR}"
RESULT_VARIABLE rc
ERROR_VARIABLE err
)