# Copyright (c) 2021 Huawei Device Co., Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import("//build/ohos.gni")

declare_args() {
   enable_zstd_test = false
}

config("libzstd_config") {
    include_dirs = [
        ".",
        "./zstd",
        "./zstd/lib",
        "./zstd/lib/common",
        "./zstd/lib/compress",
        "./zstd/lib/decompress",
        "./zstd/lib/deprecated",
        "./zstd/lib/dictBuilder",
        "./zstd/lib/legacy",
        "../lz4",
        "../lz4/lib",
        "../zlib",
        "../xz/xz/",
        "../xz/xz/src/",
        "../xz/xz/dos/",
        "../xz/xz/src/liblzma/api/",
        "../xz/xz/src/liblzma/api/lzma/",
        "../xz/xz/src/common/",
        "../xz/xz/src/liblzma",
        "../xz/xz/src/liblzma/common/",
        "../xz/xz/src/liblzma/check",
        "../xz/xz/src/lz",
        "../xz/xz/src/lzma",
    ]

    cflags = [
        "-fPIC",
        "-Wall",
        "-Wextra",
        "-fexceptions",
         "-Wno-error=unused-parameter",
        "-Wno-error=int-conversion",
        "-Wno-error=format",
        "-DZSTD_BUILD_CONTRIB",
        "-DZSTD_BUILD_STATIC",
        "-DZSTD_BUILD_TESTS",
        "-DZSTD_ZLIB_SUPPORT",
        "-DZSTD_LZMA_SUPPORT",
        "-Dzstd_COMPRESSION",
        "-Dzstd_DECOMPRESSION",
        "-Dzstd_DICTBUILDER",
        "-DHAVE_LZ4",
        "-DZSTD_LZ4COMPRESS",
        "-DZSTD_LZ4DECOMPRESS",
        "-DHAVE_PTHREAD",
        "-DHAVE_THREAD",
        "-DZSTD_MULTITHREAD",
        "-DHAVE_ZLIB",
        "-DZSTD_GZCOMPRESS",
        "-DZSTD_GZDECOMPRESS",
        "-DHAVE_LZMA",
        "-DZSTD_LZMACOMPRESS",
        "-DZSTD_LZMADECOMPRESS",
    ]
}
ohos_shared_library("zstd_shared") {
    sources = [
        "./zstd/lib/common/debug.c",
        "./zstd/lib/common/entropy_common.c",
        "./zstd/lib/common/error_private.c",
        "./zstd/lib/common/fse_decompress.c",
        "./zstd/lib/common/pool.c",
        "./zstd/lib/common/threading.c",
        "./zstd/lib/common/xxhash.c",
        "./zstd/lib/common/zstd_common.c",
        "./zstd/lib/compress/fse_compress.c",
        "./zstd/lib/compress/hist.c",
        "./zstd/lib/compress/huf_compress.c",
        "./zstd/lib/compress/zstd_compress.c",
        "./zstd/lib/compress/zstd_compress_literals.c",
        "./zstd/lib/compress/zstd_compress_sequences.c",
        "./zstd/lib/compress/zstd_compress_superblock.c",
        "./zstd/lib/compress/zstd_double_fast.c",
        "./zstd/lib/compress/zstd_fast.c",
        "./zstd/lib/compress/zstd_lazy.c",
        "./zstd/lib/compress/zstd_ldm.c",
        "./zstd/lib/compress/zstd_opt.c",
        "./zstd/lib/compress/zstdmt_compress.c",
        "./zstd/lib/decompress/huf_decompress.c",
        "./zstd/lib/decompress/zstd_ddict.c",
        "./zstd/lib/decompress/zstd_decompress.c",
        "./zstd/lib/decompress/zstd_decompress_block.c",
        "./zstd/lib/deprecated/zbuff_common.c",
        "./zstd/lib/deprecated/zbuff_compress.c",
        "./zstd/lib/deprecated/zbuff_decompress.c",
        "./zstd/lib/dictBuilder/cover.c",
        "./zstd/lib/dictBuilder/divsufsort.c",
        "./zstd/lib/dictBuilder/fastcover.c",
        "./zstd/lib/dictBuilder/zdict.c",
        "./zstd/lib/legacy/zstd_v01.c",
        "./zstd/lib/legacy/zstd_v02.c",
        "./zstd/lib/legacy/zstd_v03.c",
        "./zstd/lib/legacy/zstd_v04.c",
        "./zstd/lib/legacy/zstd_v05.c",
        "./zstd/lib/legacy/zstd_v06.c",
        "./zstd/lib/legacy/zstd_v07.c",
    ]

    configs = [
        ":libzstd_config"
    ]

    deps = [
        "../lz4:liblz4_static",
        "../zlib:libz",
        "../xz:libxz",
    ]

    part_name = "zstd"
}


