Skip to content

Commit

Permalink
dfsg: cmake: turn hal adapter into libcamhal entrypoint
Browse files Browse the repository at this point in the history
Introduce USE_HAL_ADAPTOR to build flavored libcamhal.so as plugin for
hal adapter.

Signed-off-by: You-Sheng Yang <vicamo.yang@canonical.com>
  • Loading branch information
vicamo committed Aug 31, 2023
1 parent 5c58051 commit 3636432
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 31 deletions.
35 changes: 27 additions & 8 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -251,8 +251,10 @@ if (${CMAKE_VERSION} VERSION_LESS 3.11)
else()
add_library(camhal SHARED $<TARGET_OBJECTS:camhal_static>)
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})

Expand Down Expand Up @@ -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

Expand Down
10 changes: 3 additions & 7 deletions build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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

Expand Down
10 changes: 6 additions & 4 deletions src/hal/hal_adaptor/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand All @@ -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")

Expand All @@ -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
Expand All @@ -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")
Expand Down
11 changes: 4 additions & 7 deletions src/hal/hal_adaptor/HalAdaptor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
11 changes: 6 additions & 5 deletions src/hal/hal_adaptor/hal_adaptor.pc.cmakein
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 3636432

Please sign in to comment.