# Copyright 2015 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import("//build/config/android/config.gni") import("//build/config/features.gni") import("//build/config/ui.gni") import("//media/media_options.gni") import("//mojo/public/tools/bindings/mojom.gni") import("//testing/libfuzzer/fuzzer_test.gni") import("//testing/test.gni") if (is_android) { # For generate_jni(). import("//build/config/android/rules.gni") } # Common configuration for targets in the media/midi directory. config("midi_config") { if (use_alsa && use_udev) { defines = [ "USE_ALSA", "USE_UDEV", ] } visibility = [ ":*" ] } # USB MIDI specific source files that are used in Android port, and unit tests. # These can't easily be a source set because "midi" is a component and the # component export flags must always be the same. usb_midi_sources = [ "midi_manager_usb.cc", "midi_manager_usb.h", "usb_midi_descriptor_parser.cc", "usb_midi_descriptor_parser.h", "usb_midi_device.h", "usb_midi_export.h", "usb_midi_input_stream.cc", "usb_midi_input_stream.h", "usb_midi_jack.h", "usb_midi_output_stream.cc", "usb_midi_output_stream.h", ] # Android specific Java source files that are used to generate jni header files. if (is_android) { android_library("midi_java") { deps = [ "//base:base_java", ] java_files = [ "java/src/org/chromium/midi/MidiDeviceAndroid.java", "java/src/org/chromium/midi/MidiInputPortAndroid.java", "java/src/org/chromium/midi/MidiManagerAndroid.java", "java/src/org/chromium/midi/MidiOutputPortAndroid.java", "java/src/org/chromium/midi/UsbMidiDeviceAndroid.java", "java/src/org/chromium/midi/UsbMidiDeviceFactoryAndroid.java", ] } generate_jni("midi_jni_headers") { sources = [ "java/src/org/chromium/midi/MidiDeviceAndroid.java", "java/src/org/chromium/midi/MidiInputPortAndroid.java", "java/src/org/chromium/midi/MidiManagerAndroid.java", "java/src/org/chromium/midi/MidiOutputPortAndroid.java", "java/src/org/chromium/midi/UsbMidiDeviceAndroid.java", "java/src/org/chromium/midi/UsbMidiDeviceFactoryAndroid.java", ] jni_package = "midi" } } component("midi") { sources = [ "message_util.cc", "message_util.h", "midi_export.h", "midi_manager.cc", "midi_manager.h", "midi_manager_mac.cc", "midi_manager_mac.h", "midi_message_queue.cc", "midi_message_queue.h", "midi_port_info.cc", "midi_port_info.h", "midi_service.cc", "midi_service.h", "midi_switches.cc", "midi_switches.h", "task_service.cc", "task_service.h", ] configs += [ ":midi_config" ] defines = [ "MIDI_IMPLEMENTATION" ] deps = [ ":mojo", "//base", ] libs = [] if (is_android) { # TODO(yhirano): Consider having "android" subdirectory. sources += [ "midi_device_android.cc", "midi_device_android.h", "midi_input_port_android.cc", "midi_input_port_android.h", "midi_manager_android.cc", "midi_manager_android.h", "midi_output_port_android.cc", "midi_output_port_android.h", "usb_midi_device_android.cc", "usb_midi_device_android.h", "usb_midi_device_factory_android.cc", "usb_midi_device_factory_android.h", ] + usb_midi_sources # Since the USB sources are part of the component. defines += [ "EXPORT_USB_MIDI" ] deps += [ ":midi_jni_headers", "//base:i18n", ] } if (is_mac) { libs += [ "CoreAudio.framework", "CoreFoundation.framework", "CoreMIDI.framework", ] } if (is_win) { deps += [ "//device/usb" ] sources += [ "midi_manager_win.cc", "midi_manager_win.h", "midi_manager_winrt.cc", "midi_manager_winrt.h", ] # This library is included in base in static builds. if (is_component_build) { libs += [ "cfgmgr32.lib" ] } } if (use_alsa && use_udev) { deps += [ "//crypto", "//crypto:platform", ] libs += [ "asound" ] sources += [ "midi_manager_alsa.cc", "midi_manager_alsa.h", ] } if (use_udev) { deps += [ "//device/udev_linux" ] } } mojom("mojo") { sources = [ "midi_service.mojom", ] } test("midi_unittests") { sources = [ "message_util_unittest.cc", "midi_manager_unittest.cc", "midi_manager_usb_unittest.cc", "midi_message_queue_unittest.cc", "task_service_unittest.cc", "usb_midi_descriptor_parser_unittest.cc", "usb_midi_input_stream_unittest.cc", "usb_midi_output_stream_unittest.cc", ] configs += [ ":midi_config" ] deps = [ ":midi", "//base/test/:run_all_unittests", "//base/test/:test_support", "//testing/gtest", ] if (is_android) { deps += [ ":midi_java" ] } else { sources += usb_midi_sources } if (is_mac) { sources += [ "midi_manager_mac_unittest.cc" ] libs = [ "CoreMIDI.framework" ] } if (use_alsa && use_udev) { sources += [ "midi_manager_alsa_unittest.cc" ] } # This target should not require the Chrome executable to run. assert_no_deps = [ "//chrome" ] } fuzzer_test("midi_webmidi_data_validator_fuzzer") { sources = [ "midi_webmidi_data_validator_fuzzer.cc", ] seed_corpus = "fuzz/corpus" deps = [ ":midi", ] } fuzzer_test("midi_message_queue_fuzzer") { sources = [ "midi_message_queue_fuzzer.cc", ] seed_corpus = "fuzz/corpus" deps = [ ":midi", ] }