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-2.1.1/jcapimin.c", 29 "${target_gen_dir}/libjpeg-turbo-2.1.1/jcapistd.c", 30 "${target_gen_dir}/libjpeg-turbo-2.1.1/jccoefct.c", 31 "${target_gen_dir}/libjpeg-turbo-2.1.1/jccolor.c", 32 "${target_gen_dir}/libjpeg-turbo-2.1.1/jcdctmgr.c", 33 "${target_gen_dir}/libjpeg-turbo-2.1.1/jchuff.c", 34 "${target_gen_dir}/libjpeg-turbo-2.1.1/jcicc.c", 35 "${target_gen_dir}/libjpeg-turbo-2.1.1/jcinit.c", 36 "${target_gen_dir}/libjpeg-turbo-2.1.1/jcmainct.c", 37 "${target_gen_dir}/libjpeg-turbo-2.1.1/jcmarker.c", 38 "${target_gen_dir}/libjpeg-turbo-2.1.1/jcmaster.c", 39 "${target_gen_dir}/libjpeg-turbo-2.1.1/jcomapi.c", 40 "${target_gen_dir}/libjpeg-turbo-2.1.1/jcparam.c", 41 "${target_gen_dir}/libjpeg-turbo-2.1.1/jcphuff.c", 42 "${target_gen_dir}/libjpeg-turbo-2.1.1/jcprepct.c", 43 "${target_gen_dir}/libjpeg-turbo-2.1.1/jcsample.c", 44 "${target_gen_dir}/libjpeg-turbo-2.1.1/jctrans.c", 45 "${target_gen_dir}/libjpeg-turbo-2.1.1/jdapimin.c", 46 "${target_gen_dir}/libjpeg-turbo-2.1.1/jdapistd.c", 47 "${target_gen_dir}/libjpeg-turbo-2.1.1/jdatadst.c", 48 "${target_gen_dir}/libjpeg-turbo-2.1.1/jdatasrc.c", 49 "${target_gen_dir}/libjpeg-turbo-2.1.1/jdcoefct.c", 50 "${target_gen_dir}/libjpeg-turbo-2.1.1/jdcolor.c", 51 "${target_gen_dir}/libjpeg-turbo-2.1.1/jddctmgr.c", 52 "${target_gen_dir}/libjpeg-turbo-2.1.1/jdicc.c", 53 "${target_gen_dir}/libjpeg-turbo-2.1.1/jdinput.c", 54 "${target_gen_dir}/libjpeg-turbo-2.1.1/jdmainct.c", 55 "${target_gen_dir}/libjpeg-turbo-2.1.1/jdmarker.c", 56 "${target_gen_dir}/libjpeg-turbo-2.1.1/jdmaster.c", 57 "${target_gen_dir}/libjpeg-turbo-2.1.1/jdmerge.c", 58 "${target_gen_dir}/libjpeg-turbo-2.1.1/jdphuff.c", 59 "${target_gen_dir}/libjpeg-turbo-2.1.1/jdpostct.c", 60 "${target_gen_dir}/libjpeg-turbo-2.1.1/jdsample.c", 61 "${target_gen_dir}/libjpeg-turbo-2.1.1/jdtrans.c", 62 "${target_gen_dir}/libjpeg-turbo-2.1.1/jerror.c", 63 "${target_gen_dir}/libjpeg-turbo-2.1.1/jfdctflt.c", 64 "${target_gen_dir}/libjpeg-turbo-2.1.1/jfdctfst.c", 65 "${target_gen_dir}/libjpeg-turbo-2.1.1/jfdctint.c", 66 "${target_gen_dir}/libjpeg-turbo-2.1.1/jidctflt.c", 67 "${target_gen_dir}/libjpeg-turbo-2.1.1/jidctfst.c", 68 "${target_gen_dir}/libjpeg-turbo-2.1.1/jidctint.c", 69 "${target_gen_dir}/libjpeg-turbo-2.1.1/jidctred.c", 70 "${target_gen_dir}/libjpeg-turbo-2.1.1/jmemmgr.c", 71 "${target_gen_dir}/libjpeg-turbo-2.1.1/jmemnobs.c", 72 "${target_gen_dir}/libjpeg-turbo-2.1.1/jquant1.c", 73 "${target_gen_dir}/libjpeg-turbo-2.1.1/jquant2.c", 74 "${target_gen_dir}/libjpeg-turbo-2.1.1/jutils.c", 75 ] 76 77 if (is_arm_ohos_clang_pc) { 78 outputs += [ "${target_gen_dir}/libjpeg-turbo-2.1.1/jdhuff_opt.c" ] 79 } else { 80 outputs += [ "${target_gen_dir}/libjpeg-turbo-2.1.1/jdhuff.c" ] 81 } 82 83 mkernel = defined(ohos_kernel_type) && ohos_kernel_type == "liteos_m" 84 if (mkernel || is_win) { 85 outputs += [ "${target_gen_dir}/libjpeg-turbo-2.1.1/jsimd_none.c" ] 86 } else if (current_cpu == "arm" || current_cpu == "arm64") { 87 outputs += [ 88 "${target_gen_dir}/libjpeg-turbo-2.1.1/simd/arm/jcgray-neon.c", 89 "${target_gen_dir}/libjpeg-turbo-2.1.1/simd/arm/jcphuff-neon.c", 90 "${target_gen_dir}/libjpeg-turbo-2.1.1/simd/arm/jcsample-neon.c", 91 "${target_gen_dir}/libjpeg-turbo-2.1.1/simd/arm/jdmerge-neon.c", 92 "${target_gen_dir}/libjpeg-turbo-2.1.1/simd/arm/jdsample-neon.c", 93 "${target_gen_dir}/libjpeg-turbo-2.1.1/simd/arm/jfdctfst-neon.c", 94 "${target_gen_dir}/libjpeg-turbo-2.1.1/simd/arm/jidctred-neon.c", 95 "${target_gen_dir}/libjpeg-turbo-2.1.1/simd/arm/jquanti-neon.c", 96 ] 97 98 # NEON_INTRINSICS as default 99 outputs += [ 100 "${target_gen_dir}/libjpeg-turbo-2.1.1/simd/arm/jccolor-neon.c", 101 "${target_gen_dir}/libjpeg-turbo-2.1.1/simd/arm/jidctfst-neon.c", 102 "${target_gen_dir}/libjpeg-turbo-2.1.1/simd/arm/jidctint-neon.c", 103 ] 104 if (current_cpu == "arm") { 105 outputs += [ 106 "${target_gen_dir}/libjpeg-turbo-2.1.1/simd/arm/aarch32/jchuff-neon.c", 107 "${target_gen_dir}/libjpeg-turbo-2.1.1/simd/arm/aarch32/jsimd.c", 108 "${target_gen_dir}/libjpeg-turbo-2.1.1/simd/arm/jdcolor-neon.c", 109 "${target_gen_dir}/libjpeg-turbo-2.1.1/simd/arm/jfdctint-neon.c", 110 ] 111 } else { 112 outputs += [ 113 "${target_gen_dir}/libjpeg-turbo-2.1.1/simd/arm/aarch64/jchuff-neon.c", 114 "${target_gen_dir}/libjpeg-turbo-2.1.1/simd/arm/aarch64/jsimd.c", 115 "${target_gen_dir}/libjpeg-turbo-2.1.1/simd/arm/jdcolor-neon.c", 116 "${target_gen_dir}/libjpeg-turbo-2.1.1/simd/arm/jfdctint-neon.c", 117 ] 118 } 119 } else { 120 outputs += [ "${target_gen_dir}/libjpeg-turbo-2.1.1/jsimd_none.c" ] 121 } 122 123 if (!defined(ohos_lite)) { 124 outputs += [ 125 # enable arith codec 126 "${target_gen_dir}/libjpeg-turbo-2.1.1/jaricom.c", 127 "${target_gen_dir}/libjpeg-turbo-2.1.1/jcarith.c", 128 "${target_gen_dir}/libjpeg-turbo-2.1.1/jdarith.c", 129 "${target_gen_dir}/libjpeg-turbo-2.1.1/jdatadst-tj.c", 130 "${target_gen_dir}/libjpeg-turbo-2.1.1/jdatasrc-tj.c", 131 "${target_gen_dir}/libjpeg-turbo-2.1.1/rdbmp.c", 132 "${target_gen_dir}/libjpeg-turbo-2.1.1/rdppm.c", 133 "${target_gen_dir}/libjpeg-turbo-2.1.1/transupp.c", 134 135 # enable turbo 136 "${target_gen_dir}/libjpeg-turbo-2.1.1/turbojpeg.c", 137 "${target_gen_dir}/libjpeg-turbo-2.1.1/wrbmp.c", 138 "${target_gen_dir}/libjpeg-turbo-2.1.1/wrppm.c", 139 ] 140 } 141 142 inputs = [ "//third_party/libjpeg-turbo/libjpeg-turbo-2.1.1.tar.gz" ] 143 libjpeg_path = rebase_path("${target_gen_dir}", root_build_dir) 144 libjpeg_source_path = 145 rebase_path("//third_party/libjpeg-turbo", root_build_dir) 146 args = [ 147 "--gen-dir", 148 "$libjpeg_path", 149 "--source-dir", 150 "$libjpeg_source_path", 151 ] 152} 153 154include_dirs = [] 155define_config = [ "HAVE_UNSIGNED_SHORT=1" ] 156cflags = [] 157 158mkernel = defined(ohos_kernel_type) && ohos_kernel_type == "liteos_m" 159if (mkernel || is_win) { 160 define_config += [ 161 "NO_PUTENV", 162 "NO_GETENV", 163 ] 164} else if (current_cpu == "arm" || current_cpu == "arm64") { 165 define_config += [ "NEON_INTRINSICS" ] 166 cflags += [ 167 "-DNEON_INTRINSICS", 168 "-Wno-pointer-sign", 169 ] 170 include_dirs += [ "${target_gen_dir}/libjpeg-turbo-2.1.1/simd/arm" ] 171 if (current_cpu == "arm") { 172 cflags += [ 173 "-mfpu=neon", 174 "-mfloat-abi=softfp", 175 ] 176 } 177} 178 179if (!defined(ohos_lite)) { 180 define_config += [ 181 "C_ARITH_CODING_SUPPORTED=1", #Support arithmetic encoding 182 "D_ARITH_CODING_SUPPORTED=1", #Support arithmetic decoding 183 "BMP_SUPPORTED=1", #Support arithmetic decoding 184 "PPM_SUPPORTED=1", #Support arithmetic decoding 185 ] 186} 187 188config("turbojpeg_config") { 189 include_dirs += [ "${target_gen_dir}/libjpeg-turbo-2.1.1" ] 190 defines = define_config 191} 192 193if (defined(ohos_lite)) { 194 lite_library("libjpeg") { 195 if (ohos_kernel_type == "liteos_m") { 196 target_type = "static_library" 197 } else { 198 target_type = "shared_library" 199 } 200 sources = get_target_outputs(":libjpeg_action") 201 deps = [ ":libjpeg_action" ] 202 public_configs = [ ":turbojpeg_config" ] 203 if (defined(board_toolchain_type) && board_toolchain_type == "iccarm") { 204 cflags += [ 205 "-DHAVE_STDLIB_H", 206 "--diag_suppress", 207 "Pa181,Pe301,Pe546", 208 ] 209 cflags_cc = cflags 210 } 211 } 212} else { 213 ohos_static_library("turbojpeg_static") { 214 sources = get_target_outputs(":libjpeg_action") 215 public_configs = [ ":turbojpeg_config" ] 216 deps = [ ":libjpeg_action" ] 217 part_name = "libjpeg-turbo" 218 subsystem_name = "thirdparty" 219 if (is_arm_ohos_clang_pc) { 220 defines = [ "HUFF_DECODE_OPT" ] 221 cflags += [ "-fvisibility=hidden" ] 222 } 223 } 224 ohos_shared_library("turbojpeg") { 225 sources = get_target_outputs(":libjpeg_action") 226 public_configs = [ ":turbojpeg_config" ] 227 deps = [ ":libjpeg_action" ] 228 innerapi_tags = [ "platformsdk" ] 229 part_name = "libjpeg-turbo" 230 subsystem_name = "thirdparty" 231 if (is_arm_ohos_clang_pc) { 232 defines = [ 233 "HUFF_DECODE_OPT", 234 "HIDE_INTERNAL", 235 ] 236 ldflags = [ "-Wl,-Bsymbolic" ] 237 } 238 } 239} 240