Roll buildtools/ 5df641722..eca5f0685 (13 commits)

https://chromium.googlesource.com/chromium/src/buildtools/+log/5df641722f2e..eca5f0685c48

$ git log 5df641722..eca5f0685 --date=short --no-merges --format='%ad %ae %s'
2025-12-01 chromium-autoroll Roll libc++ from fa224989fd9c to 07572e7b1692 (1 revision)
2025-11-29 chromium-autoroll Roll libc++ from 878734a6161d to fa224989fd9c (4 revisions)
2025-11-28 chromium-autoroll Roll libc++ from 9fcc9571e6c2 to 878734a6161d (2 revisions)
2025-11-28 thakis Roll libc++ from 13cfd0942dfd to 9fcc9571e6c2 (16 revisions)
2025-11-27 chromium-autoroll Roll libc++ and libcxxabi across aligned_alloc.h change
2025-11-27 thakis Roll libc++ from 25731e23e3aa to 91c45fc28459 (2 revisions)
2025-11-26 chromium-autoroll Roll libc++ from 99d9ab2603b0 to 25731e23e3aa (20 revisions)
2025-11-21 chromium-autoroll Roll libc++ from 4cba0fa3571b to 99d9ab2603b0 (9 revisions)
2025-11-21 jj [buildtools] Remove unrar exception from checkdeps/cpp_checker
2025-11-20 thakis Roll libc++ from 0e3285ac398e to 4cba0fa3571b (1 revision)
2025-11-20 chromium-autoroll Roll libc++ from be279eb793eb to 0e3285ac398e (10 revisions)
2025-11-19 thakis Roll libc++ from 29d97bf40ff6 to be279eb793eb (20 revisions)
2025-11-19 thakis Roll libc++ from 454a561737fb to 29d97bf40ff6 (12 revisions)

Created with:
  roll-dep buildtools


Roll third_party/libc++/src/ 454a56173..07572e7b1 (99 commits)

https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libcxx.git/+log/454a561737fb..07572e7b1692

