diff --git a/minizip-ng/BUILD.gn b/minizip-ng/BUILD.gn index 71b8ebb1c90fd2416155436e9fc358e1b0e9cb24..a866cc9f79ba5c4b8f03f4be30102d6bd8481dc2 100644 --- a/minizip-ng/BUILD.gn +++ b/minizip-ng/BUILD.gn @@ -14,182 +14,167 @@ import("//build/ohos.gni") declare_args() { - enable_minizip_test = false + enable_minizip_test = false } config("libminizip_config") { - include_dirs = [ - "//third_party/openssl/include", - "//third_party/openssl/include/openssl/", - "//third_party/minizip-ng/minizip-ng", - "//third_party/bzip2", - "//third_party/zlib", - "//third_party/iconv/", - "//third_party/iconv/libiconv", - "//third_party/xz/xz/", - "//third_party/xz/xz/src/liblzma/api/", - "//third_party/zstd/zstd", - "//third_party/zstd/zstd/lib/" - ] - - cflags = [ - "-fPIC", - "-Wall", - "-Wextra", - "-frtti", - "-fexceptions", - "-std=gnu99", - "-Wno-error=missing-braces", - "-Wno-error=visibility", - "-Wno-error=unused-function", - "-Wno-error=unused-variable", - "-Wno-error=undef", - "-Wno-error=deprecated-declarations", - "-Wno-error=sign-compare", - "-Wno-error=parentheses-equality", - "-Wno-incompatible-pointer-types", - "-Wno-error=unused-parameter", - "-Wno-error=header-hygiene", - "-Wno-error=implicit-function-declaration", - "-DHAVE_BZIP2", - "-DHAVE_INTTYPES_H", - "-DHAVE_PKCRYPT", - "-DHAVE_STDINT_H", - "-DHAVE_WZAES", - "-DHAVE_ZLIB", - "-DHAVE_ZSTD", - "-DHAVE_LZMA", - "-DMZ_ZIP_SIGNING", - "-DHAVE_ICONV", - "-DLZMA_API_STATIC", - "-D_POSIX_C_SOURCE=200112L", - ] + include_dirs = [ + "//third_party/openssl/include", + "//third_party/openssl/include/openssl/", + "//third_party/minizip-ng/minizip-ng", + "//third_party/bzip2", + "//third_party/zlib", + "//third_party/iconv/", + "//third_party/iconv/libiconv", + "//third_party/xz/xz/", + "//third_party/xz/xz/src/liblzma/api/", + "//third_party/zstd/zstd", + "//third_party/zstd/zstd/lib/", + ] + + cflags = [ + "-fPIC", + "-Wall", + "-Wextra", + "-frtti", + "-fexceptions", + "-std=gnu99", + "-Wno-error=missing-braces", + "-Wno-error=visibility", + "-Wno-error=unused-function", + "-Wno-error=unused-variable", + "-Wno-error=undef", + "-Wno-error=deprecated-declarations", + "-Wno-error=sign-compare", + "-Wno-error=parentheses-equality", + "-Wno-incompatible-pointer-types", + "-Wno-error=unused-parameter", + "-Wno-error=header-hygiene", + "-Wno-error=implicit-function-declaration", + "-DHAVE_BZIP2", + "-DHAVE_INTTYPES_H", + "-DHAVE_PKCRYPT", + "-DHAVE_STDINT_H", + "-DHAVE_WZAES", + "-DHAVE_ZLIB", + "-DHAVE_ZSTD", + "-DHAVE_LZMA", + "-DMZ_ZIP_SIGNING", + "-DHAVE_ICONV", + "-DLZMA_API_STATIC", + "-D_POSIX_C_SOURCE=200112L", + ] } ohos_shared_library("minizip_shared") { - sources = [ - "//third_party/minizip-ng/minizip-ng/mz_compat.c", - "//third_party/minizip-ng/minizip-ng/mz_crypt.c", - "//third_party/minizip-ng/minizip-ng/mz_crypt_openssl.c", - "//third_party/minizip-ng/minizip-ng/mz_os.c", - "//third_party/minizip-ng/minizip-ng/mz_os_posix.c", - "//third_party/minizip-ng/minizip-ng/mz_strm.c", - "//third_party/minizip-ng/minizip-ng/mz_strm_buf.c", - "//third_party/minizip-ng/minizip-ng/mz_strm_bzip.c", - "//third_party/minizip-ng/minizip-ng/mz_strm_mem.c", - "//third_party/minizip-ng/minizip-ng/mz_strm_os_posix.c", - "//third_party/minizip-ng/minizip-ng/mz_strm_pkcrypt.c", - "//third_party/minizip-ng/minizip-ng/mz_strm_split.c", - "//third_party/minizip-ng/minizip-ng/mz_strm_wzaes.c", - "//third_party/minizip-ng/minizip-ng/mz_strm_zlib.c", - "//third_party/minizip-ng/minizip-ng/mz_zip.c", - "//third_party/minizip-ng/minizip-ng/mz_zip_rw.c", - "//third_party/minizip-ng/minizip-ng/mz_strm_lzma.c", - "//third_party/minizip-ng/minizip-ng/mz_strm_zstd.c", - ] - - configs = [ - ":libminizip_config" - ] - - deps = [ - "//third_party/openssl:libcrypto_shared", - "//third_party/zlib:libz_shared", - "//third_party/bzip2:libbz2", - "//third_party/iconv:iconv", - "//third_party/zstd:zstd_shared", - "//third_party/xz:libxz", - ] - - part_name = "minizip" + sources = [ + "//third_party/minizip-ng/minizip-ng/mz_compat.c", + "//third_party/minizip-ng/minizip-ng/mz_crypt.c", + "//third_party/minizip-ng/minizip-ng/mz_crypt_openssl.c", + "//third_party/minizip-ng/minizip-ng/mz_os.c", + "//third_party/minizip-ng/minizip-ng/mz_os_posix.c", + "//third_party/minizip-ng/minizip-ng/mz_strm.c", + "//third_party/minizip-ng/minizip-ng/mz_strm_buf.c", + "//third_party/minizip-ng/minizip-ng/mz_strm_bzip.c", + "//third_party/minizip-ng/minizip-ng/mz_strm_lzma.c", + "//third_party/minizip-ng/minizip-ng/mz_strm_mem.c", + "//third_party/minizip-ng/minizip-ng/mz_strm_os_posix.c", + "//third_party/minizip-ng/minizip-ng/mz_strm_pkcrypt.c", + "//third_party/minizip-ng/minizip-ng/mz_strm_split.c", + "//third_party/minizip-ng/minizip-ng/mz_strm_wzaes.c", + "//third_party/minizip-ng/minizip-ng/mz_strm_zlib.c", + "//third_party/minizip-ng/minizip-ng/mz_strm_zstd.c", + "//third_party/minizip-ng/minizip-ng/mz_zip.c", + "//third_party/minizip-ng/minizip-ng/mz_zip_rw.c", + ] + + configs = [ ":libminizip_config" ] + + deps = [ + "//third_party/bzip2:libbz2", + "//third_party/iconv:iconv", + "//third_party/openssl:libcrypto_shared", + "//third_party/xz:libxz", + "//third_party/zlib:libz_shared", + "//third_party/zstd:zstd_shared", + ] + + part_name = "minizip" } ohos_executable("minizip") { - sources = [ - "./minizip-ng/minizip.c", - ] - - cflags = [ - "-DHAVE_BZIP2", - "-DHAVE_ICONV", - "-DHAVE_INTTYPES_H", - "-DHAVE_LZMA", - "-DHAVE_PKCRYPT", - "-DHAVE_STDINT_H", - "-DHAVE_WZAES", - "-DHAVE_ZLIB", - "-DHAVE_ZSTD", - "-DLZMA_API_STATIC", - "-DMZ_ZIP_SIGNING", - "-D_POSIX_C_SOURCE=200112L", - ] - - deps = [ - "//third_party/minizip-ng:minizip_shared", - ] - - part_name = "minizip" + sources = [ "./minizip-ng/minizip.c" ] + + cflags = [ + "-DHAVE_BZIP2", + "-DHAVE_ICONV", + "-DHAVE_INTTYPES_H", + "-DHAVE_LZMA", + "-DHAVE_PKCRYPT", + "-DHAVE_STDINT_H", + "-DHAVE_WZAES", + "-DHAVE_ZLIB", + "-DHAVE_ZSTD", + "-DLZMA_API_STATIC", + "-DMZ_ZIP_SIGNING", + "-D_POSIX_C_SOURCE=200112L", + ] + + deps = [ "//third_party/minizip-ng:minizip_shared" ] + + part_name = "minizip" } ohos_executable("minigzip") { - sources = [ - "./minizip-ng/minigzip.c", - ] + sources = [ "./minizip-ng/minigzip.c" ] - public_configs = [ ":libminizip_config" ] + public_configs = [ ":libminizip_config" ] - deps = [ - "//third_party/minizip-ng:minizip_shared", - ] + deps = [ "//third_party/minizip-ng:minizip_shared" ] - part_name = "minizip" + part_name = "minizip" } -config ("minizip_config") { - include_dirs = [ - "//third_party/minizip-ng/minizip-ng", - "//third_party/minizip-ng/minizip-ng/test", - ] - - cflags = [ - "-DHAVE_COMPAT", - "-DHAVE_BZIP2", - "-DHAVE_INTTYPES_H", - "-DHAVE_PKCRYPT", - "-DHAVE_STDINT_H", - "-DHAVE_WZAES", - "-DHAVE_ZLIB", - "-DHAVE_LZMA", - "-DHAVE_ZSTD", - "-DMZ_ZIP_SIGNING", - "-DZLIB_COMPAT", - "-D_POSIX_C_SOURCE=200112L" - ] +config("minizip_config") { + include_dirs = [ + "//third_party/minizip-ng/minizip-ng", + "//third_party/minizip-ng/minizip-ng/test", + ] + + cflags = [ + "-DHAVE_COMPAT", + "-DHAVE_BZIP2", + "-DHAVE_INTTYPES_H", + "-DHAVE_PKCRYPT", + "-DHAVE_STDINT_H", + "-DHAVE_WZAES", + "-DHAVE_ZLIB", + "-DHAVE_LZMA", + "-DHAVE_ZSTD", + "-DMZ_ZIP_SIGNING", + "-DZLIB_COMPAT", + "-D_POSIX_C_SOURCE=200112L", + ] } ohos_executable("minizip_test") { - sources = [ - "./minizip-ng/test/test.c" - ] + sources = [ "./minizip-ng/test/test.c" ] - public_configs = [ ":minizip_config" ] + public_configs = [ ":minizip_config" ] - deps = [ - "//third_party/minizip-ng:minizip_shared", - ] + deps = [ "//third_party/minizip-ng:minizip_shared" ] - part_name = "minizip" + part_name = "minizip" } - -group ("samples") { - if(enable_minizip_test) { - deps = [ - ":minizip", - ":minigzip", - ":minizip_test", - ] - } else { - deps = [] - } +group("samples") { + if (enable_minizip_test) { + deps = [ + ":minigzip", + ":minizip", + ":minizip_test", + ] + } else { + deps = [] + } } diff --git a/minizip-ng/CMakeLists.txt b/minizip-ng/CMakeLists.txt new file mode 100755 index 0000000000000000000000000000000000000000..cece8309b23b8d56afe95429fee4581ee78918d6 --- /dev/null +++ b/minizip-ng/CMakeLists.txt @@ -0,0 +1,329 @@ + +# Copyright (c) 2022 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. + +# the minimum version of CMake. +cmake_minimum_required(VERSION 3.4.1) +project(minizip-ng) + +set(MINIZIP_DEFINITIONS + -DHAVE_INTTYPES_H + -DHAVE_STDINT_H + -DLZMA_API_STATIC + -D_POSIX_C_SOURCE=200112L + -DOPENSSL_ARM64_PLATFORM + -D_GNU_SOURCE + -DHAVE_ZLIB + -DMZ_ZIP_NO_CRYPTO + ) + +set(MINIZIP_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/minizip-ng) +set(MINIZIP_SRC "${CMAKE_CURRENT_SOURCE_DIR}/minizip-ng/mz_crypt.c" + "${CMAKE_CURRENT_SOURCE_DIR}/minizip-ng/mz_os.c" + "${CMAKE_CURRENT_SOURCE_DIR}/minizip-ng/mz_strm.c" + "${CMAKE_CURRENT_SOURCE_DIR}/minizip-ng/mz_strm_buf.c" + "${CMAKE_CURRENT_SOURCE_DIR}/minizip-ng/mz_strm_mem.c" + "${CMAKE_CURRENT_SOURCE_DIR}/minizip-ng/mz_strm_split.c" + "${CMAKE_CURRENT_SOURCE_DIR}/minizip-ng/mz_zip.c" + "${CMAKE_CURRENT_SOURCE_DIR}/minizip-ng/mz_zip_rw.c" + "${CMAKE_CURRENT_SOURCE_DIR}/minizip-ng/mz_strm_zlib.c" + "${CMAKE_CURRENT_SOURCE_DIR}/minizip-ng/mz_os_posix.c" + "${CMAKE_CURRENT_SOURCE_DIR}/minizip-ng/mz_strm_os_posix.c" + ) + +set(LinkLib libz.so) + +if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../libiconv) +option(BUILD_ICONV "enable to build iconv" ON) +endif() + +if (BUILD_ICONV) +set(ICONV_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../iconv/adapter) +set(ICONV_SRC ${CMAKE_CURRENT_SOURCE_DIR}/../iconv/libiconv/lib/iconv.c + ${CMAKE_CURRENT_SOURCE_DIR}/../iconv/libiconv/lib/relocatable.c + ${CMAKE_CURRENT_SOURCE_DIR}/../iconv/libiconv/libcharset/lib/localcharset.c + ${CMAKE_CURRENT_SOURCE_DIR}/../iconv/libiconv/libcharset/lib/relocatable-stub.c + ) +set(ICONV_LIB_DEFINITIONS + -DCVAPI_EXPORTS + -D_USE_MATH_DEFINES + -D__STDC_CONSTANT_MACROS + -D__STDC_FORMAT_MACROS + -D__STDC_LIMIT_MACROS + -DHAVE_CONFIG_H + -DENABLE_RELOCATABLE=1 + -DBUILDING_LIBICONV + -DNO_XMALLOC) + +add_library(iconv SHARED ${ICONV_SRC}) +target_compile_definitions(iconv PRIVATE ${ICONV_LIB_DEFINITIONS}) +target_include_directories(iconv PUBLIC ${ICONV_INCLUDE_DIR}) + +list(APPEND MINIZIP_DEFINITIONS -DHAVE_ICONV) +list(APPEND MINIZIP_INCLUDE_DIR ${ICONV_INCLUDE_DIR}) +list(APPEND LinkLib iconv) +endif() + +if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../bzip2) +option(BUILD_BZIP "enable to build with bzip2" ON) +endif() + +if (BUILD_BZIP) +set(BZIP2_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../bzip2") +set(BZIP2_SRC + "${CMAKE_CURRENT_SOURCE_DIR}/../bzip2/blocksort.c" + "${CMAKE_CURRENT_SOURCE_DIR}/../bzip2/bzlib.c" + "${CMAKE_CURRENT_SOURCE_DIR}/../bzip2/compress.c" + "${CMAKE_CURRENT_SOURCE_DIR}/../bzip2/crctable.c" + "${CMAKE_CURRENT_SOURCE_DIR}/../bzip2/decompress.c" + "${CMAKE_CURRENT_SOURCE_DIR}/../bzip2/huffman.c" + "${CMAKE_CURRENT_SOURCE_DIR}/../bzip2/randtable.c") + +add_library(bzip2 SHARED ${BZIP2_SRC}) +target_include_directories(bzip2 PUBLIC ${BZIP2_INCLUDE_DIR}) + +list(APPEND MINIZIP_DEFINITIONS -DBZ_NO_STDIO -DHAVE_BZIP2) +list(APPEND MINIZIP_INCLUDE_DIR ${BZIP2_INCLUDE_DIR}) +list(APPEND LinkLib bzip2) +list(APPEND MINIZIP_SRC ${CMAKE_CURRENT_SOURCE_DIR}/minizip-ng/mz_strm_bzip.c) +endif() + +if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../zstd) +option(BUILD_ZSTD "enable to build with zstd" ON) +endif() +if (BUILD_ZSTD) +set(ZSTD_DEFINITIONS + -DZSTD_BUILD_CONTRIB + -DZSTD_BUILD_STATIC + -DZSTD_BUILD_TESTS + -DZSTD_ZLIB_SUPPORT + -DZSTD_LZMA_SUPPORT + -DZSTD_LIB_COMPRESSION + -DZSTD_LIB_DECOMPRESSION + -DZSTD_LIB_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) +set(ZSTD_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../zstd + ${CMAKE_CURRENT_SOURCE_DIR}/../zstd/lib + ${CMAKE_CURRENT_SOURCE_DIR}/../zstd/lib/common + ${CMAKE_CURRENT_SOURCE_DIR}/../zstd/lib/compress + ${CMAKE_CURRENT_SOURCE_DIR}/../zstd/lib/decompress + ${CMAKE_CURRENT_SOURCE_DIR}/../zstd/lib/deprecated + ${CMAKE_CURRENT_SOURCE_DIR}/../zstd/lib/dictBuilder + ${CMAKE_CURRENT_SOURCE_DIR}/../zstd/lib/legacy + ) + +set(zstd_link_lib libz.so) + +if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../lz4) +set(LZ4_SRC ${CMAKE_CURRENT_SOURCE_DIR}/../lz4/lib/lz4.c + ${CMAKE_CURRENT_SOURCE_DIR}/../lz4/lib/lz4frame.c + ${CMAKE_CURRENT_SOURCE_DIR}/../lz4/lib/lz4hc.c + ${CMAKE_CURRENT_SOURCE_DIR}/../lz4/lib/xxhash.c) +SET(LZ4_INC_IDR ${CMAKE_CURRENT_SOURCE_DIR}/../lz4 ${CMAKE_CURRENT_SOURCE_DIR}/../lz4/lib) + +add_library(lz4 STATIC ${LZ4_SRC}) +target_include_directories(lz4 PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../lz4) +target_compile_definitions(lz4 PRIVATE HAVE_CONFIG_H) + +list(APPEND zstd_link_lib lz4) +list(APPEND ZSTD_INCLUDE_DIR ${LZ4_INC_IDR}) +endif() + +if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../xz) +set(XZ_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../xz/adapted + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/common + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/lzma + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/common + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/lz + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/rangecoder + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/check + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/api + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/api/lzma + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/delta + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/simple + ) +set(XZ_SRC + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/common/tuklib_physmem.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/common/tuklib_cpucores.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/common/common.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/common/block_util.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/common/easy_preset.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/common/filter_common.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/common/hardware_physmem.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/common/index.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/common/stream_flags_common.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/common/vli_size.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/common/hardware_cputhreads.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/common/alone_encoder.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/common/block_buffer_encoder.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/common/block_encoder.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/common/block_header_encoder.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/common/easy_buffer_encoder.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/common/easy_encoder.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/common/easy_encoder_memusage.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/common/filter_buffer_encoder.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/common/filter_encoder.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/common/filter_flags_encoder.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/common/index_encoder.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/common/stream_buffer_encoder.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/common/stream_encoder.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/common/stream_flags_encoder.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/common/stream_flags_decoder.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/common/vli_encoder.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/common/outqueue.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/common/stream_encoder_mt.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/common/alone_decoder.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/common/auto_decoder.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/common/block_buffer_decoder.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/common/block_decoder.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/common/block_header_decoder.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/common/easy_decoder_memusage.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/common/filter_buffer_decoder.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/common/filter_decoder.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/common/filter_flags_decoder.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/common/index_decoder.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/common/index_hash.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/common/stream_buffer_decoder.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/common/stream_decoder.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/common/vli_decoder.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/check/check.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/check/crc32_table.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/check/crc32_fast.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/check/crc64_table.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/check/crc64_fast.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/check/sha256.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/lz/lz_encoder.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/lz/lz_encoder_mf.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/lz/lz_decoder.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/lzma/lzma_encoder_presets.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/lzma/lzma_encoder.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/lzma/lzma_encoder_optimum_fast.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/lzma/lzma_encoder_optimum_normal.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/lzma/fastpos_table.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/lzma/lzma_decoder.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/lzma/lzma2_encoder.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/lzma/lzma2_decoder.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/rangecoder/price_table.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/delta/delta_common.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/delta/delta_encoder.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/delta/delta_decoder.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/simple/simple_coder.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/simple/simple_encoder.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/simple/simple_decoder.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/simple/x86.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/simple/powerpc.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/simple/ia64.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/simple/arm.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/simple/armthumb.c + ${CMAKE_CURRENT_SOURCE_DIR}/../xz/libxz/src/liblzma/simple/sparc.c + ) + +set(XZ_DEFINES "-DHAVE_CONFIG_H" + "-DTUKLIB_SYMBOL_PREFIX=lzma_" + "-DPIC" + "-DLZMA_H_INTERNAL") + +add_library(xz SHARED ${XZ_SRC}) +target_include_directories(xz PUBLIC ${XZ_INCLUDE_DIR}) +target_compile_definitions(xz PRIVATE ${XZ_DEFINES}) + +list(APPEND zstd_link_lib xz) +list(APPEND ZSTD_INCLUDE_DIR XZ_INCLUDE_DIR) +endif() + +aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/../zstd/lib/common zstd_source_common) +aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/../zstd/lib/compress zstd_source_compress) +aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/../zstd/lib/decompress zstd_source_decompress) +aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/../zstd/lib/deprecated zstd_source_deprecated) +aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/../zstd/lib/dictBuilder zstd_source_dictBuilder) +aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/../zstd/lib/legacy zstd_source_legacy) + +add_library(zstd SHARED ${zstd_source_common} + ${zstd_source_compress} + ${zstd_source_decompress} + ${zstd_source_deprecated} + ${zstd_source_dictBuilder} + ${zstd_source_legacy}) + +target_compile_definitions(zstd PRIVATE ${ZSTD_DEFINITIONS}) +target_include_directories(zstd PUBLIC ${ZSTD_INCLUDE_DIR}) + +target_link_libraries(zstd ${zstd_link_lib}) + +list(APPEND MINIZIP_INCLUDE_DIR ${ZSTD_INCLUDE_DIR}) +list(APPEND MINIZIP_SRC ${CMAKE_CURRENT_SOURCE_DIR}/minizip-ng/mz_strm_zstd.c) +list(APPEND MINIZIP_DEFINITIONS -DHAVE_ZSTD) +list(APPEND LinkLib zstd) +endif() + +if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../lzma) +option(BUILD_LZMA "enable to build with zstd" ON) +endif() +if (BUILD_LZMA) +set(LZMA_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../lzma/lib) +aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/../lzma/lib lzma_source) + +add_library(lzma SHARED ${lzma_source}) +target_compile_options(lzma PRIVATE -Wno-incompatible-pointer-types -Werror -Wimplicit-function-declaration -Wno-error=unused-command-line-argument) +target_include_directories(lzma PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) + +list(APPEND MINIZIP_INCLUDE_DIR ${BZIP2_INCLUDE_DIR}) +list(APPEND MINIZIP_DEFINITIONS -DHAVE_LZMA -DLZMA_API_STATIC) +list(APPEND MINIZIP_SRC {CMAKE_CURRENT_SOURCE_DIR}/minizip-ng/mz_strm_lzma.c) +endif() + +set(MINIZIP_FLAG -fPIC + -Wno-error=implicit-function-declaration + -Wall + -Wextra + -Wno-error=missing-braces + -Wno-missing-braces + -Wno-error=visibility + -Wno-visibility + -Wno-error=unused-function + -Wno-unused-function + -Wno-error=unused-variable + -Wno-unused-variable + -Wno-error=undef + -Wno-error=deprecated-declarations + -Wno-deprecated-declarations + -Wno-error=sign-compare + -Wno-error=parentheses-equality + -Wno-parentheses-equality + -Wno-incompatible-pointer-types + -Wno-unused-command-line-argument + -Wno-error=unused-parameter + -Wno-unused-parameter + -Wno-error=header-hygiene + -frtti + -fexceptions + -std=gnu99) + +add_library(minizip_shared SHARED ${MINIZIP_SRC}) +target_include_directories(minizip_shared PUBLIC ${MINIZIP_SOURCE_DIR}) +target_compile_options(minizip_shared PRIVATE ${MINIZIP_FLAG}) +target_compile_definitions(minizip_shared PRIVATE ${MINIZIP_DEFINITIONS}) + +target_link_libraries(minizip_shared ${LinkLib}) diff --git a/minizip-ng/README.OpenSource b/minizip-ng/README.OpenSource index c96ef5a5000de7df17f59a81fd5d5e89ab50d1e7..3412986431cff565f06d193534a129149ce8911e 100644 --- a/minizip-ng/README.OpenSource +++ b/minizip-ng/README.OpenSource @@ -4,8 +4,8 @@ "License": "zlib", "License File": "COPYRIGHT", "Version Number": "3.0.4", - "Owner": "caiqi14@huawei.com", + "Owner": "huangminzhong2@huawei.com", "Upstream URL": "https://github.com/zlib-ng/minizip-ng", "Description": "minizip-ng is a zip manipulation library written in C that is supported on Windows, macOS, and Linux." } -] \ No newline at end of file +] diff --git a/minizip-ng/README_zh.md b/minizip-ng/README_zh.md index 14ffe46ec138fb85def2628e7b1c442d96ad30fb..a3b6eb7a7f2df8aaf5bd06d4e6ce790406cbe311 100644 --- a/minizip-ng/README_zh.md +++ b/minizip-ng/README_zh.md @@ -1,17 +1,30 @@ # minizip-ng 三方库说明 + ## 功能简介 + minizip是一个用C编写的zip文件操作库。 + ## 使用约束 - IDE版本:DevEco Studio 3.0 Beta4 - ROM版本:OpenHarmony3.2 Beta1 - API版本:9 - 三方库版本:3.0.4 -- 当前适配的功能:完成了创建和解压BZIP2、LZMA、XZ和ZSTD格式的zip文件 +- 当前适配的功能: + - 创建和解压缩zip存档。 + - 在zip存档中添加和删除条目。 + - 从内存中读取和写入压缩文件。 + - Zlib、BZIP2、LZMA、XZ和ZSTD压缩方法。 + - 跟踪并存储符号链接。 + - 通过UTF-8编码支持Unicode文件名。 + - 传统字符编码支持CP437、CP932、CP936、CP950。 + - 关闭压缩、解压缩或加密的编译 + - 将本地文件头信息归零。 + - 压缩/解压缩中心目录以减小大小 + - 如果中心目录损坏或丢失,则恢复该目录 - [License : zlib](https://github.com/zlib-ng/minizip-ng/tree/3.0.4/LICENSE) ## 集成方式 -+ [系统Rom包集成](docs/rom_integrate.md) - - +- [系统Rom包集成](docs/rom_integrate.md) +- [应用hap包集成](docs/hap_integrate.md) diff --git a/minizip-ng/docs/hap_integrate.md b/minizip-ng/docs/hap_integrate.md new file mode 100755 index 0000000000000000000000000000000000000000..364a747e87cf1ae2d2c46093f7238a42fdd39437 --- /dev/null +++ b/minizip-ng/docs/hap_integrate.md @@ -0,0 +1,111 @@ +# minizip-ng 如何集成到应用hap + +## 准备应用工程 + +本库是基于OpenHarmony SDK API Version 9版本,在润和RK3568开发板上验证的。如果是从未使用过RK3568,可以先查看[润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/rk3568_helloworld)。 + +### 准备应用开发环境 + +- IDE版本:DevEco Studio 3.0 Release +- SDK版本:OpenHarmony SDK +- API版本:API Version 9 + +应用环境准备具体可参照文档[通过IDE开发一个Napi工程](https://gitee.com/zhong-luping/samples/blob/master/docs/napi%E7%B3%BB%E5%88%97%E5%AD%A6%E4%B9%A0/docs/hello_napi.md) + +### 增加构建脚本及配置文件 + +- 下载本仓库代码
+ 通过[C/C++三方库TCP仓](https://gitee.com/openharmony-sig/tpc_c_cplusplus)下载本三方库代码并将其解压。 +- 仓库代码目录结构说明 + + ```shell + tpc_c_cplusplus/minizip-ng + ├── docs # 存放三方库相关文档的文件夹 + ├── BUILD.gn # 构建脚本,支持rom包集成 + ├── bundle.json # 三方库组件定义文件 + ├── CMakeLists.txt # 构建脚本,支持hap包集成 + ├── README.OpenSource # 说明三方库源码的下载地址,版本,license等信息 + ├── README_zh.md # 三方库说明文档 + ``` + +- 将minizip-ng目录及其下面所有文件拷贝到工程的entry\src\main\cpp\third_party目录下。 + +### 准备三方库源码 + +- 准备三方库源码 + 通过[minizip-ng的github网站](https://github.com/zlib-ng/minizip-ng)下载3.0.4版本的源码包,并将源码包解压后拷贝到entry\src\main\cpp\third_party\minizip-ng目录,如下所示: + + ```shell + minizip-ng + ├── docs # 存放三方库相关文档的文件夹 + ├── BUILD.gn # 构建脚本,支持rom包集成 + ├── bundle.json # 三方库组件定义文件 + ├── minizip-ng # 三方库minizip-ng源码目录 + ├── CMakeLists.txt # 构建脚本,支持hap包集成 + ├── README.OpenSource # 说明三方库源码的下载地址,版本,license等信息 + ├── README_zh.md + ``` + +- 准备依赖库 + minizip依赖了zstd,libiconv,lz4,xz,bzip2以及zlib等库,除了zlib是SDK中已有的,其他库都需要下载。 + - [libiconv适配文件](https://gitee.com/openharmony-sig/tpc_c_cplusplus/blob/master/iconv/docs/rom_integrate.md): 参照文档下载适配代码,将整个iconv文件夹拷贝到/entry/src/main/cpp/third_party
+ [libiconv源码](https://ftp.gnu.org/gnu/libiconv/libiconv-1.7.tar.gz):下载解压后改名为libiconv,并将该源码目录拷贝到iconv文件夹中 + - [zstd](https://github.com/facebook/zstd):下载v1.5.2版本,解压后并改为zstd + - [lz4](https://gitee.com/openharmony/third_party_lz4/repository/archive/master.zip):下载解压后并改名为lz4 + - [bzip2](https://gitee.com/openharmony/third_party_bzip2/repository/archive/master.zip):下载解压后并改名为bzip2 + - [xz适配文件](https://gitee.com/openharmony-sig/tpc_c_cplusplus/blob/master/xz/docs/rom_integrate.md): 参照文档下载适配代码,将整个xz文件夹拷贝到/entry/src/main/cpp/third_party
+ [xz源码](https://tukaani.org/xz/xz-5.2.6.tar.gz):下载解压后改名为libxz,并将该源码目录拷贝到xz文件夹中 + 所有依赖库都拷贝到/entry/src/main/cpp/third_party下. + +## 应用中使用三方库 + +- 应用中引入三方库,三方库目录如下: + + ```shell + third_party + ├── minizip-ng # 三方库minizip-ng构建目录 + ├── CMakeLists.txt # 构建脚本,支持hap包集成 + ├── zstd # 三方库minizip-ng的依赖库zstd源码目录 + ├── iconv # 三方库minizip-ng 的依赖库libiconv构建目录 + | ├── libiconv # libiconv源码目录 + | ├── adapter # libiconv适配代码目录 + ├── lz4 # 三方库minizip-ng的依赖库lz4源码目录 + ├── bzip2 # 三方库minizip-ng的依赖库bzip2源码目录 + ├── xz # 三方库minizip-ng的依赖库xz源码目录 + ``` + +- 修改CMakeLists.txt文件 + 在工程的entry\src\main\cpp\CMakeLists.txt中做以下修改: + + ```cmake + add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/minizip-ng) + add_library(entry SHARED minizipNapi.cpp minizip.cpp) + target_include_directories(entry PUBLIC thirdparty/minizip-ng/minizip-ng) + target_link_libraries(entry PUBLIC libace_napi.z.so minizip_shared) + ``` + +- 应用中导入对应的库文件 + + ```js + import minizip from "libentry.so" + ``` + +- 完整demo参考: + [minizip三方库测试源码](https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/FA/thirdparty/minizip_demo) + +## 编译工程 + +- 连接上设备后,DevEco Studio就会显示被发现设备。然后,点击“运行”,即可依次完成该应用“编译”和“安装”的过程,如图: +  ![install](pic/install.png) + +## 运行效果 + +安装hap应用后,在ets界面依次完成:压缩文件、解压缩文件、生成带密码和带全路径的压缩文件、解压带密码和带全路径的压缩文件操作后的结果,如下图:
+ ![ets_results](pic/ets_results.png) + +## 参考资料 + +- [润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/rk3568_helloworld) +- [通过IDE开发一个Napi工程](https://gitee.com/zhong-luping/samples/blob/master/docs/napi%E7%B3%BB%E5%88%97%E5%AD%A6%E4%B9%A0/docs/hello_napi.md) +- [minizip三方库测试源码](https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/thirdparty/minizip_demo) +- [OpenHarmony知识体系](https://gitee.com/openharmony-sig/knowledge) diff --git a/minizip-ng/docs/pic/ets_results.png b/minizip-ng/docs/pic/ets_results.png new file mode 100755 index 0000000000000000000000000000000000000000..2b22c490bf3a513efca31d6b6433992227fceefd Binary files /dev/null and b/minizip-ng/docs/pic/ets_results.png differ diff --git a/minizip-ng/docs/pic/install.png b/minizip-ng/docs/pic/install.png new file mode 100755 index 0000000000000000000000000000000000000000..58ac7e732a58239c3c256f918f4cbe5dafe1601a Binary files /dev/null and b/minizip-ng/docs/pic/install.png differ