123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378 |
- # ----------------------------------------------------------------------------
- # Root CMake file for Rockchip Media Process Platform (MPP)
- #
- # - 10:34 2015/7/27: Initial version <herman.chen@rock-chips.com>
- #
- # ----------------------------------------------------------------------------
- # vim: syntax=cmake
- set(CMAKE_POLICY_VERSION_MINIMUM 3.5)
- if(NOT CMAKE_BUILD_TYPE)
- # default to Release build for GCC builds
- set(CMAKE_BUILD_TYPE Debug CACHE STRING
- "Choose the type of build, options are: None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel."
- FORCE)
- endif()
- message(STATUS "cmake version ${CMAKE_VERSION}")
- # Search packages for host system instead of packages for target system
- # in case of cross compilation these macro should be defined by toolchain file
- if(NOT COMMAND find_host_package)
- macro(find_host_package)
- find_package(${ARGN})
- endmacro()
- endif()
- if(NOT COMMAND find_host_program)
- macro(find_host_program)
- find_program(${ARGN})
- endmacro()
- endif()
- project (rk_mpp)
- cmake_minimum_required (VERSION 2.8.8) # OBJECT libraries require 2.8.8
- include(CheckIncludeFiles)
- include(CheckFunctionExists)
- include(CheckSymbolExists)
- include(CheckCXXCompilerFlag)
- # setup output library name
- # Linux default name - rockchip_mpp and rockchip_vpu
- # Android default name - mpp and vpu
- # For historical reason libraries on Android is named as mpp and vpu. But for
- # better naming rule on Linux it should add vendor prefix.
- # So we use this ugly method to avoid massive maintain issue.
- if (NOT MPP_PROJECT_NAME)
- set(MPP_PROJECT_NAME rockchip_mpp)
- endif()
- set(MPP_STATIC ${MPP_PROJECT_NAME}_static)
- set(MPP_SHARED ${MPP_PROJECT_NAME})
- if (NOT VPU_PROJECT_NAME)
- set(VPU_PROJECT_NAME rockchip_vpu)
- endif()
- set(VPU_STATIC ${VPU_PROJECT_NAME}_static)
- set(VPU_SHARED ${VPU_PROJECT_NAME})
- # ----------------------------------------------------------------------------
- # set property to classify library kinds
- # ----------------------------------------------------------------------------
- set_property(GLOBAL PROPERTY USE_FOLDERS ON)
- set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "CMakeTargets")
- # ----------------------------------------------------------------------------
- # enable test in this project
- # ----------------------------------------------------------------------------
- option(BUILD_TEST "enable test binary building)" ON)
- # ----------------------------------------------------------------------------
- # export json compile commands
- # ----------------------------------------------------------------------------
- set(CMAKE_EXPORT_COMPILE_COMMANDS true)
- # ----------------------------------------------------------------------------
- # System architecture detection
- # ----------------------------------------------------------------------------
- string(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" SYSPROC)
- set(X86_ALIASES x86 i386 i686 x86_64 amd64)
- list(FIND X86_ALIASES "${SYSPROC}" X86MATCH)
- if("${CMAKE_C_COMPILER}" MATCHES "-buildroot-[^/]+$")
- message(STATUS "Detected Buildroot toolchain")
- # Use buildroot toolchain's default architecture settings
- elseif("${SYSPROC}" STREQUAL "" OR X86MATCH GREATER "-1")
- message(STATUS "Detected x86 system processor")
- set(X86 true)
- add_definitions(-DARCH_X86=1)
- if("${CMAKE_SIZEOF_VOID_P}" MATCHES 8)
- set(X64 true)
- add_definitions(-DARCH_X64=1)
- message(STATUS "Define X86_64 to 1")
- endif()
- elseif(${SYSPROC} STREQUAL "armv6l")
- message(STATUS "Detected ARMv6 system processor")
- set(ARM true)
- set(ARMEABI_V6 true)
- elseif(${SYSPROC} STREQUAL "armv7-a")
- message(STATUS "Detected ARMv7 system processor")
- set(ARM true)
- set(ARMEABI_V7A true)
- elseif(${SYSPROC} STREQUAL "armv7-a_hardfp" OR ${SYSPROC} STREQUAL "armv7l")
- message(STATUS "Detected ARMv7 system processor")
- set(ARM true)
- set(ARMEABI_V7A_HARDFP true)
- elseif(${SYSPROC} STREQUAL "aarch64" OR ${SYSPROC} STREQUAL "armv8-a")
- message(STATUS "Detected ARMv8 system processor")
- set(ARM true)
- set(ARMEABI_V8 true)
- else()
- message(STATUS "CMAKE_SYSTEM_PROCESSOR value `${CMAKE_SYSTEM_PROCESSOR}` is unknown")
- message(STATUS "Please add this value near ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE}")
- endif()
- if(UNIX)
- SET(PLATFORM_LIBS pthread)
- if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
- SET(PLATFORM_LIBS ${PLATFORM_LIBS} rt)
- endif()
- endif(UNIX)
- # ----------------------------------------------------------------------------
- # Compiler detection
- # ----------------------------------------------------------------------------
- if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
- set(CLANG true)
- endif()
- if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel")
- set(INTEL_CXX true)
- endif()
- if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
- set(GCC true)
- endif()
- if(INTEL_CXX AND UNIX)
- # treat icpc roughly like gcc
- set(GCC true)
- add_definitions(-Wall -Wextra -Wshadow)
- elseif(CLANG)
- # treat clang roughly like gcc
- set(GCC true)
- add_definitions(-Wall -Wextra -Wshadow -ffast-math)
- elseif(CMAKE_COMPILER_IS_GNUCXX)
- add_definitions(-Wall -Wextra -Wshadow -ffast-math)
- check_cxx_compiler_flag(-Wno-narrowing GCC_HAS_NO_NARROWING)
- check_cxx_compiler_flag(-mstackrealign GCC_HAS_STACK_REALIGN)
- if (GCC_HAS_STACK_REALIGN)
- add_definitions(-mstackrealign)
- endif()
- execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
- endif()
- if(GCC)
- if(ARM)
- if(ARMEABI_V6)
- add_definitions(-march=armv6 -mfloat-abi=hard -mfpu=vfp)
- elseif(ARMEABI_V7A)
- add_definitions(-march=armv7-a -mfloat-abi=softfp -mfpu=neon)
- elseif(ARMEABI_V7A_HARDFP)
- add_definitions(-march=armv7-a -mfloat-abi=hard -mfpu=neon)
- elseif(ARMEABI_V8)
- add_definitions(-march=armv8-a)
- endif()
- else()
- if(X86 AND NOT X64)
- add_definitions(-march=i686)
- endif()
- endif()
- if(NOT ${CMAKE_BUILD_TYPE} MATCHES "Release")
- add_definitions(-g)
- endif()
- # disable multichar warning
- add_definitions(-Wno-multichar)
- # add PIC flag
- add_definitions(-fPIC)
- # disable exception for C++
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions -fno-rtti")
- # save intermediate files
- # add_definitions(-save-temps)
- # for libary linking
- set(BEGIN_WHOLE_ARCHIVE -Wl,--whole-archive)
- set(END_WHOLE_ARCHIVE -Wl,--no-whole-archive)
- option(ASAN_CHECK "enable Address Sanitizer (Asan)" OFF)
- if(ASAN_CHECK)
- add_definitions(-fsanitize=address -static-libasan -g)
- set(ASAN_LIB libasan.a dl rt m)
- set(ASAN_BIN dl rt m)
- endif(ASAN_CHECK)
- endif(GCC)
- # ----------------------------------------------------------------------------
- # Create git version information
- # ----------------------------------------------------------------------------
- set(VERSION_CNT 0)
- set(VERSION_MAX_CNT 9)
- set(VERSION_INFO "\"unknown mpp version for missing VCS info\"")
- foreach (CNT RANGE ${VERSION_MAX_CNT})
- set(VERSION_HISTORY_${CNT} "NULL")
- endforeach(CNT)
- if(EXISTS "${PROJECT_SOURCE_DIR}/.git")
- find_host_package(Git)
- if(GIT_FOUND)
- # get current version info
- set(GIT_LOG_FORMAT "%h author: %<|(30)%an %cd %s")
- execute_process(COMMAND ${GIT_EXECUTABLE} log -1 --oneline --date=short --pretty=format:${GIT_LOG_FORMAT}
- WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
- OUTPUT_VARIABLE EXEC_OUT
- ERROR_VARIABLE EXEC_ERROR
- RESULT_VARIABLE EXEC_RET
- OUTPUT_STRIP_TRAILING_WHITESPACE
- ERROR_STRIP_TRAILING_WHITESPACE)
- if (NOT EXEC_RET)
- set(VERSION_INFO ${EXEC_OUT})
- message(STATUS "current version:")
- message(STATUS "${VERSION_INFO}")
- string(REPLACE "\"" "\\\"" VERSION_INFO ${VERSION_INFO})
- set(VERSION_INFO "\"${VERSION_INFO}\"")
- else()
- message(STATUS "git ret ${EXEC_RET}")
- message(STATUS "${EXEC_ERROR}")
- endif()
- set(GIT_LOG_FORMAT "%h author: %<|(30)%an %cd %s %d")
- # get history version information
- # setup logs
- message(STATUS "git version history:")
- foreach (CNT RANGE ${VERSION_MAX_CNT})
- execute_process(COMMAND ${GIT_EXECUTABLE} log HEAD~${CNT} -1 --oneline --date=short --pretty=format:${GIT_LOG_FORMAT}
- WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
- OUTPUT_VARIABLE EXEC_OUT
- ERROR_VARIABLE EXEC_ERROR
- RESULT_VARIABLE EXEC_RET
- OUTPUT_STRIP_TRAILING_WHITESPACE
- ERROR_STRIP_TRAILING_WHITESPACE)
- if (NOT EXEC_RET)
- set(VERSION_LOG ${EXEC_OUT})
- string(REPLACE "\"" "\\\"" VERSION_LOG ${VERSION_LOG})
- message(STATUS ${VERSION_LOG})
- set(VERSION_HISTORY_${CNT} "\"${VERSION_LOG}\"")
- math(EXPR VERSION_CNT "${VERSION_CNT}+1")
- endif()
- endforeach(CNT)
- message(STATUS "total ${VERSION_CNT} git version recorded")
- endif()
- # add git hooks
- if (EXISTS "${PROJECT_SOURCE_DIR}/tools/hooks/")
- set(GIT_HOOK_SRC "${PROJECT_SOURCE_DIR}/tools/hooks/")
- if(EXISTS "${PROJECT_SOURCE_DIR}/.git/hooks")
- set(GIT_HOOK_DST "${PROJECT_SOURCE_DIR}/.git/hooks/")
- file(COPY ${GIT_HOOK_SRC} DESTINATION ${GIT_HOOK_DST})
- message(STATUS "Install git hooks done")
- endif(EXISTS "${PROJECT_SOURCE_DIR}/.git/hooks")
- endif(EXISTS "${PROJECT_SOURCE_DIR}/tools/hooks/")
- endif(EXISTS "${PROJECT_SOURCE_DIR}/.git")
- configure_file(
- "${PROJECT_SOURCE_DIR}/build/cmake/version.in"
- "${PROJECT_SOURCE_DIR}/mpp/version.h"
- )
- # ----------------------------------------------------------------------------
- # Build options
- # ----------------------------------------------------------------------------
- find_package(PkgConfig)
- INCLUDE(GNUInstallDirs)
- pkg_search_module(PTHREAD pthread)
- # ----------------------------------------------------------------------------
- # Set Warning as Error
- # ----------------------------------------------------------------------------
- option(WARNINGS_AS_ERRORS "Stop compiles on first warning" OFF)
- if(WARNINGS_AS_ERRORS)
- if(GCC)
- add_definitions(-Werror)
- elseif(MSVC)
- add_definitions(/WX)
- endif()
- endif(WARNINGS_AS_ERRORS)
- # ----------------------------------------------------------------------------
- # look for stdint.h
- # ----------------------------------------------------------------------------
- if(MSVC)
- check_include_files(stdint.h HAVE_STDINT_H)
- if(NOT HAVE_STDINT_H)
- include_directories(osal/windows)
- endif(NOT HAVE_STDINT_H)
- endif(MSVC)
- # ----------------------------------------------------------------------------
- # Share library option
- # ----------------------------------------------------------------------------
- option(BUILD_SHARED_LIBS "Build shared library" ON)
- # ----------------------------------------------------------------------------
- # scan all LOG_TAG for log information and generate module header file
- # ----------------------------------------------------------------------------
- set( module_list "" )
- file ( GLOB_RECURSE ALL_SRC . *.c;*.cpp )
- foreach( files ${ALL_SRC} )
- file( STRINGS ${files} module_tag_line REGEX "MODULE_TAG( )+\".+\"" )
- if(module_tag_line)
- string( REGEX REPLACE "^(.)* MODULE_TAG( )+\"(.*)\"" \\3 module_tag ${module_tag_line} )
- list( APPEND module_list ${module_tag} )
- endif()
- endforeach()
- list( SORT module_list )
- list( LENGTH module_list module_size )
- #message(STATUS "module_list: ${module_list}")
- #message(STATUS "module_size: ${module_size}")
- # ----------------------------------------------------------------------------
- # Start module definition
- # ----------------------------------------------------------------------------
- # project overall include file
- include_directories(inc)
- # small utile functions for test case
- include_directories(utils)
- # ----------------------------------------------------------------------------
- # osal library
- # ----------------------------------------------------------------------------
- # Operation System Abstract Layer (OSAL) include
- include_directories(osal/inc)
- # OSAL is needed on all platform, do not need option
- add_subdirectory(osal)
- # ----------------------------------------------------------------------------
- # utils for test case
- # ----------------------------------------------------------------------------
- add_subdirectory(utils)
- # Media Process Platform include
- include_directories(mpp/inc)
- include_directories(mpp/base/inc)
- # Kernel Media Process Platform include
- include_directories(kmpp/inc)
- include_directories(kmpp/base/inc)
- # ----------------------------------------------------------------------------
- # Kernel Media Process Platform library
- # ----------------------------------------------------------------------------
- add_subdirectory(kmpp)
- # ----------------------------------------------------------------------------
- # Media Process Platform library
- # ----------------------------------------------------------------------------
- add_subdirectory(mpp)
- # ----------------------------------------------------------------------------
- # test / demo
- # ----------------------------------------------------------------------------
- add_subdirectory(test)
- # ----------------------------------------------------------------------------
- # install headers
- # ----------------------------------------------------------------------------
- install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/inc/
- DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/rockchip"
- FILES_MATCHING PATTERN "*.h"
- )
- # ----------------------------------------------------------------------------
- # pkgconfig
- # ----------------------------------------------------------------------------
- CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/pkgconfig/rockchip_mpp.pc.cmake"
- "${CMAKE_BINARY_DIR}/rockchip_mpp.pc" @ONLY)
- CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/pkgconfig/rockchip_vpu.pc.cmake"
- "${CMAKE_BINARY_DIR}/rockchip_vpu.pc" @ONLY)
- install(FILES "${CMAKE_BINARY_DIR}/rockchip_mpp.pc"
- DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig/")
- install(FILES "${CMAKE_BINARY_DIR}/rockchip_vpu.pc"
- DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig/")
|