$ git log 454a56173..07572e7b1 --date=short --no-merges --format='%ad %ae %s'
2025-12-01 nikolasklauser [Clang] Add __builtin_common_reference (#121199)
2025-11-28 vturanskyy [libc++] Add support for picolibc and newlib in RUNTIMES_USE_LIBC (#147956)
2025-11-28 de34 [libc++][NFC] Simplify SFINAE detections in `weak_result_type.h` (#169870)
2025-11-28 nikolasklauser [libc++][NFC] Simplify string.bench.cpp a bit (#169791)
2025-11-28 github [libcxx] Unwrap iterators in __find_segment (#161274)
2025-11-28 nikolasklauser Revert "[libc++] Fix the locale base API on Linux with musl" (#169884)
2025-11-27 reactive-firewall [libc++] Fix the locale base API on Linux with musl (#167980)
2025-11-27 nikolasklauser [libc++] Merge the implementations of ranges::copy_n and std::copy_n and fix vector::insert to assign (#157444)
2025-11-27 nikolasklauser [libc++][C++03] Remove code in the C++03-specific tests that is guarded on the language version (#169354)
2025-11-27 hghristov.rmm [libc++][flat_set] Applied `[[nodiscard]]` (#169739)
2025-11-27 hghristov.rmm [libc++][deque] Applied `[[nodiscard]]` (#169745)
2025-11-27 wtranviet [libc++] Reformat `optional` constructor tests (#169231)
2025-11-27 hghristov.rmm [libc++][mdspan] Applied `[[nodiscard]]` (#169326)
2025-11-27 hghristov.rmm [libc++][queue] Applied `[[nodiscard]]` (#169469)
2025-11-27 hghristov.rmm [libc++] Applied `[[nodiscard]]` to concurrency (partially) (#169463)
2025-11-26 hghristov.rmm [libc++] Applied `[[nodiscard]]` to Language Support (partially) (#169611)
2025-11-26 hghristov.rmm [libc++][flat_map] Applied `[[nodiscard]]` (#169453)
2025-11-25 hghristov.rmm [libc++][stack] Applied `[[nodiscard]]` (#169468)
2025-11-25 hghristov.rmm [libc++] Applied `[[nodiscard]]` to some general utilities (#169322)
2025-11-25 nikolasklauser [libc++] Introduce __specialized_algorithms (#167295)
2025-11-25 nikolasklauser [libc++] Always define _LIBCPP_GLIBC_PREREQ (#169405)
2025-11-25 nikolasklauser [libc++][C++03] Fix ODR tests (#169349)
2025-11-25 hghristov.rmm [libc++][string] Applied `[[nodiscard]]` to non-member functions (#169330)
2025-11-24 49250218+googlewalt Fix path to aligned_alloc.h in #include statement (#169418)
2025-11-24 nikolasklauser [libc++][NFC] Move __memory/aligned_alloc.h into src/ (#166172)
2025-11-24 martin [libcxx] [test] Fix the gets-removed.verify.cpp test with Clang 21 (#169235)
2025-11-24 hghristov.rmm [libc++][string_view] Applied `[[nodiscard]]` (#169010)
2025-11-24 nikolasklauser [libc++] Disable header deprecations until #168041 is landed (#169305)
2025-11-24 david.spickett Revert "[libcxx][ci] Temporarily disable ARM jobs" (#169352)
2025-11-24 nikolasklauser [libc++] Optimize num_get integral functions (#121795)
2025-11-24 hghristov.rmm [libc++][forward_list] Applied `[[nodiscard]]` (#169019)
2025-11-24 david.spickett [libcxx][ci] Temporarily disable ARM jobs (#169318)
2025-11-24 hghristov.rmm [libc++][list] Applied `[[nodiscard]]` (#169015)
2025-11-24 hghristov.rmm [libc++][array] Applied `[[nodiscard]]` (#168829)
2025-11-24 nikolasklauser [libc++] Forward std::all_of and std::none_of to std::any_of (#167670)
2025-11-24 nikolasklauser [libc++] Introduce basic_string::__allocate_long_buffer_for_growing (#162633)
2025-11-22 hghristov.rmm [libc++][any] Applied `[[nodiscard]]` (#168826)
2025-11-21 fmayer [NFC] [test] [libcxx] Fix invalid escape sequences (#168636)
2025-11-22 hghristov.rmm [libc++][any][NFC] Reformat and refactor any_cast tests (#169057)
2025-11-21 rupprecht [libc++] Revert fstream::read optimizations (#168894)
2025-11-21 floating [libc++] Optimize std::has_single_bit (#133063)
2025-11-21 bizwen [libc++][Windows] Enable thread::hardware_concurrency to support more than 64 processors (#168229)
2025-11-20 hristo.goshev.hristov [libc++][memory] Applied `[[nodiscard]]` to smart pointers (#168483)
2025-11-19 nikolasklauser [libc++] Remove is_signed<T> use from <limits> (#168334)
2025-11-19 saugustine Add test case for xsgetn in basic_filebuf (#167937)
2025-11-19 nikolasklauser [libc++] Make views::iota aware of __int128 (#167869)
2025-11-18 nikolasklauser [libc++] Fix header deprecations (#163356)
2025-11-18 hghristov.rmm [libc++][span] Mark functions as `[[nodiscard]]` (#168033)
2025-11-17 ldionne.2 [libc++] Replace a few .compile.fail.cpp tests by proper clang-verify tests (#167346)
2025-11-17 ldionne.2 [libc++] Enable compiler-rt when performing a bootstrapping build (#167065)
2025-11-17 nikolasklauser [libc++] Fix __hash_table::erase(iterator, iterator) to update the bucket list correctly when erasing the last bucket (#167865)
2025-11-17 nikolasklauser [libc++] Refactor basic_string::__recommend (#162631)
2025-11-16 aidengrossman [libcxx] Install ninja in CI container from system repo (#168225)
2025-11-16 hui.xie1990 [libc++][test] re-enable the inference test for clang (#168258)
2025-11-15 de34 [libc++] Make `std::numeric_limits<NonPromoted>::traps` `false` (#166724)
2025-11-15 hghristov.rmm [libc++] Apply `[[nodiscard]]` to `in/out_ptr` (#167097)
2025-11-14 varconsteq [libc++][hardening] Allow setting the assertion semantic via CMake. (#167636)
2025-11-14 molenoch [libc++] proper guarding for locale usage in filesystem on Windows (#165470)
2025-11-14 ldionne.2 [libc++] Reorganize and fix the libc++ CI dockerfiles (#167530)
2025-11-14 martin [libcxx] [doc] Document the supported target versions of Windows (#167845)
2025-11-14 martin [libcxx] [doc] Update the docs about LIBCXX_ENABLE_FILESYSTEM (#167843)
2025-11-14 hghristov.rmm [libc++][ranges] LWG3505: `split_view::outer-iterator::operator++` misspecified (#155160)
2025-11-13 michaelrj [libcxx] Fix xsgetn in basic_filebuf (#167779)
2025-11-13 nikolasklauser [libc++] Merge is_{,un}bounded_array.h into is_array.h (#167479)
2025-11-13 nikolasklauser [libc++] Add an initial modulemap for the test support headers (#162800)
2025-11-13 sanders_roger [libc++] Improve performance of std::atomic_flag on Windows (#163524)
2025-11-13 nikolasklauser [libc++] Simplify the implementation of the unique_ptr -> shared_ptr converting constructor (#165619)
2025-11-13 nikolasklauser [libc++] Implement our own is{,x}digit functions for the C locale (#165467)
2025-11-12 hnrklssn [utils] revamp options controlling lit's output (#167192)
2025-11-12 nikolasklauser [libc++] Simplify the implementation of aligned_storage (#162459)
2025-11-12 w3cing [libc++] Guard fileno() and isatty() usage correctly for Newlib. (#166668)
2025-11-12 nikolasklauser [libc++] Optimize __tree copy/move constructor/assignment with allocator (#163558)
2025-11-12 nikolasklauser [libc++] Mark string functions as [[nodiscard]] (#166524)
2025-11-12 nikolasklauser [libc++] Use variable templates in is_floating_point (#167141)
2025-11-11 wtranviet [libc++] Implement P2988R12: `std::optional<T&>` (#155202)
2025-11-11 nikolasklauser [libc++] Remove <stdbool.h> (#164595)
2025-11-11 ldionne.2 [libc++] Split features.py into multiple files (#167353)
2025-11-11 ldionne.2 [libc++] Remove __is_replaceable emulation (#167355)
2025-11-11 nikolasklauser [libc++][NFC] Make the exception implementation files self-contained (#164377)
2025-11-11 nikolasklauser [libc++] Remove some of the uses of aligned_storage inside the library (#161635)
2025-11-10 nikolasklauser [libc++] Inline vector::__append into resize (#162086)
2025-11-10 ldionne.2 [libc++] Split macros related to hardening into their own header (#167069)
2025-11-10 ldionne.2 [libc++][NFC] Remove unused imports from generate_feature_test_macro_components.py (#159591)
2025-11-11 de34 [libc++][docs] Update to refer to P3355R2 (#167267)
2025-11-10 de34 [libc++] Avoid overloaded `operator,` for (`T`, `Iter`) cases (#161049)
2025-11-10 nikolasklauser [libc++] Merge insert/emplace(const_iterator, Args...) implementations (#166470)
2025-11-10 nikolasklauser [libc++] Replace __libcpp_is_final with a variable template (#167137)
2025-11-10 nikolasklauser [libc++] Replace the last uses of __tuple_types with __type_list (#167214)
2025-11-09 hghristov.rmm [libc++][numeric] Marked saturation artithmetic functions as `[[nodiscard]]` (#166898)
2025-11-09 de34 [libc++] Treat P0513R0 as a defect report against C++11 (#166690)
2025-11-08 ldionne.2 [libc++] Run macOS buildbot under xcrun (#167072)
2025-11-08 de34 [libc++][test] Fix-up tests for `is_clock(_v)` (#166888)
2025-11-07 nikolasklauser [libc++] Optimize fstream::read (#165223)
2025-11-07 nikolasklauser [libc++] Simplify most of the segmented iterator optimizations (#164797)
2025-11-06 ych [libcxx] Implement C++20 std::chrono::is_clock, std::chrono::is_clock_v (#160607)
2025-11-05 mark.danial [AIX] Enable libc++ bots on AIX (#166650)
2025-11-05 nikolasklauser [libc++][NFC] Make __type_info_implementations a namespace (#166339)
2025-11-05 nikolasklauser [libc++] Remove <cstdlib> include from <exception> (#166340)
2025-11-05 hghristov.rmm [libc++][NFC] Removed unsupported compilers from tests (#166403)

Created with:
  roll-dep third_party/libc++/src


Roll third_party/libc++abi/src/ de02e5d57..83a852080 (1 commit)

    https://chromium.googlesource.com/external/github.com/llvm/llvm-project/libcxxabi.git/+log/de02e5d57052..83a852080747

    $ git log de02e5d57..83a852080 --date=short --no-merges --format='%ad %ae %s'
    2025-11-24 nikolasklauser [libc++][NFC] Move __memory/aligned_alloc.h into src/ (#166172)

Created with:
      roll-dep third_party/libc++abi/src


Change-Id: I149626ae7e8f6121d1711f71e15994f20c8e1b5f
Reviewed-on: https://chromium-review.googlesource.com/c/openscreen/+/7226339
Reviewed-by: Jordan Bayles <jophba@chromium.org>
Commit-Queue: Jordan Bayles <jophba@chromium.org>
4 files changed
tree: 9f970bccc70bd34fc4c63570e4fb5b1c3ead8fe5
  1. build_overrides/
  2. cast/
  3. discovery/
  4. docs/
  5. gni/
  6. infra/
  7. osp/
  8. platform/
  9. test/
  10. testing/
  11. third_party/
  12. tools/
  13. util/
  14. .clang-format
  15. .clang-format-ignore
  16. .gitignore
  17. .gitmodules
  18. .gn
  19. .vpython3
  20. AUTHORS
  21. BUILD.gn
  22. codereview.settings
  23. DEPS
  24. LICENSE
  25. OWNERS
  26. PRESUBMIT.py
  27. PRESUBMIT_test_mocks.py
  28. README.md
README.md

Open Screen Library

The Open Screen Library implements the Open Screen Protocol, Multicast DNS and DNS-SD, and the Chromecast protocols (discovery, application control, and media streaming).

The library consists of feature modules that share a common platform API that must be implemented and linked by the embedding application.

The major feature modules in the library can be used independently and have their own documentation:

Getting the code

Installing depot_tools

Library dependencies are managed using gclient, from the depot_tools repo.

To get gclient, run the following command in your terminal:

    git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

Then add the depot_tools folder to your PATH environment variable.

Note that openscreen does not use other features of depot_tools like repo or drover. However, some git-cl functions do work, like git cl try, git cl format, git cl lint, and git cl upload.

Checking out code

From the parent directory of where you want the openscreen checkout (e.g., ~/my_project_dir), check out openscreen with the following command:

    fetch openscreen

This command will create an openscreen/ subdirectory, downloads the source code, all third-party dependencies, and the toolchain needed to build things; and at their appropriate revisions.

Syncing your local checkout

To update your local checkout from the openscreen reference repository, just run

   cd ~/my_project_dir/openscreen
   git pull
   gclient sync

This will rebase any local commits on the remote top-of-tree, and update any dependencies that have changed.

Build setup

The following are the main tools are required for development/builds.

  • Installed by gclient automatically:
    • Build file generator: gn (installed into buildtools/)
    • Code formatter: clang-format (installed into buildtools/)
    • Builder: ninja
    • Compiler/Linker: clang
  • Installed by you:
    • libstdc++ (Linux only)
    • gcc (Linux only, optional)
    • XCode (macOS only)

NOTE: some executables, like the standalone cast_sender and cast_receiver binaries (see the Cast Streaming README.md), have additional dependencies not listed here.

libstdc++ (Linux only)

Ensure that libstdc++ 8 is installed, as clang depends on the system instance of it. On Debian flavors, you can run:

   sudo apt-get install libstdc++-8-dev libstdc++6-8-dbg

gcc (Linux only, optional)

Setting the gn argument is_clang=false on Linux enables building using gcc instead.

  mkdir out/debug-gcc
  gn gen out/debug-gcc --args="is_clang=false"

Note that g++ version 9 or newer must be installed. On Debian flavors you can run:

  sudo apt-get install gcc-9

XCode (macOS only)

You can install the XCode command-line tools only or the full version of XCode.

xcode-select --install

Debug build

Setting the gn argument is_debug=true enables debug build.

  gn gen out/debug --args="is_debug=true"

gn configuration

Running gn args opens an editor that allows to create a list of arguments passed to every invocation of gn gen. gn args --list will list all of the possible arguments you can set.

  gn args out/debug

Building targets

We use the Open Screen Protocol demo application as an example, however, the instructions are essentially the same for all executable targets.

  mkdir out/debug
  gn gen out/debug             # Creates the build directory and necessary ninja files
  ninja -C out/debug osp_demo  # Builds the executable with ninja
  ./out/debug/osp_demo         # Runs the executable

The -C argument to ninja works just like it does for GNU Make: it specifies the working directory for the build. So the same could be done as follows:

  ./gn gen out/debug
  cd out/debug
  ninja osp_demo
  ./osp_demo

After editing a file, only ninja needs to be rerun, not gn. If you have edited a BUILD.gn file, ninja will re-run gn for you.

We recommend using autoninja instead of ninja, which takes the same command-line arguments but automatically parallelizes the build for your system, depending on number of processor cores, amount of RAM, etc.

Also, while specifying build targets is possible while using ninja, typically for development it is sufficient to just build everything, especially since the Open Screen repository is still quite small. That makes the invocation to the build system simplify to:

  autoninja -C out/debug

For details on running osp_demo, see its README.md.

Building all targets

Running ninja -C out/debug gn_all will build all non-test targets in the repository.

gn ls --type=executable out/debug will list all of the executable targets that can be built.

If you want to customize the build further, you can run gn args out/debug to pull up an editor for build flags. gn args --list out/debug prints all of the build flags available.

Building and running unit tests

  ninja -C out/debug openscreen_unittests
  ./out/debug/openscreen_unittests

Contributing changes

Open Screen library code should follow the Open Screen Library Style Guide.

This library uses Chromium Gerrit for patch management and code review (for better or worse). You will need to register for an account at chromium-review.googlesource.com to upload patches for review.

The following sections contain some tips about dealing with Gerrit for code reviews, specifically when pushing patches for review, getting patches reviewed, and committing patches.

Uploading a patch for review

The git cl tool handles details of interacting with Gerrit (the Chromium code review tool) and is recommended for pushing patches for review. Once you have committed changes locally, simply run:

  git cl format
  git cl upload

The first command will will auto-format the code changes using clang-format. Then, the second command runs the PRESUBMIT.py script to check style and, if it passes, a newcode review will be posted on chromium-review.googlesource.com.

If you make additional commits to your local branch, then running git cl upload again in the same branch will merge those commits into the ongoing review as a new patchset.

It's simplest to create a local git branch for each patch you want reviewed separately. git cl keeps track of review status separately for each local branch.

Addressing merge conflicts

If conflicting commits have been landed in the repository for a patch in review, Gerrit will flag the patch as having a merge conflict. In that case, use the instructions above to rebase your commits on top-of-tree and upload a new patchset with the merge conflicts resolved.

Tryjobs

Clicking the CQ DRY RUN button (also, confusingly, labeled COMMIT QUEUE +1) will run the current patchset through all LUCI builders and report the results. It is always a good idea get a green tryjob on a patch before sending it for review to avoid extra back-and-forth.

You can also run git cl try from the commandline to submit a tryjob.

Code reviews

Send your patch to one or more committers in the COMMITTERS file for code review. All patches must receive at least one LGTM by a committer before it can be submitted.

Submitting patches

After your patch has received one or more LGTM commit it by clicking the SUBMIT button (or, confusingly, COMMIT QUEUE +2) in Gerrit. This will run your patch through the builders again before committing to the main openscreen repository.

Additional resources