BUILD.gn 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535
  1. # Copyright 2014 The Chromium Authors. All rights reserved.
  2. # Use of this source code is governed by a BSD-style license that can be
  3. # found in the LICENSE file.
  4. import("//build/config/android/config.gni")
  5. import("//build/config/chromeos/ui_mode.gni")
  6. import("//build/config/features.gni")
  7. import("//build/config/ui.gni")
  8. import("//testing/test.gni")
  9. import("//third_party/libaom/options.gni")
  10. import("//third_party/protobuf/proto_library.gni")
  11. proto_library("logging_proto") {
  12. sources = [ "logging/proto/raw_events.proto" ]
  13. }
  14. # Common code shared by all cast components.
  15. source_set("common") {
  16. sources = [
  17. "cast_callbacks.h",
  18. "cast_config.cc",
  19. "cast_config.h",
  20. "cast_environment.cc",
  21. "cast_environment.h",
  22. "common/clock_drift_smoother.cc",
  23. "common/clock_drift_smoother.h",
  24. "common/encoded_frame.cc",
  25. "common/encoded_frame.h",
  26. "common/expanded_value_base.h",
  27. "common/frame_id.h",
  28. "common/openscreen_conversion_helpers.cc",
  29. "common/openscreen_conversion_helpers.h",
  30. "common/rtp_time.h",
  31. "common/sender_encoded_frame.cc",
  32. "common/sender_encoded_frame.h",
  33. "common/transport_encryption_handler.cc",
  34. "common/transport_encryption_handler.h",
  35. "common/video_frame_factory.h",
  36. "constants.h",
  37. "logging/encoding_event_subscriber.cc",
  38. "logging/encoding_event_subscriber.h",
  39. "logging/log_event_dispatcher.cc",
  40. "logging/log_event_dispatcher.h",
  41. "logging/logging_defines.cc",
  42. "logging/logging_defines.h",
  43. "logging/proto/proto_utils.cc",
  44. "logging/proto/proto_utils.h",
  45. "logging/raw_event_subscriber.h",
  46. "logging/raw_event_subscriber_bundle.cc",
  47. "logging/raw_event_subscriber_bundle.h",
  48. "logging/receiver_time_offset_estimator.h",
  49. "logging/receiver_time_offset_estimator_impl.cc",
  50. "logging/receiver_time_offset_estimator_impl.h",
  51. "logging/simple_event_subscriber.cc",
  52. "logging/simple_event_subscriber.h",
  53. "logging/stats_event_subscriber.cc",
  54. "logging/stats_event_subscriber.h",
  55. ]
  56. deps = [
  57. ":logging_proto",
  58. "//base",
  59. "//crypto",
  60. "//media",
  61. "//net",
  62. "//third_party/zlib",
  63. ]
  64. public_deps = [
  65. # The generated headers reference headers within protobuf_lite, so
  66. # dependencies must be able to find those headers too.
  67. ":logging_proto",
  68. "//components/openscreen_platform:openscreen_platform_network_service",
  69. "//third_party/openscreen/src/cast/streaming:common",
  70. "//third_party/openscreen/src/cast/streaming:sender",
  71. ]
  72. }
  73. source_set("net") {
  74. sources = [
  75. "net/cast_transport.h",
  76. "net/cast_transport_config.cc",
  77. "net/cast_transport_config.h",
  78. "net/cast_transport_defines.h",
  79. "net/cast_transport_impl.cc",
  80. "net/cast_transport_impl.h",
  81. "net/pacing/paced_sender.cc",
  82. "net/pacing/paced_sender.h",
  83. "net/rtcp/receiver_rtcp_event_subscriber.cc",
  84. "net/rtcp/receiver_rtcp_event_subscriber.h",
  85. "net/rtcp/receiver_rtcp_session.cc",
  86. "net/rtcp/receiver_rtcp_session.h",
  87. "net/rtcp/rtcp_builder.cc",
  88. "net/rtcp/rtcp_builder.h",
  89. "net/rtcp/rtcp_defines.cc",
  90. "net/rtcp/rtcp_defines.h",
  91. "net/rtcp/rtcp_utility.cc",
  92. "net/rtcp/rtcp_utility.h",
  93. "net/rtcp/sender_rtcp_session.cc",
  94. "net/rtcp/sender_rtcp_session.h",
  95. "net/rtp/packet_storage.cc",
  96. "net/rtp/packet_storage.h",
  97. "net/rtp/rtp_defines.cc",
  98. "net/rtp/rtp_defines.h",
  99. "net/rtp/rtp_packetizer.cc",
  100. "net/rtp/rtp_packetizer.h",
  101. "net/rtp/rtp_parser.cc",
  102. "net/rtp/rtp_parser.h",
  103. "net/rtp/rtp_sender.cc",
  104. "net/rtp/rtp_sender.h",
  105. "net/transport_util.cc",
  106. "net/transport_util.h",
  107. "net/udp_packet_pipe.cc",
  108. "net/udp_packet_pipe.h",
  109. "net/udp_transport_impl.cc",
  110. "net/udp_transport_impl.h",
  111. "net/udp_transport_interface.h",
  112. ]
  113. deps = [
  114. ":common",
  115. "//base",
  116. "//media/mojo/common",
  117. "//mojo/public/cpp/system",
  118. "//net",
  119. ]
  120. public_deps = [ ":common" ]
  121. }
  122. source_set("encoding") {
  123. sources = [
  124. "encoding/audio_encoder.cc",
  125. "encoding/audio_encoder.h",
  126. "encoding/external_video_encoder.cc",
  127. "encoding/external_video_encoder.h",
  128. "encoding/fake_software_video_encoder.cc",
  129. "encoding/fake_software_video_encoder.h",
  130. "encoding/size_adaptable_video_encoder_base.cc",
  131. "encoding/size_adaptable_video_encoder_base.h",
  132. "encoding/software_video_encoder.h",
  133. "encoding/video_encoder.cc",
  134. "encoding/video_encoder.h",
  135. "encoding/video_encoder_impl.cc",
  136. "encoding/video_encoder_impl.h",
  137. "encoding/vpx_encoder.cc",
  138. "encoding/vpx_encoder.h",
  139. "encoding/vpx_quantizer_parser.cc",
  140. "encoding/vpx_quantizer_parser.h",
  141. ]
  142. deps = [
  143. ":common",
  144. "//base",
  145. "//media",
  146. "//third_party/libaom:libaom_buildflags",
  147. "//third_party/libvpx",
  148. "//third_party/opus",
  149. "//ui/gfx/geometry",
  150. ]
  151. # iOS and OS X encoders
  152. if (is_apple) {
  153. sources += [
  154. "encoding/h264_vt_encoder.cc",
  155. "encoding/h264_vt_encoder.h",
  156. ]
  157. frameworks = [
  158. "AudioToolbox.framework",
  159. "CoreFoundation.framework",
  160. "CoreMedia.framework",
  161. "CoreVideo.framework",
  162. "VideoToolbox.framework",
  163. ]
  164. }
  165. if (enable_libaom) {
  166. sources += [
  167. "encoding/av1_encoder.cc",
  168. "encoding/av1_encoder.h",
  169. ]
  170. deps += [ "//third_party/libaom" ]
  171. }
  172. if (is_chromeos) {
  173. deps += [ "//third_party/re2" ]
  174. }
  175. }
  176. # TODO(https://crbug.com/1327074): should be split into multiple source sets
  177. # once the new Open Screen frame sender implementation is added.
  178. source_set("sender") {
  179. sources = [
  180. "cast_sender.h",
  181. "cast_sender_impl.cc",
  182. "cast_sender_impl.h",
  183. "sender/audio_sender.cc",
  184. "sender/audio_sender.h",
  185. "sender/congestion_control.cc",
  186. "sender/congestion_control.h",
  187. "sender/frame_sender.cc",
  188. "sender/frame_sender.h",
  189. "sender/frame_sender_impl.cc",
  190. "sender/frame_sender_impl.h",
  191. "sender/openscreen_frame_sender.cc",
  192. "sender/openscreen_frame_sender.h",
  193. "sender/performance_metrics_overlay.cc",
  194. "sender/performance_metrics_overlay.h",
  195. "sender/video_sender.cc",
  196. "sender/video_sender.h",
  197. ]
  198. deps = [
  199. ":common",
  200. ":encoding",
  201. ":net",
  202. "//base",
  203. "//components/openscreen_platform:openscreen_platform_network_service",
  204. "//media",
  205. "//media/capture:capture_base",
  206. "//third_party/openscreen/src/cast/streaming:sender",
  207. "//ui/gfx/geometry",
  208. ]
  209. if (is_chromeos) {
  210. deps += [ "//third_party/re2" ]
  211. }
  212. }
  213. source_set("test_receiver") {
  214. testonly = true
  215. sources = [
  216. "test/receiver/audio_decoder.cc",
  217. "test/receiver/audio_decoder.h",
  218. "test/receiver/cast_message_builder.cc",
  219. "test/receiver/cast_message_builder.h",
  220. "test/receiver/cast_receiver.h",
  221. "test/receiver/cast_receiver_impl.cc",
  222. "test/receiver/cast_receiver_impl.h",
  223. "test/receiver/frame_buffer.cc",
  224. "test/receiver/frame_buffer.h",
  225. "test/receiver/frame_receiver.cc",
  226. "test/receiver/frame_receiver.h",
  227. "test/receiver/framer.cc",
  228. "test/receiver/framer.h",
  229. "test/receiver/receiver_stats.cc",
  230. "test/receiver/receiver_stats.h",
  231. "test/receiver/video_decoder.cc",
  232. "test/receiver/video_decoder.h",
  233. ]
  234. deps = [
  235. ":common",
  236. ":net",
  237. "//base",
  238. "//media",
  239. "//third_party/libvpx",
  240. "//third_party/libyuv",
  241. "//third_party/opus",
  242. "//ui/gfx/geometry",
  243. ]
  244. }
  245. static_library("test_support") {
  246. testonly = true
  247. sources = [
  248. "test/fake_receiver_time_offset_estimator.cc",
  249. "test/fake_receiver_time_offset_estimator.h",
  250. "test/fake_video_encode_accelerator_factory.cc",
  251. "test/fake_video_encode_accelerator_factory.h",
  252. "test/loopback_transport.cc",
  253. "test/loopback_transport.h",
  254. "test/mock_cast_transport.cc",
  255. "test/mock_cast_transport.h",
  256. "test/mock_paced_packet_sender.cc",
  257. "test/mock_paced_packet_sender.h",
  258. "test/mock_rtp_payload_feedback.cc",
  259. "test/mock_rtp_payload_feedback.h",
  260. "test/rtp_packet_builder.cc",
  261. "test/rtp_packet_builder.h",
  262. "test/skewed_single_thread_task_runner.cc",
  263. "test/skewed_single_thread_task_runner.h",
  264. "test/skewed_tick_clock.cc",
  265. "test/skewed_tick_clock.h",
  266. "test/test_rtcp_packet_builder.cc",
  267. "test/test_rtcp_packet_builder.h",
  268. "test/utility/audio_utility.cc",
  269. "test/utility/audio_utility.h",
  270. "test/utility/barcode.cc",
  271. "test/utility/barcode.h",
  272. "test/utility/default_config.cc",
  273. "test/utility/default_config.h",
  274. "test/utility/in_process_receiver.cc",
  275. "test/utility/in_process_receiver.h",
  276. "test/utility/input_builder.cc",
  277. "test/utility/input_builder.h",
  278. "test/utility/net_utility.cc",
  279. "test/utility/net_utility.h",
  280. "test/utility/standalone_cast_environment.cc",
  281. "test/utility/standalone_cast_environment.h",
  282. "test/utility/test_util.cc",
  283. "test/utility/test_util.h",
  284. "test/utility/udp_proxy.cc",
  285. "test/utility/udp_proxy.h",
  286. "test/utility/video_utility.cc",
  287. "test/utility/video_utility.h",
  288. ]
  289. deps = [
  290. ":common",
  291. ":net",
  292. ":sender",
  293. ":test_receiver",
  294. "//base/test:test_support",
  295. "//media",
  296. "//media:test_support",
  297. "//net",
  298. "//testing/gmock",
  299. "//testing/gtest",
  300. "//third_party/libyuv",
  301. "//ui/gfx:test_support",
  302. ]
  303. # FFMPEG software video decoders are not available on Android and/or
  304. # Chromecast content_shell builds.
  305. if (!is_android && !is_castos) {
  306. sources += [
  307. "test/fake_media_source.cc",
  308. "test/fake_media_source.h",
  309. ]
  310. deps += [ "//third_party/ffmpeg" ]
  311. }
  312. }
  313. test("cast_unittests") {
  314. use_xvfb = use_xvfb_in_this_config
  315. sources = [
  316. "common/expanded_value_base_unittest.cc",
  317. "common/openscreen_conversion_helpers_unittest.cc",
  318. "encoding/audio_encoder_unittest.cc",
  319. "encoding/external_video_encoder_unittest.cc",
  320. "encoding/video_encoder_unittest.cc",
  321. "encoding/vpx_quantizer_parser_unittest.cc",
  322. "logging/encoding_event_subscriber_unittest.cc",
  323. "logging/receiver_time_offset_estimator_impl_unittest.cc",
  324. "logging/simple_event_subscriber_unittest.cc",
  325. "logging/stats_event_subscriber_unittest.cc",
  326. "net/cast_transport_impl_unittest.cc",
  327. "net/pacing/paced_sender_unittest.cc",
  328. "net/rtcp/receiver_rtcp_event_subscriber_unittest.cc",
  329. "net/rtcp/rtcp_builder_unittest.cc",
  330. "net/rtcp/rtcp_unittest.cc",
  331. "net/rtcp/rtcp_utility_unittest.cc",
  332. "net/rtp/packet_storage_unittest.cc",
  333. "net/rtp/rtp_packetizer_unittest.cc",
  334. "net/rtp/rtp_parser_unittest.cc",
  335. "net/udp_packet_pipe_unittest.cc",
  336. "net/udp_transport_unittest.cc",
  337. "sender/audio_sender_unittest.cc",
  338. "sender/congestion_control_unittest.cc",
  339. "sender/video_sender_unittest.cc",
  340. "test/end2end_unittest.cc",
  341. "test/receiver/audio_decoder_unittest.cc",
  342. "test/receiver/cast_message_builder_unittest.cc",
  343. "test/receiver/frame_buffer_unittest.cc",
  344. "test/receiver/frame_receiver_unittest.cc",
  345. "test/receiver/framer_unittest.cc",
  346. "test/receiver/receiver_stats_unittest.cc",
  347. "test/receiver/video_decoder_unittest.cc",
  348. "test/utility/audio_utility_unittest.cc",
  349. "test/utility/barcode_unittest.cc",
  350. ]
  351. deps = [
  352. ":common",
  353. ":encoding",
  354. ":net",
  355. ":sender",
  356. ":test_receiver",
  357. ":test_support",
  358. "//base",
  359. "//base:cfi_buildflags",
  360. "//base/test:test_support",
  361. "//components/openscreen_platform:openscreen_platform_network_service",
  362. "//media:test_support",
  363. "//media/test:run_all_unittests",
  364. "//mojo/public/cpp/bindings",
  365. "//net",
  366. "//testing/gmock",
  367. "//testing/gtest",
  368. "//third_party/openscreen/src/cast/streaming:sender",
  369. "//third_party/opus",
  370. ]
  371. if (is_android) {
  372. deps += [
  373. # The test needs the java dependencies to add the java classes for their
  374. # native counterparts to the test apk.
  375. "//media/base/android:media_java",
  376. "//testing/android/native_test:native_test_native_code",
  377. ]
  378. }
  379. if (is_apple) {
  380. sources += [ "encoding/h264_vt_encoder_unittest.cc" ]
  381. deps += [ "//third_party/ffmpeg" ]
  382. }
  383. }
  384. if (is_win || is_mac || is_linux || is_chromeos_lacros || is_fuchsia) {
  385. # This is a target for the collection of cast development tools. They are
  386. # not built/linked into the Chromium browser.
  387. group("testing_tools") {
  388. testonly = true
  389. deps = [
  390. ":cast_benchmarks",
  391. ":cast_sender_app",
  392. ":cast_simulator",
  393. ":generate_barcode_video",
  394. ":generate_timecode_audio",
  395. ":udp_proxy",
  396. ]
  397. }
  398. test("cast_benchmarks") {
  399. testonly = true
  400. sources = [ "test/cast_benchmarks.cc" ]
  401. deps = [
  402. ":common",
  403. ":net",
  404. ":sender",
  405. ":test_receiver",
  406. ":test_support",
  407. "//base",
  408. "//base/test:test_support",
  409. "//media:test_support",
  410. "//net",
  411. "//testing/gtest",
  412. "//ui/gfx/geometry",
  413. ]
  414. }
  415. executable("cast_sender_app") {
  416. testonly = true
  417. sources = [ "test/sender.cc" ]
  418. deps = [
  419. ":common",
  420. ":net",
  421. ":sender",
  422. ":test_support",
  423. "//base",
  424. "//build/win:default_exe_manifest",
  425. "//media",
  426. ]
  427. }
  428. proto_library("network_simulation_model_proto") {
  429. visibility = [ ":cast_simulator" ]
  430. sources = [ "test/proto/network_simulation_model.proto" ]
  431. }
  432. executable("cast_simulator") {
  433. testonly = true
  434. sources = [ "test/simulator.cc" ]
  435. deps = [
  436. ":common",
  437. ":net",
  438. ":network_simulation_model_proto",
  439. ":sender",
  440. ":test_receiver",
  441. ":test_support",
  442. "//base",
  443. "//base/test:test_support",
  444. "//build/win:default_exe_manifest",
  445. "//media:test_support",
  446. ]
  447. }
  448. executable("generate_barcode_video") {
  449. testonly = true
  450. sources = [ "test/utility/generate_barcode_video.cc" ]
  451. deps = [
  452. ":test_support",
  453. "//base",
  454. "//build/win:default_exe_manifest",
  455. "//media",
  456. ]
  457. }
  458. executable("generate_timecode_audio") {
  459. testonly = true
  460. sources = [ "test/utility/generate_timecode_audio.cc" ]
  461. deps = [
  462. ":test_support",
  463. "//base",
  464. "//build/win:default_exe_manifest",
  465. "//media",
  466. ]
  467. }
  468. executable("udp_proxy") {
  469. testonly = true
  470. sources = [ "test/utility/udp_proxy_main.cc" ]
  471. deps = [
  472. ":test_support",
  473. "//base",
  474. "//build/win:default_exe_manifest",
  475. "//net",
  476. "//third_party/openscreen/src/cast/streaming:common",
  477. ]
  478. }
  479. } else { # !(is_win || is_mac || is_linux || is_chromeos_lacros)
  480. # The testing tools are only built for the desktop platforms.
  481. group("testing_tools") {
  482. }
  483. }
  484. if (is_linux || is_chromeos_lacros) {
  485. test("tap_proxy") {
  486. sources = [ "test/utility/tap_proxy.cc" ]
  487. deps = [
  488. ":common",
  489. ":test_support",
  490. "//base",
  491. "//base/test:test_support",
  492. "//media",
  493. "//net",
  494. ]
  495. }
  496. }