• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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