Skip to content

Commit 5f4759f

Browse files
committed
Add editable dependency mode for local development
1 parent 3d53b0c commit 5f4759f

3 files changed

Lines changed: 51 additions & 10 deletions

File tree

CMakeLists.txt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ endif()
1111
option(WASM_AUTO_FETCH_TOOLS "Auto-download missing tools during configure" ON)
1212
option(WEBVULKAN_BUILD_TESTS "Build maintainer smoke tests" OFF)
1313
option(WEBVULKAN_ALLOW_DEP_UPDATES "Allow dependency git update during configure" OFF)
14+
option(WEBVULKAN_DEPS_EDITABLE "Use editable local dependency checkouts without automatic git reset/update" OFF)
1415
set(WASM_EMSDK_VERSION "latest" CACHE STRING "emsdk version or tag")
1516
set(WASM_EMSDK_GIT_URL "https://github.com/emscripten-core/emsdk.git" CACHE STRING "emsdk git repository URL")
1617
set(WASM_EMSDK_GIT_REF "14c18b569f55138fe4963924162244251f454fb0" CACHE STRING "Pinned emsdk git ref")
@@ -25,7 +26,7 @@ set(WASM_BUILD_DIR "${WEBVULKAN_BUILD_DIR}/wasm" CACHE PATH "WASM sub-build dire
2526
set(WEBVULKAN_EMSCRIPTEN_TOOLCHAIN_FILE "${PROJECT_SOURCE_DIR}/cmake/toolchains/WebVulkanEmscripten.cmake" CACHE FILEPATH "Custom Emscripten toolchain file")
2627
set(MESA_SRC_DIR "${WEBVULKAN_THIRDPARTY_DIR}/mesa" CACHE PATH "Path where Mesa is cloned")
2728
set(MESA_GIT_URL "https://github.com/Devsh-Graphics-Programming/mesa.git" CACHE STRING "Mesa git repository URL")
28-
set(MESA_GIT_REF "ca61cf8e8fcf6b2e57ca714ecc3fdb7d5699cf64" CACHE STRING "Pinned Mesa git ref")
29+
set(MESA_GIT_REF "caeeea677046411288c1a5155d81b27640aedd3a" CACHE STRING "Pinned Mesa git ref")
2930
set(MESA_WASM_BUILD_DIR "${WEBVULKAN_BUILD_DIR}/mesa-wasm" CACHE PATH "Mesa WASM build directory")
3031
set(LLVM_SRC_DIR "${WEBVULKAN_THIRDPARTY_DIR}/llvm-project" CACHE PATH "Path where llvm-project is cloned")
3132
set(LLVM_HOST_BUILD_DIR "${WEBVULKAN_BUILD_DIR}/llvm-host-tools" CACHE PATH "LLVM host tools build directory")
@@ -58,7 +59,10 @@ endif()
5859

5960
set(CPM_SOURCE_CACHE "${WEBVULKAN_CPM_SOURCE_CACHE}" CACHE PATH "CPM source cache path" FORCE)
6061
set(FETCHCONTENT_QUIET OFF)
61-
if(WEBVULKAN_ALLOW_DEP_UPDATES)
62+
if(WEBVULKAN_DEPS_EDITABLE)
63+
set(_WEBVULKAN_FETCH_UPDATES_DISCONNECTED ON)
64+
message(STATUS "WEBVULKAN_DEPS_EDITABLE=ON: local dependency checkouts are used without remote updates")
65+
elseif(WEBVULKAN_ALLOW_DEP_UPDATES)
6266
set(_WEBVULKAN_FETCH_UPDATES_DISCONNECTED OFF)
6367
else()
6468
set(_WEBVULKAN_FETCH_UPDATES_DISCONNECTED ON)

cmake/FetchWebVulkanSources.cmake

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,17 @@ function(webvulkan_fetch_git_source NAME)
6565
_webvulkan_state_file_for_source("${NAME}" _state_file)
6666
_webvulkan_source_state_key("${FETCH_REPOSITORY}" "${FETCH_TAG}" _state_key)
6767

68+
set(_editable_mode OFF)
69+
if(DEFINED WEBVULKAN_DEPS_EDITABLE AND WEBVULKAN_DEPS_EDITABLE)
70+
set(_editable_mode ON)
71+
endif()
72+
73+
if(EXISTS "${FETCH_SOURCE_DIR}/.git" AND _editable_mode)
74+
file(WRITE "${_state_file}" "${_state_key}\n")
75+
message(STATUS "Using editable source for ${NAME} from ${FETCH_SOURCE_DIR}")
76+
return()
77+
endif()
78+
6879
set(_should_fetch ON)
6980
if(EXISTS "${FETCH_SOURCE_DIR}/.git")
7081
set(_should_fetch OFF)

tests/CMakeLists.txt

Lines changed: 34 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@ if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
55
endif()
66

77
set(WEBVULKAN_TEST_THIRDPARTY_DIR "${CMAKE_CURRENT_LIST_DIR}/../.3rdparty/tests" CACHE PATH "Test-only third-party root directory")
8+
set(WEBVULKAN_THIRDPARTY_STATE_DIR "${CMAKE_CURRENT_LIST_DIR}/../.3rdparty/.state" CACHE PATH "State directory for fetched third-party metadata")
89
set(WEBVULKAN_VOLK_GIT_URL "https://github.com/zeux/volk.git" CACHE STRING "volk git repository URL for smoke tests")
910
set(WEBVULKAN_VOLK_GIT_REF "1.4.304" CACHE STRING "Pinned volk git ref for smoke tests")
11+
set(WEBVULKAN_TEST_VOLK_SOURCE_DIR "${WEBVULKAN_TEST_THIRDPARTY_DIR}/volk" CACHE PATH "Path where volk is cloned for smoke tests")
1012

1113
set(WEBVULKAN_TEST_MODE "auto" CACHE STRING "Test mode: auto, in-tree, or package")
1214
set_property(CACHE WEBVULKAN_TEST_MODE PROPERTY STRINGS auto in-tree package)
@@ -26,7 +28,13 @@ if(NOT COMMAND CPMAddPackage)
2628
if(NOT DEFINED WEBVULKAN_ALLOW_DEP_UPDATES)
2729
set(WEBVULKAN_ALLOW_DEP_UPDATES OFF CACHE BOOL "Allow dependency git update during configure")
2830
endif()
29-
if(WEBVULKAN_ALLOW_DEP_UPDATES)
31+
set(_webvulkan_allow_dep_updates "${WEBVULKAN_ALLOW_DEP_UPDATES}")
32+
if(NOT DEFINED WEBVULKAN_DEPS_EDITABLE)
33+
set(WEBVULKAN_DEPS_EDITABLE OFF CACHE BOOL "Use editable local dependency checkouts without automatic git reset/update")
34+
endif()
35+
if(WEBVULKAN_DEPS_EDITABLE)
36+
set(CPM_UPDATE_DISCONNECTED ON CACHE BOOL "CPM update disconnected mode" FORCE)
37+
elseif(_webvulkan_allow_dep_updates)
3038
set(CPM_UPDATE_DISCONNECTED OFF CACHE BOOL "CPM update disconnected mode" FORCE)
3139
else()
3240
set(CPM_UPDATE_DISCONNECTED ON CACHE BOOL "CPM update disconnected mode" FORCE)
@@ -95,13 +103,31 @@ if(NOT SUBBUILD_GENERATOR)
95103
message(FATAL_ERROR "No CMake generator is available for wasm smoke sub-build")
96104
endif()
97105

98-
CPMAddPackage(
99-
NAME webvulkan_volk
100-
GIT_REPOSITORY "${WEBVULKAN_VOLK_GIT_URL}"
101-
GIT_TAG "${WEBVULKAN_VOLK_GIT_REF}"
102-
GIT_SHALLOW TRUE
103-
DOWNLOAD_ONLY YES
104-
)
106+
if(NOT COMMAND webvulkan_fetch_git_source)
107+
set(_webvulkan_root_fetch_sources "${CMAKE_CURRENT_LIST_DIR}/../cmake/FetchWebVulkanSources.cmake")
108+
if(EXISTS "${_webvulkan_root_fetch_sources}")
109+
include("${_webvulkan_root_fetch_sources}")
110+
endif()
111+
endif()
112+
113+
if(COMMAND webvulkan_fetch_git_source)
114+
webvulkan_fetch_git_source(webvulkan_volk
115+
REPOSITORY "${WEBVULKAN_VOLK_GIT_URL}"
116+
TAG "${WEBVULKAN_VOLK_GIT_REF}"
117+
SOURCE_DIR "${WEBVULKAN_TEST_VOLK_SOURCE_DIR}"
118+
)
119+
set(webvulkan_volk_SOURCE_DIR "${WEBVULKAN_TEST_VOLK_SOURCE_DIR}")
120+
else()
121+
CPMAddPackage(
122+
NAME webvulkan_volk
123+
GIT_REPOSITORY "${WEBVULKAN_VOLK_GIT_URL}"
124+
GIT_TAG "${WEBVULKAN_VOLK_GIT_REF}"
125+
GIT_SHALLOW TRUE
126+
GIT_REMOTE_UPDATE_STRATEGY CHECKOUT
127+
SOURCE_DIR "${WEBVULKAN_TEST_VOLK_SOURCE_DIR}"
128+
DOWNLOAD_ONLY YES
129+
)
130+
endif()
105131
set(_webvulkan_volk_include_dir "${webvulkan_volk_SOURCE_DIR}")
106132
set(_webvulkan_volk_source "${webvulkan_volk_SOURCE_DIR}/volk.c")
107133
set(_webvulkan_volk_header "${webvulkan_volk_SOURCE_DIR}/volk.h")

0 commit comments

Comments
 (0)