| # Copyright 2019 The Fuchsia Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import("//build/components.gni") |
| import("//build/fidl/fidl.gni") |
| |
| declare_args() { |
| # Set this to true when configuring gn args to enable blobfs page-in |
| # metrics recording. |
| # This will also increase the inspect VMO size for blobfs to 2 MiB, |
| # to accommodate the large number of metrics entries. |
| blobfs_page_in_metrics_recording = false |
| |
| # Set this to true when configuring gn args to enable blobfs streaming writes. |
| # This is a compile time argument which allows us to conditionally enable blobfs streaming writes |
| # only on specific configurations. |
| blobfs_enable_streaming_writes = false |
| } |
| |
| static_library("blobfs") { |
| friend = [ |
| ":decompressor_impl", |
| "test:*", |
| "test/integration:*", |
| ] |
| visibility = [ |
| "//src/security/scrutiny/utils/*", |
| "//src/storage/*", |
| "//zircon/system/ulib/fvm-host", |
| "//zircon/system/utest/blobfs-bench", |
| "//zircon/system/utest/fvm", |
| "//zircon/tools/blobfs", |
| ] |
| public = [ |
| "blob_layout.h", |
| "blobfs_inspector.h", |
| "cache_policy.h", |
| "common.h", |
| "format.h", |
| "fsck.h", |
| "fsck_host.h", |
| "host.h", |
| "iterator/node_populator.h", |
| "mkfs.h", |
| "mount.h", |
| "node_finder.h", |
| ] |
| sources = [ |
| "allocator/base_allocator.cc", |
| "allocator/base_allocator.h", |
| "allocator/extent_reserver.cc", |
| "allocator/extent_reserver.h", |
| "allocator/node_reserver.cc", |
| "allocator/node_reserver.h", |
| "blob_layout.cc", |
| "blobfs_checker.cc", |
| "common.cc", |
| "compression/chunked.cc", |
| "compression/chunked.h", |
| "compression/compressor.h", |
| "compression/decompressor.cc", |
| "compression/decompressor.h", |
| "compression/seekable_decompressor.h", |
| "compression_settings.cc", |
| "inspector/blobfs_inspector.cc", |
| "inspector/parser.cc", |
| "inspector/parser.h", |
| "iterator/allocated_extent_iterator.cc", |
| "iterator/allocated_extent_iterator.h", |
| "iterator/allocated_node_iterator.cc", |
| "iterator/allocated_node_iterator.h", |
| "iterator/block_iterator.cc", |
| "iterator/block_iterator.h", |
| "iterator/block_iterator_provider.h", |
| "iterator/extent_iterator.h", |
| "iterator/node_populator.cc", |
| "iterator/vector_extent_iterator.cc", |
| "iterator/vector_extent_iterator.h", |
| ] |
| public_deps = [ |
| # format.h includes digest.h. |
| "//sdk/fidl/fuchsia.fs", |
| "//sdk/lib/fit", |
| "//sdk/lib/fit-promise", |
| "//src/lib/digest", |
| "//src/lib/storage/vfs/cpp", |
| "//src/lib/storage/vfs/cpp/journal", |
| "//src/lib/storage/vfs/cpp/transaction", |
| "//src/storage/lib/watchdog", |
| "//zircon/system/ulib/bitmap", |
| "//zircon/system/ulib/id_allocator", |
| "//zircon/system/ulib/range", |
| "//zircon/system/ulib/storage/buffer", |
| "//zircon/system/ulib/zxc", |
| "//zircon/third_party/ulib/safemath", |
| ] |
| deps = [ |
| "compression/configs", |
| "//sdk/lib/fit", |
| "//sdk/lib/syslog/cpp", |
| "//src/lib/chunked-compression", |
| "//src/lib/digest", |
| "//src/lib/storage/vfs/cpp/journal", |
| "//src/lib/storage/vfs/cpp/transaction", |
| "//src/storage/fvm", |
| "//src/storage/lib/disk_inspector", |
| "//third_party/boringssl", |
| "//zircon/system/ulib/bitmap", |
| "//zircon/system/ulib/fbl", |
| "//zircon/system/ulib/range", |
| "//zircon/system/ulib/storage/buffer", |
| "//zircon/system/ulib/storage/operation", |
| "//zircon/system/ulib/zxc", |
| "//zircon/third_party/ulib/cksum", |
| ] |
| if (is_fuchsia) { |
| sources += [ |
| "allocator/allocator.cc", |
| "blob.cc", |
| "blob_cache.cc", |
| "blob_corruption_notifier.cc", |
| "blob_data_producer.cc", |
| "blob_data_producer.h", |
| "blob_loader.cc", |
| "blob_verifier.cc", |
| "blob_verifier.h", |
| "blobfs.cc", |
| "blobfs_inspect_tree.cc", |
| "blobfs_inspect_tree.h", |
| "blobfs_metrics.cc", |
| "blobfs_metrics.h", |
| "cache_node.cc", |
| "component_runner.cc", |
| "compression/blob_compressor.cc", |
| "compression/external_decompressor.cc", |
| "directory.cc", |
| "format.cc", |
| "fsck.cc", |
| "loader_info.h", |
| "metrics/compression_metrics.cc", |
| "metrics/compression_metrics.h", |
| "metrics/fragmentation_metrics.cc", |
| "metrics/fragmentation_metrics.h", |
| "metrics/read_metrics.cc", |
| "metrics/read_metrics.h", |
| "metrics/verification_metrics.cc", |
| "metrics/verification_metrics.h", |
| "mount.cc", |
| "page_loader.cc", |
| "page_loader.h", |
| "runner.cc", |
| "service/admin.cc", |
| "service/admin.h", |
| "service/health_check.cc", |
| "service/health_check.h", |
| "service/lifecycle.cc", |
| "service/lifecycle.h", |
| "service/startup.cc", |
| "service/startup.h", |
| "transaction.cc", |
| "transfer_buffer.cc", |
| "transfer_buffer.h", |
| ] |
| public_deps += [ |
| ":fuchsia.blobfs.internal", |
| ":fuchsia.blobfs.internal_llcpp", |
| "//sdk/fidl/fuchsia.blobfs:fuchsia.blobfs_llcpp", |
| "//sdk/fidl/fuchsia.device.manager:fuchsia.device.manager_llcpp", |
| "//sdk/fidl/fuchsia.fs:fuchsia.fs_llcpp", |
| "//sdk/fidl/fuchsia.process.lifecycle:fuchsia.process.lifecycle_llcpp", |
| "//src/lib/storage/block_client/cpp", |
| "//src/lib/storage/vfs/cpp/inspect", |
| "//src/storage/fidl/fuchsia.fs.startup:fuchsia.fs.startup_llcpp", |
| "//src/sys/pkg/fidl/fuchsia.update.verify:fuchsia.update.verify_llcpp", |
| "//zircon/system/ulib/async-loop:async-loop-cpp", |
| ] |
| deps += [ |
| "//sdk/fidl/fuchsia.blobfs:fuchsia.blobfs_llcpp", |
| "//sdk/fidl/fuchsia.io:fuchsia.io_llcpp", |
| "//sdk/fidl/fuchsia.scheduler", |
| "//sdk/lib/fdio", |
| "//sdk/lib/sys/inspect/cpp", |
| "//sdk/lib/syslog/cpp", |
| "//src/lib/storage/block_client/cpp", |
| "//zircon/system/ulib/async", |
| "//zircon/system/ulib/async:async-cpp", |
| "//zircon/system/ulib/async-default", |
| "//zircon/system/ulib/async-loop", |
| "//zircon/system/ulib/async-loop:async-loop-default", |
| "//zircon/system/ulib/backtrace-request", |
| "//zircon/system/ulib/fidl-async:fidl-async-cpp", |
| "//zircon/system/ulib/fidl-utils", |
| "//zircon/system/ulib/fzl", |
| "//zircon/system/ulib/service:service-llcpp", |
| "//zircon/system/ulib/sync", |
| "//zircon/system/ulib/trace", |
| "//zircon/system/ulib/trace-engine", |
| "//zircon/system/ulib/trace-provider", |
| "//zircon/system/ulib/zx", |
| ] |
| } else { |
| sources += [ |
| "allocator/host_allocator.cc", |
| "allocator/host_allocator.h", |
| "fsck_host.cc", |
| "host.cc", |
| ] |
| deps += [ "//zircon/system/ulib/fs-host" ] |
| } |
| |
| if (blobfs_page_in_metrics_recording) { |
| defines = [ |
| # Enable blobfs page-in metrics. |
| "BLOBFS_ENABLE_PAGE_IN_METRICS", |
| |
| # The page-in metrics feature requires a large Inspect VMO (>512KB) for blobfs. |
| "BLOBFS_ENABLE_LARGE_INSPECT_VMO", |
| ] |
| } |
| |
| if (blobfs_enable_streaming_writes) { |
| defines = [ |
| # Enable blobfs streaming writes feature only when we are running on fuchsia and gn config |
| # asks us to enable. |
| "BLOBFS_ENABLE_STREAMING_WRITES", |
| ] |
| } |
| |
| # TODO(fxbug.dev/95833): This target uses the deprecated C bindings. |
| # Consider switching to the C++ bindings. See linked bug for details. |
| configs += [ "//build/c:fidl-deprecated-c-bindings" ] |
| } |
| |
| fidl("fuchsia.blobfs.internal") { |
| sources = [ "compression/decompressor_sandbox/decompressor.fidl" ] |
| public_deps = [ "//zircon/vdso/zx" ] |
| } |
| |
| source_set("decompressor_impl") { |
| visibility = [ "./*" ] |
| sources = [ |
| "compression/decompressor_sandbox/decompressor_impl.cc", |
| "compression/decompressor_sandbox/decompressor_impl.h", |
| ] |
| public_deps = [ |
| # Used by decompressor_impl.h |
| ":fuchsia.blobfs.internal_llcpp", |
| ] |
| deps = [ |
| ":blobfs", |
| ":fuchsia.blobfs.internal", |
| "//sdk/fidl/fuchsia.scheduler", |
| "//sdk/lib/fidl/cpp:cpp", |
| "//sdk/lib/sys/cpp:cpp", |
| "//sdk/lib/syslog/cpp:cpp", |
| "//src/lib/chunked-compression", |
| "//src/lib/digest", |
| "//src/lib/storage/vfs/cpp/journal", |
| "//zircon/system/ulib/fzl", |
| "//zircon/system/ulib/trace", |
| "//zircon/system/ulib/zxc", |
| ] |
| } |
| |
| executable("decompressor") { |
| sources = [ "compression/decompressor_sandbox/main.cc" ] |
| deps = [ |
| ":decompressor_impl", |
| ":fuchsia.blobfs.internal", |
| "//sdk/lib/fidl/cpp:cpp", |
| "//sdk/lib/sys/cpp:cpp", |
| "//sdk/lib/syslog/cpp:cpp", |
| "//src/lib/digest", |
| "//src/lib/storage/vfs/cpp/journal", |
| "//zircon/system/ulib/async-loop:async-loop-cpp", |
| "//zircon/system/ulib/async-loop:async-loop-default", |
| "//zircon/system/ulib/fzl", |
| "//zircon/system/ulib/trace", |
| "//zircon/system/ulib/trace-provider", |
| "//zircon/system/ulib/zxc", |
| ] |
| } |
| |
| fuchsia_component("decompressor-sandbox") { |
| manifest = "meta/decompressor_sandbox.cml" |
| deps = [ ":decompressor" ] |
| } |
| |
| group("tests") { |
| testonly = true |
| deps = [ "test" ] |
| } |