• 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
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