# Copyright (c) 2023 Huawei Device Co., Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
if (defined(ohos_lite)) {
import("//build/lite/config/component/lite_component.gni")
} else {
import("//build/ohos.gni")
}
declare_args() {
is_arm_ohos_clang_pc = (target_cpu == "arm" || target_cpu == "arm64") &&
is_ohos && is_clang && target_platform == "pc"
}
action("libjpeg_action") {
script = "//third_party/libjpeg-turbo/install.py"
outputs = [
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jddiffct.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jpeg_nbits.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdlhuff.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdlossls.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jcdiffct.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jclossls.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jclhuff.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jcapimin.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jcapistd.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jccoefct.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jccolor.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jcdctmgr.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jchuff.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jcicc.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jcinit.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jcmainct.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jcmarker.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jcmaster.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jcomapi.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jcparam.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jcphuff.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jcprepct.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jcsample.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jctrans.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdapimin.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdapistd.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdatadst.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdatasrc.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdcoefct.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdcolor.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jddctmgr.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdicc.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdinput.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdmainct.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdmarker.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdmaster.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdmerge.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdphuff.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdpostct.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdsample.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdtrans.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jerror.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jfdctflt.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jfdctfst.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jfdctint.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jidctflt.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jidctfst.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jidctint.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jidctred.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jmemmgr.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jmemnobs.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jquant1.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jquant2.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jutils.c",
]
if (is_arm_ohos_clang_pc) {
outputs += [ "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdhuff_opt.c" ]
} else {
outputs += [ "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdhuff.c" ]
}
mkernel = defined(ohos_kernel_type) && ohos_kernel_type == "liteos_m"
if (mkernel || is_win) {
outputs += [ "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jsimd_none.c" ]
} else if (current_cpu == "arm" || current_cpu == "arm64") {
outputs += [
"${target_gen_dir}/libjpeg-turbo-3.1.0/simd/arm/jcgray-neon.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/simd/arm/jcphuff-neon.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/simd/arm/jcsample-neon.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/simd/arm/jdmerge-neon.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/simd/arm/jdsample-neon.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/simd/arm/jfdctfst-neon.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/simd/arm/jidctred-neon.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/simd/arm/jquanti-neon.c",
]
# NEON_INTRINSICS as default
outputs += [
"${target_gen_dir}/libjpeg-turbo-3.1.0/simd/arm/jccolor-neon.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/simd/arm/jidctfst-neon.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/simd/arm/jidctint-neon.c",
]
if (current_cpu == "arm") {
outputs += [
"${target_gen_dir}/libjpeg-turbo-3.1.0/simd/arm/aarch32/jchuff-neon.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/simd/arm/aarch32/jsimd.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/simd/arm/jdcolor-neon.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/simd/arm/jfdctint-neon.c",
]
} else {
outputs += [
"${target_gen_dir}/libjpeg-turbo-3.1.0/simd/arm/aarch64/jchuff-neon.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/simd/arm/aarch64/jsimd.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/simd/arm/jdcolor-neon.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/simd/arm/jfdctint-neon.c",
]
}
} else {
outputs += [ "${target_gen_dir}/libjpeg-turbo-3.1.0/src/jsimd_none.c" ]
}
if (!defined(ohos_lite)) {
outputs += [
# enable arith codec
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jaricom.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jcarith.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdarith.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdatadst-tj.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/jdatasrc-tj.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/rdbmp.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/rdppm.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/transupp.c",
# enable turbo
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/turbojpeg.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/wrbmp.c",
"${target_gen_dir}/libjpeg-turbo-3.1.0/src/wrppm.c",
]
}
inputs = [
"//third_party/libjpeg-turbo/libjpeg-turbo-3.1.0.tar.gz",
"//third_party/libjpeg-turbo/Add-loongarch64.patch",
"//third_party/libjpeg-turbo/libjpeg-turbo-2.1.x-bugfix.patch",
"//third_party/libjpeg-turbo/liteos_adapting.patch",
"//third_party/libjpeg-turbo/libjpeg-turbo-optimize.patch"
]
libjpeg_path = rebase_path("${target_gen_dir}", root_build_dir)
libjpeg_source_path =
rebase_path("//third_party/libjpeg-turbo", root_build_dir)
args = [
"--gen-dir",
"$libjpeg_path",
"--source-dir",
"$libjpeg_source_path",
]
}
include_dirs = []
define_config = [ "HAVE_UNSIGNED_SHORT=1" ]
cflags = []
mkernel = defined(ohos_kernel_type) && ohos_kernel_type == "liteos_m"
if (mkernel || is_win) {
define_config += [
"NO_PUTENV",
"NO_GETENV",
]
} else if (current_cpu == "arm" || current_cpu == "arm64") {
define_config += [ "NEON_INTRINSICS" ]
cflags += [
"-DNEON_INTRINSICS",
"-Wno-pointer-sign",
]
include_dirs += [ "${target_gen_dir}/libjpeg-turbo-3.1.0/simd/arm" ]
if (current_cpu == "arm") {
cflags += [
"-mfpu=neon",
"-mfloat-abi=softfp",
]
}
}
if (!defined(ohos_lite)) {
define_config += [
"C_ARITH_CODING_SUPPORTED=1", #Support arithmetic encoding
"D_ARITH_CODING_SUPPORTED=1", #Support arithmetic decoding
"BMP_SUPPORTED=1", #Support arithmetic decoding
"PPM_SUPPORTED=1", #Support arithmetic decoding
]
}
if (is_ohos) {
define_config += [ "SK_ENABLE_HI_JPEG" ]
}
config("turbojpeg_config") {
include_dirs += [ "${target_gen_dir}/libjpeg-turbo-3.1.0/src" ]
ldflags = [ "-Wl,--lto-O0" ]
defines = define_config
}
if (defined(ohos_lite)) {
lite_library("libjpeg") {
if (ohos_kernel_type == "liteos_m") {
target_type = "static_library"
} else {
target_type = "shared_library"
}
sources = get_target_outputs(":libjpeg_action")
deps = [ ":libjpeg_action" ]
public_configs = [ ":turbojpeg_config" ]
if (defined(board_toolchain_type) && board_toolchain_type == "iccarm") {
cflags += [
"-DHAVE_STDLIB_H",
"--diag_suppress",
"Pa181,Pe301,Pe546",
]
cflags_cc = cflags
}
}
} else {
ohos_static_library("turbojpeg_static") {
visibility = [
":*",
"//vendor/huawei/foundation/multimedia/algorithm_camera/refine_engine/algo_plugin/ipp/ITOF:libcamera_ips_ipp_itof",
"//ide/tools/previewer/test/unittest/jsapp_lite:jsapp_lite_test",
"//ide/tools/previewer/test/unittest/mock:mock_rich_test",
"//ide/tools/previewer/test/unittest/mock_lite:mock_lite_test",
"//ide/tools/previewer/mock:mock_lite",
"//ide/tools/previewer/mock:mock_rich",
"//drivers/peripheral/camera/vdi_base/usb_camera/pipeline_core:usb_camera_pipeline_core",
"//test/testfwk/arkxtest/uitest:uitest_addon",
"//foundation/arkui/ui_lite/ext/updater:libupdater_layout",
"//foundation/arkui/ui_lite/ext/ide:ui_ide",
"//foundation/arkui/ui_ext_lite/ext/updater:libupdater_layout",
"//foundation/arkui/ui_ext_lite/tools/ide:graphic_lite",
"//foundation/window/window_manager/dm/test/unittest:dm_unittest_common",
"//foundation/ability/ability_runtime/test/fuzztest/abilityframeworkscjenvironment_fuzzer:AbilityFrameworksCjEnvironmentFuzzTest",
"//foundation/ability/ability_runtime/test/fuzztest/openlinkoptions_fuzzer:OpenLinkOptionsFuzzTest",
"//foundation/ability/ability_runtime/test/fuzztest/freezeutil_fuzzer:FreezeUtilFuzzTest",
"//foundation/ability/ability_runtime/test/fuzztest/statusbardelegatemanager_fuzzer:StatusBarDelegateManagerFuzzTest",
"//out/*",
"//vendor/hisi/confidential/contexthub/src/framework/hisi/ui/third_party/*",
"//device/board/hihope/rk3568/camera/vdi_impl/v4l2/pipeline_core:camera_pipeline_core",
"//device/board/revoview/wukong100/camera/vdi_impl/v4l2/pipeline_core:camera_pipeline_core",
"//foundation/window/window_manager/dmserver/test/unittest:dmserver_unittest_common",
"//foundation/window/window_manager/extension/window_extension/test/unittest:window_extension_unittest_common",
"//vendor/hisi/ap/hardware/camera_product/mm_platform/software_encode:libsoftware_encode",
"//vendor/hisi/ap/hardware/camera_hal/hw_platform:libhw_platform",
"//device/hmos_emulator/hardware/camera/pipeline_core:camera_pipeline_core",
"//vendor/hisi/llt/hisecally_tools/hifsfuzz_testcases/libfuzzer/plat/ohos/camera_arch/camera_hal_libdependentso_fuzzer:exec_camera_hal_libdependentso_fuzzer",
"//vendor/hisi/llt/hisecally_tools/hifsfuzz_testcases/libfuzzer/plat/ohos/camera_arch/camera_hal_buffer_fuzzer:exec_camera_hal_buffer_fuzzer",
]
sources = get_target_outputs(":libjpeg_action")
public_configs = [ ":turbojpeg_config" ]
deps = [ ":libjpeg_action" ]
part_name = "libjpeg-turbo"
subsystem_name = "thirdparty"
if (is_arm_ohos_clang_pc) {
defines = [ "HUFF_DECODE_OPT" ]
cflags += [ "-fvisibility=hidden" ]
}
}
ohos_shared_library("turbojpeg") {
sources = get_target_outputs(":libjpeg_action")
public_configs = [ ":turbojpeg_config" ]
deps = [ ":libjpeg_action" ]
innerapi_tags = [
"platformsdk",
"chipsetsdk"
]
part_name = "libjpeg-turbo"
subsystem_name = "thirdparty"
if (is_arm_ohos_clang_pc) {
defines = [
"HUFF_DECODE_OPT",
"HIDE_INTERNAL",
]
ldflags = [ "-Wl,-Bsymbolic" ]
}
sanitize = {
cfi = true
cfi_cross_dso = true
debug = false
}
branch_protector_ret = "pac_ret"
}
}