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