xref: /aosp_15_r20/external/libopenapv/CMakeLists.txt (revision abb65b4b03b69e1d508d4d9a44dcf199df16e7c3)
1cmake_minimum_required (VERSION 3.12)
2
3# Set project version from git tag or version.txt file
4function(get_versions versionstring VERSION_MAJOR VERSION_MINOR VERSION_PATCH)
5    string(REGEX REPLACE "^([vV])([0-9]*)([.][0-9]*[.][0-9]*-?.*)$" "\\2" numbers ${versionstring} )
6    set(VERSION_MAJOR ${numbers} PARENT_SCOPE)
7    string(REGEX REPLACE "^([vV][0-9]*[.])([0-9]*)([.][0-9]*-?.*)$" "\\2" numbers ${versionstring} )
8    set(VERSION_MINOR ${numbers} PARENT_SCOPE)
9    string(REGEX REPLACE "^([vV][0-9]*[.][0-9]*[.])([0-9]*)(-?.*)$" "\\2" numbers ${versionstring} )
10    set(VERSION_PATCH ${numbers} PARENT_SCOPE)
11endfunction()
12
13execute_process(
14    COMMAND git describe --match "v[0-9]*.[0-9]*.[0-9]*" --abbrev=0 --tags
15    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
16    RESULT_VARIABLE RESULT
17    OUTPUT_VARIABLE OUTPUT)
18
19if(NOT RESULT EQUAL 0)
20  find_program(GIT_COMMAND "git")
21  if(GIT_COMMAND)
22    message(WARNING "There is no valid git repository in your working directory \"${CMAKE_SOURCE_DIR}\" .")
23  else()
24    message(WARNING "You have no git tool installed.")
25  endif()
26
27  if(NOT EXISTS "${CMAKE_SOURCE_DIR}/version.txt")
28    message(FATAL_ERROR
29        "version.txt file doesn't exist!\n"
30        "Since your working directory doesn't contain a git repository you must provide \"${CMAKE_SOURCE_DIR}/version.txt\" file containing a valid version string.\n"
31        "The version string provided to version.txt must match the following format:\n\tv[VERSION_MAJOR].[VERSION_MINOR].[VERSION_PATCH]\n"
32        "To get the information on version of the downloaded library please follow the link below:\n\t https://github.com/openapv/openapv"
33        )
34  endif()
35
36  message("Version string has been taken from version.txt file.")
37  file(STRINGS "version.txt" VERSION_STRING)
38
39else()
40  message("Version string has been taken from git tag.")
41  set(VERSION_STRING ${OUTPUT})
42  string(REGEX REPLACE "\n$" "" VERSION_STRING "${VERSION_STRING}")
43endif()
44
45if(NOT ${VERSION_STRING} MATCHES "^([vV])([0-9]*)([.][0-9]*[.][0-9]*-?.*)$")
46  message(FATAL_ERROR "Version string ${VERSION_STRING} doesn't match required format v[VERSION_MAJOR].[VERSION_MINOR].[VERSION_PATCH]")
47endif()
48
49get_versions(${VERSION_STRING} VERSION_MAJOR VERSION_MINOR VERSION_PATCH)
50if(VERSION_MAJOR STREQUAL ${VERSION_STRING})
51  message(FATAL_ERROR "Version string parsing error")
52endif()
53message("OAPV VERSION=${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
54
55# Check input arguments.
56option(OAPV_APP_STATIC_BUILD "oapv_app will be statically linked against static oapv library" ON)
57if(OAPV_APP_STATIC_BUILD)
58    add_definitions(-DOAPV_STATIC_DEFINE)
59endif(OAPV_APP_STATIC_BUILD)
60
61cmake_policy(SET CMP0048 NEW)
62set(CMAKE_C_STANDARD 99)
63
64# Maps to a solution file (OAPV.sln).
65project (OAPV VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH})
66set_property(GLOBAL PROPERTY USE_FOLDERS ON)
67
68# Set compiler flags and options.
69if( MSVC )
70elseif( UNIX OR MINGW )
71    if(NOT CMAKE_BUILD_TYPE)
72        set(CMAKE_BUILD_TYPE "Release")
73    endif()
74    message("CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}")
75
76    if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
77        set(OPT_LV "O0")
78        set(OPT_DBG "-g")
79    else()
80        set(OPT_LV "O3")
81        set(OPT_DBG "-DNDEBUG") # disable assert
82    endif()
83
84    #set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OPT_DBG} -${OPT_LV} -fomit-frame-pointer -Wall -Wno-unused-function -Wno-unused-but-set-variable -Wno-unused-variable -Wno-attributes -Werror -Wno-strict-overflow -Wno-unknown-pragmas -Wno-stringop-overflow -std=c99")
85    set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OPT_DBG} -${OPT_LV} -fomit-frame-pointer -Wall -Wno-unused-function -std=c99")
86    set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-pointer-sign -pthread -Wno-pointer-to-int-cast")
87    set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lm")
88endif()
89
90# Command to output information to the console
91message ("c Flags: " ${CMAKE_C_FLAGS})
92message ("linker Flags: " ${CMAKE_EXE_LINKER_FLAGS})
93
94# Sub-directories where more CMakeLists.txt exist
95add_subdirectory(src)
96add_subdirectory(app)
97
98# uninstall target
99if(NOT TARGET uninstall)
100  configure_file(
101    "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in"
102    "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
103    IMMEDIATE @ONLY)
104
105  add_custom_target(uninstall
106    COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
107endif()
108
109# Packaging
110include(InstallRequiredSystemLibraries)
111set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
112set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
113
114set(CPACK_PACKAGE_NAME "OpenAPV")
115set(CPACK_PACKAGE_VENDOR "OpenAPV")
116set(CPACK_PACKAGE_CONTACT "https://github.com/openapv/oapv")
117set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Open Advanced Professional Video Codec")
118set(CPACK_PACKAGE_VERSION "${PROJECT_VERSION}")
119set(CPACK_PACKAGE_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}")
120set(CPACK_PACKAGE_VERSION_MINOR "${PROJECT_VERSION_MINOR}")
121set(CPACK_PACKAGE_VERSION_PATCH "${PROJECT_VERSION_PATCH}")
122set(CPACK_PACKAGE_CHECKSUM MD5)
123
124set(CPACK_DEBIAN_PACKAGE_MAINTAINER "CPNCF")
125
126set(CPACK_GENERATOR "DEB")
127
128include(CPack)
129
130# Testing
131option(ENABLE_TESTS "Enable tests" ON)
132if (${ENABLE_TESTS})
133    enable_testing()
134endif()
135
136# Test - Check if encoder starts
137add_test(NAME Encoder_runs COMMAND ${CMAKE_CURRENT_BINARY_DIR}/bin/oapv_app_enc)
138
139# Test - Check if decoder starts
140add_test(NAME Decoder_runs COMMAND ${CMAKE_CURRENT_BINARY_DIR}/bin/oapv_app_dec)
141
142# Test - encode
143add_test(NAME encode COMMAND ${CMAKE_CURRENT_BINARY_DIR}/bin/oapv_app_enc -i ${CMAKE_CURRENT_SOURCE_DIR}/test/sequence/pattern1_yuv422p10le_320x240_25fps.y4m -o out.oapv)
144set_tests_properties(encode PROPERTIES FAIL_REGULAR_EXPRESSION "Encoded frame count               = 0")
145set_tests_properties(encode PROPERTIES PASS_REGULAR_EXPRESSION "Encoded frame count               = 125")
146
147# Test - decode
148add_test(NAME decode COMMAND ${CMAKE_CURRENT_BINARY_DIR}/bin/oapv_app_dec -i out.oapv)
149set_tests_properties(decode PROPERTIES FAIL_REGULAR_EXPRESSION "Decoded frame count               = 0")
150set_tests_properties(decode PROPERTIES PASS_REGULAR_EXPRESSION "Decoded frame count               = 125")
151
152