aom_install.cmake (5175B)
1 # 2 # Copyright (c) 2018, Alliance for Open Media. All rights reserved. 3 # 4 # This source code is subject to the terms of the BSD 2 Clause License and the 5 # Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License was 6 # not distributed with this source code in the LICENSE file, you can obtain it 7 # at www.aomedia.org/license/software. If the Alliance for Open Media Patent 8 # License 1.0 was not distributed with this source code in the PATENTS file, you 9 # can obtain it at www.aomedia.org/license/patent. 10 # 11 list(APPEND AOM_INSTALL_INCS "${AOM_ROOT}/aom/aom.h" 12 "${AOM_ROOT}/aom/aom_codec.h" "${AOM_ROOT}/aom/aom_frame_buffer.h" 13 "${AOM_ROOT}/aom/aom_image.h" "${AOM_ROOT}/aom/aom_integer.h") 14 15 if(CONFIG_AV1_DECODER) 16 list(APPEND AOM_INSTALL_INCS "${AOM_ROOT}/aom/aom_decoder.h" 17 "${AOM_ROOT}/aom/aomdx.h") 18 endif() 19 20 if(CONFIG_AV1_ENCODER) 21 list(APPEND AOM_INSTALL_INCS "${AOM_ROOT}/aom/aomcx.h" 22 "${AOM_ROOT}/aom/aom_encoder.h" 23 "${AOM_ROOT}/aom/aom_external_partition.h") 24 endif() 25 26 # Generate aom.pc and setup dependencies to ensure it is created when necessary. 27 # Note: aom.pc generation uses GNUInstallDirs: 28 # https://cmake.org/cmake/help/latest/module/GNUInstallDirs.html 29 macro(setup_aom_install_targets) 30 if(NOT XCODE) 31 include("GNUInstallDirs") 32 set(AOM_PKG_CONFIG_FILE "${AOM_CONFIG_DIR}/aom.pc") 33 34 # Create a library target for creating aom.pc. 35 create_no_op_source_file(aom_pc c AOM_PKG_CONFIG_SOURCES) 36 add_library(aom_pc ${AOM_PKG_CONFIG_SOURCES}) 37 38 # Setup a rule to generate aom.pc. 39 add_custom_command( 40 OUTPUT "${AOM_PKG_CONFIG_FILE}" 41 COMMAND ${CMAKE_COMMAND} ARGS 42 -DAOM_CONFIG_DIR=${AOM_CONFIG_DIR} 43 -DAOM_ROOT=${AOM_ROOT} 44 -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} 45 -DCMAKE_INSTALL_BINDIR=${CMAKE_INSTALL_BINDIR} 46 -DCMAKE_INSTALL_INCLUDEDIR=${CMAKE_INSTALL_INCLUDEDIR} 47 -DCMAKE_INSTALL_LIBDIR=${CMAKE_INSTALL_LIBDIR} 48 -DCMAKE_PROJECT_NAME=${CMAKE_PROJECT_NAME} 49 -DCMAKE_THREAD_LIBS_INIT=${CMAKE_THREAD_LIBS_INIT} 50 -DCONFIG_MULTITHREAD=${CONFIG_MULTITHREAD} 51 -DCONFIG_TUNE_VMAF=${CONFIG_TUNE_VMAF} 52 -DCONFIG_TUNE_BUTTERAUGLI=${CONFIG_TUNE_BUTTERAUGLI} 53 -DCONFIG_SALIENCY_MAP=${CONFIG_SALIENCY_MAP} 54 -DCONFIG_TFLITE=${CONFIG_TFLITE} 55 -P 56 "${AOM_ROOT}/build/cmake/pkg_config.cmake" 57 COMMENT "Writing aom.pc" 58 VERBATIM) 59 60 # Explicitly add a dependency on the pkg-config file to ensure it's built. 61 get_property(aom_pc_sources TARGET aom_pc PROPERTY SOURCES) 62 set_source_files_properties(${aom_pc_sources} OBJECT_DEPENDS 63 "${AOM_PKG_CONFIG_FILE}") 64 65 # Our pkg-config file carries version information: add a dependency on the 66 # version rule. 67 add_dependencies(aom_pc aom_version) 68 69 if(CONFIG_AV1_DECODER) 70 if(ENABLE_EXAMPLES) 71 list(APPEND AOM_INSTALL_BINS aomdec) 72 endif() 73 endif() 74 75 if(CONFIG_AV1_ENCODER) 76 if(ENABLE_EXAMPLES) 77 list(APPEND AOM_INSTALL_BINS aomenc) 78 endif() 79 endif() 80 81 if(BUILD_SHARED_LIBS) 82 set(AOM_INSTALL_LIBS aom aom_static) 83 else() 84 set(AOM_INSTALL_LIBS aom) 85 endif() 86 87 set(AOM_GENERATED_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated") 88 set(AOM_VERSION_CONFIG 89 "${AOM_GENERATED_DIR}/${PROJECT_NAME}ConfigVersion.cmake") 90 set(AOM_PROJECT_CONFIG "${AOM_GENERATED_DIR}/${PROJECT_NAME}Config.cmake") 91 set(AOM_VERSION ${PROJECT_VERSION}) 92 93 include(CMakePackageConfigHelpers) 94 write_basic_package_version_file("${AOM_VERSION_CONFIG}" 95 VERSION ${AOM_VERSION} 96 COMPATIBILITY SameMajorVersion) 97 # AOM_TARGETS_EXPORT_NAME is used by config.cmake.in. 98 set(AOM_TARGETS_EXPORT_NAME "${PROJECT_NAME}Targets") 99 set(AOM_CONFIG_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}") 100 configure_package_config_file( 101 "${CMAKE_CURRENT_SOURCE_DIR}/build/cmake/config.cmake.in" 102 "${AOM_PROJECT_CONFIG}" INSTALL_DESTINATION "${AOM_CONFIG_INSTALL_DIR}" 103 PATH_VARS CMAKE_INSTALL_INCLUDEDIR) 104 105 # Install cmake config files 106 install(FILES "${AOM_PROJECT_CONFIG}" "${AOM_VERSION_CONFIG}" 107 DESTINATION "${AOM_CONFIG_INSTALL_DIR}") 108 109 install(EXPORT "${AOM_TARGETS_EXPORT_NAME}" 110 NAMESPACE "${PROJECT_NAME}::" 111 DESTINATION "${AOM_CONFIG_INSTALL_DIR}") 112 113 # Setup the install rules. install() will automatically prepend 114 # CMAKE_INSTALL_PREFIX to relative paths 115 install(FILES ${AOM_INSTALL_INCS} 116 DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/aom") 117 install(FILES "${AOM_PKG_CONFIG_FILE}" 118 DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") 119 install(TARGETS ${AOM_INSTALL_LIBS};${AOM_INSTALL_BINS} 120 EXPORT "${AOM_TARGETS_EXPORT_NAME}" 121 RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" 122 LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" 123 ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}") 124 endif() 125 endmacro()