blob: b7479365c5c5cd33d72a912674999d32bec76daf [file] [log] [blame]
toyoshim00fbf702015-04-30 07:52:02 -07001# Copyright 2015 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
5import("//build/config/android/config.gni")
6import("//build/config/features.gni")
7import("//build/config/ui.gni")
8import("//media/media_options.gni")
9import("//testing/test.gni")
10
11if (is_android) {
12 # For generate_jni().
13 import("//build/config/android/rules.gni")
14}
15
16# Common configuration for targets in the media/midi directory.
17config("midi_config") {
slan0a270442015-09-21 10:56:26 -070018 if (use_alsa && use_udev) {
toyoshim00fbf702015-04-30 07:52:02 -070019 defines = [
20 "USE_ALSA",
21 "USE_UDEV",
22 ]
23 }
24
25 visibility = [ ":*" ]
26}
27
28# USB MIDI specific source files that are used in Android port, and unit tests.
brettw49ff0172015-05-05 12:43:04 -070029# These can't easily be a source set because "midi" is a component and the
30# component export flags must always be the same.
31usb_midi_sources = [
32 "midi_manager_usb.cc",
33 "midi_manager_usb.h",
34 "usb_midi_descriptor_parser.cc",
35 "usb_midi_descriptor_parser.h",
36 "usb_midi_device.h",
37 "usb_midi_export.h",
38 "usb_midi_input_stream.cc",
39 "usb_midi_input_stream.h",
40 "usb_midi_jack.h",
41 "usb_midi_output_stream.cc",
42 "usb_midi_output_stream.h",
43]
toyoshim00fbf702015-04-30 07:52:02 -070044
45# Android specific Java source files that are used to generate jni header files.
46if (is_android) {
47 android_library("midi_java") {
48 deps = [
49 "//base:base_java",
50 ]
51
agrieve3a4db762016-03-23 12:54:45 -070052 java_files = [
toyoshim44455f82016-10-12 23:43:29 -070053 "java/src/org/chromium/midi/MidiDeviceAndroid.java",
54 "java/src/org/chromium/midi/MidiInputPortAndroid.java",
55 "java/src/org/chromium/midi/MidiManagerAndroid.java",
56 "java/src/org/chromium/midi/MidiOutputPortAndroid.java",
57 "java/src/org/chromium/midi/UsbMidiDeviceAndroid.java",
58 "java/src/org/chromium/midi/UsbMidiDeviceFactoryAndroid.java",
agrieve3a4db762016-03-23 12:54:45 -070059 ]
toyoshim00fbf702015-04-30 07:52:02 -070060 }
61
62 generate_jni("midi_jni_headers") {
63 sources = [
toyoshim44455f82016-10-12 23:43:29 -070064 "java/src/org/chromium/midi/MidiDeviceAndroid.java",
65 "java/src/org/chromium/midi/MidiInputPortAndroid.java",
66 "java/src/org/chromium/midi/MidiManagerAndroid.java",
67 "java/src/org/chromium/midi/MidiOutputPortAndroid.java",
68 "java/src/org/chromium/midi/UsbMidiDeviceAndroid.java",
69 "java/src/org/chromium/midi/UsbMidiDeviceFactoryAndroid.java",
toyoshim00fbf702015-04-30 07:52:02 -070070 ]
toyoshim44455f82016-10-12 23:43:29 -070071 jni_package = "midi"
toyoshim00fbf702015-04-30 07:52:02 -070072 }
73}
74
75component("midi") {
76 sources = [
brettw49ff0172015-05-05 12:43:04 -070077 "midi_export.h",
toyoshim00fbf702015-04-30 07:52:02 -070078 "midi_manager.cc",
79 "midi_manager.h",
80 "midi_manager_mac.cc",
81 "midi_manager_mac.h",
toyoshim00fbf702015-04-30 07:52:02 -070082 "midi_message_queue.cc",
83 "midi_message_queue.h",
84 "midi_message_util.cc",
85 "midi_message_util.h",
86 "midi_port_info.cc",
87 "midi_port_info.h",
88 "midi_scheduler.cc",
89 "midi_scheduler.h",
yhirano28fc4982015-09-17 00:09:03 -070090 "midi_switches.cc",
91 "midi_switches.h",
toyoshim00fbf702015-04-30 07:52:02 -070092 ]
93
94 configs += [ ":midi_config" ]
95
brettw49ff0172015-05-05 12:43:04 -070096 defines = [ "MIDI_IMPLEMENTATION" ]
97 deps = [
98 "//base",
99 ]
toyoshim00fbf702015-04-30 07:52:02 -0700100 libs = []
101
102 if (is_android) {
yhiranobc742d82015-09-17 07:41:44 -0700103 # TODO(yhirano): Consider having "android" subdirectory.
toyoshim00fbf702015-04-30 07:52:02 -0700104 sources += [
yhiranobc742d82015-09-17 07:41:44 -0700105 "midi_device_android.cc",
106 "midi_device_android.h",
brettw49ff0172015-05-05 12:43:04 -0700107 "midi_jni_registrar.cc",
108 "midi_jni_registrar.h",
yhiranobc742d82015-09-17 07:41:44 -0700109 "midi_input_port_android.cc",
110 "midi_input_port_android.h",
brettw49ff0172015-05-05 12:43:04 -0700111 "midi_manager_android.cc",
yhiranobc742d82015-09-17 07:41:44 -0700112 "midi_manager_android.h",
113 "midi_output_port_android.cc",
114 "midi_output_port_android.h",
brettw49ff0172015-05-05 12:43:04 -0700115 "usb_midi_device_android.cc",
116 "usb_midi_device_android.h",
117 "usb_midi_device_factory_android.cc",
118 "usb_midi_device_factory_android.h",
119 ] + usb_midi_sources
120
121 # Since the USB sources are part of the component.
122 defines += [ "EXPORT_USB_MIDI" ]
toyoshim00fbf702015-04-30 07:52:02 -0700123
124 deps += [
toyoshim00fbf702015-04-30 07:52:02 -0700125 ":midi_jni_headers",
agrieve79517522015-11-20 11:53:28 -0800126 "//base:i18n",
toyoshim00fbf702015-04-30 07:52:02 -0700127 ]
128 }
129
130 if (is_mac) {
131 libs += [
132 "CoreAudio.framework",
rsesekbeb931e2016-05-10 19:13:57 -0700133 "CoreFoundation.framework",
toyoshim00fbf702015-04-30 07:52:02 -0700134 "CoreMIDI.framework",
135 ]
136 }
137
138 if (is_win) {
shaochuan80f1fba2016-09-01 20:44:51 -0700139 deps += [ "//device/usb" ]
140 sources += [
141 "midi_manager_win.cc",
142 "midi_manager_win.h",
143 "midi_manager_winrt.cc",
144 "midi_manager_winrt.h",
145 ]
shaochuan4eff30e2016-09-09 01:24:14 -0700146
147 # This library is included in base in static builds.
148 if (is_component_build) {
149 libs += [ "cfgmgr32.lib" ]
150 }
toyoshim00fbf702015-04-30 07:52:02 -0700151 }
152
153 if (use_alsa && use_udev) {
154 deps += [
155 "//crypto",
156 "//crypto:platform",
157 ]
158 libs += [ "asound" ]
159 sources += [
160 "midi_manager_alsa.cc",
161 "midi_manager_alsa.h",
162 ]
163 }
164
165 if (use_udev) {
166 deps += [ "//device/udev_linux" ]
167 }
168}
169
170test("midi_unittests") {
171 sources = [
172 "midi_manager_unittest.cc",
173 "midi_manager_usb_unittest.cc",
174 "midi_message_queue_unittest.cc",
175 "midi_message_util_unittest.cc",
176 "usb_midi_descriptor_parser_unittest.cc",
177 "usb_midi_input_stream_unittest.cc",
178 "usb_midi_output_stream_unittest.cc",
179 ]
180
181 configs += [ ":midi_config" ]
182 deps = [
183 ":midi",
184 "//base/test/:run_all_unittests",
185 "//base/test/:test_support",
186 "//testing/gtest",
187 ]
188
mikecase629872b2015-06-02 17:57:26 -0700189 if (is_android) {
agrieve94fee1e2015-12-01 08:36:19 -0800190 deps += [ ":midi_java" ]
agrieveb3ca4722016-04-27 13:39:59 -0700191 } else {
brettw49ff0172015-05-05 12:43:04 -0700192 sources += usb_midi_sources
toyoshim00fbf702015-04-30 07:52:02 -0700193 }
194
195 if (is_mac) {
196 sources += [ "midi_manager_mac_unittest.cc" ]
rsesek76b8fa02016-05-11 10:26:35 -0700197 libs = [ "CoreMidi.framework" ]
toyoshim00fbf702015-04-30 07:52:02 -0700198 }
199
200 if (use_alsa && use_udev) {
201 sources += [ "midi_manager_alsa_unittest.cc" ]
202 }
203
204 if (use_x11) {
205 deps += [ "//tools/xdisplaycheck" ]
206 }
krasin1b5f1d02016-05-11 19:53:25 -0700207
208 # This target should not require the Chrome executable to run.
209 assert_no_deps = [ "//chrome" ]
toyoshim00fbf702015-04-30 07:52:02 -0700210}