Newer
Older
minerva / Meta / gn / secondary / Userland / Libraries / LibTimeZone / BUILD.gn
@minerva minerva on 13 Jul 2 KB Initial commit
import("//Meta/gn/build/compiled_action.gni")
import("//Meta/gn/build/download_cache.gni")
import("//Meta/gn/build/download_file.gni")
import("//Meta/gn/build/extract_archive_contents.gni")

declare_args() {
  # If true, Download tzdata from data.iana.org and use it in LibTimeZone
  # Data will be downloaded to $cache_path/TZDB
  enable_timezone_database_download = true
}

tzdb_cache = cache_path + "TZDB/"

tzdb_version = "2024a"

if (enable_timezone_database_download) {
  download_file("timezone_database_download") {
    version = tzdb_version
    url = "https://data.iana.org/time-zones/releases/tzdata$version.tar.gz"
    cache = tzdb_cache
    output = "tzdb.tar.gz"
    version_file = "version.txt"
    sha256 = "0d0434459acbd2059a7a8da1f3304a84a86591f6ed69c6248fffa502b6edffe3"
  }
  extract_archive_contents("timezone_database_files") {
    deps = [ ":timezone_database_download" ]
    archive = get_target_outputs(":timezone_database_download")
    directory = tzdb_cache

    # NOSORT
    files = [
      "zone1970.tab",
      "africa",
      "antarctica",
      "asia",
      "australasia",
      "backward",
      "etcetera",
      "europe",
      "northamerica",
      "southamerica",
    ]
  }
  compiled_action("generate_timezone_sources") {
    tool = "//Meta/Lagom/Tools/CodeGenerators/LibTimeZone:GenerateTimeZoneData"
    deps = [ ":timezone_database_files" ]
    inputs = get_target_outputs(":timezone_database_files")
    outputs = [
      "$target_gen_dir/TimeZoneData.h",
      "$target_gen_dir/TimeZoneData.cpp",
    ]
    args = [
      "-h",
      rebase_path(outputs[0], root_build_dir),
      "-c",
      rebase_path(outputs[1], root_build_dir),
      "-z",

      # NOTE: Coordinates file must be inputs[0]
    ]
    foreach(data_file, inputs) {
      args += [ rebase_path(data_file, root_build_dir) ]
    }
  }
}

source_set("LibTimeZone") {
  output_name = "timezone"
  include_dirs = [
    "//Userland/Libraries",
    "$target_gen_dir/..",
  ]
  sources = [
    "Forward.h",
    "TimeZone.cpp",
    "TimeZone.h",
  ]
  deps = [ "//AK" ]

  if (enable_timezone_database_download) {
    deps += [ ":generate_timezone_sources" ]
    sources += get_target_outputs(":generate_timezone_sources")
  }
}