config ("regression_config") {
    include_dirs = [
        "./zstd",
        "./zstd/lib/",
        "./zstd/programs/",
        "./zstd/lib/common/",
        "../curl/",
        "../curl/include/",
        "../curl/include/curl/",
    ]

    cflags = [
        "-fPIC",
        "-Wall",
        "-Wextra",
        "-fexceptions",
        "-Wno-error=unused-parameter",
        "-Wno-error=unused-variable",
        "-Wno-error=unused-function",
        "-Wno-error=sign-compare",
        "-Wno-error=undef",
        "-Wno-error=macro-redefined",
        "-Wno-error=int-conversion",
        "-Wno-error=format",
        "-Wno-error=logical-op-parentheses",
        "-Wno-error=parentheses",
        "-Wno-error=deprecated-declarations",
        "-Wno-error=missing-field-initializers",
    ]

    ldflags = [
        "-lpthread",
    ]
}

ohos_executable("zst_test_regression") {
    sources = [
        "./zstd/tests/regression/config.c",
        "./zstd/tests/regression/data.c",
        "./zstd/tests/regression/method.c",
        "./zstd/tests/regression/result.c",
        "./zstd/tests/regression/test.c",
        "./zstd/programs/util.c",
        "./zstd/lib/common/xxhash.c",
    ]

    public_configs = [ ":regression_config" ]

    deps = [
        ":zstd_shared",
        "../curl:curl_target"
    ]

    defines = [
    ]

    part_name = "zstd"
}



config ("zstd_tests_config") {
    include_dirs = [
        "./zstd",
        "./zstd/lib",
        "./zstd/examples",
    ]

    cflags = [
        "-fPIC",
        "-Wall",
        "-Wextra",
        "-fexceptions",
        "-Wno-error=unused-parameter",
        "-Wno-error=unused-variable",
        "-Wno-error=unused-function",
        "-Wno-error=sign-compare",
        "-Wno-error=undef",
        "-Wno-error=macro-redefined",
        "-Wno-error=int-conversion",
        "-Wno-error=format",
        "-Wno-error=logical-op-parentheses",
        "-Wno-error=parentheses",
    ]
}

ohos_executable("dictionary_compression") {
    sources = [
        "./zstd/examples/dictionary_compression.c",
    ]

    public_configs = [ ":zstd_tests_config" ]

    deps = [
        ":zstd_shared",
    ]

    defines = [
    ]

    part_name = "zstd"
}


ohos_executable("dictionary_decompression") {
    sources = [
        "./zstd/examples/dictionary_decompression.c",
    ]

    public_configs = [ ":zstd_tests_config" ]

    deps = [
        ":zstd_shared",
    ]

    defines = [
    ]

    part_name = "zstd"
}


ohos_executable("multiple_simple_compression") {
    sources = [
        "./zstd/examples/multiple_simple_compression.c",
    ]

    public_configs = [ ":zstd_tests_config" ]

    deps = [
        ":zstd_shared",
    ]

    defines = [
    ]

    part_name = "zstd"
}


ohos_executable("multiple_streaming_compression") {
    sources = [
        "./zstd/examples/multiple_streaming_compression.c",
    ]

    public_configs = [ ":zstd_tests_config" ]

    deps = [
        ":zstd_shared",
    ]

    defines = [
    ]

    part_name = "zstd"
}


ohos_executable("simple_compression") {
    sources = [
        "./zstd/examples/simple_compression.c",
    ]

    public_configs = [ ":zstd_tests_config" ]

    deps = [
        ":zstd_shared",
    ]

    defines = [
    ]

    part_name = "zstd"
}


ohos_executable("simple_decompression") {
    sources = [
        "./zstd/examples/simple_decompression.c",
    ]

    public_configs = [ ":zstd_tests_config" ]

    deps = [
        ":zstd_shared",
    ]

    defines = [
    ]

    part_name = "zstd"
}

