Skip to content

Add nlohmann/json as a top-level third_party submodule#1406

Closed
scotts wants to merge 1 commit into
pytorch:mainfrom
scotts:third-party-nlohmann-json
Closed

Add nlohmann/json as a top-level third_party submodule#1406
scotts wants to merge 1 commit into
pytorch:mainfrom
scotts:third-party-nlohmann-json

Conversation

@scotts
Copy link
Copy Markdown
Contributor

@scotts scotts commented May 18, 2026

Problem — libkineto's tests depend on nlohmann/json, but the dependency is satisfied by reaching into a sub-submodule of dynolog (libkineto/third_party/dynolog/third_party/json). Kineto's json version is therefore whatever dynolog happens to pin, even though kineto and dynolog use json for unrelated purposes. The version dynolog pins (v3.10.5) also declares cmake_minimum_required(3.1), which CMake 4.x rejects, forcing a CMAKE_POLICY_VERSION_MINIMUM workaround in libkineto's CMakeLists.

Fix — register nlohmann/json at v3.12.0 as a top-level submodule at libkineto/third_party/json, mirroring the fmt and googletest pattern. This avoids CMake hacks.

Note that I rejected an alternative where we just vendor what we need from nlohmann/json directly as source code. That would reduce recursive clone time and use less disk space; we're adding about 150 MB by doing this. But I don't want to be in the business of manually copying source from a project. Making it a proper sub-module is easier. If space usage ever becomes an issue, we can revisit.

**Problem** — libkineto's tests depend on nlohmann/json, but the
dependency is satisfied by reaching into a sub-submodule of dynolog
(`libkineto/third_party/dynolog/third_party/json`). Kineto's json
version is therefore whatever dynolog happens to pin, even though
kineto and dynolog use json for unrelated purposes. The version
dynolog pins (v3.10.5) also declares `cmake_minimum_required(3.1)`,
which CMake 4.x rejects, forcing a `CMAKE_POLICY_VERSION_MINIMUM`
workaround in libkineto's CMakeLists.

**Why** — nothing about the dependency is "dynolog's". Kineto's
tests use nlohmann/json directly (CuptiActivityProfilerTest,
RocmActivityProfilerTest); none of libkineto's library code or the
slice of dynolog libkineto consumes (IPC fabric only) touches json.
Inheriting the version pin from a transitive submodule is fragile
and the policy-minimum workaround is a symptom of being stuck on
whatever upstream pins.

**Fix** — register nlohmann/json at v3.12.0 as a top-level submodule
at `libkineto/third_party/json`, mirroring the fmt and googletest
pattern. Update `libkineto/CMakeLists.txt` to `add_subdirectory` the
new path and set `JSON_BuildTests` / `JSON_Install` to OFF. v3.12.0
raises `cmake_minimum_required` to 3.8, so the
`CMAKE_POLICY_VERSION_MINIMUM` save/restore dance is gone. The
`if(NOT TARGET nlohmann_json)` guard is preserved as a safety net
against the still-present dynolog-nested copy if anyone ever pulls
dynolog's top-level CMakeLists.
@meta-cla meta-cla Bot added the cla signed label May 18, 2026
@meta-codesync
Copy link
Copy Markdown

meta-codesync Bot commented May 18, 2026

@scotts has imported this pull request. If you are a Meta employee, you can view this in D105603416.

@scotts scotts marked this pull request as ready for review May 18, 2026 19:04
@meta-codesync meta-codesync Bot closed this in c044281 May 19, 2026
@meta-codesync
Copy link
Copy Markdown

meta-codesync Bot commented May 19, 2026

@scotts merged this pull request in c044281.

pytorchmergebot pushed a commit to pytorch/pytorch that referenced this pull request May 22, 2026
Includes the following commits:

- ci: declare workflow-level `contents: read` on 5 workflows (pytorch/kineto#1404) 5902263
- Remove deprecated `REQUEST_TIMESTAMP` config key (pytorch/kineto#1409) 55883de
- Fix intermittent Mac CI failure from conda channel reset (pytorch/kineto#1407) ee27b5c
- Add nlohmann/json as a top-level third_party submodule (pytorch/kineto#1406) c044281
- Remove SIGUSR2 on-demand profiling path (pytorch/kineto#1408) 471ed38
- Fix ROCm HtoD memcpy stream attribution (pytorch/kineto#1398) 799b5f4
- Fix UST_LOGGER_MARK_COMPLETED build failure in manifold_trace_logger (pytorch/kineto#1389) 60967ce
- Remove `DefaultTimeConverterIsIdentity` test (pytorch/kineto#1401) 81d31cd
- Re-enable most PyTorch tests (pytorch/kineto#1403) 212f9a5
- Daily `arc lint --take CLANGFORMAT` (pytorch/kineto#1402) 6481fac
- Resolve CUPTI cbid names via cuptiGetCallbackName (pytorch/kineto#1400) e07e121
- XPUPTI: Fix ts=0 trace events on Windows (pytorch/kineto#1381) 4c8d01c
- Remove LIBKINETO_NO* compatibility shim (pytorch/kineto#1399) ea8bc18
- Upgrade Kineto to C++20 (pytorch/kineto#1397) 77e2b46
- Update the rocm api filtering (pytorch/kineto#1392) e0ac578
Pull Request resolved: #184784
Approved by: https://github.com/NicolasHug, https://github.com/malfet
pytorchmergebot pushed a commit to khushi-411/pytorch that referenced this pull request May 24, 2026
Includes the following commits:

- ci: declare workflow-level `contents: read` on 5 workflows (pytorch/kineto#1404) 5902263
- Remove deprecated `REQUEST_TIMESTAMP` config key (pytorch/kineto#1409) 55883de
- Fix intermittent Mac CI failure from conda channel reset (pytorch/kineto#1407) ee27b5c
- Add nlohmann/json as a top-level third_party submodule (pytorch/kineto#1406) c044281
- Remove SIGUSR2 on-demand profiling path (pytorch/kineto#1408) 471ed38
- Fix ROCm HtoD memcpy stream attribution (pytorch/kineto#1398) 799b5f4
- Fix UST_LOGGER_MARK_COMPLETED build failure in manifold_trace_logger (pytorch/kineto#1389) 60967ce
- Remove `DefaultTimeConverterIsIdentity` test (pytorch/kineto#1401) 81d31cd
- Re-enable most PyTorch tests (pytorch/kineto#1403) 212f9a5
- Daily `arc lint --take CLANGFORMAT` (pytorch/kineto#1402) 6481fac
- Resolve CUPTI cbid names via cuptiGetCallbackName (pytorch/kineto#1400) e07e121
- XPUPTI: Fix ts=0 trace events on Windows (pytorch/kineto#1381) 4c8d01c
- Remove LIBKINETO_NO* compatibility shim (pytorch/kineto#1399) ea8bc18
- Upgrade Kineto to C++20 (pytorch/kineto#1397) 77e2b46
- Update the rocm api filtering (pytorch/kineto#1392) e0ac578
Pull Request resolved: pytorch#184784
Approved by: https://github.com/NicolasHug, https://github.com/malfet
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant