From 36364322ba8af1a8a4a3fab8ff7e66fb06cb0849 Mon Sep 17 00:00:00 2001 From: You-Sheng Yang Date: Tue, 29 Aug 2023 12:18:27 +0800 Subject: [PATCH] dfsg: cmake: turn hal adapter into libcamhal entrypoint Introduce USE_HAL_ADAPTOR to build flavored libcamhal.so as plugin for hal adapter. Signed-off-by: You-Sheng Yang --- CMakeLists.txt | 35 +++++++++++++++++----- build.sh | 10 ++----- src/hal/hal_adaptor/CMakeLists.txt | 10 ++++--- src/hal/hal_adaptor/HalAdaptor.cpp | 11 +++---- src/hal/hal_adaptor/hal_adaptor.pc.cmakein | 11 +++---- 5 files changed, 46 insertions(+), 31 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b71a6659..29f5546e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -251,8 +251,10 @@ if (${CMAKE_VERSION} VERSION_LESS 3.11) else() add_library(camhal SHARED $) endif() -set_target_properties(camhal PROPERTIES SOVERSION 0) -set_target_properties(camhal PROPERTIES VERSION "0.0.0") +if(NOT USE_HAL_ADAPTOR) + set_target_properties(camhal PROPERTIES SOVERSION 0) + set_target_properties(camhal PROPERTIES VERSION "0.0.0") +endif() add_library(camhal_static STATIC ${LIBCAMHAL_SRCS}) @@ -401,21 +403,38 @@ install(DIRECTORY config/linux/${CAMHAL_CFG_VARIANT}/ DESTINATION share/defaults add_definitions("-DCAMERA_DEFAULT_CFG_PATH=\"${CMAKE_INSTALL_PREFIX}/share/defaults/etc/camera/${CAMHAL_CFG_VARIANT}/\"") # Install libraries +set(CAMHAL_TARGETS camhal) +if (USE_HAL_ADAPTOR) + set(CAMHAL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/libcamhal/plugins) +else() + set(CAMHAL_DESTINATION ${CMAKE_INSTALL_LIBDIR}) + set(CAMHAL_TARGETS "${CAMHAL_TARGETS} camhal_static") +endif() if (${CMAKE_VERSION} VERSION_LESS 3.11) -install(TARGETS camhal camhal_static - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib - ) + install(TARGETS ${CAMHAL_TARGETS} + LIBRARY DESTINATION ${CAMHAL_DESTINATION} + ARCHIVE DESTINATION ${CAMHAL_DESTINATION}) else() -install(TARGETS camhal camhal_static DESTINATION lib) + install(TARGETS ${CAMHAL_TARGETS} DESTINATION ${CAMHAL_DESTINATION}) +endif() +if (USE_HAL_ADAPTOR) + set_target_properties(camhal PROPERTIES PREFIX "") + if("${IPU_VER}" STREQUAL "") + set_target_properties(camhal PROPERTIES OUTPUT_NAME ipu4) + else() + set_target_properties(camhal PROPERTIES OUTPUT_NAME ${IPU_VER}) + endif() +else() + set_target_properties(camhal PROPERTIES OUTPUT_NAME camhal${CAMHAL_NAME_SUFFIX}) endif() -set_target_properties(camhal PROPERTIES OUTPUT_NAME camhal${CAMHAL_NAME_SUFFIX}) +if(NOT USE_HAL_ADAPTOR) # Install package config file configure_file(${PROJECT_SOURCE_DIR}/cmake/libcamhal.pc.cmakein ${PROJECT_SOURCE_DIR}/libcamhal${CAMHAL_NAME_SUFFIX}.pc @ONLY) install(FILES libcamhal${CAMHAL_NAME_SUFFIX}.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) +endif() endif() #NOT CAL_BUILD diff --git a/build.sh b/build.sh index b6b49111..9860255f 100755 --- a/build.sh +++ b/build.sh @@ -91,6 +91,7 @@ function build_target() { -DBUILD_CAMHAL_TESTS=OFF \ -DUSE_PG_LITE_PIPE=ON \ -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR/install \ + -DUSE_HAL_ADAPTOR=ON \ .. # make and install @@ -128,18 +129,13 @@ function build_hal_adaptor() { function build_icamerasrc() { cd $SOURCE_DIR/icamerasrc/ - export CAMHAL_LIBS="-L$INSTALL_DIR/install/lib -lhal_adaptor" - export CAMHAL_CFLAGS="-I$INSTALL_DIR/install/include/hal_adaptor \ - -I$INSTALL_DIR/install/include/hal_adaptor/api \ - -I$INSTALL_DIR/install/include/hal_adaptor/utils \ - -I$INSTALL_DIR/install/include/hal_adaptor/linux" export CHROME_SLIM_CAMHAL=ON - export PKG_CONFIG_PATH="/usr/lib/x86_64-linux-gnu/pkgconfig:/usr/lib/pkgconfig:${PKG_CONFIG_PATH}" + export PKG_CONFIG_PATH="${INSTALL_DIR}/install/lib/pkgconfig" rm -fr config.h.in autom4te.cache/ aclocal.m4 *-libtool config.guess compile \ config.sub configure depcomp install-sh ltmain.sh m4 autoreconf --install - CFLAGS="-O2" CXXFLAGS="-O2" ./configure --with-haladaptor=yes ${CONFIGURE_FLAGS} \ + CFLAGS="-O2" CXXFLAGS="-O2" ./configure ${CONFIGURE_FLAGS} \ --prefix=$INSTALL_DIR/install DEFAULT_CAMERA=0 check_result $? $FUNCNAME diff --git a/src/hal/hal_adaptor/CMakeLists.txt b/src/hal/hal_adaptor/CMakeLists.txt index 358b434c..2a8074d0 100644 --- a/src/hal/hal_adaptor/CMakeLists.txt +++ b/src/hal/hal_adaptor/CMakeLists.txt @@ -66,6 +66,7 @@ add_compile_options(-Wall -Werror add_definitions(-D__STDC_FORMAT_MACROS -DHAVE_PTHREADS -DHAVE_LINUX_OS + -DCAMHAL_PLUGIN_DIR=\"${CMAKE_INSTALL_LIBDIR}/libcamhal/plugins/\" ) set(HAL_ADAPTOR_LD_FLAGS "-fPIE -fPIC -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Wl,-z,relro -Wl,-z,now") @@ -87,6 +88,7 @@ set(HAL_ADAPTOR_SRCS ) add_library(hal_adaptor SHARED ${HAL_ADAPTOR_SRCS}) +set_target_properties(hal_adaptor PROPERTIES OUTPUT_NAME camhal) set_target_properties(hal_adaptor PROPERTIES SOVERSION 0) set_target_properties(hal_adaptor PROPERTIES VERSION "0.0.0") @@ -98,9 +100,9 @@ target_link_libraries(hal_adaptor ${CMAKE_DL_LIBS}) target_link_libraries(hal_adaptor rt) # Install headers -install(DIRECTORY ${ROOT_DIR}/include/ DESTINATION include/hal_adaptor) +install(DIRECTORY ${ROOT_DIR}/include/ DESTINATION include/libcamhal) if (SUPPORT_LIVE_TUNING) - install(FILES ${ROOT_DIR}/modules/livetune/LiveTuning.h DESTINATION include/hal_adaptor/api) + install(FILES ${ROOT_DIR}/modules/livetune/LiveTuning.h DESTINATION include/libcamhal/api) endif() # Install libraries @@ -115,8 +117,8 @@ endif() # Install package config file configure_file(${PROJECT_SOURCE_DIR}/hal_adaptor.pc.cmakein - ${PROJECT_SOURCE_DIR}/hal_adaptor.pc @ONLY) -install(FILES hal_adaptor.pc + ${PROJECT_SOURCE_DIR}/libcamhal.pc @ONLY) +install(FILES libcamhal.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) set(CPACK_GENERATOR "RPM") diff --git a/src/hal/hal_adaptor/HalAdaptor.cpp b/src/hal/hal_adaptor/HalAdaptor.cpp index e14418a1..5c188fbd 100644 --- a/src/hal/hal_adaptor/HalAdaptor.cpp +++ b/src/hal/hal_adaptor/HalAdaptor.cpp @@ -62,22 +62,19 @@ static void load_camera_hal_library() { CheckAndLogError((strlen(pciID) == 0), VOID_VALUE, "%s, Failed to read PCI id. %d", __func__, ret); - std::string libName = "/usr/lib/"; + std::string libName = CAMHAL_PLUGIN_DIR; if (strstr(pciID, "0xa75d") != nullptr /* RPL */ || strstr(pciID, "0x462e") != nullptr /* ADLN */ || strstr(pciID, "0x465d") != nullptr /* ADLP */) { - libName += "ipu_adl"; + libName += "ipu6ep.so"; } else if (strstr(pciID, "0x7d19") != nullptr /* MTL */) { - libName += "ipu_mtl"; + libName += "ipu6epmtl.so"; } else if (strstr(pciID, "0x9a19") != nullptr /* TGL */) { - libName += "ipu_tgl"; - } else if (strstr(pciID, "0x4e19") != nullptr /* JSL */) { - libName += "ipu_jsl"; + libName += "ipu6.so"; } else { LOGE("%s, Not support the PCI device %s for hal adaptor API", __func__, pciID); return VOID_VALUE; } - libName += "/libcamhal.so"; LOGI("%s, the library name: %s", __func__, libName.c_str()); gCameraHalLib = dlopen(libName.c_str(), RTLD_NOW); diff --git a/src/hal/hal_adaptor/hal_adaptor.pc.cmakein b/src/hal/hal_adaptor/hal_adaptor.pc.cmakein index e77e7178..8c66a551 100644 --- a/src/hal/hal_adaptor/hal_adaptor.pc.cmakein +++ b/src/hal/hal_adaptor/hal_adaptor.pc.cmakein @@ -1,11 +1,12 @@ prefix=@CMAKE_INSTALL_PREFIX@ exec_prefix=${prefix} -libdir=${prefix}/lib -includedir=${prefix}/include/hal_adaptor +libdir=${exec_prefix}/lib +includedir=${prefix}/include/libcamhal +plugindir=${libdir}/libcamhal/plugins -Name: libhal_adaptor -Description: Camera HAL Adaptor Library +Name: libcamhal +Description: Camera HAL Library URL: Version: @VERSION@ -Libs: -L${libdir} -lhal_adaptor +Libs: -L${libdir} -lcamhal Cflags: -I${includedir} -I${includedir}/api -I${includedir}/utils