From f9a3e222a782ecea0bc73d07016033f7a1c2baaa Mon Sep 17 00:00:00 2001 From: huangminzhong Date: Fri, 28 Oct 2022 23:54:04 -0700 Subject: [PATCH 1/2] add gn for libtiff Signed-off-by: huangminzhong --- libtiff/BUILD.gn | 444 +++++++++++++++++++++++++++++++ libtiff/README.OpenSource | 11 + libtiff/README_zh.md | 23 ++ libtiff/adapted/libport_config.h | 13 + libtiff/adapted/tif_config.h | 155 +++++++++++ libtiff/adapted/tiffconf.h | 127 +++++++++ libtiff/bundle.json | 33 +++ libtiff/docs/pic/result.png | Bin 0 -> 24538 bytes libtiff/docs/rom_integrate.md | 111 ++++++++ 9 files changed, 917 insertions(+) create mode 100755 libtiff/BUILD.gn create mode 100755 libtiff/README.OpenSource create mode 100755 libtiff/README_zh.md create mode 100755 libtiff/adapted/libport_config.h create mode 100755 libtiff/adapted/tif_config.h create mode 100755 libtiff/adapted/tiffconf.h create mode 100755 libtiff/bundle.json create mode 100755 libtiff/docs/pic/result.png create mode 100755 libtiff/docs/rom_integrate.md diff --git a/libtiff/BUILD.gn b/libtiff/BUILD.gn new file mode 100755 index 00000000..bba6cfb6 --- /dev/null +++ b/libtiff/BUILD.gn @@ -0,0 +1,444 @@ +# 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_libtiff_test = false +} + +config("libtiff_config"){ + include_dirs = [ + "libtiff/libtiff/libtiff", + "//third_party/libjpeg", + "//third_party/zlib", + "adapted" + ] +} + +ohos_shared_library("libtiff_shared") { + sources = [ + "libtiff/libtiff/tif_aux.c", + "libtiff/libtiff/tif_close.c", + "libtiff/libtiff/tif_codec.c", + "libtiff/libtiff/tif_color.c", + "libtiff/libtiff/tif_compress.c", + "libtiff/libtiff/tif_dir.c", + "libtiff/libtiff/tif_dirinfo.c", + "libtiff/libtiff/tif_dirread.c", + "libtiff/libtiff/tif_dirwrite.c", + "libtiff/libtiff/tif_dumpmode.c", + "libtiff/libtiff/tif_error.c", + "libtiff/libtiff/tif_extension.c", + "libtiff/libtiff/tif_fax3.c", + "libtiff/libtiff/tif_fax3sm.c", + "libtiff/libtiff/tif_flush.c", + "libtiff/libtiff/tif_getimage.c", + "libtiff/libtiff/tif_jbig.c", + "libtiff/libtiff/tif_jpeg.c", + "libtiff/libtiff/tif_jpeg_12.c", + "libtiff/libtiff/tif_lerc.c", + "libtiff/libtiff/tif_luv.c", + "libtiff/libtiff/tif_lzma.c", + "libtiff/libtiff/tif_lzw.c", + "libtiff/libtiff/tif_next.c", + "libtiff/libtiff/tif_ojpeg.c", + "libtiff/libtiff/tif_open.c", + "libtiff/libtiff/tif_packbits.c", + "libtiff/libtiff/tif_pixarlog.c", + "libtiff/libtiff/tif_predict.c", + "libtiff/libtiff/tif_print.c", + "libtiff/libtiff/tif_read.c", + "libtiff/libtiff/tif_strip.c", + "libtiff/libtiff/tif_swab.c", + "libtiff/libtiff/tif_thunder.c", + "libtiff/libtiff/tif_tile.c", + "libtiff/libtiff/tif_version.c", + "libtiff/libtiff/tif_warning.c", + "libtiff/libtiff/tif_webp.c", + "libtiff/libtiff/tif_write.c", + "libtiff/libtiff/tif_zip.c", + "libtiff/libtiff/tif_zstd.c", + "libtiff/libtiff/tif_unix.c", + ] + configs = [ ":libtiff_config" ] + deps = [ + "//third_party/zlib:libz", + "//third_party/libjpeg:libjpeg_static", + ] + part_name = "libtiff" +} + +config("test_config") { + include_dirs = [ + "libtiff/tools", + "libtiff/libtiff", + "libtiff/port", + "adapted" + ] + + cflags_cc = [ + + ] +} +ohos_executable("fax2ps"){ + sources = [ + "libtiff/tools/fax2ps.c", + ] + + configs = [ + ":test_config", + ] + + deps = [ + ":libtiff_shared", + ] + + part_name = "libtiff" +} + +ohos_executable("fax2tiff"){ + sources = [ + "libtiff/tools/fax2tiff.c", + ] + + configs = [ + ":test_config", + ] + + deps = [ + ":libtiff_shared", + ] + + part_name = "libtiff" +} + +ohos_executable("pal2rgb"){ + sources = [ + "libtiff/tools/pal2rgb.c", + ] + + configs = [ + ":test_config", + ] + + deps = [ + ":libtiff_shared", + ] + + part_name = "libtiff" +} + +ohos_executable("ppm2tiff"){ + sources = [ + "libtiff/tools/ppm2tiff.c", + ] + + configs = [ + ":test_config", + ] + + deps = [ + ":libtiff_shared", + ] + + part_name = "libtiff" +} + +ohos_executable("raw2tiff"){ + sources = [ + "libtiff/tools/raw2tiff.c", + ] + + configs = [ + ":test_config", + ] + + deps = [ + ":libtiff_shared", + ] + + part_name = "libtiff" +} + +ohos_executable("rgb2ycbcr"){ + sources = [ + "libtiff/tools/rgb2ycbcr.c", + ] + + configs = [ + ":test_config", + ] + + deps = [ + ":libtiff_shared", + ] + + part_name = "libtiff" +} + +ohos_executable("thumbnail"){ + sources = [ + "libtiff/tools/thumbnail.c", + ] + + configs = [ + ":test_config", + ] + + deps = [ + ":libtiff_shared", + ] + + part_name = "libtiff" +} + +ohos_executable("tiff2bw"){ + sources = [ + "libtiff/tools/tiff2bw.c", + ] + + configs = [ + ":test_config", + ] + + deps = [ + ":libtiff_shared", + ] + + part_name = "libtiff" +} + +ohos_executable("tiff2pdf"){ + sources = [ + "libtiff/tools/tiff2pdf.c", + ] + + configs = [ + ":test_config", + ] + + deps = [ + ":libtiff_shared", + ] + + part_name = "libtiff" +} + +ohos_executable("tiff2ps"){ + sources = [ + "libtiff/tools/tiff2ps.c", + ] + + configs = [ + ":test_config", + ] + + deps = [ + ":libtiff_shared", + ] + + part_name = "libtiff" +} + +ohos_executable("tiff2rgba"){ + sources = [ + "libtiff/tools/tiff2rgba.c", + ] + + configs = [ + ":test_config", + ] + + deps = [ + ":libtiff_shared", + ] + + part_name = "libtiff" +} + +ohos_executable("tiffcmp"){ + sources = [ + "libtiff/tools/tiffcmp.c", + ] + + configs = [ + ":test_config", + ] + + deps = [ + ":libtiff_shared", + ] + + part_name = "libtiff" +} + +ohos_executable("tiffcp"){ + sources = [ + "libtiff/tools/tiffcp.c", + ] + + configs = [ + ":test_config", + ] + + deps = [ + ":libtiff_shared", + ] + + part_name = "libtiff" +} + +ohos_executable("tiffcrop"){ + sources = [ + "libtiff/tools/tiffcrop.c", + ] + + configs = [ + ":test_config", + ] + + deps = [ + ":libtiff_shared", + ] + + part_name = "libtiff" +} + +ohos_executable("tiffdither"){ + sources = [ + "libtiff/tools/tiffdither.c", + ] + + configs = [ + ":test_config", + ] + + deps = [ + ":libtiff_shared", + ] + + part_name = "libtiff" +} + +ohos_executable("tiffdump"){ + sources = [ + "libtiff/tools/tiffdump.c", + ] + + configs = [ + ":test_config", + ] + + deps = [ + ":libtiff_shared", + ] + + part_name = "libtiff" +} + +ohos_executable("tiffinfo"){ + sources = [ + "libtiff/tools/tiffinfo.c", + ] + + configs = [ + ":test_config", + ] + + deps = [ + ":libtiff_shared", + ] + + part_name = "libtiff" +} + +ohos_executable("tiffmedian"){ + sources = [ + "libtiff/tools/tiffmedian.c", + ] + + configs = [ + ":test_config", + ] + + deps = [ + ":libtiff_shared", + ] + + part_name = "libtiff" +} + +ohos_executable("tiffset"){ + sources = [ + "libtiff/tools/tiffset.c", + ] + + configs = [ + ":test_config", + ] + + deps = [ + ":libtiff_shared", + ] + + part_name = "libtiff" +} + +ohos_executable("tiffsplit"){ + sources = [ + "libtiff/tools/tiffsplit.c", + ] + + configs = [ + ":test_config", + ] + + deps = [ + ":libtiff_shared", + ] + + part_name = "libtiff" +} + +group("libtiff") { + deps = [ + ":libtiff_shared" + ] + + if (enable_libtiff_test) { + deps += [ + ":fax2ps", + ":fax2tiff", + ":pal2rgb", + ":ppm2tiff", + ":raw2tiff", + ":rgb2ycbcr", + ":thumbnail", + ":tiff2bw", + ":tiff2pdf", + ":tiff2ps", + ":tiff2rgba", + ":tiffcmp", + ":tiffcp", + ":tiffcrop", + ":tiffdither", + ":tiffdump", + ":tiffinfo", + ":tiffmedian", + ":tiffset", + ":tiffsplit" + ] + } +} \ No newline at end of file diff --git a/libtiff/README.OpenSource b/libtiff/README.OpenSource new file mode 100755 index 00000000..262d6f3c --- /dev/null +++ b/libtiff/README.OpenSource @@ -0,0 +1,11 @@ +[ + { + "Name": "libtiff", + "License": "libtiff License", + "License File": "COPYRIGHT", + "Version Number": "v4.3.0", + "Owner": "huangminzhong2@huawei.com", + "Upstream URL": "https://gitlab.com/libtiff/libtiff.git", + "Description": "a small collection of tools for doingsimple manipulations of TIFF images, and documentation on the library and tools." + } +] diff --git a/libtiff/README_zh.md b/libtiff/README_zh.md new file mode 100755 index 00000000..1e1ddb5e --- /dev/null +++ b/libtiff/README_zh.md @@ -0,0 +1,23 @@ +# libtiff三方库说明 +## 功能简介 +libtiff是一个用来读写标签图片(tiff)的库。该库还支持如下文件格式的转化。 +## 使用约束 +- ROM版本:OpenHarmony-v3.2-Beta1 + +- 三方库版本:v4.3.0 + +- 当前适配的功能:支持如下格式转换 + + | 源文件格式 | 转化后格式 | + | :--------: | :--------: | + | tiff | tiff | + | pgm | tiff | + | g3 | tiff | + | pbm | tiff | + | ppm | tiff | + | tiff | pdf | + | tiff | ps | + +- [libtiff license](https://gitlab.com/libtiff/libtiff/-/blob/v4.3.0/COPYRIGHT) +## 集成方式 ++ [系统Rom包集成](docs/rom_integrate.md) diff --git a/libtiff/adapted/libport_config.h b/libtiff/adapted/libport_config.h new file mode 100755 index 00000000..d708dae4 --- /dev/null +++ b/libtiff/adapted/libport_config.h @@ -0,0 +1,13 @@ +/* libtiff/libport_config.h.cmake.in. Not generated, but originated from autoheader. */ +/* This file must be kept up-to-date with needed substitutions from port/libport_config.h.in. */ + +#ifndef _LIBPORT_CONFIG_H_ +#define _LIBPORT_CONFIG_H_ + +/* Define to 1 if you have the `getopt' function. */ +#define HAVE_GETOPT 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_UNISTD_H 1 + +#endif /* _LIBPORT_CONFIG_H_ */ diff --git a/libtiff/adapted/tif_config.h b/libtiff/adapted/tif_config.h new file mode 100755 index 00000000..98948a20 --- /dev/null +++ b/libtiff/adapted/tif_config.h @@ -0,0 +1,155 @@ +/* libtiff/tif_config.h.cmake.in. Not generated, but originated from autoheader. */ +/* This file must be kept up-to-date with needed substitutions from libtiff/tif_config.h.in. */ + +#include "tiffconf.h" + +/* Support CCITT Group 3 & 4 algorithms */ +#define CCITT_SUPPORT 1 + +/* Pick up YCbCr subsampling info from the JPEG data stream to support files + lacking the tag (default enabled). */ +#define CHECK_JPEG_YCBCR_SUBSAMPLING 1 + +/* enable partial strip reading for large strips (experimental) */ +/* #undef CHUNKY_STRIP_READ_SUPPORT */ + +/* Support C++ stream API (requires C++ compiler) */ +#define CXX_SUPPORT 1 + +/* enable deferred strip/tile offset/size loading (experimental) */ +/* #undef DEFER_STRILE_LOAD */ + +/* Define to 1 if you have the header file. */ +#define HAVE_ASSERT_H 1 + +/* Define to 1 if you have the declaration of `optarg', and to 0 if you don't. */ +#define HAVE_DECL_OPTARG 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_FCNTL_H 1 + +/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */ +/* #undef HAVE_FSEEKO */ + +/* Define to 1 if you have the `getopt' function. */ +#define HAVE_GETOPT 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_GLUT_GLUT_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_GL_GLUT_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_GL_GLU_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_GL_GL_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_IO_H */ + +/* Define to 1 if you have the `jbg_newlen' function. */ +#define HAVE_JBG_NEWLEN 1 + +/* Define to 1 if you have the `mmap' function. */ +#define HAVE_MMAP 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_OPENGL_GLU_H */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_OPENGL_GL_H */ + +/* Define to 1 if you have the `setmode' function. */ +/* #undef HAVE_SETMODE */ + +/* Define to 1 if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* 8/12 bit libjpeg dual mode enabled */ +/* #undef JPEG_DUAL_MODE_8_12 */ + +/* Support LERC compression */ +/* #undef LERC_SUPPORT */ + +/* 12bit libjpeg primary include file with path */ +#define LIBJPEG_12_PATH "" + +/* Support LZMA2 compression */ +/* #undef LZMA_SUPPORT */ + +/* Name of package */ +#define PACKAGE "LibTIFF Software" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "tiff@lists.maptools.org" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "LibTIFF Software" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "LibTIFF Software 4.3.0" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "tiff" + +/* Define to the home page for this package. */ +#define PACKAGE_URL "" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "4.3.0" + +/* Size of size_t */ +#define SIZEOF_SIZE_T 8 + +/* Default size of the strip in bytes (when strip chopping enabled) */ +#define STRIP_SIZE_DEFAULT 8192 + +/* define to use win32 IO system */ +/* #undef USE_WIN32_FILEIO */ + +/* Version number of package */ +#define VERSION "4.3.0" + +/* Support WEBP compression */ +/* #undef WEBP_SUPPORT */ + +/* Support ZSTD compression */ +/* #undef ZSTD_SUPPORT */ + + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +# undef WORDS_BIGENDIAN +# endif +#endif + +#if !defined(__MINGW32__) +# define TIFF_SIZE_FORMAT "zu" +#endif +#if SIZEOF_SIZE_T == 8 +# define TIFF_SSIZE_FORMAT PRId64 +# if defined(__MINGW32__) +# define TIFF_SIZE_FORMAT PRIu64 +# endif +#elif SIZEOF_SIZE_T == 4 +# define TIFF_SSIZE_FORMAT PRId32 +# if defined(__MINGW32__) +# define TIFF_SIZE_FORMAT PRIu32 +# endif +#else +# error "Unsupported size_t size; please submit a bug report" +#endif diff --git a/libtiff/adapted/tiffconf.h b/libtiff/adapted/tiffconf.h new file mode 100755 index 00000000..ce51e612 --- /dev/null +++ b/libtiff/adapted/tiffconf.h @@ -0,0 +1,127 @@ +/* + Configuration defines for installed libtiff. + This file maintained for backward compatibility. Do not use definitions + from this file in your programs. +*/ + +#ifndef _TIFFCONF_ +#define _TIFFCONF_ + + +#include +#include +#include + + +/* Signed 16-bit type */ +#define TIFF_INT16_T int16_t + +/* Signed 32-bit type */ +#define TIFF_INT32_T int32_t + +/* Signed 64-bit type */ +#define TIFF_INT64_T int64_t + +/* Signed 8-bit type */ +#define TIFF_INT8_T int8_t + +/* Unsigned 16-bit type */ +#define TIFF_UINT16_T uint16_t + +/* Unsigned 32-bit type */ +#define TIFF_UINT32_T uint32_t + +/* Unsigned 64-bit type */ +#define TIFF_UINT64_T uint64_t + +/* Unsigned 8-bit type */ +#define TIFF_UINT8_T uint8_t + +/* Signed size type */ +#define TIFF_SSIZE_T int64_t + +/* Compatibility stuff. */ + +/* Define as 0 or 1 according to the floating point format supported by the + machine */ +#define HAVE_IEEEFP 1 + +/* Set the native cpu bit order (FILLORDER_LSB2MSB or FILLORDER_MSB2LSB) */ +#define HOST_FILLORDER FILLORDER_LSB2MSB + +/* Native cpu byte order: 1 if big-endian (Motorola) or 0 if little-endian + (Intel) */ +#define HOST_BIGENDIAN 0 + +/* Support CCITT Group 3 & 4 algorithms */ +#define CCITT_SUPPORT 1 + +/* Support JPEG compression (requires IJG JPEG library) */ +#define JPEG_SUPPORT 1 + +/* Support JBIG compression (requires JBIG-KIT library) */ +/* #undef JBIG_SUPPORT */ + +/* Support LERC compression */ +/* #undef LERC_SUPPORT */ + +/* Support LogLuv high dynamic range encoding */ +#define LOGLUV_SUPPORT 1 + +/* Support LZW algorithm */ +#define LZW_SUPPORT 1 + +/* Support NeXT 2-bit RLE algorithm */ +#define NEXT_SUPPORT 1 + +/* Support Old JPEG compresson (read contrib/ojpeg/README first! Compilation + fails with unpatched IJG JPEG library) */ +#define OJPEG_SUPPORT 1 + +/* Support Macintosh PackBits algorithm */ +#define PACKBITS_SUPPORT 1 + +/* Support Pixar log-format algorithm (requires Zlib) */ +#define PIXARLOG_SUPPORT 1 + +/* Support ThunderScan 4-bit RLE algorithm */ +#define THUNDER_SUPPORT 1 + +/* Support Deflate compression */ +#define ZIP_SUPPORT 1 + +/* Support libdeflate enhanced compression */ +/* #undef LIBDEFLATE_SUPPORT */ + +/* Support strip chopping (whether or not to convert single-strip uncompressed + images to multiple strips of ~8Kb to reduce memory usage) */ +#define STRIPCHOP_DEFAULT 1 + +/* Enable SubIFD tag (330) support */ +#define SUBIFD_SUPPORT 1 + +/* Treat extra sample as alpha (default enabled). The RGBA interface will + treat a fourth sample with no EXTRASAMPLE_ value as being ASSOCALPHA. Many + packages produce RGBA files but don't mark the alpha properly. */ +#define DEFAULT_EXTRASAMPLE_AS_ALPHA 1 + +/* Pick up YCbCr subsampling info from the JPEG data stream to support files + lacking the tag (default enabled). */ +#define CHECK_JPEG_YCBCR_SUBSAMPLING 1 + +/* Support MS MDI magic number files as TIFF */ +#define MDI_SUPPORT 1 + +/* + * Feature support definitions. + * XXX: These macros are obsoleted. Don't use them in your apps! + * Macros stays here for backward compatibility and should be always defined. + */ +#define COLORIMETRY_SUPPORT +#define YCBCR_SUPPORT +#define CMYK_SUPPORT +#define ICC_SUPPORT +#define PHOTOSHOP_SUPPORT +#define IPTC_SUPPORT + +#endif /* _TIFFCONF_ */ diff --git a/libtiff/bundle.json b/libtiff/bundle.json new file mode 100755 index 00000000..8b9b9f08 --- /dev/null +++ b/libtiff/bundle.json @@ -0,0 +1,33 @@ +{ + "name": "@ohos/libtiff", + "description": "a small collection of tools for doingsimple manipulations of TIFF images, and documentation on the library and tools.", + "version": "v4.3.0", + "license": "libtiff License", + "publishAs": "", + "segment": { + "destPath": "third_party/libtiff" + }, + "dirs": {}, + "scripts": {}, + "readmePath": { + "en": "README" + }, + "component": { + "name": "libtiff", + "subsystem": "thirdparty", + "syscap": [], + "features": [], + "adapted_system_type": ["standard"], + "rom": "", + "ram": "", + "deps": { + "components": [], + "third_party": [] + }, + "build": { + "sub_component": ["//third_party/libtiff:libtiff"], + "inner_kits": [], + "test": [] + } + } +} diff --git a/libtiff/docs/pic/result.png b/libtiff/docs/pic/result.png new file mode 100755 index 0000000000000000000000000000000000000000..f48367939c2d4529a678cb3341df611935cc127c GIT binary patch literal 24538 zcmb5V3s}IXN?f;WF8d~x^-2;@Q0nw1mpfcJko`z0m~0&(tg{9DzNTAKiY;8MQ|{^DphcCJlO z{GVSn{?PKrpuax;L+u5~hTixSm}AbLTwH%-U)_7#vUltlXHMiktP@NQOl|e@U0hQf z-WP`wOnNo?k{Xk33(#F}U-hB5O@`RFFBkqkb?YO?%aeR=H0_+@1z&m9pm^nY%5w6A1B*GRIf?JKID^;5YM zDlz+IcKFVfGmDlt^-mN=%f<{t&b|0u^;Stsm(6Zg*=51x(XCDkNV{q37u`79<=VOT z#wqUCuFL}DDT(NO(qtVE;>&5$DK$C#(LOaL?uO(m_Pk%as!5-9>iHP#+3pPzn`+{O zy@;|Bzkck5-2%Dka*^GoQQcZrl&=(B{1s~8%U@jO6)$yd{_f>kT{1V7Xue||;U@RM zvkz+*6nOi$3)aI(+EZu~Qvyw{Nc+)f>QVV?(p351F8Kt7#>$OLR^&g(Y8+iENw&e< z<=U?#*RWkFlI%j3=93iVKY6^y+3{d@A>&Ac#U zhiA#y%~k$`D*`Qi<=iLzDAKb$W})+EHHBp47MumP!0ch~ZMe>tjmot~OPV{cot;Y5 z+vLy><@Qfs5;PN@6urr|iG^qjmrNP;FiVPj#CAr=*DBg=BrTFQ#P3P7%#!9#)GdS> zEPhtWO}2T=dfj_`L`j~sIuFZRmfcqJF3E8dsrK*IJwM$}mX`DEJorr|ws{V34w%)? z`ROFd^tcrshDfHc_omMkOT9Ko%=(@a$X$W|NKsRAhr4Vlv+bI-0-E}sowqUn7w+!v zaK zwzZ@h8>futGBd#1sFbLU`d0+woS&GPOCHPZ8j(|L_im6hC+Ch5)r+|~qxsMz1#kNM%ybv$gTKU zGAeB971t$8+f{`^Y$kFeYP8g4QqPm7=`v4)e>0tY`m{X}c{cSw_Nyt-Evqs=U+yC1 z9e!;J7bH&oS}f9v6yIp#Ilq8f)m_6g=2+W#D<7WB74Ehrws9%= z9xhq(%0}KvVNXRh682Er;bd-on_YQeN#)5y;-phJ+_fEQMUkh*Z)H5P)Ou%y{BHb; zuE~}eeo$bZ*5cJIIX;wSL&x8kc@<>Vexjg0FB2)gPGO^I^!mLWCkLK1+241upss^S zAf0@)_iu4iYd6kjlDOaBGpNcti%cziZ;Ivkm-XkqA&acPZoJe4>OqE;VdqKcsq?Aw zFdpf`TAbw(Pi|N`0JTpETL@;RJ#{kwAClO zBFXZ1d!QxjIkL*MV)2~LS(X?#$hD8*_EcgYmh&BgxYnvF4!Won>Lr#Z152$btt;Fe zHpC^NH*Z+-75%B&uYGy!319L=_qD`5!))=RWX8sNOOl<5rYE-bq{!ZB*`F!%Q-zjP z(=W>gfnh?QY%R%}|5dL)k@2lIFwWb!9|6%xrr`DAIdPzRBBsolquQ5g>~NFM{0xa~ z4IN)kbCTDAs!B_+{(i(@HGp>U!UmPu65C_IbN!l8}i{B94|?i zk2CSN3Z4Hi7239dv+Hs8RS?Jp#jht^Adva9`_$l_=OCztY`*RNp19`c06KKGZaP0& zRJYCq{yyuG$8mx{viITgxg>An^4TY)8^Oo>Zpr0p{V%fIlS1Vs#g+4pBX{`hS9?`- zc|ssB{9-dlSA&6)v&ZCWqXA%+3n?AyRD-8;9{5wzDgW)Xf62G@5~ILJkbOn+d^q?& zXuUHL9FgDkub1cS_^Pw(6x6VSTl(g))(O%HH-#GitY|=9uYrHvPS1K&6R6h3(Of%S z=WYA)*{O!0QHky!1hN61VHWx-ZS0firq}zZ1c@Z-?n9Jc(*>C|FRDZP@G zxH*oBk1{hdn_VO@tjnkU=^1Q%Q}_JN8~Ty3na>be9}Pt_=JY9NqHnU7-lGqh*1v3^ ztP<&FgS`7EO|6NVJ*Jk_&XD~8iUtM=MwN#(?p`15XL?64j5G)I`q_4mhgrOu+Nf>`4 z-*}P^lM`j=?a04c67}BXn|tAXgGxcZ>Y1cEH_jKAEHbv`Ud=^p5M>LJKG0*o$4wM* zXLkGa4}u8{Gx8)N;zpcf6;9rG1Iev9F#FW$P2gj&M$e|HV`|pnHNAlv)BUrKH6OI; z-&U}5pxV^_!N91+vT#+-&RVv@lZy;_h1*s`v|s0pX31B=&414x=1%^|6{aVXY6g8{ z%;-%bqZ*z#j!FK*=^y1!Qy%ihD6cMZU(rnOAo4Y7aFq!vx6VO8T z6eQOVR}B;}$asW`Q&Jn=G z^-N`;)%a|V&dPa>9sJyQtFX!xrcHuLM<;M@Zgi${K)b}goV!UXF;286qHwHRc+wf~ z3Ir#kXuPNWTX@kMQ*CB5RDfLPOxz2u*p0in^0p+=9QVwMpE`*cX)oIy^n@6I8~R{Q zmBwlNUKG{p98tt2F=<4J`gu|7owgiNwoh~OI@8cGzbBUP9?kx?EYhy4<}%|r7FkBw zyvcATXry^~u4MZ9WWU=RTjRMs^x3$b2RK9vky}Q5&Te##u#Ulv^{w~#KjE2e@L+Df zI8Hafm9A@-t6Osp-%m1_hgQ~~vJ0?WSHTiPUU0-(M<_AceioWp-?E^mWb7IAPjl_< ziZ8WE)cWy{Evtb;Nfx^$=d~ccDw2LGYDz)wa8gwzw1ydj zTWetLTD9r4DA5*%){ZP^j?$mVoK~Lt{JFC|l1uTjU)Sa!@?TW!w>Cgi|6H}`U6~7c zl6(VmGg8jC>fAP&i`lJiEnd-3MpONF1L$R?gZ^i2JxXHIoJ&{dc+ZX zc^zLV)Fgz~mZ#0NOL+vA{D~Nu?1HhwBzr1t1h(mE$1A@dEkou+`!4>+blaK%_iXo2 zcndnn&XHU;BhLxK^A(nyv!lrOWStZHl&#!XCOS9dx&5k~=`CLQ&ukvOr=^R$@`sPH z?3FLk!Xo(0XE4f4jy);S@-4g{pZi*Pp73W@O0XLXm0H@Leh^kRcb!zUd#^8ikrO+e zMHSIR@`rFPE9%Pmi`1--$f?avNbN~k`JJ)a!9DZ`IX89K*P(9N{(Kjr{go=nJbjsr z*(^xcM-frBu=e$1wo4lBP9xexxT8v(I$58)HIONMh`|X4&chBrU13N*4n2wGc*H5h z!m1oWNSP9oa!E+glPl2cSog=V{O=M1t&L%&McuHqG=byjI|Bk4#$^i950KnL%Z5ca2js)vQ@z-AQk!?O`82A1*z#V0>QthhyuH#~ z;>R!_p=2Xk_Ni0q2Z9d3N_FEEy#@*QmeN+=Mv2?&9;&0tLV`^a(cXMWsiiM}&I!3(yxx7ghhh)PW|-aZ!1Y5i7|W$x1b zS8QSU4D@tp^lRMV=9-T@Sje{@$*lIgTZ~J$pQ2nX4y}y2lvn+Q3}16#pSU6 zB&+twgRq;0NnUe1+EgwnpQ@TZkY_dFev8k?u(v^V>vPJwfU-f9q{9&|_kCr1x7*)O zmy;BMcNgaUAs&@E2f$9 zen6i!pFom}3wxa|D5~hIwFXQBL6|FajevJXbi6KifU#Jo-+{!sp5|9bC)74yJ_8iL+U(gA?0oT7&*L##QzXsR9#@_5Lc|n+^RIP&ld+$Th~m28B)3K4B#gISb3PMzw=jn5S$-B%yY^Du~f4!=h8)8h_5&10iUn!X4l{S^8R@k+PU8oIG_ES;>~ zGo_QtCw6R@9m^g2_?K5Zoh^^&3wkL|%`(be`Rx8T*vfNR_TqQv-|yDaKKw1Wmp)y3 zPtV-_`I8tjhl0M|VGo3_mwvrRqd^Ws>OZkq)wb*PD`YfWB1E3$Gx zdf!lCveC4e_A%M%O>-^7o1rg0h$17=jj)~Wq2q@HTVCqET8UoI!{_T9pvciFu=)QX5mNiItO|=$fKPY<&EMtDxw|T_N8w zed=@p{VTz_1D1LYWOM#^4)AeyPu@)D`s{KCT8A_{kjy`u0cQXUsaC1>GJj1bQ5^@S zUUqH10r~31_xuNn{lsc2PUKcboo=@RoWK9BT-~ziy-l0bnh|uynS0va#eh{Sf6}hW z_T6OgNl@wTE89prdsKg%-`e5x;weDDJw9!r7pWTVk!~XWubEmAXE(e*n^L+k#eI_- zVBiTygZgrO`hpRiA1xXC?Bs*AJ3Q#>$wGD)!u$?OU>WmCM+?t~*R*NJbdf?uM{2ac zQHEVHN7yl2`q=}k3_n?q-1jW(5$;%hc0+VNS3jVWa$@duRs6=K}KueF67nhTL0-YU(o%bnHwQ()u)p_%(M zJngEK-Kb1H0)Miyqsq3U<*NQlZdr9LeVP&WdbRqAoote~p4^lJ$(k~raA|Nwym)cr zr4cGy z`CF0sp61EspmtUU`_-(a-E6DJ%J&gn(9$Y6&Z`gfh~!cF!gnFoD9IZQvoFI^_X}M3 zhO%|=5x-Wh+$bfXTF=l?Z6s!Fi*P&9g5|O~V(oV-dQ*O#otnHc0+i4nko%V!-pK8>S@B%FSZXP36-hiG+7igxb^YC zMcuyF4SO2{*rBZ@`gT?JpaB*V_k+>;=$a_|xg@U|e^ej8=}u06&dy=xcwNy@Tu)jv z?wrJWD(=6Kaag%tG_Ygu$jt$EZsEBfX8b0GGR|0o$|R@n-lvHYm-C{ulJ6ypKXqZL z+!rw6&n9A$6Vb{#hO_IoRg%4v)vUb%eqJ}G6KT73#^=rkvul==F8&S1j)(1i-g55l zXCNi6?Bx1hS39a}W3@1<$(#FfAJ(v!I7gk{vwpYkU9=_U0net02)0IvM`Kb4k}eU* zr6Xbg7;ulBLr-Q^0UI@~x9I z^o7G(!{u6E!oLri;D@D8x4}0v2FA!w;*2#JWBba4OZBC9Fzyz*OkVjJ$UCeCJkC4a z!mh*MjfVXAY|{y3cf=sUm(9#bzR9&k)v@h4{}I72@iU0sF@?(bSeC-N9ePT-5zj;} zF*1LlZo}zERfGh~qP5ZX|Dk@b9i0Aq7x^_D(_IAfS%lAc7uWa^mWj{EW?iq}yW+HD zEnLs@XP~8o&Hwz`%)k#QOT4UZye%6;6ZFN^X`-sU*D+h%EgRXhvHHsclJQ>lygs6c zioVmt%P-{Clkb9yrF$zMCohv69c0~y9_d?cqUdkq3JQ6l0eq7?N{X^Q<8Htc^d38_7|^Nr1Tllj z#aK}ysX!Az<5;h@Yh55Owj*X5|RqcFC{e)L#-)*px z9nTGYZu|sPUu&jKXBit?5b>$pp)vW#XjKlsFEqL(WK8M8Wq6$2(ual{%-{)5gD3bu zl1SWBeaw~XV6IF0*rSo!c|Y0Khfc|7mKoanS_c64_gcK@&wlgN7$fygL?Yyb$`QA>5PK0f@EZFU%X#Kl!{K}X>9pw6Pq4sA{h+g>_ zW>6I}oz<&kWj(xP{6Mhju^W69;zxFuY|B`7HQp@7u0xdTV`l#(`G$KWi{z0J&a~)E zNuH+y*o(#TdrFT}L~+bZlnN45oN6z?ajCxi+$l8qph&lC@?5z0Z7yXF$E_x)@yWs@ zwkuOFV=4*Us9tkNlGT|VyXM7LXGfvE9>#~ij#=1d9G4t&v}HKCNk&9j>m=`E=xCPw zWl8d?petR@M7)UIo2%TXnu8;Y&daX(f@B%7WjIh5#{5}SdkeokQ7?G__hJ~a=@tabQN<=qVmVhK{L5Xc_;|vu#o!A6RxhE+&a=1k+wyq^L zcMq(-aJ$RJa+#a@td_@gE7@>|Hv?;oy-Q?8AFytB-!>bJri)$*u!Wd;GG%{r!BDKtT({VwY49Hpo+7wcHEuEbq{+N1Xa3n7I zYwZ_~%PG zGSpz$a!vM)(iC?0vl84LJ%)}+ocWAN?S&@r#0+hQJ_yGCD^Vz>=D_N9F^sYy^34Ta zgbCIdElP=<-kd1=B@%}ZSk9eeCb)?}l-GLVD>p*k=;q4dlkSN57pTeEtU@{Qg7xeu zf7Mjib(bIrWc2<2F1h`^OJ=LC3vLapw20_7&&_ilS2T|`0$6{oWPz|eE;4)P^uXy~ zEp1wI`;1eNOY3vG0MJCawVn5;6uGU&_o2pGQ6jy_TF*kAB3gIFBxyP;jBtbDs&y=2 zD7r+<+6~u1KFRO0IW?!+(_A8o>a^=r8MAfMFcJ4C`PNRqtQWg1gNB7ZYle7{TAP^Z zQ{e}B5eO!!fn=c*FXtwZ+Es;4rI?2jBt5{&mq-W4@%knwXb4L)E4!-C^vnQSv!$T7bN*r}oVMIn|+ zclSnPdmN*H>?-ZAOC<;f;isjRB<(ij9yWUrwzH})%8Isb<1+|j+yQf@WT`dD8R7@p z!k*C?29dw`AN2AQCQRJS!CZ9z61WbGJW0SY%4d=86R{auH0@QI8%k{S1IXv@!3^5K zwIvK4etHb|Lt@Xq1Idt26g%y1@<@|MBX=8h1K`6(IBIMnsc5NLjbui^H(J_~H1}7o za;;vtCXEdQt^G^z?YJC6bjtQ^2~_tSQ(%i$c4(X2O6ejzP0|z8$0#lI-Z_l^Swz4# z-#QsIvOPc*8qc1cR29>wxup>ztv;o`wuYJ%d#afCYaK$@$jugvzMV2q_B%{L#Wgz3 zC?J{lFn2#!9ruf18T=C6DhT_L>^&lssuIpY6es5XV@DPCN46-J&AOg)W-5%c@c`G2 zcZ52<89wrSq(Bme7S5DZw zAG67Dap7fku-k=#EW0(wXkFde)FE*6W{`>h1>1qFeA5NutwyM=@(&BQ5&a4E#A#AS zgH>SIue*69(OV=-Oh(&02h}N?L`bFXDj3FczIU%h-PMy!H~~#3)aPW{;lY;0vO$7z zcL$a4s&dyGqD!uZO^wN?5q5aG8I) zDRY#_2%EMH42*=`&5v&(@YR2~*V4Ar?E=nG(*fqf`?alZPmx<|S4Vfu|;|4n5Q8dA(Q0?cw=3<9EFP^3wd+j(N)KN zHW|KI)Hrb+8X_I?ZwbB#t~L>3fXGJ&OIV*;*}Y>!PUw18yviGq=8vwMZGGF5Hf>rI z$e^DLeee4a?XgE{&7Rw#mf>2f6>nKypevq`zpTAj%b{0^qhDV2gJ(IAb4O{9hasY< zebZT@aksMQ%{pL=nvVq%ObJyB*AiNfbf5QbE7qf=RXk|uQJQamF!mN#4~`*sER~Zo zp4C0i@WU@xw2cLAETUsVFhd{%4Jy|_AjavNUF3t2zI@{69>wl7V}@rTiG1*FlH-{F z0O=&bmCfuSMSd%(W!cRk(r@zFCelJePf+B}aCS?0?-*B%7ogF7X!+oDu5y z=jEXhQp$8z)5%zqM_%SVgLANj)Ix-02W&F99M|e7MhT76bzzZRl9ahL*CDce z&J#i#)O6AI>h)^UTFv6d>!do(y*~ER#6)t2_To-IZD*u*&5O94u@lJihpN4mmUBm; zf~wob&2mB_`EJghs{IwA(86TVBZmBdh=8x) za+@b3TM}RIDF=s6p-s*_7szBjsBMRJSO>R^nfqn2a7PQ?swrE?YgVFI{8yn<46+M~ zUXo!jjGqtZB@V1*t75MNi410@`u;l?(w2YjLVQ;m!Jdk#W-_BpF|}rIkvV=-G2S}5 z=-EGaN6Bd%lwo5upD|{WLQ3SS)Dx+2$fkZx7rDXMb$26LKh&YZAN8w%3(`eVxd%_r zvNvI%g-kOy*vf&klKLEvn5AL$Y4zR)@#;>~?enAPG&X8#0oFgTrwV)wZa8(84x~2$ z)9i`_12PWg{>a8upxYiugm2WT;`Y8!D;L?14mOFvL)(?V$*|he*(-akOzut|+PCNpmltD%>~GlbK(xW;)0&=3Z}n4jj?74< zZovD-4He9!dz$(N`k&Eg+p3zBs8+X%0KrkrK@R6ZlK<~=&g#jEE@#VF`CmpV7Z|0p z82iask#J9ZwlWn=P+)@J0qqi9gdYEyInzU}i7tJ*=&^ISeZTNf1yJf>81~NPrpj}B z(4?_$nQE=1FPO0F(Z3WiBAysB=gs2gPsgC)|6@c~U9QD#tQ zjL}hn*#}A0IiPDs=|L?**|3dGD;vkkifMR4-4gB#Rm!GQhtQF}l&^g*v_C#!R}p@g z&O>}RqW zpilb}j$xCVLZ7plzsWai&Z76JEBxb2RZG3TQoXn1f~fTaz7#lE~T!lxGraL3XHHu^D+ll}AGBu+>DlN_i@TBhvw*wQ}GS9ZKj+B>-*Z z=9MKXKy|J>^q%XzN?6LJnX0xv?Js_0H8Izr;DCN91kowo50sS74-lJHLF#|(@;vfm z>H!Eu@^9<@cXP`a3FPC15>RyUMX6S%r*`0mb}a-lIQ4gcasKkUY3z&BGEa&>4&N+x z9VIubXU`bV?+NDv!ozFdN`qYYI7Spgj^YrY7rA;uLq>S0wBLjN^hLep50FP|HW~gz zRC$F6;iML^XNC_U=!VxL6{t&^Ur*$7eRbTL(+ix9BR%0>Wyvy_&I?}VO_kxJlDV$> zJ@L64n2`+7IOJ7)I}PxxqoUrpMdq*(ms^%Gg_54wrqi2Fm89wzi9Q(Nmqy}3nmbcF zR50C9I?KQy!%Ow?q7K4Ttuq8dUW~}+4wf)dr$cqHUU98hqvm(@nZ2!k?uATjF-`=5 z|68A3+0$ zl4DpyPt|yQVUj(@P%cu>vByrU@1N&Hg9E1KTr6J}o#)6RxJeb{i0&y%{ZFEhwj{E& zF8rX_OWD#GB5F|r8qos+SxGRSNQFM+xEvD%k8ydzgxuGmp!5J?S{P|^8xK?tEdb$V zJH}-M22yYE)O+$S2`K(@Pu01!iof}E_7V95c?DdE7wRfl^jXL}762xW%ijXYpR1+o zp}7;6X%nRc(~^R(w+)hc;S`MnYFYn)mX92>Ul%rQ9@mvxvU`ZQ6Dn(kHIHtaT!r|4 z#Kp2Oa(RY2^IOis7Uj{YIUwKt6Ni5w9}!mF&IL){HKINyu%YSZ_NfdcVzmm&x`PEg z=CF5V+fFWnR7elGxv=~JB(|rYH)e6UP+LFIpA0e;N)V=<2?EKb(1FF9UrBnqu{tbj z!)_J-uThbDXgsoIA!3;(%8g@nMQ|I-?hwNj5pm)*kouSR!1C~F<90-uU;>ygrk;Uw zWR{}i;#54vpQhIxwYDetq3l&+VQp@PMBY|Ym5T@OcP6juOwK9qLj08^V4u8X7&y-{ zKL%;Dgz`rYS!yk$2l(?h_tigl#~c>fYxOV&R;q8&%+_KthimLVdn;FU>O1E45YY&Mi#sCqs`^`^<#R`qvB2a) z<=vA!+sy5%tLN|rThu2~t)HmY>2RXoNFHEK(+5|ZZ2W9u-!i+x< z{aX?@gY2AIO`s0I4o5hOO;}`H)BAINOtvrMAUVIz_&!*CUh~Oa>@5FK(g+oEuZ~-Rp*VD4f&xXrsk(#xIn^x7kmE8rDQ3b59fnu z-t`s=h7@kg+QN>Glnhx=d)WKg(5GWoC-yM_s;>hM91%F#k@->lPOrtHZuWYXJAQDS zu17HKFIGjBh@ntQQL)i}isjr}UfI2TB_Ge>ccQTcJ`!15%)ORZGmY6P1SEc=#H z4aH|hznDs65T6^TF84)lNA?{%14>!MuEnal#Eu&3mwOYN;sBn3bgK5N8=wjKS0stL zlR@M}H~c}iIm2%R4jL6Fr70G4bJu6yp8vt7+);PV>J!;ANzNXF$raSber1ri)r&DX zUp3%4cM|&mI1o4We+JyM(D&odM86hvBlwk6(7u80-&Gnp-Pm;47`&hDA@CN1#w33K z9OYT0z`}VuT1vHW-jCxcwV}=|N6ggPLg%mg0qOG?mOKjDO<|(}*1yd=S0qfvXde$m zw!s6Evp^Gps{Rh3IY&|-2i%j(kCZ=|+-dJX@&Z5?g*2_E zbQzAuLV)wK<<-Y-zENS=?_+0n1(w@)W}SXYS%f z5!-szT1ZCAIK^`>Ypr;a!61*3zf{`*q5WeQ@0sih$H=y_v!g=mOd9rXNashMS)+;3%|=gs|R-&`xw-an!aq3zqs`~S|h{dVa>Xnp`eitMbEktT(Kxx z-iwC!-^ZF5Ody!$z9zKx?M?KAbVlx9DJLzR2pH+upf3}l%Y0Wb)r-%I8Zo3A!+Q*# z)Jm<^g+I|7rIASU%`57I& zfk!!;mKa3!TnB`N3YoV>xfF9x*_uVk(m;#xULKGaPbW1EM(icwK+RXK&j!jqMBa6WhK?+aM?$`Il{KoBl%i4-7C%JhO`Qh9NL z@Us#5I|h0@SD1$&82LY;gOC@p6rbi>!-!7U44-kG2VK<8<7IuXXmO!IKX=Y2J@z)P zXrNJOEv3#rCdq%jxKHGukDi7;ep8b`t=IUe%Jm;7(8Sv# zGDD)O%%@MMiMY6&t3rJ6SbgG~G6Y)R7+o~8N;3#}SvF|rSTkr$oIJS%2_#_ow~8iA z(V0wfJkUgMW?c-jf~Lva&)wRR9)ha3@k~Iz6ZFJreQcm@l0}t zW+>nQ_sn4ORkNdoEK@Qvo{@p_DIWqz@;bb%&{sx(2{fZ*W_#;fV8>VNOg`urV_ac4 zzL^4S6msU061W5su|G~X9r2Tg`?-gn1m$Qz=f*a*{xs`~@nL6-MgudA@bzoEXQ6-bhK|Xp;Jdl05q4?8pZm-$*mB`?XIt#iCT1; zP_}wYba+!O1sqahE^tuAwy1q+bU;u!12b38zP@tcVvr@fMIc2{|Gcb-ZkTUH><{9U zx!t3YfUuG@SQ=VZ*9QC%_@yFP5-@40AyMlEel@x;>7s%Mp`5aXHlW7<88o%&&`nUw zEaw3E%nf#O%KsAp3%e&@H9+6&4ROu|d29*vMplp}#cfk1sDBm@cpsnOXHiQgn&Ru*xxr=mgs@RG+t%VUZs)Vl;7_amq9R5c>fN zNxh>?Gp_zlohtMcw()CI(GGKn3KY8IgLf#LqV)LXzJZv93|e7Eee_)ma8%NS!LkqL z%Js(<8gEzfrd{cUZ%rTIDi!BPPat~{y~dM=YC;tLH2l$PN!IM@xldKI`Xr=C*5)vH zI3~pzu3l@u<4Nkx@&oq&mW3VeIT&(7nfy?VqBo(HN*GvyH(lf+91{Z|$>+$?Di>3I zbpmg8s^&Uri_TZj5FLI~+ErIm|4;vgV~T35F1es(4~z7br`ty?V?iSY)U5v;3#hP` z%jVWa;D0;0%+O#QbM=V^TEiKHO8O}i1&`_aFN?(6bH1(D13_AEDm!|n+_TV?1&i`6 z-h0532tR71_Fl^?G97w-O5o-=xc?NzvHjx$@!uv0gjnpaTdh)>Jrp#ypgv&-w|bH{ zEkn+J3X=C!SJ)NbtVFHN_&jqT$LLL!c8QFSvaAeSA93{s;S7-WD3`et`Oy#MCB*C} z)*>J}ko?Brz#%}=#PK63Pe`jEAAoI>f1Yb0x?s-q!?Ifx&3%2G+-c5eyX}zGTe}9* z2~rSJ-^C>2LdmsqE9Sa&ZfvTL6OHLHOkZhS7h$L~m+&Bv&~w1$nCDd%x?jICnLL*5 z;tg*+{cx*?cQv?shkIuhC~WmN7IJUZ`N#ApgAEeM?n{GJ>acRq=n@tiQw?4n+(I!evB%#PJQari6ICC`#8qa5U;Ufc$)$5IzM)@J{pjJ>B`M1Y&K~#>Bla3=1%9Uio@Z+_K_!MAueHuxs|qPK+Xr#+j>fn%*^bsV3;Uz9;0 ziEp9o--**sbe!rGv~7x9(92&x=859JLKy1h_xZ2D+y?-M8gAkH4Xjo?G|S#VmRLRX z=F@ns*;~)<@PS;|1w<UzX|Fae7gib^)V%Co3^hv z!J;g9YkO|#!~sH~#?}#~_tb44`3v*P(oSp3Fb1c9rB(~lAs4)JOvou0is1{4C^XnF zM*OA@&XgZ&k@xWk7%l6$@MqT8kZ*|p=Dv{Nv9Oq@xhd7FA+b+i=99X6kDW1mF*ZAW zC8?vD%klFiJ-ZKnh%4oAb1Dl80VoP%_9k6d@=G-41ONP?qZ|kk+gkFDh4?XYkTF$E zLMtoX!qQCC8lWOH9M;AKg4C~lw5UdpwU8Ii9V-pcDdojRrDDM}mRG>BA#N2C^i=dq zRVCOpK`4V-@=&0=uQ7{dz+Nd=Sw4VtRyZ(%%RaBgwSwim*Y}YJbesTvTWgp$q4~I; zmk)|1-WLeNK_gMUO2bmn-~MG0X*&M`TAmDRn5he&>aQ-MWoStO+EFlXM#Mskj}ywXlPI;*q0YBm|D ziEYLxrPrPq(OP8xK!=;OY^)8Ia*gtzB48#uo9Za%t*3zO3~**bX!m&x7UrFvoTwUn zxcmCNX<*{(=h`=p<}(O;ew4^BBSeRk%+(RheQhBviOrg@z_f4=1~52va&t^_bvum|1F&p_r+nH6FJWphbfYWrvKSgX276O) zQj#hjuh)Q5@e)u8W{CNr%RO)8WosMJ_#oFOB2()b^`@>VH$3Zr(KcvY1(9@~;CIGp zpK4W?N%c$5)ULvRnWBBA(tPVy(wj*=*2=p+syO5#z%CTjA4^*kPmeKd6m|5&S9ihz zB1?s)Uy_iz^XUD)FrU8coqeX(52v}FIb_f24)oCdxCKJ%NCnIKlsYqJh|vHp)~qB^7d1 z1OVEw>=|n5gKv@PAdo{(HZ$DGrNBPZ<_7|2{3H994E-v|cG;_jmR8^r()($ztkhQz zkzlr;kngtFR@bq0M@$HojeIa|7^{a35O#I|iVoFE}3aOfdDN#qQiP6=}W(j)daNtqZD#!qEv_eOnForMg z@)8{z7|`40gzfCUgJqSxnav>k6wPN~Sh*2{4>4PQmEccyE4;$3Ze_r1TPzVBEqY6N zWQ+n~liq*AL6<@%{~tR(!7c%neU{i_S4nK)30{2zqtV9g294I$n59qBWDoc2BasE|_4`i5IwLdnWT z(7{$1B=+a`puDRmed1DnWY~@fUw_$V%n)1uWnW%rI75LPiKJbylaOtq$I zv9hpkI-^4wdUCLe$Bq2aODOg2l~Y)@@Z*sO!kpg=<|OV8 zRhpZFTdq~2S4ske1MXnZ;0#6%#h)%h9W`-Ck4g{N5}|lh%mN`J0y>=p)R^D)$O%5C zy@FRbNM3y_M%tOgjLom@k?~MMZgQrwXYw0qM^aFg5)&a}FLT;zi_SOE*NJjc2G)uM z%x(|H$`~THe-!SE2t zN5nA=#C*z>azbvRQVOh--NoAb%EOTz=t4qp>zTRZ2?SN<%GjtP&|xf9IUa1G`B*nW zP+nM7cDYU%7HKe_-I-73K#^7B)YRyk5k7yleEimf49h$0(4D*-Qj=*wayysd4NS^a z1-V$AZdddzk+9=^mR|2))ImLyu7nAaRwj$QceH;S4=fxNrs{)k`pplE)&XbgCEN*9 zU1l}#9}|TSuWn<)2j^dUf^8bcZ@7;-mLdCNWXP=C@C6%Pr(yd9T?DCj`QD!9We7dY zXuZ?A-ExQlN7>q|jOcYDcW=yvodB1Ca`C@QA#!J;HD+jtvNynz8bL5p0t_q7h#po3 z{SQJXNd4=~d{RmO3ZuS1f+V}5&dE&)F}6B(4`fvlaj5zUC&=fHeFB!h9A)vdD8PWs z_ZD$zr@W5}TNbs>U<6Gch)Be~&3TW$`?~O3k#-JuF4Nxrp)||U>`{ygp>EZM_C-rM zm;CoSa&1A!RviiuPc5&Q^|Bo`AavZc=+i7o-q8uY*B(WLTykGQa!9=>8<4z{1d+bd zdAKiQJPiB>4eTtgpcM^4WtD)0esBy!3hl2|_U!wAMF`}Rsd#4#E4rF6cA2C4zbtvk zg@Ri)fo(f-80_i({Xk6I^U&6D;bmoqKVTPTP*cv1fP;K;G1c%R5Rm;}ssArab2TIZ zw7#Km29IEpa@8#1zW>?InTIubu4z1$wsblcyG-lB1*XzkYp_-V;s!aVRdEz$C`$w+ zXdwg*i-HIwA#mz~MV4|DXo8RyDq8{pA|QbfS}J=;0Yg|57-UO;fFTJahRpLtr*m~| z&vniJ{fmnw$rti|@B2LW{kxxhJeZ#oq84Xa56=O}fxt)S!ydKTIg=oKBt9GzAIzwd zn4{YEEmv5l_y$BUp6rzM=bUHkxu0-niS{s$+)1p)$nNhbz+cns+2%&-UPRk6#lXca zMJegtZxO0np-VQn)BHn!2kQ_eWWw!4tCqbY$(v$P2 zfq`_gJHUT~nNwNR4~oj-zW}1Xx4i|ktFKm*yg0~~9d~%yZ>yLY){WtlFw zD|yUdXh?sne&d)U3G__Z)G={AMw*P>RMh zUu@vLgzBTj4P5Ee`Ic$J2q{B$?q0dCh{UCOGAsY_%E|{8*f|?bc75Z~=CFFlk$V?P79eao{Wyz?#3(6~npxA^~;C$3!qpvZ=n>b$VM=7+x|YN^|M?{si}(XmCg7}Xtd3dgaE z+{gc27JAR9$1@h1yB1+6+xyBuF|&amlAtP*iY> zI920RX%y$%Gy7*SUr@WNGAux=nsL;}#M=xv8r%pW(DI<`&HX;|W%(wYIQerHR!_q~Y*A1Bn^4M~O#p|Z7Ut9&aTnN7cTmV? z`WQbEy*&o^ukr8m!^V-%AK55|{UaW07QzStmVVlb7$xpfc05r(vj9Jop70d(Mk#fu zid1l&zb6El02*P#>z#V0d~+$9u{200Hi}9jx*9%l=d0(JIY=Q?u4s=$s-m2@cXO%z zAR{ZI+=G85r9C6!4;s*5zK(w=oAUzEJ6w6F&(2nnK=xiPhu*4c4u3$;DB}|Ye9GiK z1Cn{*nvZ6d=|BdL#j1GZ+E#piBbvml-i`V;>Q*z}k|DuCdA+A9OHxTZ0%7?)g0^>_ z(vnw276ZFu;-Znqb9C-BFc&DZ8h^eyOg|akq6z#T>0Vgzl>Lcn+cR$ZL@m^f9da*b zYFIf>i*{S8OWCQ=Z<3Rod-D&tO&x({WW|feX@EsfS@PnNE^^!k$s9MnbUf66+~urtdpwG83YTkw5#5*utM z1;R8k#qb$-H;ni}FK9j8zFY@Q`3BT5Qprc0b$dM9aImH>6^exQ>I0`wda~kEeSik- z7NJi@i+Ld;7z}{MMBLEq-R3quS}6>>dp@vyg?fYI5nOjnWUscLaOflQ?M_DLaL!gA zpJG|9a<_o6`MqpTv`u$*tobE`WggRRMs-giiQ1J#kNox2Pn2u=r3JltB1N^=)CGi^ z(oSRJhcp$_%+J8}qCt16O(1ny4ANuldk)kz{uhQA^^nmb)&fZ)0Y#aT5PLYO9le3R zKm%*~ijs52qfWO5-MTL{(J}kvDEZuUakck@FNHt)FIXcj?4=|_?uHt^{x51j^2jP3 zwCGi^zR}2F5K&}q%B1&Y8wHE!5|2$QK19g+8Y-yaA@IMYCfvn>p2;gOTrco&%yB^o zJFtASMw@5ijt0Q!0Y~WU(a`FRn#pgDEH-ddA#*CAf{BA=A%X%5DAD{s;zPsVmq!OB zAWsnyH9(DT(+Uht|K|`yidC2 zDCi1{u7LAiL4E9Jcl0sIe@ZbjK`LmF_r!`l>?Ok3089q%dwwl6?}^&S(8S}S)Z-7w zL5Po;dJB}g#V|{#)_!Z5{MydrjaLj`Cp0(e^3-(!{A}FYquPJ($opH&Jj7Kl?nM;& zq=BON3jft}jnk_Eb;^Q)DC4`i(-VeJtd}(^kvmoaHYC$nFYqQB*Sz=*g6Mf0?RwOA zAnvUu^78ncAN}#omFc@EUtdUTC@Rg?)|SUV2EpY{_EwNxA?^*7uDS;a1V4!no^oNh zU>JRIk7H&Z1sTHfR;3;?#qlENj>FQF;ucarr61b~`de`!`7scDKIOO9q1s~G&sh^Z zSuGQQ)b8pGS`7hG3EO7}fl@kKl2V*b9z0a4Y9!-XfXd;I?oQVdRmb|`_IBUjf$2-l z4?9q(AVksa zNlL$frrDRv3qTIAD`j-&1@kVT`P*uiacOLX=)-$!Byfi9N5ESQG_E>7IZhJ5{=RX{sa(rsBBVS`P2#eo+KtT3q`{|4J(h*&_5}5`@|iX(Yb$vY5?mh5oy; zS6nb+dpmWV^y|LHL3Bm{|L;85Vhr#BW5Ea_2GLK2C1tKb|H;o1Tj1T9=kqe!BfSg= z2qnl4-6c3$6Z`{l&=PIH%`9-Z-OoF7Y?J?Zg;9<9Dbm?`k1EBsuVlWWSHPlMjbjer zwnbDsZ|jH?{=%?zWLdKxm3XgG+WVi7f=EZnS>WMY=Dkg@%ctTnm;ISJ;y2he9qUFc zEht68Zzm5pRk_9(lHr2F3ej9wVwqTX(^lfo@+ICoRox*wQIi#5?x&ZT5B_=A~F z&j;T?pfYTOK2vw$jM#;tEodNS4fcv|iw~3U5hh%3*|jWs>pvc)*4(gmsh&Cl@r+qN z@*BH)(N)z{4m$>UdqlOhkC4Njh?bpDhdQfJ((6di`p}U_yH~Q%PA&72k;JE~UsIA& zwcd8l8&@rTrxo=Kt=*^|k8{H?)Ojuj+l_=*=^S!a`=Mu62NH;2E%K2OH_Y=Gduy>5 z?fN9ww=dInqSgJV6K8dQQ~gCakP#Q8tKl?mL48aOA=MsSsD zF{3duBYMnIIH(WRI0xW2Cr(GUol{~z0Qzyx@Ewl#Bq^5lK&}JMWR5bN} zQJNw#tgL4z+`mE2h@cm2P?6td|vo&4uF524j6up3Kq=X z769&tk^^iuQ-l;R|DV~$*MY)IK(r8-af-Jhy4u1;-ErZ@f>SOsQvvnhMz)paK>Cd4 ziSMMyUIcb&DGgaL*spv9nTEmGevyY-`46$DA>9{SAQ$^5DDu+enecrr`xO*tGR#8% zn%Y5-Z#jhN6w1v_i1S-rx@fHrzcV9;8foF3k8?u0r7E*ruR{fZzv{)9CE!&-lF0Mg`}9r8!$4Hr)O zyC`uz4O0!Y4~SaphA*Kd*_ZXXg?{d$YRD(0I;9P}NpR|Z_?`Wvgnm7H?JAB9oBs6T z&1Pw=m_f^R;~CKl019XzNuBTtZtE5Q`Os2_Btc97Ze$}0H8=5#V9Q!im?PU=tjR4UopjBIMX06ezSEuK1W!vv_dD`d6zGjh+VZo zb;qoWr=#3~Fl3lszcq5^Ttt_}weh%s=^i9t7O-c$up9#49OE{tnPHEL?~LQ<$)bmT<6{ql<^>fKf= z%~LLTsZDNB{OKH{KkNWCI$j{y!A-)D!`~meIxn1v%1XTqZfgK?s&0J~XSInokDH5F zuGi&poi1w}Smsa?-au%-RK8YyjR>-xENDWfTBa$gG%lMfX#TP=Za3trIrfAVuIprpHG!);HSZ3u=x6NWgE{4JhBiQ)=wenn zIqmo#(GI0`7IxyLT}Lylb;SEe>I3JlD+q=aY8AD^I%{S zR=U{RpYRySsm0~>Tk%L`b3pD$b3A~Yinhq{p;b%!O0+}A6Kp!y$M^fGyA*GWDPc7& zQgB?xXo$l+eiq5V`5Qt)qtdm}3rp2-Z&tTZMpJ|~uqG|NS)dJNU_0TOO$-aGPXFW2 zKSJ${dvddRt$Xn#)XoU~0EXQ7i`Jj%S^`(noO>0y(f0r5Mr(dHNY>){7eq>EYJN`s{n4O}7e;jcv8DZc t1>CPECv1#Xzt=cFdr;3)Ny1t};7rZsH!GL}@GemQapctD^3TqG_1_otiNgQ@ literal 0 HcmV?d00001 diff --git a/libtiff/docs/rom_integrate.md b/libtiff/docs/rom_integrate.md new file mode 100755 index 00000000..22510b17 --- /dev/null +++ b/libtiff/docs/rom_integrate.md @@ -0,0 +1,111 @@ +# libtiff如何集成到系统Rom +## 准备源码工程 +本库是基于OpenHarmony-v3.2-Beta1版本,在RK3568开发板上验证的,如果是从未使用过RK3568,可以先查看[润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/rk3568_helloworld)。 +### 准备系统Rom源码 +系统源码获取请参考:[OpenHarmony源码下载](https://gitee.com/openharmony/docs/blob/OpenHarmony-v3.2-Beta2/zh-cn/release-notes/OpenHarmony-v3.2-beta1.md) +### 增加构建脚本及配置文件 +- 下载本仓库代码 + ``` + cd ~ + git clone git@gitee.com:openharmony-sig/tpc_c_cplusplus.git --depth=1 + ``` +- 三方库目录结构 + ``` + tpc_c_cplusplus/libtiff #三方库xerces-c的目录结构如下 + ├── adapted #存放三方库适配需要的代码文件 + ├── docs #存放三方库相关文档的文件夹 + ├── BUILD.gn #构建脚本,支持rom包集成 + ├── bundle.json #三方库组件定义文件 + ├── README.OpenSource #说明三方库源码的下载地址,版本,license等信息 + ├── README_zh.md + ``` +- 将三方库拷贝到OpenHarmony源码的third_party目录下 + ``` + cp ~/tpc_c_cplusplus/libtiff ~/openharmony/third_party -rf + ``` +### 准备三方库源码 +``` +cd ~/openharmony/third_party/libtiff #进入三方库目录 +git clone https://gitlab.com/libtiff/libtiff.git -b v4.3.0 --depth=1 #下载三方库源码 +``` +## 系统Rom中引入三方库 +准备完三方库代码后,我们需要将三方库加入到编译构建体系中。标准系统编译构建可以参考文档[标准系统编译构建指导](https://gitee.com/openharmony/docs/blob/OpenHarmony-3.2-Beta1/zh-cn/device-dev/subsystems/subsys-build-standard-large.md) +我们默认三方库是属于OpenHarmony的thirdparty子系统,如果需要自己定义子系统参考文档[如何为三方库组件中添加一个三方库](https://gitee.com/openharmony-sig/knowledge/blob/master/docs/openharmony_getstarted/port_thirdparty/README.md) +新增需要编译的组件,在OpenHarmony源码的vendor/hihope/rk3568/config.json文件中,新增需要编译的组件,如下代码段所示,在thirdparty子系统下面新增libtiff组件 + +``` + { + "subsystem": "thirdparty", + "components": [ + { + "component": "musl", + "features": [] + }, + { + "component": "libtiff", + "features": [] + } + ] + } + +``` +## 系统Rom中引入三方库测试程序 +如果需要编译测试用例,在OpenHarmony源码的vendor/hihope/rk3568/config.json文件,对应组件的features中打开编译选项,如下 +``` + { + "subsystem": "thirdparty", + "components": [ + { + "component": "musl", + "features": [] + }, + { + "component": "libtiff", + "features": ["enable_libtiff_test=true"] + } + ] + } +``` +## 编译工程 +在OpenHarmony源码根目录下 +``` +cd ~/openharmony +``` +- 选择平台 + ``` + hb set #hb set 命令会列出所有可选平台,这里我们选择rk3568 + ``` +- 执行编译 + ``` + hb build --target-cpu arm #编译32位系统 + hb build --target-cpu arm64 #编译64位系统 + ``` +- 生成文件的路径,可执行文件和库文件都在out/rk3568/thirdparty/libtiff目录下,同时也打包到了镜像中 +## 运行效果 +将编译生成的库和测试文件放到板子上运行,为避免每次将文件推入设备都烧录整个镜像,我们使用hdc_std工具将文件推到开发板上 +- 首先将hdc_std工具编译出来 + 工具编译出来所在路径out/sdk/ohos-sdk/windows/toolchains/hdc_std.exe + + ``` + hb set #源码根目录下使用hb set 选择产品ohos-sdk + hb build #然后编译 + ``` +- 将工具拷贝到Windows,可以为工具目录配置环境变量,也可以在工具所在目录打开windows命令行 +- 将原生库测试需要的所有文件打包成libtiff.tar,并拷贝到windows下 +- 将文件推送到开发板,在windows命令行进行如下操作 + ``` + hdc_std shell mount -oremount,rw / #修改系统权限为可读写 + hdc_std file send libtiff.tar / #将文件包推入开发板 + hdc_std shell #进入开发板 + tar xvf libtiff.tar #解压 + #注意需要将库拷贝到/system/lib 或者/system/lib64目录下 + ``` +- 运行测试程序 + 测试用例非常多,这里演示其中几个用例,如下图 + ![result](pic/result.png) +## 参考资料 +- [润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/rk3568_helloworld) +- [OpenHarmony三方库地址](https://gitee.com/openharmony-tpc) +- [OpenHarmony知识体系](https://gitee.com/openharmony-sig/knowledge) +- [如何为三方库组件中添加一个三方库](https://gitee.com/openharmony-sig/knowledge/blob/master/docs/openharmony_getstarted/port_thirdparty/README.md) +- [标准系统编译构建指导](https://gitee.com/openharmony/docs/blob/OpenHarmony-3.2-Beta1/zh-cn/device-dev/subsystems/subsys-build-standard-large.md) \ No newline at end of file -- Gitee From 0d852d298bbbe7334b7cb69a3d2ac8d1211693bb Mon Sep 17 00:00:00 2001 From: huangminzhong Date: Thu, 10 Nov 2022 23:34:36 -0800 Subject: [PATCH 2/2] BUILD.gn format Signed-off-by: huangminzhong --- libtiff/BUILD.gn | 761 ++++++++++++++++++++--------------------------- 1 file changed, 318 insertions(+), 443 deletions(-) diff --git a/libtiff/BUILD.gn b/libtiff/BUILD.gn index bba6cfb6..c3434fc9 100755 --- a/libtiff/BUILD.gn +++ b/libtiff/BUILD.gn @@ -1,444 +1,319 @@ -# 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 +# 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_libtiff_test = false -} - -config("libtiff_config"){ - include_dirs = [ - "libtiff/libtiff/libtiff", - "//third_party/libjpeg", - "//third_party/zlib", - "adapted" - ] -} - -ohos_shared_library("libtiff_shared") { - sources = [ - "libtiff/libtiff/tif_aux.c", - "libtiff/libtiff/tif_close.c", - "libtiff/libtiff/tif_codec.c", - "libtiff/libtiff/tif_color.c", - "libtiff/libtiff/tif_compress.c", - "libtiff/libtiff/tif_dir.c", - "libtiff/libtiff/tif_dirinfo.c", - "libtiff/libtiff/tif_dirread.c", - "libtiff/libtiff/tif_dirwrite.c", - "libtiff/libtiff/tif_dumpmode.c", - "libtiff/libtiff/tif_error.c", - "libtiff/libtiff/tif_extension.c", - "libtiff/libtiff/tif_fax3.c", - "libtiff/libtiff/tif_fax3sm.c", - "libtiff/libtiff/tif_flush.c", - "libtiff/libtiff/tif_getimage.c", - "libtiff/libtiff/tif_jbig.c", - "libtiff/libtiff/tif_jpeg.c", - "libtiff/libtiff/tif_jpeg_12.c", - "libtiff/libtiff/tif_lerc.c", - "libtiff/libtiff/tif_luv.c", - "libtiff/libtiff/tif_lzma.c", - "libtiff/libtiff/tif_lzw.c", - "libtiff/libtiff/tif_next.c", - "libtiff/libtiff/tif_ojpeg.c", - "libtiff/libtiff/tif_open.c", - "libtiff/libtiff/tif_packbits.c", - "libtiff/libtiff/tif_pixarlog.c", - "libtiff/libtiff/tif_predict.c", - "libtiff/libtiff/tif_print.c", - "libtiff/libtiff/tif_read.c", - "libtiff/libtiff/tif_strip.c", - "libtiff/libtiff/tif_swab.c", - "libtiff/libtiff/tif_thunder.c", - "libtiff/libtiff/tif_tile.c", - "libtiff/libtiff/tif_version.c", - "libtiff/libtiff/tif_warning.c", - "libtiff/libtiff/tif_webp.c", - "libtiff/libtiff/tif_write.c", - "libtiff/libtiff/tif_zip.c", - "libtiff/libtiff/tif_zstd.c", - "libtiff/libtiff/tif_unix.c", - ] - configs = [ ":libtiff_config" ] - deps = [ - "//third_party/zlib:libz", - "//third_party/libjpeg:libjpeg_static", - ] - part_name = "libtiff" -} - -config("test_config") { - include_dirs = [ - "libtiff/tools", - "libtiff/libtiff", - "libtiff/port", - "adapted" - ] - - cflags_cc = [ - - ] -} -ohos_executable("fax2ps"){ - sources = [ - "libtiff/tools/fax2ps.c", - ] - - configs = [ - ":test_config", - ] - - deps = [ - ":libtiff_shared", - ] - - part_name = "libtiff" -} - -ohos_executable("fax2tiff"){ - sources = [ - "libtiff/tools/fax2tiff.c", - ] - - configs = [ - ":test_config", - ] - - deps = [ - ":libtiff_shared", - ] - - part_name = "libtiff" -} - -ohos_executable("pal2rgb"){ - sources = [ - "libtiff/tools/pal2rgb.c", - ] - - configs = [ - ":test_config", - ] - - deps = [ - ":libtiff_shared", - ] - - part_name = "libtiff" -} - -ohos_executable("ppm2tiff"){ - sources = [ - "libtiff/tools/ppm2tiff.c", - ] - - configs = [ - ":test_config", - ] - - deps = [ - ":libtiff_shared", - ] - - part_name = "libtiff" -} - -ohos_executable("raw2tiff"){ - sources = [ - "libtiff/tools/raw2tiff.c", - ] - - configs = [ - ":test_config", - ] - - deps = [ - ":libtiff_shared", - ] - - part_name = "libtiff" -} - -ohos_executable("rgb2ycbcr"){ - sources = [ - "libtiff/tools/rgb2ycbcr.c", - ] - - configs = [ - ":test_config", - ] - - deps = [ - ":libtiff_shared", - ] - - part_name = "libtiff" -} - -ohos_executable("thumbnail"){ - sources = [ - "libtiff/tools/thumbnail.c", - ] - - configs = [ - ":test_config", - ] - - deps = [ - ":libtiff_shared", - ] - - part_name = "libtiff" -} - -ohos_executable("tiff2bw"){ - sources = [ - "libtiff/tools/tiff2bw.c", - ] - - configs = [ - ":test_config", - ] - - deps = [ - ":libtiff_shared", - ] - - part_name = "libtiff" -} - -ohos_executable("tiff2pdf"){ - sources = [ - "libtiff/tools/tiff2pdf.c", - ] - - configs = [ - ":test_config", - ] - - deps = [ - ":libtiff_shared", - ] - - part_name = "libtiff" -} - -ohos_executable("tiff2ps"){ - sources = [ - "libtiff/tools/tiff2ps.c", - ] - - configs = [ - ":test_config", - ] - - deps = [ - ":libtiff_shared", - ] - - part_name = "libtiff" -} - -ohos_executable("tiff2rgba"){ - sources = [ - "libtiff/tools/tiff2rgba.c", - ] - - configs = [ - ":test_config", - ] - - deps = [ - ":libtiff_shared", - ] - - part_name = "libtiff" -} - -ohos_executable("tiffcmp"){ - sources = [ - "libtiff/tools/tiffcmp.c", - ] - - configs = [ - ":test_config", - ] - - deps = [ - ":libtiff_shared", - ] - - part_name = "libtiff" -} - -ohos_executable("tiffcp"){ - sources = [ - "libtiff/tools/tiffcp.c", - ] - - configs = [ - ":test_config", - ] - - deps = [ - ":libtiff_shared", - ] - - part_name = "libtiff" -} - -ohos_executable("tiffcrop"){ - sources = [ - "libtiff/tools/tiffcrop.c", - ] - - configs = [ - ":test_config", - ] - - deps = [ - ":libtiff_shared", - ] - - part_name = "libtiff" -} - -ohos_executable("tiffdither"){ - sources = [ - "libtiff/tools/tiffdither.c", - ] - - configs = [ - ":test_config", - ] - - deps = [ - ":libtiff_shared", - ] - - part_name = "libtiff" -} - -ohos_executable("tiffdump"){ - sources = [ - "libtiff/tools/tiffdump.c", - ] - - configs = [ - ":test_config", - ] - - deps = [ - ":libtiff_shared", - ] - - part_name = "libtiff" -} - -ohos_executable("tiffinfo"){ - sources = [ - "libtiff/tools/tiffinfo.c", - ] - - configs = [ - ":test_config", - ] - - deps = [ - ":libtiff_shared", - ] - - part_name = "libtiff" -} - -ohos_executable("tiffmedian"){ - sources = [ - "libtiff/tools/tiffmedian.c", - ] - - configs = [ - ":test_config", - ] - - deps = [ - ":libtiff_shared", - ] - - part_name = "libtiff" -} - -ohos_executable("tiffset"){ - sources = [ - "libtiff/tools/tiffset.c", - ] - - configs = [ - ":test_config", - ] - - deps = [ - ":libtiff_shared", - ] - - part_name = "libtiff" -} - -ohos_executable("tiffsplit"){ - sources = [ - "libtiff/tools/tiffsplit.c", - ] - - configs = [ - ":test_config", - ] - - deps = [ - ":libtiff_shared", - ] - - part_name = "libtiff" -} - -group("libtiff") { - deps = [ - ":libtiff_shared" - ] - - if (enable_libtiff_test) { - deps += [ - ":fax2ps", - ":fax2tiff", - ":pal2rgb", - ":ppm2tiff", - ":raw2tiff", - ":rgb2ycbcr", - ":thumbnail", - ":tiff2bw", - ":tiff2pdf", - ":tiff2ps", - ":tiff2rgba", - ":tiffcmp", - ":tiffcp", - ":tiffcrop", - ":tiffdither", - ":tiffdump", - ":tiffinfo", - ":tiffmedian", - ":tiffset", - ":tiffsplit" - ] - } -} \ No newline at end of file + +import("//build/ohos.gni") + +declare_args() { + enable_libtiff_test = false +} + +config("libtiff_config") { + include_dirs = [ + "libtiff/libtiff/libtiff", + "//third_party/libjpeg", + "//third_party/zlib", + "adapted", + ] +} + +ohos_shared_library("libtiff_shared") { + sources = [ + "libtiff/libtiff/tif_aux.c", + "libtiff/libtiff/tif_close.c", + "libtiff/libtiff/tif_codec.c", + "libtiff/libtiff/tif_color.c", + "libtiff/libtiff/tif_compress.c", + "libtiff/libtiff/tif_dir.c", + "libtiff/libtiff/tif_dirinfo.c", + "libtiff/libtiff/tif_dirread.c", + "libtiff/libtiff/tif_dirwrite.c", + "libtiff/libtiff/tif_dumpmode.c", + "libtiff/libtiff/tif_error.c", + "libtiff/libtiff/tif_extension.c", + "libtiff/libtiff/tif_fax3.c", + "libtiff/libtiff/tif_fax3sm.c", + "libtiff/libtiff/tif_flush.c", + "libtiff/libtiff/tif_getimage.c", + "libtiff/libtiff/tif_jbig.c", + "libtiff/libtiff/tif_jpeg.c", + "libtiff/libtiff/tif_jpeg_12.c", + "libtiff/libtiff/tif_lerc.c", + "libtiff/libtiff/tif_luv.c", + "libtiff/libtiff/tif_lzma.c", + "libtiff/libtiff/tif_lzw.c", + "libtiff/libtiff/tif_next.c", + "libtiff/libtiff/tif_ojpeg.c", + "libtiff/libtiff/tif_open.c", + "libtiff/libtiff/tif_packbits.c", + "libtiff/libtiff/tif_pixarlog.c", + "libtiff/libtiff/tif_predict.c", + "libtiff/libtiff/tif_print.c", + "libtiff/libtiff/tif_read.c", + "libtiff/libtiff/tif_strip.c", + "libtiff/libtiff/tif_swab.c", + "libtiff/libtiff/tif_thunder.c", + "libtiff/libtiff/tif_tile.c", + "libtiff/libtiff/tif_unix.c", + "libtiff/libtiff/tif_version.c", + "libtiff/libtiff/tif_warning.c", + "libtiff/libtiff/tif_webp.c", + "libtiff/libtiff/tif_write.c", + "libtiff/libtiff/tif_zip.c", + "libtiff/libtiff/tif_zstd.c", + ] + configs = [ ":libtiff_config" ] + deps = [ + "//third_party/libjpeg:libjpeg_static", + "//third_party/zlib:libz", + ] + part_name = "libtiff" +} + +config("test_config") { + include_dirs = [ + "libtiff/tools", + "libtiff/libtiff", + "libtiff/port", + "adapted", + ] + + cflags_cc = [] +} +ohos_executable("fax2ps") { + sources = [ "libtiff/tools/fax2ps.c" ] + + configs = [ ":test_config" ] + + deps = [ ":libtiff_shared" ] + + part_name = "libtiff" +} + +ohos_executable("fax2tiff") { + sources = [ "libtiff/tools/fax2tiff.c" ] + + configs = [ ":test_config" ] + + deps = [ ":libtiff_shared" ] + + part_name = "libtiff" +} + +ohos_executable("pal2rgb") { + sources = [ "libtiff/tools/pal2rgb.c" ] + + configs = [ ":test_config" ] + + deps = [ ":libtiff_shared" ] + + part_name = "libtiff" +} + +ohos_executable("ppm2tiff") { + sources = [ "libtiff/tools/ppm2tiff.c" ] + + configs = [ ":test_config" ] + + deps = [ ":libtiff_shared" ] + + part_name = "libtiff" +} + +ohos_executable("raw2tiff") { + sources = [ "libtiff/tools/raw2tiff.c" ] + + configs = [ ":test_config" ] + + deps = [ ":libtiff_shared" ] + + part_name = "libtiff" +} + +ohos_executable("rgb2ycbcr") { + sources = [ "libtiff/tools/rgb2ycbcr.c" ] + + configs = [ ":test_config" ] + + deps = [ ":libtiff_shared" ] + + part_name = "libtiff" +} + +ohos_executable("thumbnail") { + sources = [ "libtiff/tools/thumbnail.c" ] + + configs = [ ":test_config" ] + + deps = [ ":libtiff_shared" ] + + part_name = "libtiff" +} + +ohos_executable("tiff2bw") { + sources = [ "libtiff/tools/tiff2bw.c" ] + + configs = [ ":test_config" ] + + deps = [ ":libtiff_shared" ] + + part_name = "libtiff" +} + +ohos_executable("tiff2pdf") { + sources = [ "libtiff/tools/tiff2pdf.c" ] + + configs = [ ":test_config" ] + + deps = [ ":libtiff_shared" ] + + part_name = "libtiff" +} + +ohos_executable("tiff2ps") { + sources = [ "libtiff/tools/tiff2ps.c" ] + + configs = [ ":test_config" ] + + deps = [ ":libtiff_shared" ] + + part_name = "libtiff" +} + +ohos_executable("tiff2rgba") { + sources = [ "libtiff/tools/tiff2rgba.c" ] + + configs = [ ":test_config" ] + + deps = [ ":libtiff_shared" ] + + part_name = "libtiff" +} + +ohos_executable("tiffcmp") { + sources = [ "libtiff/tools/tiffcmp.c" ] + + configs = [ ":test_config" ] + + deps = [ ":libtiff_shared" ] + + part_name = "libtiff" +} + +ohos_executable("tiffcp") { + sources = [ "libtiff/tools/tiffcp.c" ] + + configs = [ ":test_config" ] + + deps = [ ":libtiff_shared" ] + + part_name = "libtiff" +} + +ohos_executable("tiffcrop") { + sources = [ "libtiff/tools/tiffcrop.c" ] + + configs = [ ":test_config" ] + + deps = [ ":libtiff_shared" ] + + part_name = "libtiff" +} + +ohos_executable("tiffdither") { + sources = [ "libtiff/tools/tiffdither.c" ] + + configs = [ ":test_config" ] + + deps = [ ":libtiff_shared" ] + + part_name = "libtiff" +} + +ohos_executable("tiffdump") { + sources = [ "libtiff/tools/tiffdump.c" ] + + configs = [ ":test_config" ] + + deps = [ ":libtiff_shared" ] + + part_name = "libtiff" +} + +ohos_executable("tiffinfo") { + sources = [ "libtiff/tools/tiffinfo.c" ] + + configs = [ ":test_config" ] + + deps = [ ":libtiff_shared" ] + + part_name = "libtiff" +} + +ohos_executable("tiffmedian") { + sources = [ "libtiff/tools/tiffmedian.c" ] + + configs = [ ":test_config" ] + + deps = [ ":libtiff_shared" ] + + part_name = "libtiff" +} + +ohos_executable("tiffset") { + sources = [ "libtiff/tools/tiffset.c" ] + + configs = [ ":test_config" ] + + deps = [ ":libtiff_shared" ] + + part_name = "libtiff" +} + +ohos_executable("tiffsplit") { + sources = [ "libtiff/tools/tiffsplit.c" ] + + configs = [ ":test_config" ] + + deps = [ ":libtiff_shared" ] + + part_name = "libtiff" +} + +group("libtiff") { + deps = [ ":libtiff_shared" ] + + if (enable_libtiff_test) { + deps += [ + ":fax2ps", + ":fax2tiff", + ":pal2rgb", + ":ppm2tiff", + ":raw2tiff", + ":rgb2ycbcr", + ":thumbnail", + ":tiff2bw", + ":tiff2pdf", + ":tiff2ps", + ":tiff2rgba", + ":tiffcmp", + ":tiffcp", + ":tiffcrop", + ":tiffdither", + ":tiffdump", + ":tiffinfo", + ":tiffmedian", + ":tiffset", + ":tiffsplit", + ] + } +} -- Gitee