Skip to content

Commit f4dbf94

Browse files
committed
Move ExternalData refs into build tree
1 parent 71e76b0 commit f4dbf94

3 files changed

Lines changed: 43 additions & 14 deletions

File tree

cmake/NablaAssetManifests.cmake

Lines changed: 42 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,26 @@ function(_nam_validate_file_link_mode MODE_VALUE OUT_VAR)
2727
endfunction()
2828

2929
function(_nam_detect_file_link_mode OUT_VAR)
30-
set(_probe_root "${CMAKE_CURRENT_BINARY_DIR}/.nam_probe")
31-
file(MAKE_DIRECTORY "${_probe_root}")
32-
set(_src "${_probe_root}/src.txt")
33-
set(_dst "${_probe_root}/dst.txt")
30+
set(options)
31+
set(oneValueArgs SOURCE_ROOT DESTINATION_ROOT)
32+
cmake_parse_arguments(NAM "${options}" "${oneValueArgs}" "" ${ARGN})
33+
34+
if (DEFINED NAM_SOURCE_ROOT AND NOT "${NAM_SOURCE_ROOT}" STREQUAL "")
35+
set(_source_root "${NAM_SOURCE_ROOT}")
36+
else()
37+
set(_source_root "${CMAKE_CURRENT_BINARY_DIR}")
38+
endif()
39+
40+
if (DEFINED NAM_DESTINATION_ROOT AND NOT "${NAM_DESTINATION_ROOT}" STREQUAL "")
41+
set(_destination_root "${NAM_DESTINATION_ROOT}")
42+
else()
43+
set(_destination_root "${CMAKE_CURRENT_BINARY_DIR}")
44+
endif()
45+
46+
file(MAKE_DIRECTORY "${_source_root}" "${_destination_root}")
47+
string(RANDOM LENGTH 12 ALPHABET "0123456789abcdef" _probe_id)
48+
set(_src "${_source_root}/.nam_probe_${_probe_id}_src.txt")
49+
set(_dst "${_destination_root}/.nam_probe_${_probe_id}_dst.txt")
3450
file(WRITE "${_src}" "probe\n")
3551
file(REMOVE "${_dst}")
3652

@@ -67,13 +83,21 @@ function(_nam_detect_file_link_mode OUT_VAR)
6783
endfunction()
6884

6985
function(_nam_resolve_file_link_mode OUT_VAR)
86+
set(options)
87+
set(oneValueArgs SOURCE_ROOT DESTINATION_ROOT)
88+
cmake_parse_arguments(NAM "${options}" "${oneValueArgs}" "" ${ARGN})
89+
7090
if (DEFINED NAM_INTERNAL_FORCE_FILE_LINK_MODE AND NOT "${NAM_INTERNAL_FORCE_FILE_LINK_MODE}" STREQUAL "")
7191
_nam_validate_file_link_mode("${NAM_INTERNAL_FORCE_FILE_LINK_MODE}" _forced_mode)
7292
set(${OUT_VAR} "${_forced_mode}" PARENT_SCOPE)
7393
return()
7494
endif()
7595

76-
_nam_detect_file_link_mode(_detected_mode)
96+
_nam_detect_file_link_mode(
97+
_detected_mode
98+
SOURCE_ROOT "${NAM_SOURCE_ROOT}"
99+
DESTINATION_ROOT "${NAM_DESTINATION_ROOT}"
100+
)
77101
set(${OUT_VAR} "${_detected_mode}" PARENT_SCOPE)
78102
endfunction()
79103

@@ -428,7 +452,13 @@ function(nam_add_channel_target)
428452
set(ExternalData_URL_TEMPLATES "ExternalDataCustomScript://NAM/%(hash)")
429453
set(ExternalData_CUSTOM_SCRIPT_NAM "${_fetch_script}")
430454
add_custom_target("${NAM_TARGET}")
431-
_nam_resolve_file_link_mode(_file_link_mode)
455+
set(_refs_root "${_build_root}/refs")
456+
set(_externaldata_binary_root "${_build_root}/assets")
457+
_nam_resolve_file_link_mode(
458+
_file_link_mode
459+
SOURCE_ROOT "${_externaldata_binary_root}"
460+
DESTINATION_ROOT "${NAM_DESTINATION_ROOT}/${NAM_CHANNEL}"
461+
)
432462
if (NAM_NO_SYMLINKS)
433463
set(_file_link_mode "copy")
434464
endif()
@@ -454,17 +484,18 @@ function(nam_add_channel_target)
454484
)
455485

456486
set(_data_name "${NAM_CHANNEL}/${_relative_path}")
457-
get_filename_component(_link_dir "${CMAKE_CURRENT_SOURCE_DIR}/${_data_name}" DIRECTORY)
487+
set(_data_ref "${_refs_root}/${_data_name}")
488+
get_filename_component(_link_dir "${_data_ref}" DIRECTORY)
458489
file(MAKE_DIRECTORY "${_link_dir}")
459-
file(WRITE "${CMAKE_CURRENT_SOURCE_DIR}/${_data_name}.sha256" "${_sha256}\n")
460-
list(APPEND _asset_refs "DATA{${_data_name}}")
490+
file(WRITE "${_data_ref}.sha256" "${_sha256}\n")
491+
list(APPEND _asset_refs "DATA{${_data_ref}}")
461492
list(APPEND _asset_relpaths "${_relative_path}")
462493
endforeach()
463494

464495
if (_asset_refs)
465496
set(_asset_target "${NAM_TARGET}__externaldata")
466-
set(ExternalData_SOURCE_ROOT "${CMAKE_CURRENT_SOURCE_DIR}")
467-
set(ExternalData_BINARY_ROOT "${_build_root}/assets")
497+
set(ExternalData_SOURCE_ROOT "${_refs_root}")
498+
set(ExternalData_BINARY_ROOT "${_externaldata_binary_root}")
468499
unset(ExternalData_NO_SYMLINKS)
469500
set(_old_suppress_dev "${CMAKE_SUPPRESS_DEVELOPER_WARNINGS}")
470501
set(CMAKE_SUPPRESS_DEVELOPER_WARNINGS 1)

cmake/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ The resulting model is:
108108

109109
- one shared local object store per user
110110
- content-addressed objects under `.../objects/SHA256/<hash>`
111-
- generated `.sha256` references under `<channel>/...` in the consumer source tree
111+
- generated `.sha256` references under `${CMAKE_CURRENT_BINARY_DIR}/.nam/<target>/refs/<channel>/...`
112112
- intermediate `ExternalData` build outputs under `${CMAKE_CURRENT_BINARY_DIR}/.nam/<target>/assets`
113113
- normal build targets for consumers
114114

smoke/.gitignore

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,2 @@
1-
nam-data/
2-
media/
31
build/
42
build_ninja/

0 commit comments

Comments
 (0)