blob: ab62a51e807774857644e96d79cfb97166163e44 [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}")
Johannb1c6ab62018-05-15 14:54:18 -070025set(INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/include"
26 CACHE PATH "Installation path of includes")
27set(LIB_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/lib"
28 CACHE PATH "Installation path of libraries")
Tom Finegan6e9d0c12016-10-27 11:57:06 -070029
Johannb1c6ab62018-05-15 14:54:18 -070030if("${AOM_ROOT}" STREQUAL "${AOM_CONFIG_DIR}")
Tom Fineganf77394f2017-04-26 11:47:59 -070031 message(FATAL_ERROR
Johannb1c6ab62018-05-15 14:54:18 -070032 "Building from within the aom source tree is not supported.\n"
33 "Hint: Run these commands\n" "$ rm -rf CMakeCache.txt CMakeFiles\n"
34 "$ mkdir -p ../aom_build\n" "$ cd ../aom_build\n"
35 "And re-run CMake from the aom_build directory.")
36endif()
Tom Fineganf77394f2017-04-26 11:47:59 -070037
Tom Finegan973d4d52016-10-26 11:42:42 -070038include("${AOM_ROOT}/build/cmake/aom_configure.cmake")
Tom Finegan85ac13e2017-02-22 15:09:20 -080039include("${AOM_ROOT}/aom_dsp/aom_dsp.cmake")
Tom Finegandd6d0572017-03-01 19:01:23 -080040include("${AOM_ROOT}/aom_mem/aom_mem.cmake")
Tom Finegan507e2e12017-03-01 19:58:19 -080041include("${AOM_ROOT}/aom_ports/aom_ports.cmake")
Tom Fineganf0d14442017-03-01 20:42:51 -080042include("${AOM_ROOT}/aom_scale/aom_scale.cmake")
Tom Fineganb7d02542017-03-01 21:14:28 -080043include("${AOM_ROOT}/aom_util/aom_util.cmake")
Tom Finegan44916e72017-02-27 14:12:31 -080044include("${AOM_ROOT}/av1/av1.cmake")
Tom Finegan4db04d32017-02-23 14:37:27 -080045include("${AOM_ROOT}/test/test.cmake")
Tom Finegan8cc239b2017-08-07 12:28:12 -070046include("${AOM_ROOT}/build/cmake/sanitizers.cmake")
Tom Finegan84f2d792017-06-15 23:06:44 -070047include("${AOM_ROOT}/build/cmake/util.cmake")
Tom Finegan85ac13e2017-02-22 15:09:20 -080048
Tom Finegan393b79b2018-05-02 10:49:56 -070049list(APPEND AOM_RTCD_SOURCES
Tom Finegan44702c82018-05-22 13:00:39 -070050 "${AOM_CONFIG_DIR}/config/aom_dsp_rtcd.h"
51 "${AOM_CONFIG_DIR}/config/aom_scale_rtcd.h"
52 "${AOM_CONFIG_DIR}/config/av1_rtcd.h"
Johannb1c6ab62018-05-15 14:54:18 -070053 "${AOM_ROOT}/aom_dsp/aom_dsp_rtcd_defs.pl"
54 "${AOM_ROOT}/aom_dsp/aom_dsp_rtcd.c"
55 "${AOM_ROOT}/aom_scale/aom_scale_rtcd.pl"
56 "${AOM_ROOT}/aom_scale/aom_scale_rtcd.c"
57 "${AOM_ROOT}/av1/common/av1_rtcd_defs.pl"
58 "${AOM_ROOT}/av1/common/av1_rtcd.c"
Tom Finegan229c4b52018-08-01 14:30:22 -070059 "${AOM_ROOT}/build/cmake/rtcd.pl")
Tom Finegana0c21f02017-02-01 11:11:09 -080060
Tom Finegan393b79b2018-05-02 10:49:56 -070061list(APPEND AOM_LIBWEBM_SOURCES
Johannb1c6ab62018-05-15 14:54:18 -070062 "${AOM_ROOT}/third_party/libwebm/common/hdr_util.cc"
63 "${AOM_ROOT}/third_party/libwebm/common/hdr_util.h"
64 "${AOM_ROOT}/third_party/libwebm/common/webmids.h"
65 "${AOM_ROOT}/third_party/libwebm/mkvmuxer/mkvmuxer.cc"
66 "${AOM_ROOT}/third_party/libwebm/mkvmuxer/mkvmuxer.h"
67 "${AOM_ROOT}/third_party/libwebm/mkvmuxer/mkvmuxertypes.h"
68 "${AOM_ROOT}/third_party/libwebm/mkvmuxer/mkvmuxerutil.cc"
69 "${AOM_ROOT}/third_party/libwebm/mkvmuxer/mkvmuxerutil.h"
70 "${AOM_ROOT}/third_party/libwebm/mkvmuxer/mkvwriter.cc"
71 "${AOM_ROOT}/third_party/libwebm/mkvmuxer/mkvwriter.h"
72 "${AOM_ROOT}/third_party/libwebm/mkvparser/mkvparser.cc"
73 "${AOM_ROOT}/third_party/libwebm/mkvparser/mkvparser.h"
74 "${AOM_ROOT}/third_party/libwebm/mkvparser/mkvreader.cc"
75 "${AOM_ROOT}/third_party/libwebm/mkvparser/mkvreader.h")
Tom Finegan957fe822016-11-09 10:37:27 -080076
Tom Finegan393b79b2018-05-02 10:49:56 -070077list(APPEND AOM_LIBYUV_SOURCES
Johannb1c6ab62018-05-15 14:54:18 -070078 "${AOM_ROOT}/third_party/libyuv/include/libyuv/basic_types.h"
79 "${AOM_ROOT}/third_party/libyuv/include/libyuv/convert.h"
80 "${AOM_ROOT}/third_party/libyuv/include/libyuv/convert_argb.h"
81 "${AOM_ROOT}/third_party/libyuv/include/libyuv/convert_from.h"
82 "${AOM_ROOT}/third_party/libyuv/include/libyuv/cpu_id.h"
83 "${AOM_ROOT}/third_party/libyuv/include/libyuv/planar_functions.h"
84 "${AOM_ROOT}/third_party/libyuv/include/libyuv/rotate.h"
85 "${AOM_ROOT}/third_party/libyuv/include/libyuv/row.h"
86 "${AOM_ROOT}/third_party/libyuv/include/libyuv/scale.h"
87 "${AOM_ROOT}/third_party/libyuv/include/libyuv/scale_row.h"
88 "${AOM_ROOT}/third_party/libyuv/source/cpu_id.cc"
89 "${AOM_ROOT}/third_party/libyuv/source/planar_functions.cc"
90 "${AOM_ROOT}/third_party/libyuv/source/row_any.cc"
91 "${AOM_ROOT}/third_party/libyuv/source/row_common.cc"
92 "${AOM_ROOT}/third_party/libyuv/source/row_gcc.cc"
93 "${AOM_ROOT}/third_party/libyuv/source/row_mips.cc"
94 "${AOM_ROOT}/third_party/libyuv/source/row_neon.cc"
95 "${AOM_ROOT}/third_party/libyuv/source/row_neon64.cc"
96 "${AOM_ROOT}/third_party/libyuv/source/row_win.cc"
97 "${AOM_ROOT}/third_party/libyuv/source/scale.cc"
98 "${AOM_ROOT}/third_party/libyuv/source/scale_any.cc"
99 "${AOM_ROOT}/third_party/libyuv/source/scale_common.cc"
100 "${AOM_ROOT}/third_party/libyuv/source/scale_gcc.cc"
101 "${AOM_ROOT}/third_party/libyuv/source/scale_mips.cc"
102 "${AOM_ROOT}/third_party/libyuv/source/scale_neon.cc"
103 "${AOM_ROOT}/third_party/libyuv/source/scale_neon64.cc"
104 "${AOM_ROOT}/third_party/libyuv/source/scale_win.cc")
Tom Finegan9cd97002016-11-09 10:37:44 -0800105
Tom Finegan393b79b2018-05-02 10:49:56 -0700106list(APPEND AOM_SOURCES
Tom Finegan60e653d2018-05-22 11:34:58 -0700107 "${AOM_CONFIG_DIR}/config/aom_config.c"
108 "${AOM_CONFIG_DIR}/config/aom_config.h"
Johannb1c6ab62018-05-15 14:54:18 -0700109 "${AOM_ROOT}/aom/aom.h"
110 "${AOM_ROOT}/aom/aom_codec.h"
111 "${AOM_ROOT}/aom/aom_decoder.h"
112 "${AOM_ROOT}/aom/aom_encoder.h"
113 "${AOM_ROOT}/aom/aom_frame_buffer.h"
114 "${AOM_ROOT}/aom/aom_image.h"
115 "${AOM_ROOT}/aom/aom_integer.h"
116 "${AOM_ROOT}/aom/aomcx.h"
117 "${AOM_ROOT}/aom/aomdx.h"
118 "${AOM_ROOT}/aom/internal/aom_codec_internal.h"
119 "${AOM_ROOT}/aom/src/aom_codec.c"
120 "${AOM_ROOT}/aom/src/aom_decoder.c"
121 "${AOM_ROOT}/aom/src/aom_encoder.c"
122 "${AOM_ROOT}/aom/src/aom_image.c"
123 "${AOM_ROOT}/aom/src/aom_integer.c")
Tom Fineganfc6f2362016-10-24 10:39:41 -0700124
Tom Finegan77902132018-05-21 10:19:15 -0700125list(APPEND AOM_COMMON_APP_UTIL_SOURCES "${AOM_ROOT}/common/args.c"
126 "${AOM_ROOT}/common/args.h" "${AOM_ROOT}/common/md5_utils.c"
127 "${AOM_ROOT}/common/md5_utils.h"
128 "${AOM_ROOT}/common/tools_common.c"
129 "${AOM_ROOT}/common/tools_common.h"
130 "${AOM_ROOT}/common/video_common.h" "${AOM_ROOT}/common/y4menc.c"
131 "${AOM_ROOT}/common/y4menc.h")
Tom Finegan03f6ca72016-11-10 13:02:48 -0800132
Tom Finegan77902132018-05-21 10:19:15 -0700133list(APPEND AOM_DECODER_APP_UTIL_SOURCES "${AOM_ROOT}/common/ivfdec.c"
134 "${AOM_ROOT}/common/ivfdec.h" "${AOM_ROOT}/common/obudec.c"
135 "${AOM_ROOT}/common/obudec.h" "${AOM_ROOT}/common/video_reader.c"
136 "${AOM_ROOT}/common/video_reader.h")
Tom Finegan03f6ca72016-11-10 13:02:48 -0800137
Tom Finegan393b79b2018-05-02 10:49:56 -0700138list(APPEND AOM_ENCODER_APP_UTIL_SOURCES
Tom Finegan77902132018-05-21 10:19:15 -0700139 "${AOM_ROOT}/common/ivfenc.c"
140 "${AOM_ROOT}/common/ivfenc.h"
141 "${AOM_ROOT}/common/video_writer.c"
142 "${AOM_ROOT}/common/video_writer.h"
143 "${AOM_ROOT}/common/warnings.c"
144 "${AOM_ROOT}/common/warnings.h"
145 "${AOM_ROOT}/common/y4minput.c"
146 "${AOM_ROOT}/common/y4minput.h"
Johannb1c6ab62018-05-15 14:54:18 -0700147 "${AOM_ROOT}/examples/encoder_util.h"
148 "${AOM_ROOT}/examples/encoder_util.c")
Tom Finegana89fe0e2017-01-19 14:38:28 -0800149
Tom Finegan77902132018-05-21 10:19:15 -0700150list(APPEND AOM_ENCODER_STATS_SOURCES "${AOM_ROOT}/stats/aomstats.c"
151 "${AOM_ROOT}/stats/aomstats.h" "${AOM_ROOT}/stats/rate_hist.c"
152 "${AOM_ROOT}/stats/rate_hist.h")
Tom Finegana89fe0e2017-01-19 14:38:28 -0800153
Tom Finegan393b79b2018-05-02 10:49:56 -0700154list(APPEND AOM_PKG_CONFIG_SOURCES "${AOM_CONFIG_DIR}/aom.pc")
Tom Finegan872e5852017-08-29 15:15:58 -0700155
Tom Finegan6791ad12018-05-24 14:30:59 -0700156list(APPEND AOM_VERSION_SOURCES "${AOM_CONFIG_DIR}/config/aom_version.h")
Tom Finegan872e5852017-08-29 15:15:58 -0700157
Tom Finegan77902132018-05-21 10:19:15 -0700158list(APPEND AOM_WEBM_DECODER_SOURCES "${AOM_ROOT}/common/webmdec.cc"
159 "${AOM_ROOT}/common/webmdec.h")
Tom Finegana89fe0e2017-01-19 14:38:28 -0800160
Tom Finegan77902132018-05-21 10:19:15 -0700161list(APPEND AOM_WEBM_ENCODER_SOURCES "${AOM_ROOT}/common/webmenc.cc"
162 "${AOM_ROOT}/common/webmenc.h")
Tom Finegana89fe0e2017-01-19 14:38:28 -0800163
Tom Finegan77902132018-05-21 10:19:15 -0700164include_directories(${AOM_ROOT} ${AOM_CONFIG_DIR} ${AOM_ROOT}/apps
165 ${AOM_ROOT}/common ${AOM_ROOT}/examples ${AOM_ROOT}/stats)
Tom Finegan03f6ca72016-11-10 13:02:48 -0800166
Tom Fineganfc6f2362016-10-24 10:39:41 -0700167# Targets
Tom Finegan872e5852017-08-29 15:15:58 -0700168add_library(aom_version ${AOM_VERSION_SOURCES})
169add_dummy_source_file_to_target(aom_version c)
Tom Finegan6791ad12018-05-24 14:30:59 -0700170add_custom_command(OUTPUT "${AOM_CONFIG_DIR}/config/aom_version.h"
Johannb1c6ab62018-05-15 14:54:18 -0700171 COMMAND ${CMAKE_COMMAND} ARGS
172 -DAOM_CONFIG_DIR=${AOM_CONFIG_DIR}
173 -DAOM_ROOT=${AOM_ROOT}
174 -DGIT_EXECUTABLE=${GIT_EXECUTABLE}
175 -DPERL_EXECUTABLE=${PERL_EXECUTABLE} -P
176 "${AOM_ROOT}/build/cmake/version.cmake"
177 COMMENT "Writing aom_version.h" VERBATIM)
Tom Finegan872e5852017-08-29 15:15:58 -0700178
179add_custom_target(aom_version_check
Johannb1c6ab62018-05-15 14:54:18 -0700180 COMMAND ${CMAKE_COMMAND} -DAOM_CONFIG_DIR=${AOM_CONFIG_DIR}
181 -DAOM_ROOT=${AOM_ROOT}
182 -DGIT_EXECUTABLE=${GIT_EXECUTABLE}
183 -DPERL_EXECUTABLE=${PERL_EXECUTABLE} -P
184 "${AOM_ROOT}/build/cmake/version.cmake"
185 COMMENT "Updating version info if necessary." VERBATIM)
Tom Finegan872e5852017-08-29 15:15:58 -0700186add_dependencies(aom_version aom_version_check)
187
Johannb1c6ab62018-05-15 14:54:18 -0700188if(NOT MSVC)
Tom Finegan872e5852017-08-29 15:15:58 -0700189 add_library(aom_pc ${AOM_PKG_CONFIG_SOURCES})
190 add_dummy_source_file_to_target(aom_pc c)
Johannb1c6ab62018-05-15 14:54:18 -0700191 add_custom_command(OUTPUT "${AOM_CONFIG_DIR}/aom.pc"
192 COMMAND ${CMAKE_COMMAND} ARGS
193 -DAOM_CONFIG_DIR=${AOM_CONFIG_DIR}
194 -DAOM_ROOT=${AOM_ROOT}
195 -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
196 -DCMAKE_PROJECT_NAME=${CMAKE_PROJECT_NAME}
197 -DCONFIG_MULTITHREAD=${CONFIG_MULTITHREAD}
198 -DHAVE_PTHREAD_H=${HAVE_PTHREAD_H} -P
199 "${AOM_ROOT}/build/cmake/pkg_config.cmake"
200 COMMENT "Writing aom.pc" VERBATIM)
Tom Finegan00b4df72017-09-01 11:30:34 -0700201 add_dependencies(aom_pc aom_version)
Johannb1c6ab62018-05-15 14:54:18 -0700202endif()
Tom Finegan872e5852017-08-29 15:15:58 -0700203
Tom Fineganf0d14442017-03-01 20:42:51 -0800204# TODO(tomfinegan): Move rtcd target setup where it belongs for each rtcd
205# source.
Tom Finegana0c21f02017-02-01 11:11:09 -0800206add_rtcd_build_step("${AOM_ROOT}/aom_dsp/aom_dsp_rtcd_defs.pl"
Tom Finegan44702c82018-05-22 13:00:39 -0700207 "${AOM_CONFIG_DIR}/config/aom_dsp_rtcd.h"
Johannb1c6ab62018-05-15 14:54:18 -0700208 "${AOM_ROOT}/aom_dsp/aom_dsp_rtcd.c" "aom_dsp_rtcd")
Tom Finegana0c21f02017-02-01 11:11:09 -0800209add_rtcd_build_step("${AOM_ROOT}/aom_scale/aom_scale_rtcd.pl"
Tom Finegan44702c82018-05-22 13:00:39 -0700210 "${AOM_CONFIG_DIR}/config/aom_scale_rtcd.h"
Johannb1c6ab62018-05-15 14:54:18 -0700211 "${AOM_ROOT}/aom_scale/aom_scale_rtcd.c" "aom_scale_rtcd")
Tom Finegana0c21f02017-02-01 11:11:09 -0800212add_rtcd_build_step("${AOM_ROOT}/av1/common/av1_rtcd_defs.pl"
Tom Finegan44702c82018-05-22 13:00:39 -0700213 "${AOM_CONFIG_DIR}/config/av1_rtcd.h"
Johannb1c6ab62018-05-15 14:54:18 -0700214 "${AOM_ROOT}/av1/common/av1_rtcd.c" "av1_rtcd")
Tom Finegan85ac13e2017-02-22 15:09:20 -0800215
Tom Finegana0c21f02017-02-01 11:11:09 -0800216add_library(aom_rtcd OBJECT ${AOM_RTCD_SOURCES})
Tom Finegan872e5852017-08-29 15:15:58 -0700217add_dependencies(aom_rtcd aom_version)
218
Tom Finegana7ed1432017-02-08 10:34:40 -0800219add_library(aom_encoder_stats OBJECT ${AOM_ENCODER_STATS_SOURCES})
Tom Fineganb7d02542017-03-01 21:14:28 -0800220add_library(aom ${AOM_SOURCES} $<TARGET_OBJECTS:aom_rtcd>)
Tom Finegan03f6ca72016-11-10 13:02:48 -0800221
Johannb1c6ab62018-05-15 14:54:18 -0700222if(NOT MSVC AND NOT APPLE)
Tom Finegan3e8986b2017-09-29 17:08:31 -0700223 target_link_libraries(aom ${AOM_LIB_LINK_TYPE} m)
Johannb1c6ab62018-05-15 14:54:18 -0700224endif()
Tom Finegan3e8986b2017-09-29 17:08:31 -0700225
Tom Finegana0c21f02017-02-01 11:11:09 -0800226# List of object and static library targets.
Tom Fineganb7d02542017-03-01 21:14:28 -0800227set(AOM_LIB_TARGETS ${AOM_LIB_TARGETS} aom_rtcd aom_encoder_stats aom_mem
228 aom_scale aom)
Tom Finegana0c21f02017-02-01 11:11:09 -0800229
Tom Finegan507e2e12017-03-01 19:58:19 -0800230# Setup dependencies.
Tom Finegan85ac13e2017-02-22 15:09:20 -0800231setup_aom_dsp_targets()
Tom Finegandd6d0572017-03-01 19:01:23 -0800232setup_aom_mem_targets()
Tom Finegan507e2e12017-03-01 19:58:19 -0800233setup_aom_ports_targets()
Tom Fineganb7d02542017-03-01 21:14:28 -0800234setup_aom_util_targets()
Tom Fineganf0d14442017-03-01 20:42:51 -0800235setup_aom_scale_targets()
Tom Finegan44916e72017-02-27 14:12:31 -0800236setup_av1_targets()
Tom Finegan85ac13e2017-02-22 15:09:20 -0800237
Tom Finegana0c21f02017-02-01 11:11:09 -0800238# Make all library targets depend on aom_rtcd to make sure it builds first.
Johannb1c6ab62018-05-15 14:54:18 -0700239foreach(aom_lib ${AOM_LIB_TARGETS})
240 if(NOT "${aom_lib}" STREQUAL "aom_rtcd")
Tom Finegana0c21f02017-02-01 11:11:09 -0800241 add_dependencies(${aom_lib} aom_rtcd)
Johannb1c6ab62018-05-15 14:54:18 -0700242 endif()
243endforeach()
Tom Fineganba02c242017-05-16 15:01:54 -0700244
Tom Fineganff863952017-12-22 11:41:14 -0800245# Generate C/C++ stub files containing the function usage_exit(). Users of the
Tom Finegane91bb452017-09-29 11:40:24 -0700246# aom_common_app_util library must define this function. This is a convenience
247# to allow omission of the function from applications that might want to use
Tom Fineganff863952017-12-22 11:41:14 -0800248# other pieces of the util support without defining usage_exit().
Tom Finegande6adff2018-08-01 14:22:14 -0700249file(WRITE "${AOM_GEN_SRC_DIR}/usage_exit.c" "void usage_exit(void) {}")
250file(WRITE "${AOM_GEN_SRC_DIR}/usage_exit.cc"
Johannb1c6ab62018-05-15 14:54:18 -0700251 "extern \"C\" void usage_exit(void) {}")
Tom Finegan03f6ca72016-11-10 13:02:48 -0800252
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700253#
254# Application and application support targets.
255#
Tom Finegand9647f22018-06-19 13:27:57 -0700256if(ENABLE_EXAMPLES OR ENABLE_TESTS OR ENABLE_TOOLS)
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700257 add_library(aom_common_app_util OBJECT ${AOM_COMMON_APP_UTIL_SOURCES})
Johannb1c6ab62018-05-15 14:54:18 -0700258 if(CONFIG_AV1_DECODER)
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700259 add_library(aom_decoder_app_util OBJECT ${AOM_DECODER_APP_UTIL_SOURCES})
James Zern41387402018-03-03 13:53:17 -0800260 # obudec depends on internal headers that require *rtcd.h
Tom Finegan61b71ab2018-03-22 15:58:38 -0700261 add_dependencies(aom_decoder_app_util aom_rtcd)
Johannb1c6ab62018-05-15 14:54:18 -0700262 endif()
263 if(CONFIG_AV1_ENCODER)
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700264 add_library(aom_encoder_app_util OBJECT ${AOM_ENCODER_APP_UTIL_SOURCES})
Johannb1c6ab62018-05-15 14:54:18 -0700265 endif()
266endif()
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700267
Tom Finegan77902132018-05-21 10:19:15 -0700268if((CONFIG_AV1_DECODER OR CONFIG_AV1_ENCODER) AND ENABLE_EXAMPLES)
269 add_executable(resize_util "${AOM_ROOT}/examples/resize_util.c"
270 $<TARGET_OBJECTS:aom_common_app_util>)
271 list(APPEND AOM_APP_TARGETS resize_util)
272endif()
273
Johannb1c6ab62018-05-15 14:54:18 -0700274if(CONFIG_AV1_DECODER AND ENABLE_EXAMPLES)
Tom Finegan77902132018-05-21 10:19:15 -0700275 add_executable(aomdec "${AOM_ROOT}/apps/aomdec.c"
Tom Finegan84f2d792017-06-15 23:06:44 -0700276 $<TARGET_OBJECTS:aom_common_app_util>
277 $<TARGET_OBJECTS:aom_decoder_app_util>)
Johannb1c6ab62018-05-15 14:54:18 -0700278 add_executable(decode_to_md5 "${AOM_ROOT}/examples/decode_to_md5.c"
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700279 $<TARGET_OBJECTS:aom_common_app_util>
280 $<TARGET_OBJECTS:aom_decoder_app_util>)
Johannb1c6ab62018-05-15 14:54:18 -0700281 add_executable(decode_with_drops "${AOM_ROOT}/examples/decode_with_drops.c"
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700282 $<TARGET_OBJECTS:aom_common_app_util>
283 $<TARGET_OBJECTS:aom_decoder_app_util>)
Johannb1c6ab62018-05-15 14:54:18 -0700284 add_executable(simple_decoder "${AOM_ROOT}/examples/simple_decoder.c"
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700285 $<TARGET_OBJECTS:aom_common_app_util>
286 $<TARGET_OBJECTS:aom_decoder_app_util>)
Johannb1c6ab62018-05-15 14:54:18 -0700287 add_executable(scalable_decoder "${AOM_ROOT}/examples/scalable_decoder.c"
Yaowu Xu7f313c02018-03-28 12:50:16 -0700288 $<TARGET_OBJECTS:aom_common_app_util>
289 $<TARGET_OBJECTS:aom_decoder_app_util>)
Tom Finegan393b79b2018-05-02 10:49:56 -0700290
Johannb1c6ab62018-05-15 14:54:18 -0700291 if(CONFIG_ANALYZER)
292 add_executable(analyzer "${AOM_ROOT}/examples/analyzer.cc"
Tom Finegan9befd172017-09-29 15:19:19 -0700293 $<TARGET_OBJECTS:aom_common_app_util>
294 $<TARGET_OBJECTS:aom_decoder_app_util>)
Johannb1c6ab62018-05-15 14:54:18 -0700295 target_link_libraries(analyzer ${AOM_LIB_LINK_TYPE} ${wxWidgets_LIBRARIES})
Tom Finegan393b79b2018-05-02 10:49:56 -0700296 list(APPEND AOM_APP_TARGETS analyzer)
297 list(APPEND AOM_DECODER_EXAMPLE_TARGETS analyzer)
Johannb1c6ab62018-05-15 14:54:18 -0700298 endif()
Tom Fineganba02c242017-05-16 15:01:54 -0700299
Johannb1c6ab62018-05-15 14:54:18 -0700300 if(CONFIG_INSPECTION)
301 add_executable(inspect "${AOM_ROOT}/examples/inspect.c"
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700302 $<TARGET_OBJECTS:aom_common_app_util>
303 $<TARGET_OBJECTS:aom_decoder_app_util>)
Tom Finegan393b79b2018-05-02 10:49:56 -0700304 list(APPEND AOM_DECODER_EXAMPLE_TARGETS inspect)
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700305
Johannb1c6ab62018-05-15 14:54:18 -0700306 if(EMSCRIPTEN)
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700307 add_preproc_definition(_POSIX_SOURCE)
Thomas Daede32fc4072018-01-12 04:04:24 -0800308 append_link_flag_to_target("inspect" "-s TOTAL_MEMORY=402653184")
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700309 append_link_flag_to_target("inspect" "-s MODULARIZE=1")
Yushin Cho1b0e7dc2018-08-24 20:23:25 -0700310 append_link_flag_to_target(
311 "inspect" "-s \'EXTRA_EXPORTED_RUNTIME_METHODS=[\"UTF8ToString\"]\'")
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700312 append_link_flag_to_target("inspect"
313 "-s EXPORT_NAME=\"\'DecoderModule\'\"")
314 append_link_flag_to_target("inspect" "--memory-init-file 0")
315
Johannb1c6ab62018-05-15 14:54:18 -0700316 if("${CMAKE_BUILD_TYPE}" STREQUAL "")
317
318 # Default to -O3 when no build type is specified.
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700319 append_compiler_flag("-O3")
Johannb1c6ab62018-05-15 14:54:18 -0700320 endif()
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700321
322 em_link_post_js(inspect "${AOM_ROOT}/tools/inspect-post.js")
Johannb1c6ab62018-05-15 14:54:18 -0700323 endif()
324 endif()
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700325
326 # Maintain a list of decoder example targets.
Johannb1c6ab62018-05-15 14:54:18 -0700327 list(APPEND AOM_DECODER_EXAMPLE_TARGETS aomdec decode_to_md5
328 decode_with_drops scalable_decoder simple_decoder)
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700329
Tom Finegan9befd172017-09-29 15:19:19 -0700330 # Add decoder examples to the app targets list.
Tom Finegan393b79b2018-05-02 10:49:56 -0700331 list(APPEND AOM_APP_TARGETS ${AOM_DECODER_EXAMPLE_TARGETS})
Johannb1c6ab62018-05-15 14:54:18 -0700332endif()
Michael Bebenitaf4f27fe2017-03-02 17:40:44 -0800333
Johannb1c6ab62018-05-15 14:54:18 -0700334if(CONFIG_AV1_ENCODER)
335 if(ENABLE_EXAMPLES)
Tom Finegan77902132018-05-21 10:19:15 -0700336 add_executable(aomenc "${AOM_ROOT}/apps/aomenc.c"
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700337 $<TARGET_OBJECTS:aom_common_app_util>
338 $<TARGET_OBJECTS:aom_encoder_app_util>
339 $<TARGET_OBJECTS:aom_encoder_stats>)
Johannb1c6ab62018-05-15 14:54:18 -0700340 add_executable(lossless_encoder "${AOM_ROOT}/examples/lossless_encoder.c"
Tom Finegane91bb452017-09-29 11:40:24 -0700341 $<TARGET_OBJECTS:aom_common_app_util>
342 $<TARGET_OBJECTS:aom_encoder_app_util>)
Johannb1c6ab62018-05-15 14:54:18 -0700343 add_executable(set_maps "${AOM_ROOT}/examples/set_maps.c"
Tom Finegan9befd172017-09-29 15:19:19 -0700344 $<TARGET_OBJECTS:aom_common_app_util>
345 $<TARGET_OBJECTS:aom_encoder_app_util>)
Johannb1c6ab62018-05-15 14:54:18 -0700346 add_executable(simple_encoder "${AOM_ROOT}/examples/simple_encoder.c"
Tom Finegan9befd172017-09-29 15:19:19 -0700347 $<TARGET_OBJECTS:aom_common_app_util>
348 $<TARGET_OBJECTS:aom_encoder_app_util>)
Johannb1c6ab62018-05-15 14:54:18 -0700349 add_executable(twopass_encoder "${AOM_ROOT}/examples/twopass_encoder.c"
Tom Finegan9befd172017-09-29 15:19:19 -0700350 $<TARGET_OBJECTS:aom_common_app_util>
351 $<TARGET_OBJECTS:aom_encoder_app_util>)
Johannb1c6ab62018-05-15 14:54:18 -0700352 add_executable(noise_model "${AOM_ROOT}/examples/noise_model.c"
Yaowu Xuc7119a72018-03-29 09:59:37 -0700353 $<TARGET_OBJECTS:aom_common_app_util>
354 $<TARGET_OBJECTS:aom_encoder_app_util>)
Johannb1c6ab62018-05-15 14:54:18 -0700355 add_executable(scalable_encoder "${AOM_ROOT}/examples/scalable_encoder.c"
Yaowu Xuc7119a72018-03-29 09:59:37 -0700356 $<TARGET_OBJECTS:aom_common_app_util>
357 $<TARGET_OBJECTS:aom_encoder_app_util>)
Tom Finegan9befd172017-09-29 15:19:19 -0700358
359 # Maintain a list of encoder example targets.
Johannb1c6ab62018-05-15 14:54:18 -0700360 list(APPEND AOM_ENCODER_EXAMPLE_TARGETS aomenc lossless_encoder noise_model
361 set_maps simple_encoder scalable_encoder twopass_encoder)
362 endif()
Tom Finegane91bb452017-09-29 11:40:24 -0700363
Johannb1c6ab62018-05-15 14:54:18 -0700364 if(ENABLE_TOOLS)
365 if(CONFIG_ENTROPY_STATS AND NOT BUILD_SHARED_LIBS)
366
Tom Fineganbac99072017-10-11 09:16:54 -0700367 # TODO(tomfinegan): Sort out why a simple link command with
368 # aom_entropy_optimizer.c won't work on macos, but dragging in all the
369 # helper machinery allows the link to succeed.
Tom Finegande6adff2018-08-01 14:22:14 -0700370 add_executable(aom_entropy_optimizer "${AOM_GEN_SRC_DIR}/usage_exit.c"
Tom Fineganbac99072017-10-11 09:16:54 -0700371 "${AOM_ROOT}/tools/aom_entropy_optimizer.c"
372 $<TARGET_OBJECTS:aom_common_app_util>
373 $<TARGET_OBJECTS:aom_encoder_app_util>)
Tom Finegan9befd172017-09-29 15:19:19 -0700374
Tom Fineganbac99072017-10-11 09:16:54 -0700375 # Maintain a list of encoder tool targets.
Tom Finegan393b79b2018-05-02 10:49:56 -0700376 list(APPEND AOM_ENCODER_TOOL_TARGETS aom_entropy_optimizer)
Johannb1c6ab62018-05-15 14:54:18 -0700377 endif()
378 endif()
Tom Fineganbac99072017-10-11 09:16:54 -0700379
380 # Add encoder examples and tools to the targets list.
Johannb1c6ab62018-05-15 14:54:18 -0700381 list(APPEND AOM_APP_TARGETS ${AOM_ENCODER_EXAMPLE_TARGETS}
382 ${AOM_ENCODER_TOOL_TARGETS})
383endif()
Tom Fineganba02c242017-05-16 15:01:54 -0700384
Johannb1c6ab62018-05-15 14:54:18 -0700385if(ENABLE_EXAMPLES)
386
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700387 # Maintain a separate variable listing only the examples to facilitate
388 # installation of example programs into an examples sub directory of
389 # $AOM_DIST_DIR/bin when building the dist target.
Johannb1c6ab62018-05-15 14:54:18 -0700390 list(APPEND AOM_EXAMPLE_TARGETS ${AOM_DECODER_EXAMPLE_TARGETS}
391 ${AOM_ENCODER_EXAMPLE_TARGETS})
392endif()
Tom Finegan78975672017-05-30 08:55:54 -0700393
Johannb1c6ab62018-05-15 14:54:18 -0700394if(ENABLE_TOOLS)
395 if(CONFIG_AV1_DECODER)
Tom Fineganff863952017-12-22 11:41:14 -0800396 require_cxx_flag_nomsvc("-std=c++11" NO)
Tom Finegande6adff2018-08-01 14:22:14 -0700397 add_executable(dump_obu "${AOM_GEN_SRC_DIR}/usage_exit.cc"
Tom Fineganc0192332017-12-02 09:31:45 -0800398 "${AOM_ROOT}/tools/dump_obu.cc"
399 "${AOM_ROOT}/tools/obu_parser.cc"
400 "${AOM_ROOT}/tools/obu_parser.h"
401 $<TARGET_OBJECTS:aom_common_app_util>
402 $<TARGET_OBJECTS:aom_decoder_app_util>)
Tom Fineganff863952017-12-22 11:41:14 -0800403
Tom Fineganc0192332017-12-02 09:31:45 -0800404 list(APPEND AOM_TOOL_TARGETS dump_obu)
405 list(APPEND AOM_APP_TARGETS dump_obu)
Tom Fineganc0192332017-12-02 09:31:45 -0800406
Johannb1c6ab62018-05-15 14:54:18 -0700407 if(NOT MSVC)
Tom Fineganff863952017-12-22 11:41:14 -0800408 target_compile_options(dump_obu PUBLIC -std=c++11)
Johannb1c6ab62018-05-15 14:54:18 -0700409 endif()
Tom Fineganff863952017-12-22 11:41:14 -0800410
411 # Maintain a separate variable listing only the examples to facilitate
412 # installation of example programs into an tools sub directory of
413 # $AOM_DIST_DIR/bin when building the dist target.
Johannb1c6ab62018-05-15 14:54:18 -0700414 list(APPEND AOM_TOOL_TARGETS ${AOM_DECODER_TOOL_TARGETS}
415 ${AOM_ENCODER_TOOL_TARGETS})
416 endif()
417endif()
Tom Finegane91bb452017-09-29 11:40:24 -0700418
Johannb1c6ab62018-05-15 14:54:18 -0700419if(ENABLE_EXAMPLES AND CONFIG_AV1_DECODER AND CONFIG_AV1_ENCODER)
420 add_executable(aom_cx_set_ref "${AOM_ROOT}/examples/aom_cx_set_ref.c"
Tom Fineganba02c242017-05-16 15:01:54 -0700421 $<TARGET_OBJECTS:aom_common_app_util>
422 $<TARGET_OBJECTS:aom_encoder_app_util>)
Tom Finegan393b79b2018-05-02 10:49:56 -0700423 list(APPEND AOM_EXAMPLE_TARGETS aom_cx_set_ref)
424 list(APPEND AOM_APP_TARGETS aom_cx_set_ref)
Johannb1c6ab62018-05-15 14:54:18 -0700425endif()
Tom Finegan81279802017-02-01 11:27:05 -0800426
Johannb1c6ab62018-05-15 14:54:18 -0700427if(ENABLE_EXAMPLES AND CONFIG_AV1_ENCODER)
428 add_executable(lightfield_encoder "${AOM_ROOT}/examples/lightfield_encoder.c"
Yunqing Wangb97cfae2018-05-11 14:19:05 -0700429 $<TARGET_OBJECTS:aom_common_app_util>
430 $<TARGET_OBJECTS:aom_encoder_app_util>)
431 list(APPEND AOM_EXAMPLE_TARGETS lightfield_encoder)
432 list(APPEND AOM_APP_TARGETS lightfield_encoder)
Johannb1c6ab62018-05-15 14:54:18 -0700433endif()
Yunqing Wangb97cfae2018-05-11 14:19:05 -0700434
Johannb1c6ab62018-05-15 14:54:18 -0700435if(ENABLE_EXAMPLES AND CONFIG_AV1_DECODER)
Yunqing Wangd417bb52018-06-03 14:13:38 -0700436 add_executable(lightfield_tile_list_decoder
437 "${AOM_ROOT}/examples/lightfield_tile_list_decoder.c"
438 $<TARGET_OBJECTS:aom_common_app_util>
439 $<TARGET_OBJECTS:aom_decoder_app_util>)
440 list(APPEND AOM_EXAMPLE_TARGETS lightfield_tile_list_decoder)
441 list(APPEND AOM_APP_TARGETS lightfield_tile_list_decoder)
442endif()
443
444if(ENABLE_EXAMPLES AND CONFIG_AV1_DECODER)
Johannb1c6ab62018-05-15 14:54:18 -0700445 add_executable(lightfield_decoder "${AOM_ROOT}/examples/lightfield_decoder.c"
Yunqing Wangb97cfae2018-05-11 14:19:05 -0700446 $<TARGET_OBJECTS:aom_common_app_util>
447 $<TARGET_OBJECTS:aom_decoder_app_util>)
448 list(APPEND AOM_EXAMPLE_TARGETS lightfield_decoder)
449 list(APPEND AOM_APP_TARGETS lightfield_decoder)
Johannb1c6ab62018-05-15 14:54:18 -0700450endif()
Yunqing Wangb97cfae2018-05-11 14:19:05 -0700451
Yunqing Wang40bde4d2018-06-01 16:48:03 -0700452if(ENABLE_EXAMPLES AND CONFIG_AV1_ENCODER AND CONFIG_AV1_DECODER)
453 add_executable(lightfield_bitstream_parsing
454 "${AOM_ROOT}/examples/lightfield_bitstream_parsing.c"
455 $<TARGET_OBJECTS:aom_common_app_util>
456 $<TARGET_OBJECTS:aom_encoder_app_util>
457 $<TARGET_OBJECTS:aom_decoder_app_util>)
458 list(APPEND AOM_EXAMPLE_TARGETS lightfield_bitstream_parsing)
459 list(APPEND AOM_APP_TARGETS lightfield_bitstream_parsing)
460endif()
461
Johannb1c6ab62018-05-15 14:54:18 -0700462foreach(aom_app ${AOM_APP_TARGETS})
Tom Finegand46b4d32017-05-09 09:14:03 -0700463 target_link_libraries(${aom_app} ${AOM_LIB_LINK_TYPE} aom)
Johannb1c6ab62018-05-15 14:54:18 -0700464endforeach()
Tom Fineganfc6f2362016-10-24 10:39:41 -0700465
Tom Finegand9647f22018-06-19 13:27:57 -0700466if(ENABLE_EXAMPLES OR ENABLE_TESTS OR ENABLE_TOOLS)
Johannb1c6ab62018-05-15 14:54:18 -0700467 if(CONFIG_LIBYUV)
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700468 add_library(yuv OBJECT ${AOM_LIBYUV_SOURCES})
Johannb1c6ab62018-05-15 14:54:18 -0700469 if(NOT MSVC)
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700470 target_compile_options(yuv PRIVATE -Wno-unused-parameter)
Johannb1c6ab62018-05-15 14:54:18 -0700471 endif()
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700472 include_directories("${AOM_ROOT}/third_party/libyuv/include")
Tom Finegan9cd97002016-11-09 10:37:44 -0800473
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700474 # Add to existing targets.
Johannb1c6ab62018-05-15 14:54:18 -0700475 foreach(aom_app ${AOM_APP_TARGETS})
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700476 target_sources(${aom_app} PRIVATE $<TARGET_OBJECTS:yuv>)
477 set_property(TARGET ${aom_app} PROPERTY LINKER_LANGUAGE CXX)
Johannb1c6ab62018-05-15 14:54:18 -0700478 endforeach()
479 endif()
Tom Finegan957fe822016-11-09 10:37:27 -0800480
Johannb1c6ab62018-05-15 14:54:18 -0700481 if(CONFIG_WEBM_IO)
Johanne2659342018-05-14 13:40:26 -0700482 require_cxx_flag_nomsvc("-std=c++11" NO)
483
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700484 add_library(webm OBJECT ${AOM_LIBWEBM_SOURCES})
485 include_directories("${AOM_ROOT}/third_party/libwebm")
486 target_compile_definitions(webm PRIVATE __STDC_CONSTANT_MACROS)
487 target_compile_definitions(webm PRIVATE __STDC_LIMIT_MACROS)
Tom Fineganba02c242017-05-16 15:01:54 -0700488
Johannb1c6ab62018-05-15 14:54:18 -0700489 if(NOT MSVC)
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700490 target_compile_options(webm PRIVATE -Wno-shadow)
Johanne2659342018-05-14 13:40:26 -0700491 target_compile_options(webm PUBLIC -std=c++11)
Johannb1c6ab62018-05-15 14:54:18 -0700492 endif()
Tom Finegan81279802017-02-01 11:27:05 -0800493
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700494 # Add to existing targets.
Johannb1c6ab62018-05-15 14:54:18 -0700495 if(CONFIG_AV1_DECODER)
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700496 target_sources(aom_decoder_app_util PRIVATE ${AOM_WEBM_DECODER_SOURCES})
Johannb1c6ab62018-05-15 14:54:18 -0700497 endif()
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700498
Johannb1c6ab62018-05-15 14:54:18 -0700499 if(CONFIG_AV1_ENCODER)
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700500 target_sources(aom_encoder_app_util PRIVATE ${AOM_WEBM_ENCODER_SOURCES})
Johannb1c6ab62018-05-15 14:54:18 -0700501 endif()
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700502
Johannb1c6ab62018-05-15 14:54:18 -0700503 foreach(aom_app ${AOM_APP_TARGETS})
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700504 target_sources(${aom_app} PRIVATE $<TARGET_OBJECTS:webm>)
505 set_property(TARGET ${aom_app} PROPERTY LINKER_LANGUAGE CXX)
Johannb1c6ab62018-05-15 14:54:18 -0700506 endforeach()
507 endif()
508endif()
Tom Finegan7ba9ba82017-01-23 14:04:28 -0800509
Tom Finegand9647f22018-06-19 13:27:57 -0700510if(ENABLE_TESTS)
Johannb1c6ab62018-05-15 14:54:18 -0700511
Tom Finegan4db04d32017-02-23 14:37:27 -0800512 # Create test_libaom target and the targets it depends on.
513 setup_aom_test_targets()
Johannb1c6ab62018-05-15 14:54:18 -0700514endif()
Tom Finegan9412ec32017-02-01 11:41:43 -0800515
Johannb1c6ab62018-05-15 14:54:18 -0700516if(HAVE_PTHREAD_H AND CONFIG_MULTITHREAD)
Tom Finegan606f6462017-03-06 11:18:29 -0800517 find_package(Threads)
Tom Finegana1679392018-08-02 11:12:22 -0700518 target_link_libraries(aom ${AOM_LIB_LINK_TYPE} Threads::Threads)
Johannb1c6ab62018-05-15 14:54:18 -0700519endif()
Tom Finegan606f6462017-03-06 11:18:29 -0800520
Johannb1c6ab62018-05-15 14:54:18 -0700521if(XCODE)
522
Tom Finegandb37c752017-11-30 17:02:27 -0800523 # TODO(tomfinegan): Make sure target has no C++ files before doing this as
524 # it's not necessary in that case.
Johannb1c6ab62018-05-15 14:54:18 -0700525 if(CONFIG_LIBYUV OR CONFIG_WEBM_IO)
526
Tom Finegan9412ec32017-02-01 11:41:43 -0800527 # The Xcode generator does not obey LINKER_LANGUAGE. Because of the issue
528 # what looks like a C++ file needs to be in any target that Xcode will link
Johannb1c6ab62018-05-15 14:54:18 -0700529 # when the target contains a C++ dependency. Without this Xcode will try to
530 # link with the C linker, which always ends badly when a dependency actually
531 # includes C++.
532
Tom Finegan9412ec32017-02-01 11:41:43 -0800533 # Note: LINKER_LANGUAGE is explicitly set to C++ for all targets touched
534 # here, it really is the Xcode generator's fault, or just a deficiency in
535 # Xcode itself.
Johannb1c6ab62018-05-15 14:54:18 -0700536 foreach(aom_app ${AOM_APP_TARGETS})
Tom Finegan84f2d792017-06-15 23:06:44 -0700537 add_dummy_source_file_to_target("${aom_app}" "cc")
Johannb1c6ab62018-05-15 14:54:18 -0700538 endforeach()
539 endif()
540endif()
Tom Finegan0a4ef082017-03-31 11:07:34 -0700541
Johannb1c6ab62018-05-15 14:54:18 -0700542if(ENABLE_EXAMPLES AND "${CMAKE_GENERATOR}" MATCHES "Makefiles$")
543
Johanne07a6752018-01-10 12:47:44 -0800544 # For historical purposes place the example binaries in the example directory.
Tom Finegan78975672017-05-30 08:55:54 -0700545 file(MAKE_DIRECTORY "${AOM_CONFIG_DIR}/examples")
Tom Finegan938172c2017-10-07 13:58:34 -0700546
Johannb1c6ab62018-05-15 14:54:18 -0700547 foreach(target ${AOM_EXAMPLE_TARGETS})
548 if(NOT "${target}" MATCHES "aomdec\|aomenc")
549 set_target_properties(${target}
550 PROPERTIES RUNTIME_OUTPUT_DIRECTORY
551 "${AOM_CONFIG_DIR}/examples")
552 endif()
553 endforeach()
Tom Finegane91bb452017-09-29 11:40:24 -0700554
Johannb1c6ab62018-05-15 14:54:18 -0700555 if(ENABLE_TOOLS AND AOM_TOOL_TARGETS)
556
Tom Finegane91bb452017-09-29 11:40:24 -0700557 # The same expectation is true for tool targets.
558 file(MAKE_DIRECTORY "${AOM_CONFIG_DIR}/tools")
Johannb1c6ab62018-05-15 14:54:18 -0700559 set_target_properties(${AOM_TOOL_TARGETS}
560 PROPERTIES RUNTIME_OUTPUT_DIRECTORY
561 "${AOM_CONFIG_DIR}/tools")
562 endif()
563endif()
Tom Finegan78975672017-05-30 08:55:54 -0700564
Johannb1c6ab62018-05-15 14:54:18 -0700565if(BUILD_SHARED_LIBS)
Tom Finegan84f2d792017-06-15 23:06:44 -0700566 include("${AOM_ROOT}/build/cmake/exports.cmake")
567 setup_exports_target()
Tom Finegan4a3a9c02017-07-14 08:34:20 -0700568 set_target_properties(aom PROPERTIES SOVERSION 0)
Johannb1c6ab62018-05-15 14:54:18 -0700569endif()
Tom Finegan84f2d792017-06-15 23:06:44 -0700570
Tom Fineganc8593982017-09-05 11:01:09 -0700571# Handle user supplied compile and link flags last to ensure they're obeyed.
572set_user_flags()
573
Tom Finegan0d066ce2017-05-30 11:07:05 -0700574# Aomedia documentation rule.
Johannb1c6ab62018-05-15 14:54:18 -0700575if(ENABLE_DOCS)
Tom Finegan0d066ce2017-05-30 11:07:05 -0700576 include(FindDoxygen)
Johannb1c6ab62018-05-15 14:54:18 -0700577 if(DOXYGEN_FOUND)
Tom Finegan0d066ce2017-05-30 11:07:05 -0700578 include("${AOM_ROOT}/docs.cmake")
579 setup_documentation_targets()
Johannb1c6ab62018-05-15 14:54:18 -0700580 else()
Tom Finegan0d066ce2017-05-30 11:07:05 -0700581 message("--- Cannot find doxygen, ENABLE_DOCS turned off.")
582 set(ENABLE_DOCS OFF)
Johannb1c6ab62018-05-15 14:54:18 -0700583 endif()
584endif()
Tom Finegan0d066ce2017-05-30 11:07:05 -0700585
Tom Finegan6bf66ad2018-05-25 10:44:30 -0700586if(NOT (MSVC OR XCODE))
Tom Fineganba02c242017-05-16 15:01:54 -0700587
Tom Finegan6bf66ad2018-05-25 10:44:30 -0700588 # Aomedia install rule.
589 list(APPEND AOM_INSTALL_INCS "${AOM_ROOT}/aom/aom.h"
590 "${AOM_ROOT}/aom/aom_codec.h"
591 "${AOM_ROOT}/aom/aom_frame_buffer.h"
592 "${AOM_ROOT}/aom/aom_image.h" "${AOM_ROOT}/aom/aom_integer.h"
593 "${AOM_ROOT}/aom/aom.h")
594
595 if(CONFIG_AV1_DECODER)
596 if(ENABLE_EXAMPLES)
597 list(APPEND AOM_INSTALL_BINS aomdec)
598 endif()
599
600 list(APPEND AOM_INSTALL_INCS "${AOM_ROOT}/aom/aom_decoder.h"
601 "${AOM_ROOT}/aom/aomdx.h")
Johannb1c6ab62018-05-15 14:54:18 -0700602 endif()
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700603
Tom Finegan6bf66ad2018-05-25 10:44:30 -0700604 if(CONFIG_AV1_ENCODER)
605 if(ENABLE_EXAMPLES)
606 list(APPEND AOM_INSTALL_BINS aomenc)
607 endif()
Tom Fineganba02c242017-05-16 15:01:54 -0700608
Tom Finegan6bf66ad2018-05-25 10:44:30 -0700609 list(APPEND AOM_INSTALL_INCS "${AOM_ROOT}/aom/aomcx.h"
610 "${AOM_ROOT}/aom/aom_encoder.h")
Johannb1c6ab62018-05-15 14:54:18 -0700611 endif()
Tom Finegan9cc0cfe2017-10-03 16:19:43 -0700612
Tom Finegan6bf66ad2018-05-25 10:44:30 -0700613 set(AOM_INSTALL_LIBS aom)
Tom Fineganba02c242017-05-16 15:01:54 -0700614
Tom Finegan6bf66ad2018-05-25 10:44:30 -0700615 install(FILES ${AOM_INSTALL_INCS} DESTINATION "${INCLUDE_INSTALL_DIR}/aom")
616 install(FILES "${AOM_CONFIG_DIR}/aom.pc" DESTINATION
617 "${LIB_INSTALL_DIR}/pkgconfig")
618 install(TARGETS ${AOM_INSTALL_LIBS} DESTINATION "${LIB_INSTALL_DIR}")
Tom Finegan0a4ef082017-03-31 11:07:34 -0700619
Tom Finegan6bf66ad2018-05-25 10:44:30 -0700620 if(ENABLE_EXAMPLES)
621 install(TARGETS ${AOM_INSTALL_BINS} DESTINATION
622 "${CMAKE_INSTALL_PREFIX}/bin")
623 endif()
Johannb1c6ab62018-05-15 14:54:18 -0700624endif()
Tom Finegan0d066ce2017-05-30 11:07:05 -0700625
Tom Finegan78975672017-05-30 08:55:54 -0700626# Aomedia dist rule.
Johannb1c6ab62018-05-15 14:54:18 -0700627if(CONFIG_AV1_DECODER AND ENABLE_EXAMPLES)
Tom Finegan393b79b2018-05-02 10:49:56 -0700628 list(APPEND AOM_DIST_APPS $<TARGET_FILE:aomdec>)
Johannb1c6ab62018-05-15 14:54:18 -0700629endif()
630if(CONFIG_AV1_ENCODER AND ENABLE_EXAMPLES)
Tom Finegan393b79b2018-05-02 10:49:56 -0700631 list(APPEND AOM_DIST_APPS $<TARGET_FILE:aomenc>)
Johannb1c6ab62018-05-15 14:54:18 -0700632endif()
Tom Finegan78975672017-05-30 08:55:54 -0700633
Johannb1c6ab62018-05-15 14:54:18 -0700634if(ENABLE_EXAMPLES)
635 foreach(example ${AOM_EXAMPLE_TARGETS})
Tom Finegan9befd172017-09-29 15:19:19 -0700636 list(APPEND AOM_DIST_EXAMPLES $<TARGET_FILE:${example}>)
Johannb1c6ab62018-05-15 14:54:18 -0700637 endforeach()
638endif()
Tom Finegan78975672017-05-30 08:55:54 -0700639
Johannb1c6ab62018-05-15 14:54:18 -0700640if(ENABLE_TOOLS)
641 foreach(tool ${AOM_TOOL_TARGETS})
Tom Finegan9befd172017-09-29 15:19:19 -0700642 list(APPEND AOM_DIST_TOOLS $<TARGET_FILE:${tool}>)
Johannb1c6ab62018-05-15 14:54:18 -0700643 endforeach()
644endif()
Tom Finegane91bb452017-09-29 11:40:24 -0700645
Johannb1c6ab62018-05-15 14:54:18 -0700646if(NOT AOM_DIST_DIR)
Tom Finegan78975672017-05-30 08:55:54 -0700647 set(AOM_DIST_DIR "${AOM_CONFIG_DIR}/dist")
Johannb1c6ab62018-05-15 14:54:18 -0700648endif()
Tom Finegan78975672017-05-30 08:55:54 -0700649
650add_custom_target(dist
Johannb1c6ab62018-05-15 14:54:18 -0700651 COMMAND ${CMAKE_COMMAND} -DAOM_ROOT=${AOM_ROOT}
652 -DAOM_CONFIG_DIR=${AOM_CONFIG_DIR}
653 -DAOM_DIST_DIR=${AOM_DIST_DIR}
654 -DAOM_DIST_APPS="${AOM_DIST_APPS}"
655 -DAOM_DIST_EXAMPLES="${AOM_DIST_EXAMPLES}"
656 -DAOM_DIST_TOOLS="${AOM_DIST_TOOLS}"
657 -DAOM_DIST_INCLUDES="${AOM_INSTALL_INCS}"
658 -DAOM_DIST_LIBS=$<TARGET_FILE:aom>
659 -DENABLE_DOCS=${ENABLE_DOCS} -P
660 "${AOM_ROOT}/build/cmake/dist.cmake"
Tom Finegan78975672017-05-30 08:55:54 -0700661 DEPENDS ${AOM_INSTALL_BINS} ${AOM_INSTALL_LIBS}
Johannb1c6ab62018-05-15 14:54:18 -0700662 ${AOM_INSTALL_INCS} ${AOM_EXAMPLE_TARGETS}
663 ${AOM_TOOL_TARGETS})
Tom Finegan78975672017-05-30 08:55:54 -0700664
Johannb1c6ab62018-05-15 14:54:18 -0700665if(ENABLE_DOCS)
Tom Finegan78975672017-05-30 08:55:54 -0700666 add_dependencies(dist docs)
Johannb1c6ab62018-05-15 14:54:18 -0700667endif()
Tom Fineganc34abc82017-10-13 12:04:59 -0700668
669# Collect all variables containing libaom source files.
670get_cmake_property(all_cmake_vars VARIABLES)
Johannb1c6ab62018-05-15 14:54:18 -0700671foreach(var ${all_cmake_vars})
672 if("${var}" MATCHES "SOURCES$\|_INTRIN_\|_ASM_" AND NOT "${var}" MATCHES
673 "_APP_\|DOXYGEN\|LIBWEBM\|LIBYUV\|_PKG_\|TEST")
Tom Fineganc34abc82017-10-13 12:04:59 -0700674 list(APPEND aom_source_vars ${var})
Johannb1c6ab62018-05-15 14:54:18 -0700675 endif()
676endforeach()
Tom Fineganc34abc82017-10-13 12:04:59 -0700677
678# Libaom_srcs.txt generation.
679set(libaom_srcs_txt_file "${AOM_CONFIG_DIR}/libaom_srcs.txt")
680file(WRITE "${libaom_srcs_txt_file}" "# This file is generated. DO NOT EDIT.\n")
681
682# Static source file list first.
Johannb1c6ab62018-05-15 14:54:18 -0700683foreach(aom_source_var ${aom_source_vars})
684 foreach(file ${${aom_source_var}})
685 if(NOT "${file}" MATCHES "${AOM_CONFIG_DIR}")
Tom Fineganc34abc82017-10-13 12:04:59 -0700686 string(REPLACE "${AOM_ROOT}/" "" file "${file}")
687 file(APPEND "${libaom_srcs_txt_file}" "${file}\n")
Johannb1c6ab62018-05-15 14:54:18 -0700688 endif()
689 endforeach()
690endforeach()
Tom Fineganc34abc82017-10-13 12:04:59 -0700691
Johannb1c6ab62018-05-15 14:54:18 -0700692file(APPEND
693 "${libaom_srcs_txt_file}"
694 "# Files below this line are generated by the libaom build system.\n")
695foreach(aom_source_var ${aom_source_vars})
696 foreach(file ${${aom_source_var}})
697 if("${file}" MATCHES "${AOM_CONFIG_DIR}")
Tom Fineganc34abc82017-10-13 12:04:59 -0700698 string(REPLACE "${AOM_CONFIG_DIR}/" "" file "${file}")
699 file(APPEND "${libaom_srcs_txt_file}" "${file}\n")
Johannb1c6ab62018-05-15 14:54:18 -0700700 endif()
701 endforeach()
702endforeach()
Tom Fineganc34abc82017-10-13 12:04:59 -0700703
704# Libaom_srcs.gni generation.
705set(libaom_srcs_gni_file "${AOM_CONFIG_DIR}/libaom_srcs.gni")
706file(WRITE "${libaom_srcs_gni_file}" "# This file is generated. DO NOT EDIT.\n")
707
Johannb1c6ab62018-05-15 14:54:18 -0700708foreach(aom_source_var ${aom_source_vars})
709 if("${${aom_source_var}}" MATCHES "${AOM_ROOT}")
Tom Fineganc34abc82017-10-13 12:04:59 -0700710 string(TOLOWER ${aom_source_var} aom_source_var_lowercase)
711 file(APPEND "${libaom_srcs_gni_file}" "\n${aom_source_var_lowercase} = [\n")
Johannb1c6ab62018-05-15 14:54:18 -0700712 endif()
Tom Fineganc34abc82017-10-13 12:04:59 -0700713
Johannb1c6ab62018-05-15 14:54:18 -0700714 foreach(file ${${aom_source_var}})
715 if(NOT "${file}" MATCHES "${AOM_CONFIG_DIR}")
716 string(REPLACE "${AOM_ROOT}" "//third_party/libaom/source/libaom" file
717 "${file}")
Tom Fineganc34abc82017-10-13 12:04:59 -0700718 file(APPEND "${libaom_srcs_gni_file}" " \"${file}\",\n")
Johannb1c6ab62018-05-15 14:54:18 -0700719 endif()
720 endforeach()
Tom Fineganc34abc82017-10-13 12:04:59 -0700721
Johannb1c6ab62018-05-15 14:54:18 -0700722 if("${${aom_source_var}}" MATCHES "${AOM_ROOT}")
Tom Fineganc34abc82017-10-13 12:04:59 -0700723 file(APPEND "${libaom_srcs_gni_file}" "]\n")
Johannb1c6ab62018-05-15 14:54:18 -0700724 endif()
725endforeach()
Tom Fineganc34abc82017-10-13 12:04:59 -0700726
Johannb1c6ab62018-05-15 14:54:18 -0700727file(APPEND
728 "${libaom_srcs_gni_file}"
729 "\n# Files below this line are generated by the libaom build system.\n")
Tom Fineganc34abc82017-10-13 12:04:59 -0700730
Johannb1c6ab62018-05-15 14:54:18 -0700731foreach(aom_source_var ${aom_source_vars})
732 if("${${aom_source_var}}" MATCHES "${AOM_CONFIG_DIR}")
Tom Fineganc34abc82017-10-13 12:04:59 -0700733 string(TOLOWER ${aom_source_var} aom_source_var_lowercase)
734 file(APPEND "${libaom_srcs_gni_file}"
Johannb1c6ab62018-05-15 14:54:18 -0700735 "\n${aom_source_var_lowercase}_gen = [\n")
736 endif()
737 foreach(file ${${aom_source_var}})
738 if(NOT "${file}" MATCHES "${AOM_ROOT}")
Johann2ef3da22018-04-05 13:33:55 -0700739 string(REPLACE "${AOM_CONFIG_DIR}" "//third_party/libaom/source/libaom"
Johannb1c6ab62018-05-15 14:54:18 -0700740 file "${file}")
Tom Fineganc34abc82017-10-13 12:04:59 -0700741 file(APPEND "${libaom_srcs_gni_file}" " \"${file}\",\n")
Johannb1c6ab62018-05-15 14:54:18 -0700742 endif()
743 endforeach()
Tom Fineganc34abc82017-10-13 12:04:59 -0700744
Johannb1c6ab62018-05-15 14:54:18 -0700745 if("${${aom_source_var}}" MATCHES "${AOM_CONFIG_DIR}")
Tom Fineganc34abc82017-10-13 12:04:59 -0700746 file(APPEND "${libaom_srcs_gni_file}" "]\n")
Johannb1c6ab62018-05-15 14:54:18 -0700747 endif()
748endforeach()