ohos_executable("streaming_compression_thread_pool") {
    sources = [
        "./zstd/examples/streaming_compression_thread_pool.c",
    ]

    public_configs = [ ":zstd_tests_config" ]

    deps = [
        ":zstd_shared",
    ]

    defines = [
    ]

    part_name = "zstd"
}


ohos_executable("streaming_compression") {
    sources = [
        "./zstd/examples/streaming_compression.c",
    ]

    public_configs = [ ":zstd_tests_config" ]

    deps = [
        ":zstd_shared",
    ]

    defines = [
    ]

    part_name = "zstd"
}


ohos_executable("streaming_decompression") {
    sources = [
        "./zstd/examples/streaming_decompression.c",
    ]

    public_configs = [ ":zstd_tests_config" ]

    deps = [
        ":zstd_shared",
    ]

    defines = [
    ]

    part_name = "zstd"
}


ohos_executable("streaming_memory_usage") {
    sources = [
        "./zstd/examples/streaming_memory_usage.c"
    ]

    public_configs = [ ":zstd_tests_config" ]

    deps = [
        ":zstd_shared",
    ]

    defines = [
    ]

    part_name = "zstd"
}


config ("zstd_programs_config") {
    include_dirs = [
        "./zstd",
        "./zstd/programs",
        "./zstd/lib",
        "./zstd/zlibWrapper",
        "../lz4",
        "../lz4/lib",
        "../zlib",
        "../xz/xz/",
        "../xz/xz/src/",
        "../xz/xz/dos/",
        "../xz/xz/src/liblzma/api/",
        "../xz/xz/src/liblzma/api/lzma/",
        "../xz/xz/src/common/",
        "../xz/xz/src/liblzma",
        "../xz/xz/src/liblzma/common/",
        "../xz/xz/src/liblzma/check",
        "../xz/xz/src/lz",
        "../xz/xz/src/lzma",
    ]

    cflags = [
        "-fPIC",
        "-Wall",
        "-Wextra",
        "-fexceptions",
        "-Wno-error=unused-parameter",
        "-Wno-error=unused-variable",
        "-Wno-error=sign-compare",
        "-Wno-error=undef",
        "-Wno-error=macro-redefined",
        "-Wno-error=int-conversion",
        "-Wno-error=format",
        "-Wno-error=logical-op-parentheses",
        "-Wno-error=parentheses",
        "-Wno-error=implicit-function-declaration",
        "-DHAVE_LZ4",
        "-DZSTD_LZ4COMPRESS",
        "-DZSTD_LZ4DECOMPRESS",
        "-DHAVE_PTHREAD",
        "-DHAVE_THREAD",
        "-DZSTD_MULTITHREAD",
        "-DHAVE_ZLIB",
        "-DZSTD_GZCOMPRESS",
        "-DZSTD_GZDECOMPRESS",
        "-DHAVE_LZMA",
        "-DZSTD_LZMACOMPRESS",
        "-DZSTD_LZMADECOMPRESS",
    ]

    ldflags = [
        "-lpthread",
    ]
}

ohos_executable("zstd") {
    sources = [
        "./zstd/programs/benchfn.c",
        "./zstd/programs/benchzstd.c",
        "./zstd/programs/datagen.c",
        "./zstd/programs/dibio.c",
        "./zstd/programs/fileio.c",
        "./zstd/programs/timefn.c",
        "./zstd/programs/util.c",
        "./zstd/programs/zstdcli.c",
        "./zstd/programs/zstdcli_trace.c",
    ]

    public_configs = [ ":zstd_programs_config" ]

    deps = [
        ":zstd_shared",
        "../lz4:liblz4_static",
        "../zlib:libz",
        "../xz:libxz",
    ]

    defines = [
        "PACKAGE_VERSION",
    ]

    part_name = "zstd"
}

group("examples") {
    if (enable_zstd_test) {
        deps = [
            ":dictionary_compression",
            ":dictionary_decompression",
            ":multiple_simple_compression",
            ":multiple_streaming_compression",
            ":simple_compression",
            ":simple_decompression",
            ":streaming_compression_thread_pool",
            ":streaming_compression",
            ":streaming_decompression",
            ":streaming_memory_usage",
        ]
    }
}

group("zstd_exe") {
    if (enable_zstd_test) {
        deps = [
            ":zstd"
        ]
    }
}

group("zst_regression") {
    if (enable_zstd_test) {
        deps = [
            ":zst_test_regression"
        ]
    }
}