1*4882a593Smuzhiyuncmake_minimum_required(VERSION 3.5) 2*4882a593Smuzhiyun 3*4882a593Smuzhiyuninclude(${CMAKE_SOURCE_DIR}/cmake/utils.cmake) 4*4882a593Smuzhiyun 5*4882a593Smuzhiyunif (EXISTS ${BUILD_TOOLCHAINS_PATH}) 6*4882a593Smuzhiyun message("load ${BUILD_TOOLCHAINS_PATH}") 7*4882a593Smuzhiyun include(${BUILD_TOOLCHAINS_PATH}) 8*4882a593Smuzhiyunendif() 9*4882a593Smuzhiyun 10*4882a593Smuzhiyunproject(rga) 11*4882a593Smuzhiyun 12*4882a593Smuzhiyunif(NOT CMAKE_BUILD_TYPE) 13*4882a593Smuzhiyun message("default to Release build for GCC builds") 14*4882a593Smuzhiyun set(CMAKE_BUILD_TYPE Release CACHE STRING 15*4882a593Smuzhiyun "Choose the type of build, options are: None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel." 16*4882a593Smuzhiyun FORCE) 17*4882a593Smuzhiyunendif() 18*4882a593Smuzhiyun 19*4882a593Smuzhiyunif(CMAKE_BUILD_TARGET STREQUAL android_ndk) 20*4882a593Smuzhiyun message("cmake build android ndk") 21*4882a593Smuzhiyun set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wno-error -DLOG_TAG=librga") 22*4882a593Smuzhiyun add_compile_options(-DLINUX) 23*4882a593Smuzhiyun add_compile_options(-DANDROID_VNDK) 24*4882a593Smuzhiyun string(REPLACE "-DANDROID" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") 25*4882a593Smuzhiyunendif() 26*4882a593Smuzhiyun 27*4882a593Smuzhiyunif(CMAKE_BUILD_TARGET STREQUAL buildroot) 28*4882a593Smuzhiyun message("cmake build buildroot") 29*4882a593Smuzhiyun set(CMAKE_CXX_FLAGS "-std=c++11 -O2 -pthread") 30*4882a593Smuzhiyun add_compile_options(-DLINUX) 31*4882a593Smuzhiyunendif() 32*4882a593Smuzhiyun 33*4882a593Smuzhiyunif(CMAKE_BUILD_TARGET STREQUAL cmake_linux) 34*4882a593Smuzhiyun message("RGA build with cmake") 35*4882a593Smuzhiyun add_compile_options(-DLINUX) 36*4882a593Smuzhiyun # TO support pass external CMAKE_CXX_FLAGS 37*4882a593Smuzhiyun set(CMAKE_CXX_FLAGS_EXT "-std=c++11 -O2 -pthread -fdata-sections -ffunction-sections -fno-exceptions -fno-rtti") 38*4882a593Smuzhiyun 39*4882a593Smuzhiyun if (NOT DEFINED CMAKE_C_COMPILER) 40*4882a593Smuzhiyun message(FATAL_ERROR "RGA: CMAKE_C_COMPILER not define") 41*4882a593Smuzhiyun endif() 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun if (NOT DEFINED CMAKE_CXX_COMPILER) 44*4882a593Smuzhiyun message(FATAL_ERROR "RGA: CMAKE_CXX_COMPILER not define") 45*4882a593Smuzhiyun endif() 46*4882a593Smuzhiyun 47*4882a593Smuzhiyunendif() 48*4882a593Smuzhiyun 49*4882a593Smuzhiyunif (BUILD_WITH_VERSION STREQUAL true) 50*4882a593Smuzhiyun im2d_api_extract_version() 51*4882a593Smuzhiyunendif() 52*4882a593Smuzhiyun 53*4882a593Smuzhiyunset(IM2D_SRCS 54*4882a593Smuzhiyun core/utils/android_utils/src/android_utils.cpp 55*4882a593Smuzhiyun core/utils/drm_utils/src/drm_utils.cpp 56*4882a593Smuzhiyun core/utils/utils.cpp 57*4882a593Smuzhiyun core/RockchipRga.cpp 58*4882a593Smuzhiyun core/GrallocOps.cpp 59*4882a593Smuzhiyun core/NormalRga.cpp 60*4882a593Smuzhiyun core/NormalRgaApi.cpp 61*4882a593Smuzhiyun core/RgaUtils.cpp 62*4882a593Smuzhiyun core/RgaApi.cpp 63*4882a593Smuzhiyun core/rga_sync.cpp 64*4882a593Smuzhiyun im2d_api/src/im2d_log.cpp 65*4882a593Smuzhiyun im2d_api/src/im2d_impl.cpp 66*4882a593Smuzhiyun im2d_api/src/im2d.cpp) 67*4882a593Smuzhiyun 68*4882a593Smuzhiyunset(IM2D_INCLUDE 69*4882a593Smuzhiyun ./ 70*4882a593Smuzhiyun ./im2d_api 71*4882a593Smuzhiyun ./include 72*4882a593Smuzhiyun ./core 73*4882a593Smuzhiyun ./core/hardware 74*4882a593Smuzhiyun ./core/utils 75*4882a593Smuzhiyun ./core/3rdparty/libdrm/include/drm 76*4882a593Smuzhiyun hardware/libhardware/include/hardware 77*4882a593Smuzhiyun hardware/libhardware/modules/gralloc 78*4882a593Smuzhiyun system/core/liblog/includeNDROID_NDK_REVISION_REGEX 79*4882a593Smuzhiyun system/core/libion/kernel-headers) 80*4882a593Smuzhiyun 81*4882a593Smuzhiyunset(IM2D_PUBLIC_HEADER 82*4882a593Smuzhiyun im2d_api/im2d_version.h 83*4882a593Smuzhiyun im2d_api/im2d_type.h 84*4882a593Smuzhiyun im2d_api/im2d_buffer.h 85*4882a593Smuzhiyun im2d_api/im2d_common.h 86*4882a593Smuzhiyun im2d_api/im2d_single.h 87*4882a593Smuzhiyun im2d_api/im2d_task.h 88*4882a593Smuzhiyun im2d_api/im2d_mpi.h 89*4882a593Smuzhiyun im2d_api/im2d_expand.h 90*4882a593Smuzhiyun im2d_api/im2d.h 91*4882a593Smuzhiyun im2d_api/im2d.hpp 92*4882a593Smuzhiyun include/drmrga.h 93*4882a593Smuzhiyun include/rga.h 94*4882a593Smuzhiyun include/RgaApi.h 95*4882a593Smuzhiyun include/RockchipRga.h 96*4882a593Smuzhiyun include/RgaUtils.h 97*4882a593Smuzhiyun include/RgaSingleton.h 98*4882a593Smuzhiyun include/RgaMutex.h 99*4882a593Smuzhiyun include/GrallocOps.h 100*4882a593Smuzhiyun) 101*4882a593Smuzhiyun 102*4882a593Smuzhiyunset(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_EXT} -DUN_NEED_GL") 103*4882a593Smuzhiyun 104*4882a593Smuzhiyun#build object 105*4882a593Smuzhiyunset(OBJECT_NAME ${PROJECT_NAME}-object) 106*4882a593Smuzhiyun 107*4882a593Smuzhiyunadd_library(${OBJECT_NAME} OBJECT ${IM2D_SRCS}) 108*4882a593Smuzhiyun 109*4882a593Smuzhiyuntarget_include_directories(${OBJECT_NAME} PUBLIC ${IM2D_INCLUDE}) 110*4882a593Smuzhiyun# Some older compilers need to explicitly set this property 111*4882a593Smuzhiyun# After setting this property, it can be used to generate a shared library 112*4882a593Smuzhiyunset_target_properties(${OBJECT_NAME} PROPERTIES POSITION_INDEPENDENT_CODE 1) 113*4882a593Smuzhiyun 114*4882a593Smuzhiyun# build shared lib 115*4882a593Smuzhiyunset(SHARED_LIB_NAME ${PROJECT_NAME}) 116*4882a593Smuzhiyun 117*4882a593Smuzhiyunadd_library(${SHARED_LIB_NAME} SHARED $<TARGET_OBJECTS:${OBJECT_NAME}>) 118*4882a593Smuzhiyun 119*4882a593Smuzhiyuntarget_include_directories(${SHARED_LIB_NAME} PUBLIC ${IM2D_INCLUDE}) 120*4882a593Smuzhiyun 121*4882a593Smuzhiyunif(NOT DEFINED IM2D_API_VERSION) 122*4882a593Smuzhiyun set_target_properties(${SHARED_LIB_NAME} PROPERTIES 123*4882a593Smuzhiyun PUBLIC_HEADER "${IM2D_PUBLIC_HEADER}") 124*4882a593Smuzhiyunelse () 125*4882a593Smuzhiyun message("Generated im2d api version: v${IM2D_API_VERSION}") 126*4882a593Smuzhiyun set_target_properties(${SHARED_LIB_NAME} PROPERTIES 127*4882a593Smuzhiyun PUBLIC_HEADER "${IM2D_PUBLIC_HEADER}" 128*4882a593Smuzhiyun VERSION ${IM2D_API_VERSION} SOVERSION ${IM2D_API_VERSION_MAJOR}) 129*4882a593Smuzhiyunendif() 130*4882a593Smuzhiyun 131*4882a593Smuzhiyun# build static lib 132*4882a593Smuzhiyunset(STATIC_LIB_NAME ${PROJECT_NAME}-static) 133*4882a593Smuzhiyun 134*4882a593Smuzhiyunadd_library(${STATIC_LIB_NAME} STATIC $<TARGET_OBJECTS:${OBJECT_NAME}>) 135*4882a593Smuzhiyun 136*4882a593Smuzhiyuntarget_include_directories(${STATIC_LIB_NAME} PUBLIC ${IM2D_INCLUDE}) 137*4882a593Smuzhiyunset_target_properties(${STATIC_LIB_NAME} PROPERTIES OUTPUT_NAME ${PROJECT_NAME}) 138*4882a593Smuzhiyun 139*4882a593Smuzhiyun# If cmake version is 3.5.1, FIXIT 140*4882a593Smuzhiyunif (NOT DEFINED CMAKE_INSTALL_LIBDIR) 141*4882a593Smuzhiyun set(CMAKE_INSTALL_LIBDIR lib) 142*4882a593Smuzhiyunendif() 143*4882a593Smuzhiyun 144*4882a593Smuzhiyunif (NOT DEFINED CMAKE_INSTALL_INCLUDEDIR) 145*4882a593Smuzhiyun set(CMAKE_INSTALL_INCLUDEDIR include) 146*4882a593Smuzhiyunendif() 147*4882a593Smuzhiyun 148*4882a593Smuzhiyuninstall(TARGETS ${SHARED_LIB_NAME} 149*4882a593Smuzhiyun LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} 150*4882a593Smuzhiyun PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) 151*4882a593Smuzhiyuninstall(TARGETS ${STATIC_LIB_NAME} 152*4882a593Smuzhiyun ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) 153*4882a593Smuzhiyun 154*4882a593Smuzhiyun# build im2d api demo 155*4882a593Smuzhiyunadd_subdirectory(samples/im2d_api_demo) 156*4882a593Smuzhiyun#add_subdirectory(samples) 157