# Copyright 2018 The Chromium OS 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("//common-mk/pkg_config.gni")

group("all") {
  deps = [
    ":arc-obb-mounter",
    ":generate_squashfs",
    ":mount-obb",
  ]
  if (use.test) {
    deps += [ ":arc-obb-mounter_testrunner" ]
  }
  if (use.fuzzer) {
    deps += [ ":mount-obb_fuzzer" ]
  }
}

pkg_config("target_defaults_pkg_config") {
  pkg_deps = [
    "fuse",
    "libbrillo",
    "libcap",
    "libchrome-${libbase_ver}",
  ]
}

config("target_defaults") {
  configs = [ ":target_defaults_pkg_config" ]
  defines = [ "FUSE_USE_VERSION=26" ]
}

static_library("libmount_obb") {
  sources = [
    "mount_obb_fuse_main.cc",
    "util.cc",
    "volume.cc",
  ]
  configs += [ ":target_defaults" ]
}

executable("arc-obb-mounter") {
  sources = [
    "arc_obb_mounter.cc",
    "mount.cc",
    "service.cc",
  ]
  configs += [ ":target_defaults" ]
}

executable("mount-obb") {
  sources = [ "mount_obb.cc" ]
  configs += [ ":target_defaults" ]
  deps = [ ":libmount_obb" ]
}

action("mkdir_squashfs_source_dir") {
  inputs = []
  output_dir = "${root_gen_dir}/squashfs_source_dir"
  outputs = [ "${output_dir}" ]
  script = "//common-mk/file_generator_wrapper.py"
  args = [
    "mkdir",
    "-p",
    "${output_dir}",
  ]
}

action("generate_squashfs") {
  inputs = [ "${root_gen_dir}/squashfs_source_dir" ]
  outputs = [ "${root_out_dir}/rootfs.squashfs" ]
  script = "//common-mk/file_generator_wrapper.py"
  args = [
    "mksquashfs",
    "${root_gen_dir}/squashfs_source_dir",
    "${root_out_dir}/rootfs.squashfs",
    "-no-progress",
    "-info",
    "-all-root",
    "-noappend",
    "-comp",
    "lzo",
    "-b",
    "4K",
    "-p",
    "/data d 700 0 0",
    "-p",
    "/dev d 700 0 0",
    "-p",
    "/dev/fuse c 666 root root 10 229",
    "-p",
    "/lib d 700 0 0",
    "-p",
    "/lib64 d 700 0 0",
    "-p",
    "/proc d 700 0 0",
    "-p",
    "/run d 700 0 0",
    "-p",
    "/run/dbus d 700 0 0",
    "-p",
    "/usr d 700 0 0",
    "-p",
    "/var d 700 0 0",
    "-p",
    "/var/run d 700 0 0",
    "-p",
    "/var/run/arc d 700 0 0",
    "-p",
    "/var/run/arc/obb d 700 0 0",
  ]
  deps = [ ":mkdir_squashfs_source_dir" ]
}

if (use.test) {
  executable("arc-obb-mounter_testrunner") {
    sources = [ "util_test.cc" ]
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    defines = [ "UNIT_TEST" ]
    deps = [
      ":libmount_obb",
      "//common-mk/testrunner:testrunner",
    ]
  }
}

if (use.fuzzer) {
  executable("mount-obb_fuzzer") {
    configs += [
      "//common-mk/common_fuzzer",
      ":target_defaults",
    ]
    sources = [ "mount_obb_fuzzer.cc" ]
    deps = [ ":libmount_obb" ]
  }
}
