1# Copyright (c) 2023 Huawei Device Co., Ltd. 2# Licensed under the Apache License, Version 2.0 (the "License"); 3# you may not use this file except in compliance with the License. 4# You may obtain a copy of the License at 5# 6# http://www.apache.org/licenses/LICENSE-2.0 7# 8# Unless required by applicable law or agreed to in writing, software 9# distributed under the License is distributed on an "AS IS" BASIS, 10# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11# See the License for the specific language governing permissions and 12# limitations under the License. 13 14if (defined(ohos_lite)) { 15 import("//build/lite/config/component/lite_component.gni") 16} else { 17 import("//build/ohos.gni") 18} 19 20declare_args() { 21 is_arm_ohos_clang_pc = (target_cpu == "arm" || target_cpu == "arm64") && 22 is_ohos && is_clang && target_platform == "pc" 23} 24 25action("libjpeg_action") { 26 script = "//third_party/libjpeg-turbo/install.py" 27 outputs = [ 28 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jddiffct.c", 29 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jpeg_nbits.c", 30 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdlhuff.c", 31 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdlossls.c", 32 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jcdiffct.c", 33 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jclossls.c", 34 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jclhuff.c", 35 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jcapimin.c", 36 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jcapistd.c", 37 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jccoefct.c", 38 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jccolor.c", 39 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jcdctmgr.c", 40 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jchuff.c", 41 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jcicc.c", 42 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jcinit.c", 43 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jcmainct.c", 44 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jcmarker.c", 45 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jcmaster.c", 46 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jcomapi.c", 47 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jcparam.c", 48 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jcphuff.c", 49 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jcprepct.c", 50 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jcsample.c", 51 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jctrans.c", 52 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdapimin.c", 53 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdapistd.c", 54 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdatadst.c", 55 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdatasrc.c", 56 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdcoefct.c", 57 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdcolor.c", 58 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jddctmgr.c", 59 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdicc.c", 60 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdinput.c", 61 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdmainct.c", 62 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdmarker.c", 63 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdmaster.c", 64 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdmerge.c", 65 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdphuff.c", 66 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdpostct.c", 67 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdsample.c", 68 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdtrans.c", 69 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jerror.c", 70 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jfdctflt.c", 71 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jfdctfst.c", 72 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jfdctint.c", 73 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jidctflt.c", 74 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jidctfst.c", 75 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jidctint.c", 76 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jidctred.c", 77 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jmemmgr.c", 78 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jmemnobs.c", 79 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jquant1.c", 80 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jquant2.c", 81 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jutils.c", 82 ] 83 84 if (is_arm_ohos_clang_pc) { 85 outputs += [ "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdhuff_opt.c" ] 86 } else { 87 outputs += [ "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdhuff.c" ] 88 } 89 90 mkernel = defined(ohos_kernel_type) && ohos_kernel_type == "liteos_m" 91 if (mkernel || is_win) { 92 outputs += [ "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jsimd_none.c" ] 93 } else if (current_cpu == "arm" || current_cpu == "arm64") { 94 outputs += [ 95 "${target_gen_dir}/libjpeg-turbo-3.1.0/simd/arm/jcgray-neon.c", 96 "${target_gen_dir}/libjpeg-turbo-3.1.0/simd/arm/jcphuff-neon.c", 97 "${target_gen_dir}/libjpeg-turbo-3.1.0/simd/arm/jcsample-neon.c", 98 "${target_gen_dir}/libjpeg-turbo-3.1.0/simd/arm/jdmerge-neon.c", 99 "${target_gen_dir}/libjpeg-turbo-3.1.0/simd/arm/jdsample-neon.c", 100 "${target_gen_dir}/libjpeg-turbo-3.1.0/simd/arm/jfdctfst-neon.c", 101 "${target_gen_dir}/libjpeg-turbo-3.1.0/simd/arm/jidctred-neon.c", 102 "${target_gen_dir}/libjpeg-turbo-3.1.0/simd/arm/jquanti-neon.c", 103 ] 104 105 # NEON_INTRINSICS as default 106 outputs += [ 107 "${target_gen_dir}/libjpeg-turbo-3.1.0/simd/arm/jccolor-neon.c", 108 "${target_gen_dir}/libjpeg-turbo-3.1.0/simd/arm/jidctfst-neon.c", 109 "${target_gen_dir}/libjpeg-turbo-3.1.0/simd/arm/jidctint-neon.c", 110 ] 111 if (current_cpu == "arm") { 112 outputs += [ 113 "${target_gen_dir}/libjpeg-turbo-3.1.0/simd/arm/aarch32/jchuff-neon.c", 114 "${target_gen_dir}/libjpeg-turbo-3.1.0/simd/arm/aarch32/jsimd.c", 115 "${target_gen_dir}/libjpeg-turbo-3.1.0/simd/arm/jdcolor-neon.c", 116 "${target_gen_dir}/libjpeg-turbo-3.1.0/simd/arm/jfdctint-neon.c", 117 ] 118 } else { 119 outputs += [ 120 "${target_gen_dir}/libjpeg-turbo-3.1.0/simd/arm/aarch64/jchuff-neon.c", 121 "${target_gen_dir}/libjpeg-turbo-3.1.0/simd/arm/aarch64/jsimd.c", 122 "${target_gen_dir}/libjpeg-turbo-3.1.0/simd/arm/jdcolor-neon.c", 123 "${target_gen_dir}/libjpeg-turbo-3.1.0/simd/arm/jfdctint-neon.c", 124 ] 125 } 126 } else { 127 outputs += [ "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jsimd_none.c" ] 128 } 129 130 if (!defined(ohos_lite)) { 131 outputs += [ 132 # enable arith codec 133 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jaricom.c", 134 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jcarith.c", 135 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdarith.c", 136 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdatadst-tj.c", 137 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdatasrc-tj.c", 138 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/rdbmp.c", 139 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/rdppm.c", 140 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/transupp.c", 141 142 # enable turbo 143 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/turbojpeg.c", 144 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/wrbmp.c", 145 "${target_gen_dir}/libjpeg-turbo-3.1.0/src/wrppm.c", 146 ] 147 } 148 149 inputs = [ "//third_party/libjpeg-turbo/libjpeg-turbo-3.1.0.tar.gz" ] 150 libjpeg_path = rebase_path("${target_gen_dir}", root_build_dir) 151 libjpeg_source_path = 152 rebase_path("//third_party/libjpeg-turbo", root_build_dir) 153 args = [ 154 "--gen-dir", 155 "$libjpeg_path", 156 "--source-dir", 157 "$libjpeg_source_path", 158 ] 159} 160 161include_dirs = [] 162define_config = [ "HAVE_UNSIGNED_SHORT=1" ] 163cflags = [] 164 165mkernel = defined(ohos_kernel_type) && ohos_kernel_type == "liteos_m" 166if (mkernel || is_win) { 167 define_config += [ 168 "NO_PUTENV", 169 "NO_GETENV", 170 ] 171} else if (current_cpu == "arm" || current_cpu == "arm64") { 172 define_config += [ "NEON_INTRINSICS" ] 173 cflags += [ 174 "-DNEON_INTRINSICS", 175 "-Wno-pointer-sign", 176 ] 177 include_dirs += [ "${target_gen_dir}/libjpeg-turbo-3.1.0/simd/arm" ] 178 if (current_cpu == "arm") { 179 cflags += [ 180 "-mfpu=neon", 181 "-mfloat-abi=softfp", 182 ] 183 } 184} 185 186if (!defined(ohos_lite)) { 187 define_config += [ 188 "C_ARITH_CODING_SUPPORTED=1", #Support arithmetic encoding 189 "D_ARITH_CODING_SUPPORTED=1", #Support arithmetic decoding 190 "BMP_SUPPORTED=1", #Support arithmetic decoding 191 "PPM_SUPPORTED=1", #Support arithmetic decoding 192 ] 193} 194 195config("turbojpeg_config") { 196 include_dirs += [ "${target_gen_dir}/libjpeg-turbo-3.1.0/src" ] 197 ldflags = [ "-Wl,--lto-O0" ] 198 defines = define_config 199} 200 201if (defined(ohos_lite)) { 202 lite_library("libjpeg") { 203 if (ohos_kernel_type == "liteos_m") { 204 target_type = "static_library" 205 } else { 206 target_type = "shared_library" 207 } 208 sources = get_target_outputs(":libjpeg_action") 209 deps = [ ":libjpeg_action" ] 210 public_configs = [ ":turbojpeg_config" ] 211 if (defined(board_toolchain_type) && board_toolchain_type == "iccarm") { 212 cflags += [ 213 "-DHAVE_STDLIB_H", 214 "--diag_suppress", 215 "Pa181,Pe301,Pe546", 216 ] 217 cflags_cc = cflags 218 } 219 } 220} else { 221 ohos_static_library("turbojpeg_static") { 222 sources = get_target_outputs(":libjpeg_action") 223 public_configs = [ ":turbojpeg_config" ] 224 deps = [ ":libjpeg_action" ] 225 part_name = "libjpeg-turbo" 226 subsystem_name = "thirdparty" 227 if (is_arm_ohos_clang_pc) { 228 defines = [ "HUFF_DECODE_OPT" ] 229 cflags += [ "-fvisibility=hidden" ] 230 } 231 } 232 ohos_shared_library("turbojpeg") { 233 sources = get_target_outputs(":libjpeg_action") 234 public_configs = [ ":turbojpeg_config" ] 235 deps = [ ":libjpeg_action" ] 236 innerapi_tags = [ 237 "platformsdk", 238 "chipsetsdk" 239 ] 240 part_name = "libjpeg-turbo" 241 subsystem_name = "thirdparty" 242 if (is_arm_ohos_clang_pc) { 243 defines = [ 244 "HUFF_DECODE_OPT", 245 "HIDE_INTERNAL", 246 ] 247 ldflags = [ "-Wl,-Bsymbolic" ] 248 } 249 } 250} 251