From ce9608897b926c4eb75c8ae1c00b928390083e85 Mon Sep 17 00:00:00 2001 From: Stephen Gutekanst Date: Sun, 13 Feb 2022 01:05:19 -0700 Subject: [PATCH] gpu-dawn: use source scanning for abseil-cpp target Signed-off-by: Stephen Gutekanst --- gpu-dawn/build.zig | 90 ++++++++++++++++++++-- gpu-dawn/src/dawn/sources/abseil.cc | 114 ---------------------------- 2 files changed, 83 insertions(+), 121 deletions(-) delete mode 100644 gpu-dawn/src/dawn/sources/abseil.cc diff --git a/gpu-dawn/build.zig b/gpu-dawn/build.zig index e65d1fff..4ba3bf1c 100644 --- a/gpu-dawn/build.zig +++ b/gpu-dawn/build.zig @@ -1053,13 +1053,40 @@ fn buildLibAbseilCpp(b: *Builder, step: *std.build.LibExeObjStep, options: Optio }) catch unreachable; // absl - lib.addCSourceFiles(&.{ - thisDir() ++ "/src/dawn/sources/abseil.cc", - thisDir() ++ "/libs/dawn/third_party/abseil-cpp/absl/strings/numbers.cc", - thisDir() ++ "/libs/dawn/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc", - thisDir() ++ "/libs/dawn/third_party/abseil-cpp/absl/time/format.cc", - thisDir() ++ "/libs/dawn/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc", - }, flags.items); + const source_dirs = &[_][]const u8{ + "third_party/abseil-cpp/absl/strings/", + "third_party/abseil-cpp/absl/strings/internal/", + "third_party/abseil-cpp/absl/strings/internal/str_format/", + "third_party/abseil-cpp/absl/types/", + "third_party/abseil-cpp/absl/flags/internal/", + "third_party/abseil-cpp/absl/flags/", + "third_party/abseil-cpp/absl/synchronization/", + "third_party/abseil-cpp/absl/synchronization/internal/", + "third_party/abseil-cpp/absl/hash/internal/", + "third_party/abseil-cpp/absl/debugging/", + "third_party/abseil-cpp/absl/debugging/internal/", + "third_party/abseil-cpp/absl/status/", + "third_party/abseil-cpp/absl/time/internal/cctz/src/", + "third_party/abseil-cpp/absl/time/", + "third_party/abseil-cpp/absl/container/internal/", + "third_party/abseil-cpp/absl/numeric/", + "third_party/abseil-cpp/absl/random/", + "third_party/abseil-cpp/absl/random/internal/", + "third_party/abseil-cpp/absl/base/internal/", + "third_party/abseil-cpp/absl/base/", + }; + var sources = std.ArrayList([]const u8).init(b.allocator); + inline for (source_dirs) |dir| { + scanSources( + b, + &sources, + "libs/dawn/" ++ dir, + &.{".cpp", ".c", ".cc"}, + &.{}, + &.{"_test", "_testing", "benchmark"}, + ) catch unreachable; + } + lib.addCSourceFiles(sources.items, flags.items); return lib; } @@ -1166,3 +1193,52 @@ fn include(comptime rel: []const u8) []const u8 { fn thisDir() []const u8 { return std.fs.path.dirname(@src().file) orelse "."; } + +/// Scans rel_dir for sources ending with one of the provided extensions, excluding relative paths +/// listed in the excluded list. +/// Results are appended to the dst ArrayList. +fn scanSources( + b: *Builder, + dst: *std.ArrayList([]const u8), + comptime rel_dir: []const u8, + extensions: []const []const u8, + excluding: []const []const u8, + excluding_contains: []const []const u8, +) !void { + const abs_dir = thisDir() ++ "/" ++ rel_dir; + var dir = try std.fs.openDirAbsolute(abs_dir, .{ .iterate = true }); + defer dir.close(); + var dir_it = dir.iterate(); + while (try dir_it.next()) |entry| { + if (entry.kind != .File) continue; + var abs_path = try std.fs.path.join(b.allocator, &.{ abs_dir, entry.name }); + abs_path = try std.fs.realpathAlloc(b.allocator, abs_path); + + const allowed_extension = blk: { + const ours = std.fs.path.extension(entry.name); + for (extensions) |ext| { + if (std.mem.eql(u8, ours, ext)) break :blk true; + } + break :blk false; + }; + if (!allowed_extension) continue; + + const excluded = blk: { + for (excluding) |excluded| { + if (std.mem.eql(u8, entry.name, excluded)) break :blk true; + } + break :blk false; + }; + if (excluded) continue; + + const excluded_contains = blk: { + for (excluding_contains) |contains| { + if (std.mem.containsAtLeast(u8, entry.name, 1, contains)) break :blk true; + } + break :blk false; + }; + if (excluded_contains) continue; + + try dst.append(abs_path); + } +} diff --git a/gpu-dawn/src/dawn/sources/abseil.cc b/gpu-dawn/src/dawn/sources/abseil.cc deleted file mode 100644 index 096489b4..00000000 --- a/gpu-dawn/src/dawn/sources/abseil.cc +++ /dev/null @@ -1,114 +0,0 @@ -#include "third_party/abseil-cpp/absl/strings/match.cc" -#include "third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc" -#include "third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc" -#include "third_party/abseil-cpp/absl/strings/internal/cordz_info.cc" -#include "third_party/abseil-cpp/absl/strings/internal/cord_internal.cc" -#include "third_party/abseil-cpp/absl/strings/internal/cordz_sample_token.cc" -#include "third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc" -#include "third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc" -#include "third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc" -#include "third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc" -#include "third_party/abseil-cpp/absl/strings/internal/str_format/output.cc" -#include "third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc" -#include "third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc" -#include "third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc" -#include "third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc" -#include "third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc" -#include "third_party/abseil-cpp/absl/strings/internal/memutil.cc" -#include "third_party/abseil-cpp/absl/strings/internal/ostringstream.cc" -#include "third_party/abseil-cpp/absl/strings/internal/pow10_helper.cc" -#include "third_party/abseil-cpp/absl/strings/internal/utf8.cc" -#include "third_party/abseil-cpp/absl/strings/internal/cordz_functions.cc" -#include "third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc" -#include "third_party/abseil-cpp/absl/strings/internal/escaping.cc" -#include "third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc" -#include "third_party/abseil-cpp/absl/strings/string_view.cc" -#include "third_party/abseil-cpp/absl/strings/str_cat.cc" -#include "third_party/abseil-cpp/absl/strings/cord.cc" -#include "third_party/abseil-cpp/absl/strings/ascii.cc" -#include "third_party/abseil-cpp/absl/strings/charconv.cc" -#include "third_party/abseil-cpp/absl/strings/str_split.cc" -#include "third_party/abseil-cpp/absl/strings/substitute.cc" -#include "third_party/abseil-cpp/absl/strings/escaping.cc" -#include "third_party/abseil-cpp/absl/strings/str_replace.cc" -#include "third_party/abseil-cpp/absl/types/bad_any_cast.cc" -#include "third_party/abseil-cpp/absl/types/bad_optional_access.cc" -#include "third_party/abseil-cpp/absl/types/bad_variant_access.cc" -#include "third_party/abseil-cpp/absl/flags/parse.cc" -#include "third_party/abseil-cpp/absl/flags/usage.cc" -#include "third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.cc" -#include "third_party/abseil-cpp/absl/flags/internal/usage.cc" -#include "third_party/abseil-cpp/absl/flags/internal/program_name.cc" -#include "third_party/abseil-cpp/absl/flags/internal/flag.cc" -#include "third_party/abseil-cpp/absl/flags/internal/commandlineflag.cc" -#include "third_party/abseil-cpp/absl/flags/reflection.cc" -#include "third_party/abseil-cpp/absl/flags/usage_config.cc" -#include "third_party/abseil-cpp/absl/flags/flag.cc" -#include "third_party/abseil-cpp/absl/flags/marshalling.cc" -#include "third_party/abseil-cpp/absl/flags/commandlineflag.cc" -#include "third_party/abseil-cpp/absl/synchronization/blocking_counter.cc" -#include "third_party/abseil-cpp/absl/synchronization/mutex.cc" -#include "third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc" -#include "third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc" -#include "third_party/abseil-cpp/absl/synchronization/internal/waiter.cc" -#include "third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc" -#include "third_party/abseil-cpp/absl/synchronization/barrier.cc" -#include "third_party/abseil-cpp/absl/synchronization/notification.cc" -#include "third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc" -#include "third_party/abseil-cpp/absl/hash/internal/hash.cc" -#include "third_party/abseil-cpp/absl/hash/internal/city.cc" -#include "third_party/abseil-cpp/absl/debugging/symbolize.cc" -#include "third_party/abseil-cpp/absl/debugging/failure_signal_handler.cc" -#include "third_party/abseil-cpp/absl/debugging/leak_check_disable.cc" -#include "third_party/abseil-cpp/absl/debugging/internal/examine_stack.cc" -#include "third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc" -#include "third_party/abseil-cpp/absl/debugging/internal/stack_consumption.cc" -#include "third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc" -#include "third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc" -#include "third_party/abseil-cpp/absl/debugging/internal/demangle.cc" -#include "third_party/abseil-cpp/absl/debugging/leak_check.cc" -#include "third_party/abseil-cpp/absl/debugging/stacktrace.cc" -#include "third_party/abseil-cpp/absl/status/status_payload_printer.cc" -#include "third_party/abseil-cpp/absl/status/status.cc" -#include "third_party/abseil-cpp/absl/status/statusor.cc" -#include "third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc" -#include "third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc" -#include "third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc" -#include "third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc" -#include "third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc" -#include "third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc" -#include "third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc" -#include "third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc" -#include "third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc" -#include "third_party/abseil-cpp/absl/time/clock.cc" -#include "third_party/abseil-cpp/absl/time/duration.cc" -#include "third_party/abseil-cpp/absl/time/civil_time.cc" -#include "third_party/abseil-cpp/absl/time/time.cc" -#include "third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc" -#include "third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc" -#include "third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc" -#include "third_party/abseil-cpp/absl/numeric/int128.cc" -#include "third_party/abseil-cpp/absl/random/gaussian_distribution.cc" -#include "third_party/abseil-cpp/absl/random/discrete_distribution.cc" -#include "third_party/abseil-cpp/absl/random/seed_gen_exception.cc" -#include "third_party/abseil-cpp/absl/random/internal/seed_material.cc" -#include "third_party/abseil-cpp/absl/random/internal/randen_slow.cc" -#include "third_party/abseil-cpp/absl/random/internal/randen.cc" -#include "third_party/abseil-cpp/absl/random/internal/randen_detect.cc" -#include "third_party/abseil-cpp/absl/random/internal/randen_round_keys.cc" -#include "third_party/abseil-cpp/absl/random/internal/pool_urbg.cc" -#include "third_party/abseil-cpp/absl/random/seed_sequences.cc" -#include "third_party/abseil-cpp/absl/base/internal/spinlock_wait.cc" -#include "third_party/abseil-cpp/absl/base/internal/periodic_sampler.cc" -#include "third_party/abseil-cpp/absl/base/internal/cycleclock.cc" -#include "third_party/abseil-cpp/absl/base/internal/spinlock.cc" -#include "third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc" -#include "third_party/abseil-cpp/absl/base/internal/scoped_set_env.cc" -#include "third_party/abseil-cpp/absl/base/internal/sysinfo.cc" -#include "third_party/abseil-cpp/absl/base/internal/raw_logging.cc" -#include "third_party/abseil-cpp/absl/base/internal/throw_delegate.cc" -#include "third_party/abseil-cpp/absl/base/internal/strerror.cc" -#include "third_party/abseil-cpp/absl/base/internal/thread_identity.cc" -#include "third_party/abseil-cpp/absl/base/internal/exponential_biased.cc" -#include "third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc" -#include "third_party/abseil-cpp/absl/base/log_severity.cc"