if(NOT CMAKE_BUILD_TYPE) # default to Release build for GCC builds set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build, options are: None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel." FORCE) endif() if(NOT CMAKE_BUILD_TYPE STREQUAL "Release") add_definitions(-DBUILD_TYPE_DEBUG) endif() cmake_minimum_required(VERSION 2.8) #project name PROJECT(rk_aiq) list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") find_package(libdl QUIET) if (LIBDL_FOUND) add_compile_options(${LIBDL_CFLAGS}) endif() find_package(librga QUIET) if (LIBRGA_FOUND) add_compile_options(${LIBRGA_CFLAGS}) endif() find_package(libdrm QUIET) if (LIBDRM_FOUND) add_compile_options(${LIBDRM_CFLAGS}) endif() add_compile_options(${ISP_HW_VERSION}) # ---------------------------------------------------------------------------- # set property to classify library kinds # ---------------------------------------------------------------------------- set_property(GLOBAL PROPERTY USE_FOLDERS ON) set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "CMakeTargets") #set(CMAKE_CONFIGURATION_TYPES "Debug;Release") #set BUILROOT_BUILD_PROJECT set(BUILROOT_BUILD_PROJECT true) #set(ENABLE_ASAN true) #set RK_SIMULATOR_HW #set(RK_SIMULATOR_HW true) if(NOT RK_SIMULATOR_HW) set(GENMESH_ONLINE true) if("${ARCH}" STREQUAL "arm") set(MOTION_DETECT true) endif() endif() # ---------------------------------------------------------------------------- # SET THE COMPILER PATH # ---------------------------------------------------------------------------- if(RK_SIMULATOR_HW) add_compile_options(-DRK_SIMULATOR_HW) elseif(BUILROOT_BUILD_PROJECT) #add_compile_options(-DDISABLE_PP) #add_compile_options(-DDISABLE_PP_STATS) else() SET(CMAKE_C_COMPILER "/home/hkj/isp2-fpga/fpga-ramdisk/toolchains/host/bin/arm-buildroot-linux-gnueabi-gcc") SET(CMAKE_CXX_COMPILER "/home/hkj/isp2-fpga/fpga-ramdisk/toolchains/host/bin/arm-buildroot-linux-gnueabi-g++") endif() # ---------------------------------------------------------------------------- # ADD SYMBOL TABLE FOR GDB # ---------------------------------------------------------------------------- SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -std=c++11 -Wno-reorder -Werror -ggdb") SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -std=c++11 -Werror -Wno-reorder") # SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall") #head file path include_directories( xcore xcore/base aiq_core algos common common/linux hwi hwi/isp20 ipc iq_parser iq_parser_v2 uAPI uAPI2 ipc_server #algos/awb #../core/inc/luma #../core/inc/stat_3a_ae #../core/inc/stat_3a_af #../core/inc/orb #../core/inc/common ./ ./common/ include include/common include/common/mediactl include/iq_parser include/iq_parser_v2 include/uAPI include/uAPI2 include/xcore include/xcore/base include/algos include/algos/a3dlut include/algos/ablc include/algos/accm include/algos/acgc include/algos/acp include/algos/adebayer include/algos/adehaze include/algos/adpcc include/algos/ae include/algos/af include/algos/afec include/algos/agamma include/algos/adegamma include/algos/agic include/algos/amerge include/algos/atmo include/algos/adrc include/algos/aie include/algos/aldch include/algos/alsc include/algos/anr include/algos/anr/tnr_md include/algos/aorb include/algos/ar2y include/algos/asd include/algos/asharp include/algos/awb include/algos/awdr include/algos/asharp3 include/algos/aynr2 include/algos/acnr include/algos/aeis include/common/gen_mesh include/ipc_server include/amd include/algos/arawnr include/algos/aynr include/algos/auvnr include/algos/amfnr include/algos/again ) #source directory #AUX_SOURCE_DIRECTORY(demo/src DIR_SRCS) AUX_SOURCE_DIRECTORY(aiq_core/algo_handlers ALGO_HANDLE_SRC) set (AIQ_CORE_SRC aiq_core/RkAiqHandle.cpp ${ALGO_HANDLE_SRC} aiq_core/RkAiqHandleInt.cpp aiq_core/RkAiqHandleIntV21.cpp aiq_core/RkAiqCore.cpp aiq_core/RkAiqCoreV21.cpp aiq_core/RkLumaCore.cpp aiq_core/RkAiqSharedDataManager.cpp aiq_core/MessageBus.cpp aiq_core/RkAiqAnalyzeGroupManager.cpp aiq_core/RkAiqResourceTranslator.cpp aiq_core/RkAiqResourceTranslatorV21.cpp aiq_core/thumbnails.cpp ) set (ALGO_COMMON_SRC algos/interpolation.cpp ) if(GENMESH_ONLINE) set (COMMON_SRC common/mediactl/mediactl.c common/gen_mesh/genMesh.cpp common/shared_data_api_wrapper.cpp common/code_to_pixel_format.cpp common/media_buffer/media_buffer.c common/media_buffer/media_buffer_pool.c ) else() set (COMMON_SRC common/mediactl/mediactl.c ) endif() if(RK_SIMULATOR_HW) set (HWI_SRC hwi/CamHwBase.cpp hwi/simulator/CamHwSimulator.cpp ) else() set (HWI_SRC hwi/CamHwBase.cpp hwi/isp20/CamHwIsp20.cpp hwi/isp20/Isp20Params.cpp hwi/isp20/Isp20StatsBuffer.cpp hwi/isp20/Isp20_module_dbg.cpp hwi/isp20/Stream.cpp hwi/isp20/RawStreamCapUnit.cpp hwi/isp20/RawStreamProcUnit.cpp hwi/isp20/SPStreamProcUnit.cpp hwi/isp20/NrStatsStream.cpp hwi/isp20/TnrStatsStream.cpp hwi/isp20/NrStreamProcUnit.cpp hwi/isp20/FecParamStream.cpp hwi/isp20/TnrStreamProcUnit.cpp hwi/isp20/CaptureRawData.cpp hwi/isp21/CamHwIsp21.cpp hwi/SensorHw.cpp hwi/LensHw.cpp hwi/FlashLight.cpp hwi/image_processor.cpp hwi/isp20/Isp20Evts.cpp ) endif() set (IPC_SRC ) set (IQ_PARSER_SRC iq_parser/RkAiqCalibParser.cpp iq_parser/RkAiqCalibDb.cpp iq_parser/RkAiqCalibTag.cpp iq_parser/tinyxml2.cpp iq_parser/xmltags.cpp iq_parser/RkAiqCalibApi.cpp ) set (IQ_PARSER_V2_SRC iq_parser_v2/awb_xml2json.cpp ) set (IQ_PARSER_V2_SRC iq_parser_v2/bayernr_xml2json_v1.cpp iq_parser_v2/mfnr_xml2json_v1.cpp iq_parser_v2/ynr_xml2json_v1.cpp iq_parser_v2/uvnr_xml2json_v1.cpp iq_parser_v2/sharp_xml2json_v1.cpp iq_parser_v2/edgefilter_xml2json_v1.cpp ) set (UAPI_SRC uAPI/rk_aiq_user_api_sysctl.cpp uAPI2/rk_aiq_user_api2_sysctl.cpp uAPI/rk_aiq_user_api_debug.cpp uAPI2/rk_aiq_user_api2_helper.cpp uAPI2/rk_aiq_user_api2_wrapper.cpp ) set (XCORE_SRC xcore/xcam_common.cpp xcore/xcam_log.cpp xcore/xcam_thread.cpp xcore/xcam_buffer.cpp xcore/video_buffer.cpp xcore/v4l2_buffer_proxy.cpp xcore/v4l2_device.cpp xcore/fake_v4l2_device.cpp xcore/buffer_pool.cpp xcore/poll_thread.cpp xcore/smart_buffer_priv.cpp ) if (LIBDRM_FOUND) set(XCORE_SRC ${XCORE_SRC} xcore/drm_device.cpp xcore/drm_buffer.cpp xcore/dma_buffer.cpp xcore/dma_video_buffer.cpp ) endif() set (IPC_SERVER_SRC ipc_server/socket_server.cpp ipc_server/rkaiq_tool_ae.cpp ipc_server/rkaiq_tool_anr.cpp ipc_server/rkaiq_tool_imgproc.cpp ipc_server/rkaiq_tool_sharp.cpp ipc_server/rkaiq_tool_sysctl.cpp ipc_server/command_process.cpp ) set (RK_AIQ_SRC ${ALGO_COMMON_SRC} ${COMMON_SRC} ${HWI_SRC} ${IPC_SRC} ${IQ_PARSER_SRC} ${IQ_PARSER_V2_SRC} ${UAPI_SRC} ${XCORE_SRC} ${AIQ_CORE_SRC} ${IPC_SERVER_SRC} RkAiqManager.cpp ) if(OPENCV_SUPPORT) set (OPENCV_LIBS opencv_calib3d opencv_core opencv_dnn opencv_features2d opencv_flann opencv_gapi opencv_highgui opencv_imgcodecs opencv_imgproc opencv_ml opencv_objdetect opencv_photo opencv_stitching opencv_video opencv_videoio ) set (OPENCV_3RDPARTY_LIBS dl ade IlmImf ippicv ippiw ittnotify libprotobuf libwebp quirc ) set (OPENCV_LIBS_DIR ${PROJECT_SOURCE_DIR}/common/opencv2/lib ${PROJECT_SOURCE_DIR}/common/opencv2/lib/3rdparty ) add_compile_options(-DOPENCV_SUPPORT) endif() if(GENMESH_ONLINE) set (GENMESH_LIBS genMeshLib) if(ARCH STREQUAL "aarch64") set (GENMESH_LIBS_DIR ${PROJECT_SOURCE_DIR}/common/gen_mesh/linux/genMesh_static_64bit/ ) else() set (GENMESH_LIBS_DIR ${PROJECT_SOURCE_DIR}/common/gen_mesh/linux/genMesh_static_32bit/ ) endif() add_compile_options(-DGENMESH_ONLINE) endif() if(MOTION_DETECT) set (MOTION_DETECT_LIBS rkaiq_tnr_md) endif() # set output binary path if(WIN32) SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/exe) SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/all_lib/) SET(CMAKE_LIBRARY_PATH ${LIBRARY_OUTPUT_PATH}/${CMAKE_BUILD_TYPE}) else() SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/exe/${CMAKE_BUILD_TYPE}) SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/all_lib/${CMAKE_BUILD_TYPE}) SET(CMAKE_LIBRARY_PATH ${LIBRARY_OUTPUT_PATH}) endif() #set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi") #set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /DEBUG /OPT:REF /OPT:ICF") message(${CMAKE_LIBRARY_PATH}) message(${LIBRARY_OUTPUT_PATH}) if(ENABLE_ASAN) add_compile_options(-fsanitize=address -fno-omit-frame-pointer -g) SET(LINK_ASAN asan) endif() # add C++11 option #add_compile_options(-std=c++11) add_compile_options(-fPIC -Wall -Werror -Os) add_compile_options(-Wno-unused-variable -Wno-unused-but-set-variable -Wno-unused-function -Wno-misleading-indentation -Wno-unused-label -Wno-unused-result -Wno-format-truncation -fno-strict-aliasing -Wno-address-of-packed-member -Wno-psabi -fstack-protector-strong -D_FORTIFY_SOURCE=2 ) # add_compile_options(-v) add_definitions(-D_CRT_SECURE_NO_WARNINGS) ########################################################################### # BUILD IQ_PARSERV2 # ########################################################################### add_subdirectory(iq_parser_v2) include_directories(include/iq_parser_v2) include_directories(include/iq_parser_v2/j2s) # ---------------------------------------------------------------------------- # add algos implement # ---------------------------------------------------------------------------- add_subdirectory(algos) if(ARCH STREQUAL "aarch64") file(COPY "algos/ae/linux/arm64/librkaiq_ae.a" DESTINATION all_lib/Release/) file(COPY "algos/af/linux/arm64/librkaiq_af.a" DESTINATION all_lib/Release/) file(COPY "algos/asd/linux/arm64/librkaiq_asd.a" DESTINATION all_lib/Release/) file(COPY "algos/awb/linux/arm64/librkaiq_awb.a" DESTINATION all_lib/Release/) elseif(ARCH STREQUAL "arm") file(COPY "algos/ae/linux/arm/librkaiq_ae.a" DESTINATION all_lib/Release/) file(COPY "algos/af/linux/arm/librkaiq_af.a" DESTINATION all_lib/Release/) file(COPY "algos/asd/linux/arm/librkaiq_asd.a" DESTINATION all_lib/Release/) file(COPY "algos/awb/linux/arm/librkaiq_awb.a" DESTINATION all_lib/Release/) endif() add_subdirectory(rkaiq_3A_server) # surpress link_directories warning cmake_policy(SET CMP0015 NEW) # if (LIBRGA_FOUND) link_directories("${LIBRARY_OUTPUT_PATH}" "${OPENCV_LIBS_DIR}" "${GENMESH_LIBS_DIR}" "${LIBRGA_LIBRARY_DIR}") else() link_directories("${LIBRARY_OUTPUT_PATH}" "${OPENCV_LIBS_DIR}" "${GENMESH_LIBS_DIR}") endif() add_library(rkaiq SHARED ${RK_AIQ_SRC}) set_target_properties(rkaiq PROPERTIES FOLDER "rk_aiq") set_target_properties(rkaiq PROPERTIES CLEAN_DIRECT_OUTPUT 1) set_target_properties(rkaiq PROPERTIES C_VISIBILITY_PRESET default) set_target_properties(rkaiq PROPERTIES CXX_VISIBILITY_PRESET default) add_dependencies(rkaiq j2s_parser) target_link_libraries(rkaiq rkaiq_ae rkaiq_awb rkaiq_af rkaiq_anr rkaiq_asd rkaiq_amerge rkaiq_atmo rkaiq_acp rkaiq_asharp rkaiq_adhaz rkaiq_a3dlut rkaiq_ablc rkaiq_accm rkaiq_acgc rkaiq_adebayer rkaiq_adpcc rkaiq_afec rkaiq_agamma rkaiq_adegamma rkaiq_agic rkaiq_aie rkaiq_aldch rkaiq_alsc rkaiq_aorb rkaiq_ar2y rkaiq_awdr rkaiq_adrc rkaiq_asharp_v3 rkaiq_aynr_v2 rkaiq_acnr_v1 rkaiq_arawnr_v2 rkaiq_aeis rkaiq_amd rkaiq_arawnr_v1 rkaiq_aynr_v1 rkaiq_auvnr_v1 rkaiq_amfnr_v1 rkaiq_again_v1 ${OPENCV_LIBS} ${OPENCV_3RDPARTY_LIBS} ${GENMESH_LIBS} ${LINK_ASAN} pthread ${MOTION_DETECT_LIBS}) if (LIBDL_FOUND) target_link_libraries(rkaiq PRIVATE libdl::libdl ) endif() if (LIBRGA_FOUND) target_link_libraries(rkaiq PRIVATE rga ) endif() if (LIBDRM_FOUND) target_link_libraries(rkaiq PRIVATE libdrm::libdrm ) endif() set (VERSIONFILEPATH ${PROJECT_SOURCE_DIR}/) execute_process(COMMAND sh ${PROJECT_SOURCE_DIR}/tools/check-version-with-tuningtools.sh ${VERSIONFILEPATH}) #add_subdirectory(tests) install(TARGETS rkaiq RUNTIME DESTINATION bin LIBRARY DESTINATION lib ARCHIVE DESTINATION lib ) install(DIRECTORY include/ DESTINATION include/rkaiq FILES_MATCHING PATTERN "*.h") install(DIRECTORY common/ DESTINATION include/rkaiq/common FILES_MATCHING PATTERN "*.h")