xref: /rockchip-linux_mpp/CMakeLists.txt (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1*437bfbebSnyanmisaka# ----------------------------------------------------------------------------
2*437bfbebSnyanmisaka#  Root CMake file for Rockchip Media Process Platform (MPP)
3*437bfbebSnyanmisaka#
4*437bfbebSnyanmisaka#   - 10:34 2015/7/27: Initial version <herman.chen@rock-chips.com>
5*437bfbebSnyanmisaka#
6*437bfbebSnyanmisaka# ----------------------------------------------------------------------------
7*437bfbebSnyanmisaka
8*437bfbebSnyanmisaka# vim: syntax=cmake
9*437bfbebSnyanmisakaset(CMAKE_POLICY_VERSION_MINIMUM 3.5)
10*437bfbebSnyanmisakaif(NOT CMAKE_BUILD_TYPE)
11*437bfbebSnyanmisaka    # default to Release build for GCC builds
12*437bfbebSnyanmisaka    set(CMAKE_BUILD_TYPE Debug CACHE STRING
13*437bfbebSnyanmisaka        "Choose the type of build, options are: None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel."
14*437bfbebSnyanmisaka        FORCE)
15*437bfbebSnyanmisakaendif()
16*437bfbebSnyanmisakamessage(STATUS "cmake version ${CMAKE_VERSION}")
17*437bfbebSnyanmisaka
18*437bfbebSnyanmisaka# Search packages for host system instead of packages for target system
19*437bfbebSnyanmisaka# in case of cross compilation these macro should be defined by toolchain file
20*437bfbebSnyanmisakaif(NOT COMMAND find_host_package)
21*437bfbebSnyanmisaka    macro(find_host_package)
22*437bfbebSnyanmisaka        find_package(${ARGN})
23*437bfbebSnyanmisaka    endmacro()
24*437bfbebSnyanmisakaendif()
25*437bfbebSnyanmisakaif(NOT COMMAND find_host_program)
26*437bfbebSnyanmisaka    macro(find_host_program)
27*437bfbebSnyanmisaka        find_program(${ARGN})
28*437bfbebSnyanmisaka    endmacro()
29*437bfbebSnyanmisakaendif()
30*437bfbebSnyanmisaka
31*437bfbebSnyanmisakaproject (rk_mpp)
32*437bfbebSnyanmisaka
33*437bfbebSnyanmisakacmake_minimum_required (VERSION 2.8.8) # OBJECT libraries require 2.8.8
34*437bfbebSnyanmisakainclude(CheckIncludeFiles)
35*437bfbebSnyanmisakainclude(CheckFunctionExists)
36*437bfbebSnyanmisakainclude(CheckSymbolExists)
37*437bfbebSnyanmisakainclude(CheckCXXCompilerFlag)
38*437bfbebSnyanmisaka
39*437bfbebSnyanmisaka# setup output library name
40*437bfbebSnyanmisaka# Linux   default name - rockchip_mpp and rockchip_vpu
41*437bfbebSnyanmisaka# Android default name - mpp and vpu
42*437bfbebSnyanmisaka# For historical reason libraries on Android is named as mpp and vpu. But for
43*437bfbebSnyanmisaka# better naming rule on Linux it should add vendor prefix.
44*437bfbebSnyanmisaka# So we use this ugly method to avoid massive maintain issue.
45*437bfbebSnyanmisakaif (NOT MPP_PROJECT_NAME)
46*437bfbebSnyanmisaka    set(MPP_PROJECT_NAME rockchip_mpp)
47*437bfbebSnyanmisakaendif()
48*437bfbebSnyanmisakaset(MPP_STATIC ${MPP_PROJECT_NAME}_static)
49*437bfbebSnyanmisakaset(MPP_SHARED ${MPP_PROJECT_NAME})
50*437bfbebSnyanmisaka
51*437bfbebSnyanmisakaif (NOT VPU_PROJECT_NAME)
52*437bfbebSnyanmisaka    set(VPU_PROJECT_NAME rockchip_vpu)
53*437bfbebSnyanmisakaendif()
54*437bfbebSnyanmisakaset(VPU_STATIC ${VPU_PROJECT_NAME}_static)
55*437bfbebSnyanmisakaset(VPU_SHARED ${VPU_PROJECT_NAME})
56*437bfbebSnyanmisaka
57*437bfbebSnyanmisaka# ----------------------------------------------------------------------------
58*437bfbebSnyanmisaka# set property to classify library kinds
59*437bfbebSnyanmisaka# ----------------------------------------------------------------------------
60*437bfbebSnyanmisakaset_property(GLOBAL PROPERTY USE_FOLDERS ON)
61*437bfbebSnyanmisakaset_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "CMakeTargets")
62*437bfbebSnyanmisaka# ----------------------------------------------------------------------------
63*437bfbebSnyanmisaka# enable test in this project
64*437bfbebSnyanmisaka# ----------------------------------------------------------------------------
65*437bfbebSnyanmisakaoption(BUILD_TEST "enable test binary building)" ON)
66*437bfbebSnyanmisaka# ----------------------------------------------------------------------------
67*437bfbebSnyanmisaka# export json compile commands
68*437bfbebSnyanmisaka# ----------------------------------------------------------------------------
69*437bfbebSnyanmisakaset(CMAKE_EXPORT_COMPILE_COMMANDS true)
70*437bfbebSnyanmisaka
71*437bfbebSnyanmisaka# ----------------------------------------------------------------------------
72*437bfbebSnyanmisaka# System architecture detection
73*437bfbebSnyanmisaka# ----------------------------------------------------------------------------
74*437bfbebSnyanmisakastring(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" SYSPROC)
75*437bfbebSnyanmisakaset(X86_ALIASES x86 i386 i686 x86_64 amd64)
76*437bfbebSnyanmisakalist(FIND X86_ALIASES "${SYSPROC}" X86MATCH)
77*437bfbebSnyanmisakaif("${CMAKE_C_COMPILER}" MATCHES "-buildroot-[^/]+$")
78*437bfbebSnyanmisaka    message(STATUS "Detected Buildroot toolchain")
79*437bfbebSnyanmisaka    # Use buildroot toolchain's default architecture settings
80*437bfbebSnyanmisakaelseif("${SYSPROC}" STREQUAL "" OR X86MATCH GREATER "-1")
81*437bfbebSnyanmisaka    message(STATUS "Detected x86 system processor")
82*437bfbebSnyanmisaka    set(X86 true)
83*437bfbebSnyanmisaka    add_definitions(-DARCH_X86=1)
84*437bfbebSnyanmisaka    if("${CMAKE_SIZEOF_VOID_P}" MATCHES 8)
85*437bfbebSnyanmisaka        set(X64 true)
86*437bfbebSnyanmisaka        add_definitions(-DARCH_X64=1)
87*437bfbebSnyanmisaka        message(STATUS "Define X86_64 to 1")
88*437bfbebSnyanmisaka    endif()
89*437bfbebSnyanmisakaelseif(${SYSPROC} STREQUAL "armv6l")
90*437bfbebSnyanmisaka    message(STATUS "Detected ARMv6 system processor")
91*437bfbebSnyanmisaka    set(ARM true)
92*437bfbebSnyanmisaka    set(ARMEABI_V6 true)
93*437bfbebSnyanmisakaelseif(${SYSPROC} STREQUAL "armv7-a")
94*437bfbebSnyanmisaka    message(STATUS "Detected ARMv7 system processor")
95*437bfbebSnyanmisaka    set(ARM true)
96*437bfbebSnyanmisaka    set(ARMEABI_V7A true)
97*437bfbebSnyanmisakaelseif(${SYSPROC} STREQUAL "armv7-a_hardfp" OR ${SYSPROC} STREQUAL "armv7l")
98*437bfbebSnyanmisaka    message(STATUS "Detected ARMv7 system processor")
99*437bfbebSnyanmisaka    set(ARM true)
100*437bfbebSnyanmisaka    set(ARMEABI_V7A_HARDFP true)
101*437bfbebSnyanmisakaelseif(${SYSPROC} STREQUAL "aarch64" OR ${SYSPROC} STREQUAL "armv8-a")
102*437bfbebSnyanmisaka    message(STATUS "Detected ARMv8 system processor")
103*437bfbebSnyanmisaka    set(ARM true)
104*437bfbebSnyanmisaka    set(ARMEABI_V8 true)
105*437bfbebSnyanmisakaelse()
106*437bfbebSnyanmisaka    message(STATUS "CMAKE_SYSTEM_PROCESSOR value `${CMAKE_SYSTEM_PROCESSOR}` is unknown")
107*437bfbebSnyanmisaka    message(STATUS "Please add this value near ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE}")
108*437bfbebSnyanmisakaendif()
109*437bfbebSnyanmisaka
110*437bfbebSnyanmisakaif(UNIX)
111*437bfbebSnyanmisaka    SET(PLATFORM_LIBS pthread)
112*437bfbebSnyanmisaka    if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
113*437bfbebSnyanmisaka        SET(PLATFORM_LIBS ${PLATFORM_LIBS} rt)
114*437bfbebSnyanmisaka    endif()
115*437bfbebSnyanmisakaendif(UNIX)
116*437bfbebSnyanmisaka
117*437bfbebSnyanmisaka# ----------------------------------------------------------------------------
118*437bfbebSnyanmisaka# Compiler detection
119*437bfbebSnyanmisaka# ----------------------------------------------------------------------------
120*437bfbebSnyanmisakaif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
121*437bfbebSnyanmisaka    set(CLANG true)
122*437bfbebSnyanmisakaendif()
123*437bfbebSnyanmisakaif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
124*437bfbebSnyanmisaka    set(GCC true)
125*437bfbebSnyanmisakaendif()
126*437bfbebSnyanmisaka
127*437bfbebSnyanmisakaif(GCC)
128*437bfbebSnyanmisaka    if(ARM)
129*437bfbebSnyanmisaka        if(ARMEABI_V6)
130*437bfbebSnyanmisaka            add_definitions(-march=armv6 -mfloat-abi=hard -mfpu=vfp)
131*437bfbebSnyanmisaka        elseif(ARMEABI_V7A)
132*437bfbebSnyanmisaka            add_definitions(-march=armv7-a -mfloat-abi=softfp -mfpu=neon)
133*437bfbebSnyanmisaka        elseif(ARMEABI_V7A_HARDFP)
134*437bfbebSnyanmisaka            add_definitions(-march=armv7-a -mfloat-abi=hard -mfpu=neon)
135*437bfbebSnyanmisaka        elseif(ARMEABI_V8)
136*437bfbebSnyanmisaka            add_definitions(-march=armv8-a)
137*437bfbebSnyanmisaka        endif()
138*437bfbebSnyanmisaka    else()
139*437bfbebSnyanmisaka        if(X86 AND NOT X64)
140*437bfbebSnyanmisaka            add_definitions(-march=i686)
141*437bfbebSnyanmisaka        endif()
142*437bfbebSnyanmisaka    endif()
143*437bfbebSnyanmisaka
144*437bfbebSnyanmisaka    if(${CMAKE_BUILD_TYPE} MATCHES "Release")
145*437bfbebSnyanmisaka        # remove -g option for high version ndk
146*437bfbebSnyanmisaka        string(REGEX REPLACE "-g[^ ]*" "" TMP "${CMAKE_C_FLAGS}")
147*437bfbebSnyanmisaka        string(REGEX REPLACE "[ ]+" " " CMAKE_C_FLAGS "${TMP}")
148*437bfbebSnyanmisaka        string(REGEX REPLACE "-g[^ ]*" "" TMP "${CMAKE_CXX_FLAGS}")
149*437bfbebSnyanmisaka        string(REGEX REPLACE "[ ]+" " " CMAKE_CXX_FLAGS "${TMP}")
150*437bfbebSnyanmisaka
151*437bfbebSnyanmisaka        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3 -DNDEBUG")
152*437bfbebSnyanmisaka        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -DNDEBUG")
153*437bfbebSnyanmisaka    else()
154*437bfbebSnyanmisaka        add_definitions(-g)
155*437bfbebSnyanmisaka    endif()
156*437bfbebSnyanmisaka
157*437bfbebSnyanmisaka    # disable multichar warning
158*437bfbebSnyanmisaka    add_definitions(-Wno-multichar)
159*437bfbebSnyanmisaka    # add PIC flag
160*437bfbebSnyanmisaka    add_definitions(-fPIC)
161*437bfbebSnyanmisaka    # disable exception for C++
162*437bfbebSnyanmisaka    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions -fno-rtti")
163*437bfbebSnyanmisaka    # save intermediate files
164*437bfbebSnyanmisaka    # add_definitions(-save-temps)
165*437bfbebSnyanmisaka
166*437bfbebSnyanmisaka    # check library mvec
167*437bfbebSnyanmisaka    find_library(LMVEC_LIB mvec)
168*437bfbebSnyanmisaka    if(LMVEC_LIB)
169*437bfbebSnyanmisaka        set(LIBM mvec m)
170*437bfbebSnyanmisaka        set(MPP_PKGCONFIG_DEPENDENT_LIBS "-lmvec -lm")
171*437bfbebSnyanmisaka    else()
172*437bfbebSnyanmisaka        set(LIBM m)
173*437bfbebSnyanmisaka        set(MPP_PKGCONFIG_DEPENDENT_LIBS "-lm")
174*437bfbebSnyanmisaka        add_definitions(-fno-builtin-pow)
175*437bfbebSnyanmisaka    endif()
176*437bfbebSnyanmisaka
177*437bfbebSnyanmisaka    # for libary linking
178*437bfbebSnyanmisaka    set(BEGIN_WHOLE_ARCHIVE -Wl,--whole-archive)
179*437bfbebSnyanmisaka    set(END_WHOLE_ARCHIVE -Wl,--no-whole-archive)
180*437bfbebSnyanmisaka
181*437bfbebSnyanmisaka    option(ASAN_CHECK "enable Address Sanitizer (Asan)" OFF)
182*437bfbebSnyanmisaka    if(ASAN_CHECK)
183*437bfbebSnyanmisaka        add_definitions(-fsanitize=address -static-libasan -g)
184*437bfbebSnyanmisaka        set(ASAN_LIB libasan.a dl rt m)
185*437bfbebSnyanmisaka        set(ASAN_BIN dl rt m)
186*437bfbebSnyanmisaka    endif(ASAN_CHECK)
187*437bfbebSnyanmisakaendif(GCC)
188*437bfbebSnyanmisaka
189*437bfbebSnyanmisaka# ----------------------------------------------------------------------------
190*437bfbebSnyanmisaka# Create git version information
191*437bfbebSnyanmisaka# ----------------------------------------------------------------------------
192*437bfbebSnyanmisakaset(VERSION_CNT         0)
193*437bfbebSnyanmisakaset(VERSION_MAX_CNT     9)
194*437bfbebSnyanmisakaset(VERSION_INFO        "\"unknown mpp version for missing VCS info\"")
195*437bfbebSnyanmisakaforeach (CNT RANGE ${VERSION_MAX_CNT})
196*437bfbebSnyanmisaka    set(VERSION_HISTORY_${CNT} "NULL")
197*437bfbebSnyanmisakaendforeach(CNT)
198*437bfbebSnyanmisaka
199*437bfbebSnyanmisakaif(EXISTS "${PROJECT_SOURCE_DIR}/.git")
200*437bfbebSnyanmisaka    find_host_package(Git)
201*437bfbebSnyanmisaka    if(GIT_FOUND)
202*437bfbebSnyanmisaka        # get current version info
203*437bfbebSnyanmisaka        set(GIT_LOG_FORMAT "%h author: %<|(30)%an %cd %s")
204*437bfbebSnyanmisaka
205*437bfbebSnyanmisaka        execute_process(COMMAND ${GIT_EXECUTABLE} log -1 --oneline --date=short --pretty=format:${GIT_LOG_FORMAT}
206*437bfbebSnyanmisaka            WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
207*437bfbebSnyanmisaka            OUTPUT_VARIABLE EXEC_OUT
208*437bfbebSnyanmisaka            ERROR_VARIABLE EXEC_ERROR
209*437bfbebSnyanmisaka            RESULT_VARIABLE EXEC_RET
210*437bfbebSnyanmisaka            OUTPUT_STRIP_TRAILING_WHITESPACE
211*437bfbebSnyanmisaka            ERROR_STRIP_TRAILING_WHITESPACE)
212*437bfbebSnyanmisaka
213*437bfbebSnyanmisaka        if (NOT EXEC_RET)
214*437bfbebSnyanmisaka            set(VERSION_INFO ${EXEC_OUT})
215*437bfbebSnyanmisaka            message(STATUS "current version:")
216*437bfbebSnyanmisaka            message(STATUS "${VERSION_INFO}")
217*437bfbebSnyanmisaka            string(REPLACE "\"" "\\\"" VERSION_INFO ${VERSION_INFO})
218*437bfbebSnyanmisaka            set(VERSION_INFO "\"${VERSION_INFO}\"")
219*437bfbebSnyanmisaka        else()
220*437bfbebSnyanmisaka            message(STATUS "git ret ${EXEC_RET}")
221*437bfbebSnyanmisaka            message(STATUS "${EXEC_ERROR}")
222*437bfbebSnyanmisaka        endif()
223*437bfbebSnyanmisaka
224*437bfbebSnyanmisaka        set(GIT_LOG_FORMAT "%h author: %<|(30)%an %cd %s %d")
225*437bfbebSnyanmisaka
226*437bfbebSnyanmisaka        # get history version information
227*437bfbebSnyanmisaka        # setup logs
228*437bfbebSnyanmisaka        message(STATUS "git version history:")
229*437bfbebSnyanmisaka        foreach (CNT RANGE ${VERSION_MAX_CNT})
230*437bfbebSnyanmisaka            execute_process(COMMAND ${GIT_EXECUTABLE} log HEAD~${CNT} -1 --oneline --date=short --pretty=format:${GIT_LOG_FORMAT}
231*437bfbebSnyanmisaka                WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
232*437bfbebSnyanmisaka                OUTPUT_VARIABLE EXEC_OUT
233*437bfbebSnyanmisaka                ERROR_VARIABLE EXEC_ERROR
234*437bfbebSnyanmisaka                RESULT_VARIABLE EXEC_RET
235*437bfbebSnyanmisaka                OUTPUT_STRIP_TRAILING_WHITESPACE
236*437bfbebSnyanmisaka                ERROR_STRIP_TRAILING_WHITESPACE)
237*437bfbebSnyanmisaka
238*437bfbebSnyanmisaka            if (NOT EXEC_RET)
239*437bfbebSnyanmisaka                set(VERSION_LOG ${EXEC_OUT})
240*437bfbebSnyanmisaka                string(REPLACE "\"" "\\\"" VERSION_LOG ${VERSION_LOG})
241*437bfbebSnyanmisaka                message(STATUS ${VERSION_LOG})
242*437bfbebSnyanmisaka                set(VERSION_HISTORY_${CNT} "\"${VERSION_LOG}\"")
243*437bfbebSnyanmisaka                math(EXPR VERSION_CNT "${VERSION_CNT}+1")
244*437bfbebSnyanmisaka            endif()
245*437bfbebSnyanmisaka        endforeach(CNT)
246*437bfbebSnyanmisaka        message(STATUS "total ${VERSION_CNT} git version recorded")
247*437bfbebSnyanmisaka    endif()
248*437bfbebSnyanmisaka
249*437bfbebSnyanmisaka    # add git hooks
250*437bfbebSnyanmisaka    if (EXISTS "${PROJECT_SOURCE_DIR}/tools/hooks/")
251*437bfbebSnyanmisaka        set(GIT_HOOK_SRC "${PROJECT_SOURCE_DIR}/tools/hooks/")
252*437bfbebSnyanmisaka        if(EXISTS "${PROJECT_SOURCE_DIR}/.git/hooks")
253*437bfbebSnyanmisaka            set(GIT_HOOK_DST "${PROJECT_SOURCE_DIR}/.git/hooks/")
254*437bfbebSnyanmisaka            file(COPY ${GIT_HOOK_SRC} DESTINATION ${GIT_HOOK_DST})
255*437bfbebSnyanmisaka            message(STATUS "Install git hooks done")
256*437bfbebSnyanmisaka        endif(EXISTS "${PROJECT_SOURCE_DIR}/.git/hooks")
257*437bfbebSnyanmisaka    endif(EXISTS "${PROJECT_SOURCE_DIR}/tools/hooks/")
258*437bfbebSnyanmisakaendif(EXISTS "${PROJECT_SOURCE_DIR}/.git")
259*437bfbebSnyanmisaka
260*437bfbebSnyanmisakaconfigure_file(
261*437bfbebSnyanmisaka    "${PROJECT_SOURCE_DIR}/build/cmake/version.in"
262*437bfbebSnyanmisaka    "${PROJECT_SOURCE_DIR}/mpp/version.h"
263*437bfbebSnyanmisaka)
264*437bfbebSnyanmisaka
265*437bfbebSnyanmisaka# ----------------------------------------------------------------------------
266*437bfbebSnyanmisaka# Build options
267*437bfbebSnyanmisaka# ----------------------------------------------------------------------------
268*437bfbebSnyanmisakafind_package(PkgConfig)
269*437bfbebSnyanmisakaINCLUDE(GNUInstallDirs)
270*437bfbebSnyanmisakapkg_search_module(PTHREAD pthread)
271*437bfbebSnyanmisaka
272*437bfbebSnyanmisaka# ----------------------------------------------------------------------------
273*437bfbebSnyanmisaka# Set Warning as Error
274*437bfbebSnyanmisaka# ----------------------------------------------------------------------------
275*437bfbebSnyanmisakaoption(WARNINGS_AS_ERRORS "Stop compiles on first warning" OFF)
276*437bfbebSnyanmisakaif(WARNINGS_AS_ERRORS)
277*437bfbebSnyanmisaka    if(GCC)
278*437bfbebSnyanmisaka        add_definitions(-Werror)
279*437bfbebSnyanmisaka    elseif(MSVC)
280*437bfbebSnyanmisaka        add_definitions(/WX)
281*437bfbebSnyanmisaka    endif()
282*437bfbebSnyanmisakaendif(WARNINGS_AS_ERRORS)
283*437bfbebSnyanmisaka
284*437bfbebSnyanmisaka# ----------------------------------------------------------------------------
285*437bfbebSnyanmisaka# look for stdint.h
286*437bfbebSnyanmisaka# ----------------------------------------------------------------------------
287*437bfbebSnyanmisakaif(MSVC)
288*437bfbebSnyanmisaka    check_include_files(stdint.h HAVE_STDINT_H)
289*437bfbebSnyanmisaka    if(NOT HAVE_STDINT_H)
290*437bfbebSnyanmisaka        include_directories(osal/windows)
291*437bfbebSnyanmisaka    endif(NOT HAVE_STDINT_H)
292*437bfbebSnyanmisakaendif(MSVC)
293*437bfbebSnyanmisaka
294*437bfbebSnyanmisaka# ----------------------------------------------------------------------------
295*437bfbebSnyanmisaka# Share library option
296*437bfbebSnyanmisaka# ----------------------------------------------------------------------------
297*437bfbebSnyanmisakaoption(BUILD_SHARED_LIBS "Build shared library" ON)
298*437bfbebSnyanmisaka
299*437bfbebSnyanmisaka# ----------------------------------------------------------------------------
300*437bfbebSnyanmisaka# scan all LOG_TAG for log information and generate module header file
301*437bfbebSnyanmisaka# ----------------------------------------------------------------------------
302*437bfbebSnyanmisakaset( module_list "" )
303*437bfbebSnyanmisakafile ( GLOB_RECURSE ALL_SRC . *.c;*.cpp )
304*437bfbebSnyanmisakaforeach( files ${ALL_SRC} )
305*437bfbebSnyanmisaka    file( STRINGS ${files} module_tag_line REGEX "MODULE_TAG( )+\".+\"" )
306*437bfbebSnyanmisaka    if(module_tag_line)
307*437bfbebSnyanmisaka        string( REGEX REPLACE "^(.)* MODULE_TAG( )+\"(.*)\"" \\3 module_tag ${module_tag_line} )
308*437bfbebSnyanmisaka        list( APPEND module_list ${module_tag} )
309*437bfbebSnyanmisaka    endif()
310*437bfbebSnyanmisakaendforeach()
311*437bfbebSnyanmisakalist( SORT module_list )
312*437bfbebSnyanmisakalist( LENGTH module_list module_size )
313*437bfbebSnyanmisaka#message(STATUS "module_list: ${module_list}")
314*437bfbebSnyanmisaka#message(STATUS "module_size: ${module_size}")
315*437bfbebSnyanmisaka
316*437bfbebSnyanmisaka# ----------------------------------------------------------------------------
317*437bfbebSnyanmisaka#  Start module definition
318*437bfbebSnyanmisaka# ----------------------------------------------------------------------------
319*437bfbebSnyanmisaka# project overall include file
320*437bfbebSnyanmisakainclude_directories(inc)
321*437bfbebSnyanmisaka# small utile functions for test case
322*437bfbebSnyanmisakainclude_directories(utils)
323*437bfbebSnyanmisaka
324*437bfbebSnyanmisaka# ----------------------------------------------------------------------------
325*437bfbebSnyanmisaka#  osal library
326*437bfbebSnyanmisaka# ----------------------------------------------------------------------------
327*437bfbebSnyanmisaka# Operation System Abstract Layer (OSAL) include
328*437bfbebSnyanmisakainclude_directories(osal/inc)
329*437bfbebSnyanmisaka# OSAL is needed on all platform, do not need option
330*437bfbebSnyanmisakaadd_subdirectory(osal)
331*437bfbebSnyanmisaka
332*437bfbebSnyanmisaka# Media Process Platform include
333*437bfbebSnyanmisakainclude_directories(mpp/inc)
334*437bfbebSnyanmisakainclude_directories(mpp/base/inc)
335*437bfbebSnyanmisaka# Kernel Media Process Platform include
336*437bfbebSnyanmisakainclude_directories(kmpp/inc)
337*437bfbebSnyanmisakainclude_directories(kmpp/base/inc)
338*437bfbebSnyanmisaka
339*437bfbebSnyanmisaka# ----------------------------------------------------------------------------
340*437bfbebSnyanmisaka#  utils for test case
341*437bfbebSnyanmisaka# ----------------------------------------------------------------------------
342*437bfbebSnyanmisakaadd_subdirectory(utils)
343*437bfbebSnyanmisaka
344*437bfbebSnyanmisaka# ----------------------------------------------------------------------------
345*437bfbebSnyanmisaka#  Kernel Media Process Platform library
346*437bfbebSnyanmisaka# ----------------------------------------------------------------------------
347*437bfbebSnyanmisakaadd_subdirectory(kmpp)
348*437bfbebSnyanmisaka
349*437bfbebSnyanmisaka# ----------------------------------------------------------------------------
350*437bfbebSnyanmisaka#  Media Process Platform library
351*437bfbebSnyanmisaka# ----------------------------------------------------------------------------
352*437bfbebSnyanmisakaadd_subdirectory(mpp)
353*437bfbebSnyanmisaka
354*437bfbebSnyanmisaka# ----------------------------------------------------------------------------
355*437bfbebSnyanmisaka#  test / demo
356*437bfbebSnyanmisaka# ----------------------------------------------------------------------------
357*437bfbebSnyanmisakaadd_subdirectory(test)
358*437bfbebSnyanmisaka
359*437bfbebSnyanmisaka# ----------------------------------------------------------------------------
360*437bfbebSnyanmisaka#  install headers
361*437bfbebSnyanmisaka# ----------------------------------------------------------------------------
362*437bfbebSnyanmisakainstall(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/inc/
363*437bfbebSnyanmisaka        DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/rockchip"
364*437bfbebSnyanmisaka        FILES_MATCHING PATTERN "*.h"
365*437bfbebSnyanmisaka        )
366*437bfbebSnyanmisaka
367*437bfbebSnyanmisaka# ----------------------------------------------------------------------------
368*437bfbebSnyanmisaka#  pkgconfig
369*437bfbebSnyanmisaka# ----------------------------------------------------------------------------
370*437bfbebSnyanmisakaCONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/pkgconfig/rockchip_mpp.pc.cmake"
371*437bfbebSnyanmisaka                "${CMAKE_BINARY_DIR}/rockchip_mpp.pc" @ONLY)
372*437bfbebSnyanmisakaCONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/pkgconfig/rockchip_vpu.pc.cmake"
373*437bfbebSnyanmisaka                "${CMAKE_BINARY_DIR}/rockchip_vpu.pc" @ONLY)
374*437bfbebSnyanmisakainstall(FILES "${CMAKE_BINARY_DIR}/rockchip_mpp.pc"
375*437bfbebSnyanmisaka        DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig/")
376*437bfbebSnyanmisakainstall(FILES "${CMAKE_BINARY_DIR}/rockchip_vpu.pc"
377*437bfbebSnyanmisaka        DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig/")
378