blob: f409892d2776c80e7f8d620aaf2a4be362fa64df [file] [log] [blame]
Johannb1c6ab62018-05-15 14:54:18 -07001#
2# Copyright (c) 2016, 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#
Tom Finegan03e80212017-03-02 18:32:52 -080011cmake_minimum_required(VERSION 3.5)
Tom Fineganfc1aac52017-05-03 11:24:37 -070012
Johannb1c6ab62018-05-15 14:54:18 -070013if(NOT EMSCRIPTEN)
14 if(NOT CMAKE_BUILD_TYPE)
15 set(CMAKE_BUILD_TYPE "Release"
16 CACHE "Build type: Debug, Release, RelWithDebInfo or MinSizeRel" STRING
17 FORCE)
18 endif()
19endif()
Tom Fineganfc1aac52017-05-03 11:24:37 -070020
Tom Fineganfc6f2362016-10-24 10:39:41 -070021project(AOM C CXX)
22
23set(AOM_ROOT "${CMAKE_CURRENT_SOURCE_DIR}")
Tom Finegan973d4d52016-10-26 11:42:42 -070024set(AOM_CONFIG_DIR "${CMAKE_CURRENT_BINARY_DIR}")
Tom Finegan6e9d0c12016-10-27 11:57:06 -070025
Johannb1c6ab62018-05-15 14:54:18 -070026if("${AOM_ROOT}" STREQUAL "${AOM_CONFIG_DIR}")
Tom Fineganf77394f2017-04-26 11:47:59 -070027 message(FATAL_ERROR
Johannb1c6ab62018-05-15 14:54:18 -070028 "Building from within the aom source tree is not supported.\n"
29 "Hint: Run these commands\n" "$ rm -rf CMakeCache.txt CMakeFiles\n"
30 "$ mkdir -p ../aom_build\n" "$ cd ../aom_build\n"
31 "And re-run CMake from the aom_build directory.")
32endif()
Tom Fineganf77394f2017-04-26 11:47:59 -070033
Tom Finegan973d4d52016-10-26 11:42:42 -070034include("${AOM_ROOT}/build/cmake/aom_configure.cmake")
Tom Finegan85ac13e2017-02-22 15:09:20 -080035include("${AOM_ROOT}/aom_dsp/aom_dsp.cmake")
Tom Finegandd6d0572017-03-01 19:01:23 -080036include("${AOM_ROOT}/aom_mem/aom_mem.cmake")
Tom Finegan507e2e12017-03-01 19:58:19 -080037include("${AOM_ROOT}/aom_ports/aom_ports.cmake")
Tom Fineganf0d14442017-03-01 20:42:51 -080038include("${AOM_ROOT}/aom_scale/aom_scale.cmake")
Tom Fineganb7d02542017-03-01 21:14:28 -080039include("${AOM_ROOT}/aom_util/aom_util.cmake")
Tom Finegan44916e72017-02-27 14:12:31 -080040include("${AOM_ROOT}/av1/av1.cmake")
Tom Finegan12149142018-10-15 11:35:46 -070041include("${AOM_ROOT}/build/cmake/aom_install.cmake")
Tom Finegan8cc239b2017-08-07 12:28:12 -070042include("${AOM_ROOT}/build/cmake/sanitizers.cmake")
Tom Finegan84f2d792017-06-15 23:06:44 -070043include("${AOM_ROOT}/build/cmake/util.cmake")
Tom Finegan12149142018-10-15 11:35:46 -070044include("${AOM_ROOT}/test/test.cmake")
Tom Finegan85ac13e2017-02-22 15:09:20 -080045
Tom Finegan393b79b2018-05-02 10:49:56 -070046list(APPEND AOM_RTCD_SOURCES
Tom Finegan44702c82018-05-22 13:00:39 -070047 "${AOM_CONFIG_DIR}/config/aom_dsp_rtcd.h"
48 "${AOM_CONFIG_DIR}/config/aom_scale_rtcd.h"
49 "${AOM_CONFIG_DIR}/config/av1_rtcd.h"
Johannb1c6ab62018-05-15 14:54:18 -070050 "${AOM_ROOT}/aom_dsp/aom_dsp_rtcd_defs.pl"
51 "${AOM_ROOT}/aom_dsp/aom_dsp_rtcd.c"
52 "${AOM_ROOT}/aom_scale/aom_scale_rtcd.pl"
53 "${AOM_ROOT}/aom_scale/aom_scale_rtcd.c"
54 "${AOM_ROOT}/av1/common/av1_rtcd_defs.pl"
55 "${AOM_ROOT}/av1/common/av1_rtcd.c"
Tom Finegan229c4b52018-08-01 14:30:22 -070056 "${AOM_ROOT}/build/cmake/rtcd.pl")
Tom Finegana0c21f02017-02-01 11:11:09 -080057
Tom Finegan393b79b2018-05-02 10:49:56 -070058list(APPEND AOM_LIBWEBM_SOURCES
Johannb1c6ab62018-05-15 14:54:18 -070059 "${AOM_ROOT}/third_party/libwebm/common/hdr_util.cc"
60 "${AOM_ROOT}/third_party/libwebm/common/hdr_util.h"
61 "${AOM_ROOT}/third_party/libwebm/common/webmids.h"
62 "${AOM_ROOT}/third_party/libwebm/mkvmuxer/mkvmuxer.cc"
63 "${AOM_ROOT}/third_party/libwebm/mkvmuxer/mkvmuxer.h"
64 "${AOM_ROOT}/third_party/libwebm/mkvmuxer/mkvmuxertypes.h"
65 "${AOM_ROOT}/third_party/libwebm/mkvmuxer/mkvmuxerutil.cc"
66 "${AOM_ROOT}/third_party/libwebm/mkvmuxer/mkvmuxerutil.h"
67 "${AOM_ROOT}/third_party/libwebm/mkvmuxer/mkvwriter.cc"
68 "${AOM_ROOT}/third_party/libwebm/mkvmuxer/mkvwriter.h"
69 "${AOM_ROOT}/third_party/libwebm/mkvparser/mkvparser.cc"
70 "${AOM_ROOT}/third_party/libwebm/mkvparser/mkvparser.h"
71 "${AOM_ROOT}/third_party/libwebm/mkvparser/mkvreader.cc"
72 "${AOM_ROOT}/third_party/libwebm/mkvparser/mkvreader.h")
Tom Finegan957fe822016-11-09 10:37:27 -080073
Tom Finegan393b79b2018-05-02 10:49:56 -070074list(APPEND AOM_LIBYUV_SOURCES
Johannb1c6ab62018-05-15 14:54:18 -070075 "${AOM_ROOT}/third_party/libyuv/include/libyuv/basic_types.h"
76 "${AOM_ROOT}/third_party/libyuv/include/libyuv/convert.h"
77 "${AOM_ROOT}/third_party/libyuv/include/libyuv/convert_argb.h"
78 "${AOM_ROOT}/third_party/libyuv/include/libyuv/convert_from.h"
79 "${AOM_ROOT}/third_party/libyuv/include/libyuv/cpu_id.h"
80 "${AOM_ROOT}/third_party/libyuv/include/libyuv/planar_functions.h"
81 "${AOM_ROOT}/third_party/libyuv/include/libyuv/rotate.h"
82 "${AOM_ROOT}/third_party/libyuv/include/libyuv/row.h"
83 "${AOM_ROOT}/third_party/libyuv/include/libyuv/scale.h"
84 "${AOM_ROOT}/third_party/libyuv/include/libyuv/scale_row.h"
85 "${AOM_ROOT}/third_party/libyuv/source/cpu_id.cc"
86 "${AOM_ROOT}/third_party/libyuv/source/planar_functions.cc"
87 "${AOM_ROOT}/third_party/libyuv/source/row_any.cc"
88 "${AOM_ROOT}/third_party/libyuv/source/row_common.cc"
89 "${AOM_ROOT}/third_party/libyuv/source/row_gcc.cc"
90 "${AOM_ROOT}/third_party/libyuv/source/row_mips.cc"
91 "${AOM_ROOT}/third_party/libyuv/source/row_neon.cc"
92 "${AOM_ROOT}/third_party/libyuv/source/row_neon64.cc"
93 "${AOM_ROOT}/third_party/libyuv/source/row_win.cc"
94 "${AOM_ROOT}/third_party/libyuv/source/scale.cc"
95 "${AOM_ROOT}/third_party/libyuv/source/scale_any.cc"
96 "${AOM_ROOT}/third_party/libyuv/source/scale_common.cc"
97 "${AOM_ROOT}/third_party/libyuv/source/scale_gcc.cc"
98 "${AOM_ROOT}/third_party/libyuv/source/scale_mips.cc"
99 "${AOM_ROOT}/third_party/libyuv/source/scale_neon.cc"
100 "${AOM_ROOT}/third_party/libyuv/source/scale_neon64.cc"
101 "${AOM_ROOT}/third_party/libyuv/source/scale_win.cc")
Tom Finegan9cd97002016-11-09 10:37:44 -0800102
Tom Finegan393b79b2018-05-02 10:49:56 -0700103list(APPEND AOM_SOURCES
Tom Finegan60e653d2018-05-22 11:34:58 -0700104 "${AOM_CONFIG_DIR}/config/aom_config.c"
105 "${AOM_CONFIG_DIR}/config/aom_config.h"
Johannb1c6ab62018-05-15 14:54:18 -0700106 "${AOM_ROOT}/aom/aom.h"
107 "${AOM_ROOT}/aom/aom_codec.h"
108 "${AOM_ROOT}/aom/aom_decoder.h"
109 "${AOM_ROOT}/aom/aom_encoder.h"
110 "${AOM_ROOT}/aom/aom_frame_buffer.h"
111 "${AOM_ROOT}/aom/aom_image.h"
112 "${AOM_ROOT}/aom/aom_integer.h"
113 "${AOM_ROOT}/aom/aomcx.h"
114 "${AOM_ROOT}/aom/aomdx.h"
115 "${AOM_ROOT}/aom/internal/aom_codec_internal.h"
116 "${AOM_ROOT}/aom/src/aom_codec.c"
117 "${AOM_ROOT}/aom/src/aom_decoder.c"
118 "${AOM_ROOT}/aom/src/aom_encoder.c"
119 "${AOM_ROOT}/aom/src/aom_image.c"
120 "${AOM_ROOT}/aom/src/aom_integer.c")
Tom Fineganfc6f2362016-10-24 10:39:41 -0700121
Tom Finegan1d773ac2018-08-21 19:23:04 -0700122list(APPEND AOM_COMMON_APP_UTIL_SOURCES
123 "${AOM_ROOT}/common/args.c"
124 "${AOM_ROOT}/common/args.h"
125 "${AOM_ROOT}/common/av1_config.c"
126 "${AOM_ROOT}/common/av1_config.h"
127 "${AOM_ROOT}/common/md5_utils.c"
Tom Finegan77902132018-05-21 10:19:15 -0700128 "${AOM_ROOT}/common/md5_utils.h"
129 "${AOM_ROOT}/common/tools_common.c"
130 "${AOM_ROOT}/common/tools_common.h"
Tom Finegan1d773ac2018-08-21 19:23:04 -0700131 "${AOM_ROOT}/common/video_common.h"
elliottk6e2aac22018-08-31 11:08:44 -0700132 "${AOM_ROOT}/common/rawenc.c"
133 "${AOM_ROOT}/common/rawenc.h"
Tom Finegan1d773ac2018-08-21 19:23:04 -0700134 "${AOM_ROOT}/common/y4menc.c"
Tom Finegan77902132018-05-21 10:19:15 -0700135 "${AOM_ROOT}/common/y4menc.h")
Tom Finegan03f6ca72016-11-10 13:02:48 -0800136
Tom Finegan77902132018-05-21 10:19:15 -0700137list(APPEND AOM_DECODER_APP_UTIL_SOURCES "${AOM_ROOT}/common/ivfdec.c"
138 "${AOM_ROOT}/common/ivfdec.h" "${AOM_ROOT}/common/obudec.c"
139 "${AOM_ROOT}/common/obudec.h" "${AOM_ROOT}/common/video_reader.c"
140 "${AOM_ROOT}/common/video_reader.h")
Tom Finegan03f6ca72016-11-10 13:02:48 -0800141
Tom Finegan393b79b2018-05-02 10:49:56 -0700142list(APPEND AOM_ENCODER_APP_UTIL_SOURCES
Tom Finegan77902132018-05-21 10:19:15 -0700143 "${AOM_ROOT}/common/ivfenc.c"
144 "${AOM_ROOT}/common/ivfenc.h"
145 "${AOM_ROOT}/common/video_writer.c"
146 "${AOM_ROOT}/common/video_writer.h"
147 "${AOM_ROOT}/common/warnings.c"
148 "${AOM_ROOT}/common/warnings.h"
149 "${AOM_ROOT}/common/y4minput.c"
150 "${AOM_ROOT}/common/y4minput.h"
Johannb1c6ab62018-05-15 14:54:18 -0700151 "${AOM_ROOT}/examples/encoder_util.h"
152 "${AOM_ROOT}/examples/encoder_util.c")
Tom Finegana89fe0e2017-01-19 14:38:28 -0800153
Tom Finegan77902132018-05-21 10:19:15 -0700154list(APPEND AOM_ENCODER_STATS_SOURCES "${AOM_ROOT}/stats/aomstats.c"
155 "${AOM_ROOT}/stats/aomstats.h" "${AOM_ROOT}/stats/rate_hist.c"
156 "${AOM_ROOT}/stats/rate_hist.h")
Tom Finegana89fe0e2017-01-19 14:38:28 -0800157
Tom Finegan6791ad12018-05-24 14:30:59 -0700158list(APPEND AOM_VERSION_SOURCES "${AOM_CONFIG_DIR}/config/aom_version.h")
Tom Finegan872e5852017-08-29 15:15:58 -0700159
Tom Finegan77902132018-05-21 10:19:15 -0700160list(APPEND AOM_WEBM_DECODER_SOURCES "${AOM_ROOT}/common/webmdec.cc"
161 "${AOM_ROOT}/common/webmdec.h")
Tom Finegana89fe0e2017-01-19 14:38:28 -0800162
Tom Finegan77902132018-05-21 10:19:15 -0700163list(APPEND AOM_WEBM_ENCODER_SOURCES "${AOM_ROOT}/common/webmenc.cc"
164 "${AOM_ROOT}/common/webmenc.h")
Tom Finegana89fe0e2017-01-19 14:38:28 -0800165
Tom Finegan77902132018-05-21 10:19:15 -0700166include_directories(${AOM_ROOT} ${AOM_CONFIG_DIR} ${AOM_ROOT}/apps
167 ${AOM_ROOT}/common ${AOM_ROOT}/examples ${AOM_ROOT}/stats)
Tom Finegan03f6ca72016-11-10 13:02:48 -0800168
Tom Fineganfc6f2362016-10-24 10:39:41 -0700169# Targets
Tom Finegan872e5852017-08-29 15:15:58 -0700170add_library(aom_version ${AOM_VERSION_SOURCES})
171add_dummy_source_file_to_target(aom_version c)
Tom Finegan6791ad12018-05-24 14:30:59 -0700172add_custom_command(OUTPUT "${AOM_CONFIG_DIR}/config/aom_version.h"
Johannb1c6ab62018-05-15 14:54:18 -0700173 COMMAND ${CMAKE_COMMAND} ARGS
174 -DAOM_CONFIG_DIR=${AOM_CONFIG_DIR}
175 -DAOM_ROOT=${AOM_ROOT}
176 -DGIT_EXECUTABLE=${GIT_EXECUTABLE}
177 -DPERL_EXECUTABLE=${PERL_EXECUTABLE} -P
178 "${AOM_ROOT}/build/cmake/version.cmake"
179 COMMENT "Writing aom_version.h" VERBATIM)
Tom Finegan872e5852017-08-29 15:15:58 -0700180
181add_custom_target(aom_version_check
Johannb1c6ab62018-05-15 14:54:18 -0700182 COMMAND ${CMAKE_COMMAND} -DAOM_CONFIG_DIR=${AOM_CONFIG_DIR}
183 -DAOM_ROOT=${AOM_ROOT}
184 -DGIT_EXECUTABLE=${GIT_EXECUTABLE}
185 -DPERL_EXECUTABLE=${PERL_EXECUTABLE} -P
186 "${AOM_ROOT}/build/cmake/version.cmake"
187 COMMENT "Updating version info if necessary." VERBATIM)
Tom Finegan872e5852017-08-29 15:15:58 -0700188add_dependencies(aom_version aom_version_check)
189
Tom Fineganf0d14442017-03-01 20:42:51 -0800190# TODO(tomfinegan): Move rtcd target setup where it belongs for each rtcd
191# source.
Tom Finegana0c21f02017-02-01 11:11:09 -0800192add_rtcd_build_step("${AOM_ROOT}/aom_dsp/aom_dsp_rtcd_defs.pl"
Tom Finegan44702c82018-05-22 13:00:39 -0700193 "${AOM_CONFIG_DIR}/config/aom_dsp_rtcd.h"
Johannb1c6ab62018-05-15 14:54:18 -0700194 "${AOM_ROOT}/aom_dsp/aom_dsp_rtcd.c" "aom_dsp_rtcd")
Tom Finegana0c21f02017-02-01 11:11:09 -0800195add_rtcd_build_step("${AOM_ROOT}/aom_scale/aom_scale_rtcd.pl"
Tom Finegan44702c82018-05-22 13:00:39 -0700196 "${AOM_CONFIG_DIR}/config/aom_scale_rtcd.h"
Johannb1c6ab62018-05-15 14:54:18 -0700197 "${AOM_ROOT}/aom_scale/aom_scale_rtcd.c" "aom_scale_rtcd")
Tom Finegana0c21f02017-02-01 11:11:09 -0800198add_rtcd_build_step("${AOM_ROOT}/av1/common/av1_rtcd_defs.pl"
Tom Finegan44702c82018-05-22 13:00:39 -0700199 "${AOM_CONFIG_DIR}/config/av1_rtcd.h"
Johannb1c6ab62018-05-15 14:54:18 -0700200 "${AOM_ROOT}/av1/common/av1_rtcd.c" "av1_rtcd")
Tom Finegan85ac13e2017-02-22 15:09:20 -0800201
Tom Finegana0c21f02017-02-01 11:11:09 -0800202add_library(aom_rtcd OBJECT ${AOM_RTCD_SOURCES})
Tom Finegan872e5852017-08-29 15:15:58 -0700203add_dependencies(aom_rtcd aom_version)
204
Thomas Daedebdf8bf92018-09-12 15:44:49 -0700205if(ENABLE_EXAMPLES)
206 add_library(aom_encoder_stats OBJECT ${AOM_ENCODER_STATS_SOURCES})
207 set(AOM_LIB_TARGETS ${AOM_LIB_TARGETS} aom_encoder_stats)
208endif()
Tom Fineganb7d02542017-03-01 21:14:28 -0800209add_library(aom ${AOM_SOURCES} $<TARGET_OBJECTS:aom_rtcd>)
Tom Finegan03f6ca72016-11-10 13:02:48 -0800210
Johannb1c6ab62018-05-15 14:54:18 -0700211if(NOT MSVC AND NOT APPLE)
Tom Finegan3e8986b2017-09-29 17:08:31 -0700212 target_link_libraries(aom ${AOM_LIB_LINK_TYPE} m)
Johannb1c6ab62018-05-15 14:54:18 -0700213endif()
Tom Finegan3e8986b2017-09-29 17:08:31 -0700214
Tom Finegana0c21f02017-02-01 11:11:09 -0800215# List of object and static library targets.
Wan-Teh Changf866f5e2018-09-18 16:19:47 -0700216set(AOM_LIB_TARGETS ${AOM_LIB_TARGETS} aom_rtcd aom_mem aom_scale aom)
Tom Finegana0c21f02017-02-01 11:11:09 -0800217
Tom Finegan507e2e12017-03-01 19:58:19 -0800218# Setup dependencies.
Tom Finegan85ac13e2017-02-22 15:09:20 -0800219setup_aom_dsp_targets()
Tom Finegandd6d0572017-03-01 19:01:23 -0800220setup_aom_mem_targets()
Tom Finegan507e2e12017-03-01 19:58:19 -0800221setup_aom_ports_targets()
Tom Fineganb7d02542017-03-01 21:14:28 -0800222setup_aom_util_targets()
Tom Fineganf0d14442017-03-01 20:42:51 -0800223setup_aom_scale_targets()
Tom Finegan44916e72017-02-27 14:12:31 -0800224setup_av1_targets()
Tom Finegan85ac13e2017-02-22 15:09:20 -0800225
Tom Finegana0c21f02017-02-01 11:11:09 -0800226# Make all library targets depend on aom_rtcd to make sure it builds first.
Johannb1c6ab62018-05-15 14:54:18 -0700227foreach(aom_lib ${AOM_LIB_TARGETS})
228 if(NOT "${aom_lib}" STREQUAL "aom_rtcd")
Tom Finegana0c21f02017-02-01 11:11:09 -0800229 add_dependencies(${aom_lib} aom_rtcd)
Johannb1c6ab62018-05-15 14:54:18 -0700230 endif()
231endforeach()
Tom Fineganba02c242017-05-16 15:01:54 -0700232
Tom Fineganff863952017-12-22 11:41:14 -0800233# Generate C/C++ stub files containing the function usage_exit(). Users of the
Tom Finegane91bb452017-09-29 11:40:24 -0700234# aom_common_app_util library must define this function. This is a convenience
235# to allow omission of the function from applications that might want to use
Tom Fineganff863952017-12-22 11:41:14 -0800236# other pieces of the util support without defining usage_exit().
Tom Finegande6adff2018-08-01 14:22:14 -0700237file(WRITE "${AOM_GEN_SRC_DIR}/usage_exit.c" "void usage_exit(void) {}")
238file(WRITE "${AOM_GEN_SRC_DIR}/usage_exit.cc"
Johannb1c6ab62018-05-15 14:54:18 -0700239 "extern \"C\" void usage_exit(void) {}")
Tom Finegan03f6ca72016-11-10 13:02:48 -0800240
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700241#
242# Application and application support targets.
243#
Tom Finegand9647f22018-06-19 13:27:57 -0700244if(ENABLE_EXAMPLES OR ENABLE_TESTS OR ENABLE_TOOLS)
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700245 add_library(aom_common_app_util OBJECT ${AOM_COMMON_APP_UTIL_SOURCES})
Johannb1c6ab62018-05-15 14:54:18 -0700246 if(CONFIG_AV1_DECODER)
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700247 add_library(aom_decoder_app_util OBJECT ${AOM_DECODER_APP_UTIL_SOURCES})
James Zern41387402018-03-03 13:53:17 -0800248 # obudec depends on internal headers that require *rtcd.h
Tom Finegan61b71ab2018-03-22 15:58:38 -0700249 add_dependencies(aom_decoder_app_util aom_rtcd)
Johannb1c6ab62018-05-15 14:54:18 -0700250 endif()
251 if(CONFIG_AV1_ENCODER)
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700252 add_library(aom_encoder_app_util OBJECT ${AOM_ENCODER_APP_UTIL_SOURCES})
Johannb1c6ab62018-05-15 14:54:18 -0700253 endif()
254endif()
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700255
Tom Finegan77902132018-05-21 10:19:15 -0700256if((CONFIG_AV1_DECODER OR CONFIG_AV1_ENCODER) AND ENABLE_EXAMPLES)
257 add_executable(resize_util "${AOM_ROOT}/examples/resize_util.c"
258 $<TARGET_OBJECTS:aom_common_app_util>)
259 list(APPEND AOM_APP_TARGETS resize_util)
260endif()
261
Johannb1c6ab62018-05-15 14:54:18 -0700262if(CONFIG_AV1_DECODER AND ENABLE_EXAMPLES)
Tom Finegan77902132018-05-21 10:19:15 -0700263 add_executable(aomdec "${AOM_ROOT}/apps/aomdec.c"
Tom Finegan84f2d792017-06-15 23:06:44 -0700264 $<TARGET_OBJECTS:aom_common_app_util>
265 $<TARGET_OBJECTS:aom_decoder_app_util>)
Johannb1c6ab62018-05-15 14:54:18 -0700266 add_executable(decode_to_md5 "${AOM_ROOT}/examples/decode_to_md5.c"
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700267 $<TARGET_OBJECTS:aom_common_app_util>
268 $<TARGET_OBJECTS:aom_decoder_app_util>)
Johannb1c6ab62018-05-15 14:54:18 -0700269 add_executable(decode_with_drops "${AOM_ROOT}/examples/decode_with_drops.c"
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700270 $<TARGET_OBJECTS:aom_common_app_util>
271 $<TARGET_OBJECTS:aom_decoder_app_util>)
Johannb1c6ab62018-05-15 14:54:18 -0700272 add_executable(simple_decoder "${AOM_ROOT}/examples/simple_decoder.c"
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700273 $<TARGET_OBJECTS:aom_common_app_util>
274 $<TARGET_OBJECTS:aom_decoder_app_util>)
Johannb1c6ab62018-05-15 14:54:18 -0700275 add_executable(scalable_decoder "${AOM_ROOT}/examples/scalable_decoder.c"
Yaowu Xu7f313c02018-03-28 12:50:16 -0700276 $<TARGET_OBJECTS:aom_common_app_util>
277 $<TARGET_OBJECTS:aom_decoder_app_util>)
Tom Finegan393b79b2018-05-02 10:49:56 -0700278
Johannb1c6ab62018-05-15 14:54:18 -0700279 if(CONFIG_ANALYZER)
280 add_executable(analyzer "${AOM_ROOT}/examples/analyzer.cc"
Tom Finegan9befd172017-09-29 15:19:19 -0700281 $<TARGET_OBJECTS:aom_common_app_util>
282 $<TARGET_OBJECTS:aom_decoder_app_util>)
Johannb1c6ab62018-05-15 14:54:18 -0700283 target_link_libraries(analyzer ${AOM_LIB_LINK_TYPE} ${wxWidgets_LIBRARIES})
Tom Finegan393b79b2018-05-02 10:49:56 -0700284 list(APPEND AOM_APP_TARGETS analyzer)
285 list(APPEND AOM_DECODER_EXAMPLE_TARGETS analyzer)
Johannb1c6ab62018-05-15 14:54:18 -0700286 endif()
Tom Fineganba02c242017-05-16 15:01:54 -0700287
Johannb1c6ab62018-05-15 14:54:18 -0700288 if(CONFIG_INSPECTION)
289 add_executable(inspect "${AOM_ROOT}/examples/inspect.c"
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700290 $<TARGET_OBJECTS:aom_common_app_util>
291 $<TARGET_OBJECTS:aom_decoder_app_util>)
Tom Finegan393b79b2018-05-02 10:49:56 -0700292 list(APPEND AOM_DECODER_EXAMPLE_TARGETS inspect)
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700293
Johannb1c6ab62018-05-15 14:54:18 -0700294 if(EMSCRIPTEN)
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700295 add_preproc_definition(_POSIX_SOURCE)
Thomas Daede32fc4072018-01-12 04:04:24 -0800296 append_link_flag_to_target("inspect" "-s TOTAL_MEMORY=402653184")
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700297 append_link_flag_to_target("inspect" "-s MODULARIZE=1")
Yushin Cho1b0e7dc2018-08-24 20:23:25 -0700298 append_link_flag_to_target(
299 "inspect" "-s \'EXTRA_EXPORTED_RUNTIME_METHODS=[\"UTF8ToString\"]\'")
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700300 append_link_flag_to_target("inspect"
301 "-s EXPORT_NAME=\"\'DecoderModule\'\"")
302 append_link_flag_to_target("inspect" "--memory-init-file 0")
303
Johannb1c6ab62018-05-15 14:54:18 -0700304 if("${CMAKE_BUILD_TYPE}" STREQUAL "")
305
306 # Default to -O3 when no build type is specified.
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700307 append_compiler_flag("-O3")
Johannb1c6ab62018-05-15 14:54:18 -0700308 endif()
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700309
310 em_link_post_js(inspect "${AOM_ROOT}/tools/inspect-post.js")
Johannb1c6ab62018-05-15 14:54:18 -0700311 endif()
312 endif()
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700313
314 # Maintain a list of decoder example targets.
Johannb1c6ab62018-05-15 14:54:18 -0700315 list(APPEND AOM_DECODER_EXAMPLE_TARGETS aomdec decode_to_md5
316 decode_with_drops scalable_decoder simple_decoder)
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700317
Tom Finegan9befd172017-09-29 15:19:19 -0700318 # Add decoder examples to the app targets list.
Tom Finegan393b79b2018-05-02 10:49:56 -0700319 list(APPEND AOM_APP_TARGETS ${AOM_DECODER_EXAMPLE_TARGETS})
Johannb1c6ab62018-05-15 14:54:18 -0700320endif()
Michael Bebenitaf4f27fe2017-03-02 17:40:44 -0800321
Johannb1c6ab62018-05-15 14:54:18 -0700322if(CONFIG_AV1_ENCODER)
323 if(ENABLE_EXAMPLES)
Tom Finegan77902132018-05-21 10:19:15 -0700324 add_executable(aomenc "${AOM_ROOT}/apps/aomenc.c"
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700325 $<TARGET_OBJECTS:aom_common_app_util>
326 $<TARGET_OBJECTS:aom_encoder_app_util>
327 $<TARGET_OBJECTS:aom_encoder_stats>)
Johannb1c6ab62018-05-15 14:54:18 -0700328 add_executable(lossless_encoder "${AOM_ROOT}/examples/lossless_encoder.c"
Tom Finegane91bb452017-09-29 11:40:24 -0700329 $<TARGET_OBJECTS:aom_common_app_util>
330 $<TARGET_OBJECTS:aom_encoder_app_util>)
Johannb1c6ab62018-05-15 14:54:18 -0700331 add_executable(set_maps "${AOM_ROOT}/examples/set_maps.c"
Tom Finegan9befd172017-09-29 15:19:19 -0700332 $<TARGET_OBJECTS:aom_common_app_util>
333 $<TARGET_OBJECTS:aom_encoder_app_util>)
Johannb1c6ab62018-05-15 14:54:18 -0700334 add_executable(simple_encoder "${AOM_ROOT}/examples/simple_encoder.c"
Tom Finegan9befd172017-09-29 15:19:19 -0700335 $<TARGET_OBJECTS:aom_common_app_util>
336 $<TARGET_OBJECTS:aom_encoder_app_util>)
Johannb1c6ab62018-05-15 14:54:18 -0700337 add_executable(twopass_encoder "${AOM_ROOT}/examples/twopass_encoder.c"
Tom Finegan9befd172017-09-29 15:19:19 -0700338 $<TARGET_OBJECTS:aom_common_app_util>
339 $<TARGET_OBJECTS:aom_encoder_app_util>)
Johannb1c6ab62018-05-15 14:54:18 -0700340 add_executable(noise_model "${AOM_ROOT}/examples/noise_model.c"
Yaowu Xuc7119a72018-03-29 09:59:37 -0700341 $<TARGET_OBJECTS:aom_common_app_util>
342 $<TARGET_OBJECTS:aom_encoder_app_util>)
Johannb1c6ab62018-05-15 14:54:18 -0700343 add_executable(scalable_encoder "${AOM_ROOT}/examples/scalable_encoder.c"
Yaowu Xuc7119a72018-03-29 09:59:37 -0700344 $<TARGET_OBJECTS:aom_common_app_util>
345 $<TARGET_OBJECTS:aom_encoder_app_util>)
Tom Finegan9befd172017-09-29 15:19:19 -0700346
347 # Maintain a list of encoder example targets.
Johannb1c6ab62018-05-15 14:54:18 -0700348 list(APPEND AOM_ENCODER_EXAMPLE_TARGETS aomenc lossless_encoder noise_model
349 set_maps simple_encoder scalable_encoder twopass_encoder)
350 endif()
Tom Finegane91bb452017-09-29 11:40:24 -0700351
Johannb1c6ab62018-05-15 14:54:18 -0700352 if(ENABLE_TOOLS)
353 if(CONFIG_ENTROPY_STATS AND NOT BUILD_SHARED_LIBS)
354
Tom Fineganbac99072017-10-11 09:16:54 -0700355 # TODO(tomfinegan): Sort out why a simple link command with
356 # aom_entropy_optimizer.c won't work on macos, but dragging in all the
357 # helper machinery allows the link to succeed.
Tom Finegande6adff2018-08-01 14:22:14 -0700358 add_executable(aom_entropy_optimizer "${AOM_GEN_SRC_DIR}/usage_exit.c"
Tom Fineganbac99072017-10-11 09:16:54 -0700359 "${AOM_ROOT}/tools/aom_entropy_optimizer.c"
360 $<TARGET_OBJECTS:aom_common_app_util>
361 $<TARGET_OBJECTS:aom_encoder_app_util>)
Tom Finegan9befd172017-09-29 15:19:19 -0700362
Tom Fineganbac99072017-10-11 09:16:54 -0700363 # Maintain a list of encoder tool targets.
Tom Finegan393b79b2018-05-02 10:49:56 -0700364 list(APPEND AOM_ENCODER_TOOL_TARGETS aom_entropy_optimizer)
Johannb1c6ab62018-05-15 14:54:18 -0700365 endif()
366 endif()
Tom Fineganbac99072017-10-11 09:16:54 -0700367
368 # Add encoder examples and tools to the targets list.
Johannb1c6ab62018-05-15 14:54:18 -0700369 list(APPEND AOM_APP_TARGETS ${AOM_ENCODER_EXAMPLE_TARGETS}
370 ${AOM_ENCODER_TOOL_TARGETS})
371endif()
Tom Fineganba02c242017-05-16 15:01:54 -0700372
Johannb1c6ab62018-05-15 14:54:18 -0700373if(ENABLE_EXAMPLES)
374
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700375 # Maintain a separate variable listing only the examples to facilitate
376 # installation of example programs into an examples sub directory of
377 # $AOM_DIST_DIR/bin when building the dist target.
Johannb1c6ab62018-05-15 14:54:18 -0700378 list(APPEND AOM_EXAMPLE_TARGETS ${AOM_DECODER_EXAMPLE_TARGETS}
379 ${AOM_ENCODER_EXAMPLE_TARGETS})
380endif()
Tom Finegan78975672017-05-30 08:55:54 -0700381
Johannb1c6ab62018-05-15 14:54:18 -0700382if(ENABLE_TOOLS)
383 if(CONFIG_AV1_DECODER)
Tom Finegande6adff2018-08-01 14:22:14 -0700384 add_executable(dump_obu "${AOM_GEN_SRC_DIR}/usage_exit.cc"
Tom Fineganc0192332017-12-02 09:31:45 -0800385 "${AOM_ROOT}/tools/dump_obu.cc"
386 "${AOM_ROOT}/tools/obu_parser.cc"
387 "${AOM_ROOT}/tools/obu_parser.h"
388 $<TARGET_OBJECTS:aom_common_app_util>
389 $<TARGET_OBJECTS:aom_decoder_app_util>)
Tom Fineganff863952017-12-22 11:41:14 -0800390
Tom Fineganc0192332017-12-02 09:31:45 -0800391 list(APPEND AOM_TOOL_TARGETS dump_obu)
392 list(APPEND AOM_APP_TARGETS dump_obu)
Tom Fineganc0192332017-12-02 09:31:45 -0800393
Tom Fineganff863952017-12-22 11:41:14 -0800394 # Maintain a separate variable listing only the examples to facilitate
395 # installation of example programs into an tools sub directory of
396 # $AOM_DIST_DIR/bin when building the dist target.
Johannb1c6ab62018-05-15 14:54:18 -0700397 list(APPEND AOM_TOOL_TARGETS ${AOM_DECODER_TOOL_TARGETS}
398 ${AOM_ENCODER_TOOL_TARGETS})
399 endif()
400endif()
Tom Finegane91bb452017-09-29 11:40:24 -0700401
Johannb1c6ab62018-05-15 14:54:18 -0700402if(ENABLE_EXAMPLES AND CONFIG_AV1_DECODER AND CONFIG_AV1_ENCODER)
403 add_executable(aom_cx_set_ref "${AOM_ROOT}/examples/aom_cx_set_ref.c"
Tom Fineganba02c242017-05-16 15:01:54 -0700404 $<TARGET_OBJECTS:aom_common_app_util>
405 $<TARGET_OBJECTS:aom_encoder_app_util>)
Tom Finegan393b79b2018-05-02 10:49:56 -0700406 list(APPEND AOM_EXAMPLE_TARGETS aom_cx_set_ref)
407 list(APPEND AOM_APP_TARGETS aom_cx_set_ref)
Johannb1c6ab62018-05-15 14:54:18 -0700408endif()
Tom Finegan81279802017-02-01 11:27:05 -0800409
Johannb1c6ab62018-05-15 14:54:18 -0700410if(ENABLE_EXAMPLES AND CONFIG_AV1_ENCODER)
411 add_executable(lightfield_encoder "${AOM_ROOT}/examples/lightfield_encoder.c"
Yunqing Wangb97cfae2018-05-11 14:19:05 -0700412 $<TARGET_OBJECTS:aom_common_app_util>
413 $<TARGET_OBJECTS:aom_encoder_app_util>)
414 list(APPEND AOM_EXAMPLE_TARGETS lightfield_encoder)
415 list(APPEND AOM_APP_TARGETS lightfield_encoder)
Johannb1c6ab62018-05-15 14:54:18 -0700416endif()
Yunqing Wangb97cfae2018-05-11 14:19:05 -0700417
Johannb1c6ab62018-05-15 14:54:18 -0700418if(ENABLE_EXAMPLES AND CONFIG_AV1_DECODER)
Yunqing Wangd417bb52018-06-03 14:13:38 -0700419 add_executable(lightfield_tile_list_decoder
420 "${AOM_ROOT}/examples/lightfield_tile_list_decoder.c"
421 $<TARGET_OBJECTS:aom_common_app_util>
422 $<TARGET_OBJECTS:aom_decoder_app_util>)
423 list(APPEND AOM_EXAMPLE_TARGETS lightfield_tile_list_decoder)
424 list(APPEND AOM_APP_TARGETS lightfield_tile_list_decoder)
425endif()
426
427if(ENABLE_EXAMPLES AND CONFIG_AV1_DECODER)
Johannb1c6ab62018-05-15 14:54:18 -0700428 add_executable(lightfield_decoder "${AOM_ROOT}/examples/lightfield_decoder.c"
Yunqing Wangb97cfae2018-05-11 14:19:05 -0700429 $<TARGET_OBJECTS:aom_common_app_util>
430 $<TARGET_OBJECTS:aom_decoder_app_util>)
431 list(APPEND AOM_EXAMPLE_TARGETS lightfield_decoder)
432 list(APPEND AOM_APP_TARGETS lightfield_decoder)
Johannb1c6ab62018-05-15 14:54:18 -0700433endif()
Yunqing Wangb97cfae2018-05-11 14:19:05 -0700434
Yunqing Wang40bde4d2018-06-01 16:48:03 -0700435if(ENABLE_EXAMPLES AND CONFIG_AV1_ENCODER AND CONFIG_AV1_DECODER)
436 add_executable(lightfield_bitstream_parsing
437 "${AOM_ROOT}/examples/lightfield_bitstream_parsing.c"
438 $<TARGET_OBJECTS:aom_common_app_util>
439 $<TARGET_OBJECTS:aom_encoder_app_util>
440 $<TARGET_OBJECTS:aom_decoder_app_util>)
441 list(APPEND AOM_EXAMPLE_TARGETS lightfield_bitstream_parsing)
442 list(APPEND AOM_APP_TARGETS lightfield_bitstream_parsing)
443endif()
444
Johannb1c6ab62018-05-15 14:54:18 -0700445foreach(aom_app ${AOM_APP_TARGETS})
Tom Finegand46b4d32017-05-09 09:14:03 -0700446 target_link_libraries(${aom_app} ${AOM_LIB_LINK_TYPE} aom)
Johannb1c6ab62018-05-15 14:54:18 -0700447endforeach()
Tom Fineganfc6f2362016-10-24 10:39:41 -0700448
Tom Finegand9647f22018-06-19 13:27:57 -0700449if(ENABLE_EXAMPLES OR ENABLE_TESTS OR ENABLE_TOOLS)
Johannb1c6ab62018-05-15 14:54:18 -0700450 if(CONFIG_LIBYUV)
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700451 add_library(yuv OBJECT ${AOM_LIBYUV_SOURCES})
Johannb1c6ab62018-05-15 14:54:18 -0700452 if(NOT MSVC)
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700453 target_compile_options(yuv PRIVATE -Wno-unused-parameter)
Johannb1c6ab62018-05-15 14:54:18 -0700454 endif()
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700455 include_directories("${AOM_ROOT}/third_party/libyuv/include")
Tom Finegan9cd97002016-11-09 10:37:44 -0800456
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700457 # Add to existing targets.
Johannb1c6ab62018-05-15 14:54:18 -0700458 foreach(aom_app ${AOM_APP_TARGETS})
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700459 target_sources(${aom_app} PRIVATE $<TARGET_OBJECTS:yuv>)
460 set_property(TARGET ${aom_app} PROPERTY LINKER_LANGUAGE CXX)
Johannb1c6ab62018-05-15 14:54:18 -0700461 endforeach()
462 endif()
Tom Finegan957fe822016-11-09 10:37:27 -0800463
Johannb1c6ab62018-05-15 14:54:18 -0700464 if(CONFIG_WEBM_IO)
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700465 add_library(webm OBJECT ${AOM_LIBWEBM_SOURCES})
466 include_directories("${AOM_ROOT}/third_party/libwebm")
467 target_compile_definitions(webm PRIVATE __STDC_CONSTANT_MACROS)
468 target_compile_definitions(webm PRIVATE __STDC_LIMIT_MACROS)
Tom Fineganba02c242017-05-16 15:01:54 -0700469
Johannb1c6ab62018-05-15 14:54:18 -0700470 if(NOT MSVC)
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700471 target_compile_options(webm PRIVATE -Wno-shadow)
Johannb1c6ab62018-05-15 14:54:18 -0700472 endif()
Tom Finegan81279802017-02-01 11:27:05 -0800473
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700474 # Add to existing targets.
Johannb1c6ab62018-05-15 14:54:18 -0700475 if(CONFIG_AV1_DECODER)
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700476 target_sources(aom_decoder_app_util PRIVATE ${AOM_WEBM_DECODER_SOURCES})
Johannb1c6ab62018-05-15 14:54:18 -0700477 endif()
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700478
Johannb1c6ab62018-05-15 14:54:18 -0700479 if(CONFIG_AV1_ENCODER)
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700480 target_sources(aom_encoder_app_util PRIVATE ${AOM_WEBM_ENCODER_SOURCES})
Johannb1c6ab62018-05-15 14:54:18 -0700481 endif()
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700482
Johannb1c6ab62018-05-15 14:54:18 -0700483 foreach(aom_app ${AOM_APP_TARGETS})
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700484 target_sources(${aom_app} PRIVATE $<TARGET_OBJECTS:webm>)
485 set_property(TARGET ${aom_app} PROPERTY LINKER_LANGUAGE CXX)
Johannb1c6ab62018-05-15 14:54:18 -0700486 endforeach()
487 endif()
488endif()
Tom Finegan7ba9ba82017-01-23 14:04:28 -0800489
Tom Finegand9647f22018-06-19 13:27:57 -0700490if(ENABLE_TESTS)
Johannb1c6ab62018-05-15 14:54:18 -0700491
Tom Finegan4db04d32017-02-23 14:37:27 -0800492 # Create test_libaom target and the targets it depends on.
493 setup_aom_test_targets()
Johannb1c6ab62018-05-15 14:54:18 -0700494endif()
Tom Finegan9412ec32017-02-01 11:41:43 -0800495
Johannb1c6ab62018-05-15 14:54:18 -0700496if(HAVE_PTHREAD_H AND CONFIG_MULTITHREAD)
Tom Finegan606f6462017-03-06 11:18:29 -0800497 find_package(Threads)
Tom Finegana1679392018-08-02 11:12:22 -0700498 target_link_libraries(aom ${AOM_LIB_LINK_TYPE} Threads::Threads)
Johannb1c6ab62018-05-15 14:54:18 -0700499endif()
Tom Finegan606f6462017-03-06 11:18:29 -0800500
Johannb1c6ab62018-05-15 14:54:18 -0700501if(XCODE)
502
Tom Finegandb37c752017-11-30 17:02:27 -0800503 # TODO(tomfinegan): Make sure target has no C++ files before doing this as
504 # it's not necessary in that case.
Johannb1c6ab62018-05-15 14:54:18 -0700505 if(CONFIG_LIBYUV OR CONFIG_WEBM_IO)
506
Tom Finegan9412ec32017-02-01 11:41:43 -0800507 # The Xcode generator does not obey LINKER_LANGUAGE. Because of the issue
508 # what looks like a C++ file needs to be in any target that Xcode will link
Johannb1c6ab62018-05-15 14:54:18 -0700509 # when the target contains a C++ dependency. Without this Xcode will try to
510 # link with the C linker, which always ends badly when a dependency actually
511 # includes C++.
512
Tom Finegan9412ec32017-02-01 11:41:43 -0800513 # Note: LINKER_LANGUAGE is explicitly set to C++ for all targets touched
514 # here, it really is the Xcode generator's fault, or just a deficiency in
515 # Xcode itself.
Johannb1c6ab62018-05-15 14:54:18 -0700516 foreach(aom_app ${AOM_APP_TARGETS})
Tom Finegan84f2d792017-06-15 23:06:44 -0700517 add_dummy_source_file_to_target("${aom_app}" "cc")
Johannb1c6ab62018-05-15 14:54:18 -0700518 endforeach()
519 endif()
520endif()
Tom Finegan0a4ef082017-03-31 11:07:34 -0700521
Johannb1c6ab62018-05-15 14:54:18 -0700522if(ENABLE_EXAMPLES AND "${CMAKE_GENERATOR}" MATCHES "Makefiles$")
523
Johanne07a6752018-01-10 12:47:44 -0800524 # For historical purposes place the example binaries in the example directory.
Tom Finegan78975672017-05-30 08:55:54 -0700525 file(MAKE_DIRECTORY "${AOM_CONFIG_DIR}/examples")
Tom Finegan938172c2017-10-07 13:58:34 -0700526
Johannb1c6ab62018-05-15 14:54:18 -0700527 foreach(target ${AOM_EXAMPLE_TARGETS})
528 if(NOT "${target}" MATCHES "aomdec\|aomenc")
529 set_target_properties(${target}
530 PROPERTIES RUNTIME_OUTPUT_DIRECTORY
531 "${AOM_CONFIG_DIR}/examples")
532 endif()
533 endforeach()
Tom Finegane91bb452017-09-29 11:40:24 -0700534
Johannb1c6ab62018-05-15 14:54:18 -0700535 if(ENABLE_TOOLS AND AOM_TOOL_TARGETS)
536
Tom Finegane91bb452017-09-29 11:40:24 -0700537 # The same expectation is true for tool targets.
538 file(MAKE_DIRECTORY "${AOM_CONFIG_DIR}/tools")
Johannb1c6ab62018-05-15 14:54:18 -0700539 set_target_properties(${AOM_TOOL_TARGETS}
540 PROPERTIES RUNTIME_OUTPUT_DIRECTORY
541 "${AOM_CONFIG_DIR}/tools")
542 endif()
543endif()
Tom Finegan78975672017-05-30 08:55:54 -0700544
Johannb1c6ab62018-05-15 14:54:18 -0700545if(BUILD_SHARED_LIBS)
Tom Finegan84f2d792017-06-15 23:06:44 -0700546 include("${AOM_ROOT}/build/cmake/exports.cmake")
547 setup_exports_target()
Tom Finegan4a3a9c02017-07-14 08:34:20 -0700548 set_target_properties(aom PROPERTIES SOVERSION 0)
Johannb1c6ab62018-05-15 14:54:18 -0700549endif()
Tom Finegan84f2d792017-06-15 23:06:44 -0700550
Tom Fineganc8593982017-09-05 11:01:09 -0700551# Handle user supplied compile and link flags last to ensure they're obeyed.
552set_user_flags()
553
Tom Finegan0d066ce2017-05-30 11:07:05 -0700554# Aomedia documentation rule.
Johannb1c6ab62018-05-15 14:54:18 -0700555if(ENABLE_DOCS)
Tom Finegan0d066ce2017-05-30 11:07:05 -0700556 include(FindDoxygen)
Johannb1c6ab62018-05-15 14:54:18 -0700557 if(DOXYGEN_FOUND)
Tom Finegan0d066ce2017-05-30 11:07:05 -0700558 include("${AOM_ROOT}/docs.cmake")
559 setup_documentation_targets()
Johannb1c6ab62018-05-15 14:54:18 -0700560 else()
Tom Finegan0d066ce2017-05-30 11:07:05 -0700561 message("--- Cannot find doxygen, ENABLE_DOCS turned off.")
562 set(ENABLE_DOCS OFF)
Johannb1c6ab62018-05-15 14:54:18 -0700563 endif()
564endif()
Tom Finegan0d066ce2017-05-30 11:07:05 -0700565
Tom Finegan78975672017-05-30 08:55:54 -0700566# Aomedia dist rule.
Johannb1c6ab62018-05-15 14:54:18 -0700567if(CONFIG_AV1_DECODER AND ENABLE_EXAMPLES)
Tom Finegan393b79b2018-05-02 10:49:56 -0700568 list(APPEND AOM_DIST_APPS $<TARGET_FILE:aomdec>)
Johannb1c6ab62018-05-15 14:54:18 -0700569endif()
570if(CONFIG_AV1_ENCODER AND ENABLE_EXAMPLES)
Tom Finegan393b79b2018-05-02 10:49:56 -0700571 list(APPEND AOM_DIST_APPS $<TARGET_FILE:aomenc>)
Johannb1c6ab62018-05-15 14:54:18 -0700572endif()
Tom Finegan78975672017-05-30 08:55:54 -0700573
Johannb1c6ab62018-05-15 14:54:18 -0700574if(ENABLE_EXAMPLES)
575 foreach(example ${AOM_EXAMPLE_TARGETS})
Tom Finegan9befd172017-09-29 15:19:19 -0700576 list(APPEND AOM_DIST_EXAMPLES $<TARGET_FILE:${example}>)
Johannb1c6ab62018-05-15 14:54:18 -0700577 endforeach()
578endif()
Tom Finegan78975672017-05-30 08:55:54 -0700579
Johannb1c6ab62018-05-15 14:54:18 -0700580if(ENABLE_TOOLS)
581 foreach(tool ${AOM_TOOL_TARGETS})
Tom Finegan9befd172017-09-29 15:19:19 -0700582 list(APPEND AOM_DIST_TOOLS $<TARGET_FILE:${tool}>)
Johannb1c6ab62018-05-15 14:54:18 -0700583 endforeach()
584endif()
Tom Finegane91bb452017-09-29 11:40:24 -0700585
Johannb1c6ab62018-05-15 14:54:18 -0700586if(NOT AOM_DIST_DIR)
Tom Finegan78975672017-05-30 08:55:54 -0700587 set(AOM_DIST_DIR "${AOM_CONFIG_DIR}/dist")
Johannb1c6ab62018-05-15 14:54:18 -0700588endif()
Tom Finegan78975672017-05-30 08:55:54 -0700589
590add_custom_target(dist
Johannb1c6ab62018-05-15 14:54:18 -0700591 COMMAND ${CMAKE_COMMAND} -DAOM_ROOT=${AOM_ROOT}
592 -DAOM_CONFIG_DIR=${AOM_CONFIG_DIR}
593 -DAOM_DIST_DIR=${AOM_DIST_DIR}
594 -DAOM_DIST_APPS="${AOM_DIST_APPS}"
595 -DAOM_DIST_EXAMPLES="${AOM_DIST_EXAMPLES}"
596 -DAOM_DIST_TOOLS="${AOM_DIST_TOOLS}"
597 -DAOM_DIST_INCLUDES="${AOM_INSTALL_INCS}"
598 -DAOM_DIST_LIBS=$<TARGET_FILE:aom>
599 -DENABLE_DOCS=${ENABLE_DOCS} -P
600 "${AOM_ROOT}/build/cmake/dist.cmake"
Tom Finegan78975672017-05-30 08:55:54 -0700601 DEPENDS ${AOM_INSTALL_BINS} ${AOM_INSTALL_LIBS}
Johannb1c6ab62018-05-15 14:54:18 -0700602 ${AOM_INSTALL_INCS} ${AOM_EXAMPLE_TARGETS}
603 ${AOM_TOOL_TARGETS})
Tom Finegan78975672017-05-30 08:55:54 -0700604
Johannb1c6ab62018-05-15 14:54:18 -0700605if(ENABLE_DOCS)
Tom Finegan78975672017-05-30 08:55:54 -0700606 add_dependencies(dist docs)
Johannb1c6ab62018-05-15 14:54:18 -0700607endif()
Tom Fineganc34abc82017-10-13 12:04:59 -0700608
609# Collect all variables containing libaom source files.
610get_cmake_property(all_cmake_vars VARIABLES)
Johannb1c6ab62018-05-15 14:54:18 -0700611foreach(var ${all_cmake_vars})
612 if("${var}" MATCHES "SOURCES$\|_INTRIN_\|_ASM_" AND NOT "${var}" MATCHES
613 "_APP_\|DOXYGEN\|LIBWEBM\|LIBYUV\|_PKG_\|TEST")
Tom Fineganc34abc82017-10-13 12:04:59 -0700614 list(APPEND aom_source_vars ${var})
Johannb1c6ab62018-05-15 14:54:18 -0700615 endif()
616endforeach()
Tom Fineganc34abc82017-10-13 12:04:59 -0700617
618# Libaom_srcs.txt generation.
619set(libaom_srcs_txt_file "${AOM_CONFIG_DIR}/libaom_srcs.txt")
620file(WRITE "${libaom_srcs_txt_file}" "# This file is generated. DO NOT EDIT.\n")
621
622# Static source file list first.
Johannb1c6ab62018-05-15 14:54:18 -0700623foreach(aom_source_var ${aom_source_vars})
624 foreach(file ${${aom_source_var}})
625 if(NOT "${file}" MATCHES "${AOM_CONFIG_DIR}")
Tom Fineganc34abc82017-10-13 12:04:59 -0700626 string(REPLACE "${AOM_ROOT}/" "" file "${file}")
627 file(APPEND "${libaom_srcs_txt_file}" "${file}\n")
Johannb1c6ab62018-05-15 14:54:18 -0700628 endif()
629 endforeach()
630endforeach()
Tom Fineganc34abc82017-10-13 12:04:59 -0700631
Johannb1c6ab62018-05-15 14:54:18 -0700632file(APPEND
633 "${libaom_srcs_txt_file}"
634 "# Files below this line are generated by the libaom build system.\n")
635foreach(aom_source_var ${aom_source_vars})
636 foreach(file ${${aom_source_var}})
637 if("${file}" MATCHES "${AOM_CONFIG_DIR}")
Tom Fineganc34abc82017-10-13 12:04:59 -0700638 string(REPLACE "${AOM_CONFIG_DIR}/" "" file "${file}")
639 file(APPEND "${libaom_srcs_txt_file}" "${file}\n")
Johannb1c6ab62018-05-15 14:54:18 -0700640 endif()
641 endforeach()
642endforeach()
Tom Fineganc34abc82017-10-13 12:04:59 -0700643
644# Libaom_srcs.gni generation.
645set(libaom_srcs_gni_file "${AOM_CONFIG_DIR}/libaom_srcs.gni")
646file(WRITE "${libaom_srcs_gni_file}" "# This file is generated. DO NOT EDIT.\n")
647
Johannb1c6ab62018-05-15 14:54:18 -0700648foreach(aom_source_var ${aom_source_vars})
649 if("${${aom_source_var}}" MATCHES "${AOM_ROOT}")
Tom Fineganc34abc82017-10-13 12:04:59 -0700650 string(TOLOWER ${aom_source_var} aom_source_var_lowercase)
651 file(APPEND "${libaom_srcs_gni_file}" "\n${aom_source_var_lowercase} = [\n")
Johannb1c6ab62018-05-15 14:54:18 -0700652 endif()
Tom Fineganc34abc82017-10-13 12:04:59 -0700653
Johannb1c6ab62018-05-15 14:54:18 -0700654 foreach(file ${${aom_source_var}})
655 if(NOT "${file}" MATCHES "${AOM_CONFIG_DIR}")
656 string(REPLACE "${AOM_ROOT}" "//third_party/libaom/source/libaom" file
657 "${file}")
Tom Fineganc34abc82017-10-13 12:04:59 -0700658 file(APPEND "${libaom_srcs_gni_file}" " \"${file}\",\n")
Johannb1c6ab62018-05-15 14:54:18 -0700659 endif()
660 endforeach()
Tom Fineganc34abc82017-10-13 12:04:59 -0700661
Johannb1c6ab62018-05-15 14:54:18 -0700662 if("${${aom_source_var}}" MATCHES "${AOM_ROOT}")
Tom Fineganc34abc82017-10-13 12:04:59 -0700663 file(APPEND "${libaom_srcs_gni_file}" "]\n")
Johannb1c6ab62018-05-15 14:54:18 -0700664 endif()
665endforeach()
Tom Fineganc34abc82017-10-13 12:04:59 -0700666
Johannb1c6ab62018-05-15 14:54:18 -0700667file(APPEND
668 "${libaom_srcs_gni_file}"
669 "\n# Files below this line are generated by the libaom build system.\n")
Tom Fineganc34abc82017-10-13 12:04:59 -0700670
Johannb1c6ab62018-05-15 14:54:18 -0700671foreach(aom_source_var ${aom_source_vars})
672 if("${${aom_source_var}}" MATCHES "${AOM_CONFIG_DIR}")
Tom Fineganc34abc82017-10-13 12:04:59 -0700673 string(TOLOWER ${aom_source_var} aom_source_var_lowercase)
674 file(APPEND "${libaom_srcs_gni_file}"
Johannb1c6ab62018-05-15 14:54:18 -0700675 "\n${aom_source_var_lowercase}_gen = [\n")
676 endif()
677 foreach(file ${${aom_source_var}})
678 if(NOT "${file}" MATCHES "${AOM_ROOT}")
Johann2ef3da22018-04-05 13:33:55 -0700679 string(REPLACE "${AOM_CONFIG_DIR}" "//third_party/libaom/source/libaom"
Johannb1c6ab62018-05-15 14:54:18 -0700680 file "${file}")
Tom Fineganc34abc82017-10-13 12:04:59 -0700681 file(APPEND "${libaom_srcs_gni_file}" " \"${file}\",\n")
Johannb1c6ab62018-05-15 14:54:18 -0700682 endif()
683 endforeach()
Tom Fineganc34abc82017-10-13 12:04:59 -0700684
Johannb1c6ab62018-05-15 14:54:18 -0700685 if("${${aom_source_var}}" MATCHES "${AOM_CONFIG_DIR}")
Tom Fineganc34abc82017-10-13 12:04:59 -0700686 file(APPEND "${libaom_srcs_gni_file}" "]\n")
Johannb1c6ab62018-05-15 14:54:18 -0700687 endif()
688endforeach()
Tom Finegan12149142018-10-15 11:35:46 -0700689
690# Generate aom.pc and setup install rule.
691setup_aom_install_targets()