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