summaryrefslogtreecommitdiffstats
path: root/src/pybind/mgr/dashboard/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'src/pybind/mgr/dashboard/CMakeLists.txt')
-rw-r--r--src/pybind/mgr/dashboard/CMakeLists.txt133
1 files changed, 133 insertions, 0 deletions
diff --git a/src/pybind/mgr/dashboard/CMakeLists.txt b/src/pybind/mgr/dashboard/CMakeLists.txt
new file mode 100644
index 00000000..b6c78618
--- /dev/null
+++ b/src/pybind/mgr/dashboard/CMakeLists.txt
@@ -0,0 +1,133 @@
+set(MGR_DASHBOARD_VIRTUALENV ${CEPH_BUILD_VIRTUALENV}/mgr-dashboard-virtualenv)
+
+add_custom_target(mgr-dashboard-test-venv
+ COMMAND
+ ${CMAKE_SOURCE_DIR}/src/tools/setup-virtualenv.sh --python=${MGR_PYTHON_EXECUTABLE} ${MGR_DASHBOARD_VIRTUALENV}
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard
+ COMMENT "dashboard tests virtualenv is being created")
+add_dependencies(tests mgr-dashboard-test-venv)
+
+include(CMakeParseArguments)
+function(add_npm_command)
+ set(options NODEENV)
+ set(single_kw OUTPUT COMMENT WORKING_DIRECTORY)
+ set(multi_kw COMMAND DEPENDS)
+ cmake_parse_arguments(NC "${options}" "${single_kw}" "${multi_kw}" ${ARGN})
+ string(REPLACE ";" " " command "${NC_COMMAND}")
+ if(NC_NODEENV)
+ string(REGEX REPLACE "^(.*(npm|npx) .*)$" ". ${mgr-dashboard-nodeenv-dir}/bin/activate && \\1 && deactivate" command ${command})
+ endif()
+ string(REPLACE " " ";" command "${command}")
+ add_custom_command(
+ OUTPUT "${NC_OUTPUT}"
+ COMMAND ${command}
+ DEPENDS ${NC_DEPENDS}
+ WORKING_DIRECTORY "${NC_WORKING_DIRECTORY}"
+ COMMENT ${NC_COMMENT})
+endfunction(add_npm_command)
+
+if(WITH_MGR_DASHBOARD_FRONTEND AND NOT CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|AARCH64|arm|ARM")
+
+if(WITH_SYSTEM_NPM)
+ set(mgr-dashboard-nodeenv-dir )
+ set(nodeenv "")
+ add_custom_target(mgr-dashboard-frontend-deps
+ DEPENDS frontend/node_modules
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard/frontend
+ )
+else()
+ set(mgr-dashboard-nodeenv-dir ${CMAKE_CURRENT_BINARY_DIR}/node-env)
+ set(nodeenv NODEENV)
+
+ add_custom_command(
+ OUTPUT "${mgr-dashboard-nodeenv-dir}/bin/npm"
+ COMMAND ${CMAKE_SOURCE_DIR}/src/tools/setup-virtualenv.sh --python=${MGR_PYTHON_EXECUTABLE} ${mgr-dashboard-nodeenv-dir}
+ COMMAND ${mgr-dashboard-nodeenv-dir}/bin/pip install nodeenv
+ COMMAND ${mgr-dashboard-nodeenv-dir}/bin/nodeenv -p --node=10.13.0
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ COMMENT "dashboard nodeenv is being installed"
+ )
+ add_custom_target(mgr-dashboard-nodeenv
+ DEPENDS ${mgr-dashboard-nodeenv-dir}/bin/npm
+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ )
+ add_custom_target(mgr-dashboard-frontend-deps
+ DEPENDS frontend/node_modules mgr-dashboard-nodeenv
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard/frontend
+ )
+endif()
+
+add_npm_command(
+ OUTPUT "${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard/frontend/node_modules"
+ COMMAND npm ci
+ DEPENDS frontend/package.json
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard/frontend
+ COMMENT "dashboard frontend dependencies are being installed"
+ ${nodeenv}
+)
+
+# Glob some frontend files. With CMake 3.6, this can be simplified
+# to *.ts *.html. Just add:
+# list(FILTER frontend_src INCLUDE REGEX "frontend/src")
+file(
+ GLOB_RECURSE frontend_src
+ frontend/src/*.ts
+ frontend/src/*.html
+ frontend/src/*/*.ts
+ frontend/src/*/*.html
+ frontend/src/*/*/*.ts
+ frontend/src/*/*/*.html
+ frontend/src/*/*/*/*.ts
+ frontend/src/*/*/*/*.html
+ frontend/src/*/*/*/*/*.ts
+ frontend/src/*/*/*/*/*.html
+ frontend/src/*/*/*/*/*/*.ts
+ frontend/src/*/*/*/*/*/*.html)
+
+# these files are generated during build
+list(REMOVE_ITEM frontend_src
+ ${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard/frontend/src/environments/environment.prod.ts
+ ${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard/frontend/src/environments/environment.ts)
+
+execute_process(
+ COMMAND bash -c "jq -r .config.locale ${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard/frontend/package.json"
+ OUTPUT_VARIABLE default_lang
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+if(DASHBOARD_FRONTEND_LANGS)
+ string(STRIP "${DASHBOARD_FRONTEND_LANGS}" DASHBOARD_FRONTEND_LANGS)
+ if(DASHBOARD_FRONTEND_LANGS STREQUAL "ALL")
+ set(build_target ":*")
+ else()
+ string(FIND "${DASHBOARD_FRONTEND_LANGS}" "${default_lang}" default_idx)
+ if (default_idx EQUAL -1)
+ # default language must be always built
+ string(CONCAT DASHBOARD_FRONTEND_LANGS "${DASHBOARD_FRONTEND_LANGS}" ",${default_lang}")
+ endif()
+ set(build_target ":\{${DASHBOARD_FRONTEND_LANGS}\}")
+ endif()
+else(DASHBOARD_FRONTEND_LANGS)
+ set(build_target ":${default_lang}")
+endif(DASHBOARD_FRONTEND_LANGS)
+
+if(NOT CMAKE_BUILD_TYPE STREQUAL Debug)
+ set(npm_args "-- --prod --progress=false")
+else()
+ set(npm_args "-- --progress=false")
+endif()
+
+add_npm_command(
+ OUTPUT "${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard/frontend/dist"
+ COMMAND npx npm-run-all --print-label --parallel --max-parallel 2 "\"build${build_target} -- ${npm_args}\""
+ DEPENDS ${frontend_src} frontend/node_modules
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard/frontend
+ COMMENT "dashboard frontend is being created"
+ ${nodeenv}
+)
+add_custom_target(mgr-dashboard-frontend-build
+ ALL
+ DEPENDS frontend/dist mgr-dashboard-frontend-deps
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src/pybind/mgr/dashboard/frontend)
+
+add_dependencies(tests mgr-dashboard-frontend-build)
+endif(WITH_MGR_DASHBOARD_FRONTEND AND NOT CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|AARCH64|arm|ARM")