| OLD | NEW |
| 1 # Provide the full test output for failed tests when using the parallel | 1 # Provide the full test output for failed tests when using the parallel |
| 2 # test suite (which is enabled by default with automake 1.13+). | 2 # test suite (which is enabled by default with automake 1.13+). |
| 3 export VERBOSE = yes | 3 export VERBOSE = yes |
| 4 | 4 |
| 5 AUTOMAKE_OPTIONS = subdir-objects | 5 AUTOMAKE_OPTIONS = subdir-objects |
| 6 ACLOCAL_AMFLAGS = -I m4 | 6 ACLOCAL_AMFLAGS = -I m4 |
| 7 | 7 |
| 8 lib_LTLIBRARIES = libopus.la | 8 lib_LTLIBRARIES = libopus.la |
| 9 | 9 |
| 10 DIST_SUBDIRS = doc | 10 DIST_SUBDIRS = doc |
| 11 | 11 |
| 12 AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/celt -I$(top_srcdir)/silk
\ | 12 AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/celt -I$(top_srcdir)/silk
\ |
| 13 -I$(top_srcdir)/silk/float -I$(top_srcdir)/silk/fixed $(NE10_CFLAG
S) | 13 -I$(top_srcdir)/silk/float -I$(top_srcdir)/silk/fixed $(NE10_CFLAG
S) |
| 14 | 14 |
| 15 include celt_sources.mk | 15 include celt_sources.mk |
| 16 include silk_sources.mk | 16 include silk_sources.mk |
| 17 include opus_sources.mk | 17 include opus_sources.mk |
| 18 | 18 |
| 19 if FIXED_POINT | 19 if FIXED_POINT |
| 20 SILK_SOURCES += $(SILK_SOURCES_FIXED) | 20 SILK_SOURCES += $(SILK_SOURCES_FIXED) |
| 21 if HAVE_SSE4_1 | 21 if HAVE_SSE4_1 |
| 22 SILK_SOURCES += $(SILK_SOURCES_SSE4_1) $(SILK_SOURCES_FIXED_SSE4_1) | 22 SILK_SOURCES += $(SILK_SOURCES_SSE4_1) $(SILK_SOURCES_FIXED_SSE4_1) |
| 23 endif | 23 endif |
| 24 if HAVE_ARM_NEON_INTR |
| 25 SILK_SOURCES += $(SILK_SOURCES_FIXED_ARM_NEON_INTR) |
| 26 endif |
| 24 else | 27 else |
| 25 SILK_SOURCES += $(SILK_SOURCES_FLOAT) | 28 SILK_SOURCES += $(SILK_SOURCES_FLOAT) |
| 26 if HAVE_SSE4_1 | 29 if HAVE_SSE4_1 |
| 27 SILK_SOURCES += $(SILK_SOURCES_SSE4_1) | 30 SILK_SOURCES += $(SILK_SOURCES_SSE4_1) |
| 28 endif | 31 endif |
| 29 endif | 32 endif |
| 30 | 33 |
| 31 if DISABLE_FLOAT_API | 34 if DISABLE_FLOAT_API |
| 32 else | 35 else |
| 33 OPUS_SOURCES += $(OPUS_SOURCES_FLOAT) | 36 OPUS_SOURCES += $(OPUS_SOURCES_FLOAT) |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 77 libopus_la_LIBADD = $(NE10_LIBS) $(LIBM) | 80 libopus_la_LIBADD = $(NE10_LIBS) $(LIBM) |
| 78 if OPUS_ARM_EXTERNAL_ASM | 81 if OPUS_ARM_EXTERNAL_ASM |
| 79 libopus_la_LIBADD += libarmasm.la | 82 libopus_la_LIBADD += libarmasm.la |
| 80 endif | 83 endif |
| 81 | 84 |
| 82 pkginclude_HEADERS = include/opus.h include/opus_multistream.h include/opus_type
s.h include/opus_defines.h | 85 pkginclude_HEADERS = include/opus.h include/opus_multistream.h include/opus_type
s.h include/opus_defines.h |
| 83 | 86 |
| 84 noinst_HEADERS = $(OPUS_HEAD) $(SILK_HEAD) $(CELT_HEAD) | 87 noinst_HEADERS = $(OPUS_HEAD) $(SILK_HEAD) $(CELT_HEAD) |
| 85 | 88 |
| 86 if EXTRA_PROGRAMS | 89 if EXTRA_PROGRAMS |
| 87 noinst_PROGRAMS = opus_demo repacketizer_demo opus_compare tests/test_opus_api t
ests/test_opus_encode tests/test_opus_decode tests/test_opus_padding celt/tests/
test_unit_cwrs32 celt/tests/test_unit_dft celt/tests/test_unit_entropy celt/test
s/test_unit_laplace celt/tests/test_unit_mathops celt/tests/test_unit_mdct celt/
tests/test_unit_rotation celt/tests/test_unit_types | 90 noinst_PROGRAMS = celt/tests/test_unit_cwrs32 \ |
| 91 celt/tests/test_unit_dft \ |
| 92 celt/tests/test_unit_entropy \ |
| 93 celt/tests/test_unit_laplace \ |
| 94 celt/tests/test_unit_mathops \ |
| 95 celt/tests/test_unit_mdct \ |
| 96 celt/tests/test_unit_rotation \ |
| 97 celt/tests/test_unit_types \ |
| 98 opus_compare \ |
| 99 opus_demo \ |
| 100 repacketizer_demo \ |
| 101 silk/tests/test_unit_LPC_inv_pred_gain \ |
| 102 tests/test_opus_api \ |
| 103 tests/test_opus_decode \ |
| 104 tests/test_opus_encode \ |
| 105 tests/test_opus_padding |
| 88 | 106 |
| 89 TESTS = celt/tests/test_unit_types celt/tests/test_unit_mathops celt/tests/test_
unit_entropy celt/tests/test_unit_laplace celt/tests/test_unit_dft celt/tests/te
st_unit_mdct celt/tests/test_unit_rotation celt/tests/test_unit_cwrs32 tests/tes
t_opus_api tests/test_opus_decode tests/test_opus_encode tests/test_opus_padding | 107 TESTS = celt/tests/test_unit_cwrs32 \ |
| 108 celt/tests/test_unit_dft \ |
| 109 celt/tests/test_unit_entropy \ |
| 110 celt/tests/test_unit_laplace \ |
| 111 celt/tests/test_unit_mathops \ |
| 112 celt/tests/test_unit_mdct \ |
| 113 celt/tests/test_unit_rotation \ |
| 114 celt/tests/test_unit_types \ |
| 115 silk/tests/test_unit_LPC_inv_pred_gain \ |
| 116 tests/test_opus_api \ |
| 117 tests/test_opus_decode \ |
| 118 tests/test_opus_encode \ |
| 119 tests/test_opus_padding |
| 90 | 120 |
| 91 opus_demo_SOURCES = src/opus_demo.c | 121 opus_demo_SOURCES = src/opus_demo.c |
| 92 | 122 |
| 93 opus_demo_LDADD = libopus.la $(NE10_LIBS) $(LIBM) | 123 opus_demo_LDADD = libopus.la $(NE10_LIBS) $(LIBM) |
| 94 | 124 |
| 95 repacketizer_demo_SOURCES = src/repacketizer_demo.c | 125 repacketizer_demo_SOURCES = src/repacketizer_demo.c |
| 96 | 126 |
| 97 repacketizer_demo_LDADD = libopus.la $(NE10_LIBS) $(LIBM) | 127 repacketizer_demo_LDADD = libopus.la $(NE10_LIBS) $(LIBM) |
| 98 | 128 |
| 99 opus_compare_SOURCES = src/opus_compare.c | 129 opus_compare_SOURCES = src/opus_compare.c |
| 100 opus_compare_LDADD = $(LIBM) | 130 opus_compare_LDADD = $(LIBM) |
| 101 | 131 |
| 102 tests_test_opus_api_SOURCES = tests/test_opus_api.c tests/test_opus_common.h | 132 tests_test_opus_api_SOURCES = tests/test_opus_api.c tests/test_opus_common.h |
| 103 tests_test_opus_api_LDADD = libopus.la $(NE10_LIBS) $(LIBM) | 133 tests_test_opus_api_LDADD = libopus.la $(NE10_LIBS) $(LIBM) |
| 104 | 134 |
| 105 tests_test_opus_encode_SOURCES = tests/test_opus_encode.c tests/test_opus_common
.h | 135 tests_test_opus_encode_SOURCES = tests/test_opus_encode.c tests/opus_encode_regr
essions.c tests/test_opus_common.h |
| 106 tests_test_opus_encode_LDADD = libopus.la $(NE10_LIBS) $(LIBM) | 136 tests_test_opus_encode_LDADD = libopus.la $(NE10_LIBS) $(LIBM) |
| 107 | 137 |
| 108 tests_test_opus_decode_SOURCES = tests/test_opus_decode.c tests/test_opus_common
.h | 138 tests_test_opus_decode_SOURCES = tests/test_opus_decode.c tests/test_opus_common
.h |
| 109 tests_test_opus_decode_LDADD = libopus.la $(NE10_LIBS) $(LIBM) | 139 tests_test_opus_decode_LDADD = libopus.la $(NE10_LIBS) $(LIBM) |
| 110 | 140 |
| 111 tests_test_opus_padding_SOURCES = tests/test_opus_padding.c tests/test_opus_comm
on.h | 141 tests_test_opus_padding_SOURCES = tests/test_opus_padding.c tests/test_opus_comm
on.h |
| 112 tests_test_opus_padding_LDADD = libopus.la $(NE10_LIBS) $(LIBM) | 142 tests_test_opus_padding_LDADD = libopus.la $(NE10_LIBS) $(LIBM) |
| 113 | 143 |
| 144 CELT_OBJ = $(CELT_SOURCES:.c=.lo) |
| 145 SILK_OBJ = $(SILK_SOURCES:.c=.lo) |
| 146 |
| 147 silk_tests_test_unit_LPC_inv_pred_gain_SOURCES = silk/tests/test_unit_LPC_inv_pr
ed_gain.c |
| 148 silk_tests_test_unit_LPC_inv_pred_gain_LDADD = $(SILK_OBJ) $(CELT_OBJ) $(NE10_LI
BS) $(LIBM) |
| 149 if OPUS_ARM_EXTERNAL_ASM |
| 150 silk_tests_test_unit_LPC_inv_pred_gain_LDADD += libarmasm.la |
| 151 endif |
| 152 |
| 114 celt_tests_test_unit_cwrs32_SOURCES = celt/tests/test_unit_cwrs32.c | 153 celt_tests_test_unit_cwrs32_SOURCES = celt/tests/test_unit_cwrs32.c |
| 115 celt_tests_test_unit_cwrs32_LDADD = $(LIBM) | 154 celt_tests_test_unit_cwrs32_LDADD = $(LIBM) |
| 116 | 155 |
| 117 celt_tests_test_unit_dft_SOURCES = celt/tests/test_unit_dft.c | 156 celt_tests_test_unit_dft_SOURCES = celt/tests/test_unit_dft.c |
| 118 celt_tests_test_unit_dft_LDADD = $(NE10_LIBS) $(LIBM) | 157 celt_tests_test_unit_dft_LDADD = $(CELT_OBJ) $(NE10_LIBS) $(LIBM) |
| 119 if OPUS_ARM_EXTERNAL_ASM | 158 if OPUS_ARM_EXTERNAL_ASM |
| 120 celt_tests_test_unit_dft_LDADD += libarmasm.la | 159 celt_tests_test_unit_dft_LDADD += libarmasm.la |
| 121 endif | 160 endif |
| 122 | 161 |
| 123 celt_tests_test_unit_entropy_SOURCES = celt/tests/test_unit_entropy.c | 162 celt_tests_test_unit_entropy_SOURCES = celt/tests/test_unit_entropy.c |
| 124 celt_tests_test_unit_entropy_LDADD = $(LIBM) | 163 celt_tests_test_unit_entropy_LDADD = $(LIBM) |
| 125 | 164 |
| 126 celt_tests_test_unit_laplace_SOURCES = celt/tests/test_unit_laplace.c | 165 celt_tests_test_unit_laplace_SOURCES = celt/tests/test_unit_laplace.c |
| 127 celt_tests_test_unit_laplace_LDADD = $(LIBM) | 166 celt_tests_test_unit_laplace_LDADD = $(LIBM) |
| 128 | 167 |
| 129 celt_tests_test_unit_mathops_SOURCES = celt/tests/test_unit_mathops.c | 168 celt_tests_test_unit_mathops_SOURCES = celt/tests/test_unit_mathops.c |
| 130 celt_tests_test_unit_mathops_LDADD = $(NE10_LIBS) $(LIBM) | 169 celt_tests_test_unit_mathops_LDADD = $(CELT_OBJ) $(NE10_LIBS) $(LIBM) |
| 131 if OPUS_ARM_EXTERNAL_ASM | 170 if OPUS_ARM_EXTERNAL_ASM |
| 132 celt_tests_test_unit_mathops_LDADD += libarmasm.la | 171 celt_tests_test_unit_mathops_LDADD += libarmasm.la |
| 133 endif | 172 endif |
| 134 | 173 |
| 135 celt_tests_test_unit_mdct_SOURCES = celt/tests/test_unit_mdct.c | 174 celt_tests_test_unit_mdct_SOURCES = celt/tests/test_unit_mdct.c |
| 136 celt_tests_test_unit_mdct_LDADD = $(NE10_LIBS) $(LIBM) | 175 celt_tests_test_unit_mdct_LDADD = $(CELT_OBJ) $(NE10_LIBS) $(LIBM) |
| 137 if OPUS_ARM_EXTERNAL_ASM | 176 if OPUS_ARM_EXTERNAL_ASM |
| 138 celt_tests_test_unit_mdct_LDADD += libarmasm.la | 177 celt_tests_test_unit_mdct_LDADD += libarmasm.la |
| 139 endif | 178 endif |
| 140 | 179 |
| 141 celt_tests_test_unit_rotation_SOURCES = celt/tests/test_unit_rotation.c | 180 celt_tests_test_unit_rotation_SOURCES = celt/tests/test_unit_rotation.c |
| 142 celt_tests_test_unit_rotation_LDADD = $(NE10_LIBS) $(LIBM) | 181 celt_tests_test_unit_rotation_LDADD = $(CELT_OBJ) $(NE10_LIBS) $(LIBM) |
| 143 if OPUS_ARM_EXTERNAL_ASM | 182 if OPUS_ARM_EXTERNAL_ASM |
| 144 celt_tests_test_unit_rotation_LDADD += libarmasm.la | 183 celt_tests_test_unit_rotation_LDADD += libarmasm.la |
| 145 endif | 184 endif |
| 146 | 185 |
| 147 celt_tests_test_unit_types_SOURCES = celt/tests/test_unit_types.c | 186 celt_tests_test_unit_types_SOURCES = celt/tests/test_unit_types.c |
| 148 celt_tests_test_unit_types_LDADD = $(LIBM) | 187 celt_tests_test_unit_types_LDADD = $(LIBM) |
| 149 endif | 188 endif |
| 150 | 189 |
| 151 if CUSTOM_MODES | 190 if CUSTOM_MODES |
| 152 pkginclude_HEADERS += include/opus_custom.h | 191 pkginclude_HEADERS += include/opus_custom.h |
| 153 if EXTRA_PROGRAMS | 192 if EXTRA_PROGRAMS |
| 154 noinst_PROGRAMS += opus_custom_demo | 193 noinst_PROGRAMS += opus_custom_demo |
| 155 opus_custom_demo_SOURCES = celt/opus_custom_demo.c | 194 opus_custom_demo_SOURCES = celt/opus_custom_demo.c |
| 156 opus_custom_demo_LDADD = libopus.la $(LIBM) | 195 opus_custom_demo_LDADD = libopus.la $(LIBM) |
| 157 endif | 196 endif |
| 158 endif | 197 endif |
| 159 | 198 |
| 160 EXTRA_DIST = version.mk \ | 199 EXTRA_DIST = opus.pc.in \ |
| 161 opus.pc.in \ | |
| 162 opus-uninstalled.pc.in \ | 200 opus-uninstalled.pc.in \ |
| 163 opus.m4 \ | 201 opus.m4 \ |
| 164 Makefile.mips \ | 202 Makefile.mips \ |
| 165 Makefile.unix \ | 203 Makefile.unix \ |
| 166 tests/run_vectors.sh \ | 204 tests/run_vectors.sh \ |
| 167 celt/arm/arm2gnu.pl \ | 205 celt/arm/arm2gnu.pl \ |
| 168 celt/arm/celt_pitch_xcorr_arm.s \ | 206 celt/arm/celt_pitch_xcorr_arm.s \ |
| 169 win32/VS2015/silk_float.vcxproj \ | |
| 170 win32/VS2015/celt.vcxproj.filters \ | |
| 171 win32/VS2015/opus.vcxproj \ | 207 win32/VS2015/opus.vcxproj \ |
| 172 win32/VS2015/silk_common.vcxproj.filters \ | |
| 173 win32/VS2015/silk_float.vcxproj.filters \ | |
| 174 win32/VS2015/test_opus_encode.vcxproj.filters \ | 208 win32/VS2015/test_opus_encode.vcxproj.filters \ |
| 175 win32/VS2015/silk_common.vcxproj \ | |
| 176 win32/VS2015/test_opus_encode.vcxproj \ | 209 win32/VS2015/test_opus_encode.vcxproj \ |
| 177 win32/VS2015/opus_demo.vcxproj \ | 210 win32/VS2015/opus_demo.vcxproj \ |
| 178 win32/VS2015/test_opus_api.vcxproj.filters \ | 211 win32/VS2015/test_opus_api.vcxproj.filters \ |
| 179 win32/VS2015/test_opus_api.vcxproj \ | 212 win32/VS2015/test_opus_api.vcxproj \ |
| 180 win32/VS2015/test_opus_decode.vcxproj.filters \ | 213 win32/VS2015/test_opus_decode.vcxproj.filters \ |
| 181 win32/VS2015/silk_fixed.vcxproj.filters \ | |
| 182 win32/VS2015/opus_demo.vcxproj.filters \ | 214 win32/VS2015/opus_demo.vcxproj.filters \ |
| 183 win32/VS2015/silk_fixed.vcxproj \ | |
| 184 win32/VS2015/opus.vcxproj.filters \ | 215 win32/VS2015/opus.vcxproj.filters \ |
| 185 win32/VS2015/test_opus_decode.vcxproj \ | 216 win32/VS2015/test_opus_decode.vcxproj \ |
| 186 win32/VS2015/celt.vcxproj \ | |
| 187 win32/VS2015/opus.sln \ | 217 win32/VS2015/opus.sln \ |
| 218 win32/VS2015/common.props \ |
| 188 win32/genversion.bat \ | 219 win32/genversion.bat \ |
| 189 win32/config.h | 220 win32/config.h |
| 190 | 221 |
| 191 pkgconfigdir = $(libdir)/pkgconfig | 222 pkgconfigdir = $(libdir)/pkgconfig |
| 192 pkgconfig_DATA = opus.pc | 223 pkgconfig_DATA = opus.pc |
| 193 | 224 |
| 194 m4datadir = $(datadir)/aclocal | 225 m4datadir = $(datadir)/aclocal |
| 195 m4data_DATA = opus.m4 | 226 m4data_DATA = opus.m4 |
| 196 | 227 |
| 197 # Targets to build and install just the library without the docs | 228 # Targets to build and install just the library without the docs |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 269 # convert ARM asm to GNU as format | 300 # convert ARM asm to GNU as format |
| 270 %-gnu.S: $(top_srcdir)/%.s | 301 %-gnu.S: $(top_srcdir)/%.s |
| 271 $(top_srcdir)/celt/arm/arm2gnu.pl @ARM2GNU_PARAMS@ < $< > $@ | 302 $(top_srcdir)/celt/arm/arm2gnu.pl @ARM2GNU_PARAMS@ < $< > $@ |
| 272 # For autoconf-modified sources (e.g., armopts.s) | 303 # For autoconf-modified sources (e.g., armopts.s) |
| 273 %-gnu.S: %.s | 304 %-gnu.S: %.s |
| 274 $(top_srcdir)/celt/arm/arm2gnu.pl @ARM2GNU_PARAMS@ < $< > $@ | 305 $(top_srcdir)/celt/arm/arm2gnu.pl @ARM2GNU_PARAMS@ < $< > $@ |
| 275 | 306 |
| 276 OPT_UNIT_TEST_OBJ = $(celt_tests_test_unit_mathops_SOURCES:.c=.o) \ | 307 OPT_UNIT_TEST_OBJ = $(celt_tests_test_unit_mathops_SOURCES:.c=.o) \ |
| 277 $(celt_tests_test_unit_rotation_SOURCES:.c=.o) \ | 308 $(celt_tests_test_unit_rotation_SOURCES:.c=.o) \ |
| 278 $(celt_tests_test_unit_mdct_SOURCES:.c=.o) \ | 309 $(celt_tests_test_unit_mdct_SOURCES:.c=.o) \ |
| 279 $(celt_tests_test_unit_dft_SOURCES:.c=.o) | 310 $(celt_tests_test_unit_dft_SOURCES:.c=.o) \ |
| 311 $(silk_tests_test_unit_LPC_inv_pred_gain_SOURCES:.c=.o) |
| 280 | 312 |
| 281 if HAVE_SSE | 313 if HAVE_SSE |
| 282 SSE_OBJ = $(CELT_SOURCES_SSE:.c=.lo) | 314 SSE_OBJ = $(CELT_SOURCES_SSE:.c=.lo) |
| 283 $(SSE_OBJ) $(OPT_UNIT_TEST_OBJ): CFLAGS += $(OPUS_X86_SSE_CFLAGS) | 315 $(SSE_OBJ): CFLAGS += $(OPUS_X86_SSE_CFLAGS) |
| 284 endif | 316 endif |
| 285 | 317 |
| 286 if HAVE_SSE2 | 318 if HAVE_SSE2 |
| 287 SSE2_OBJ = $(CELT_SOURCES_SSE2:.c=.lo) | 319 SSE2_OBJ = $(CELT_SOURCES_SSE2:.c=.lo) |
| 288 $(SSE2_OBJ) $(OPT_UNIT_TEST_OBJ): CFLAGS += $(OPUS_X86_SSE2_CFLAGS) | 320 $(SSE2_OBJ): CFLAGS += $(OPUS_X86_SSE2_CFLAGS) |
| 289 endif | 321 endif |
| 290 | 322 |
| 291 if HAVE_SSE4_1 | 323 if HAVE_SSE4_1 |
| 292 SSE4_1_OBJ = $(CELT_SOURCES_SSE4_1:.c=.lo) \ | 324 SSE4_1_OBJ = $(CELT_SOURCES_SSE4_1:.c=.lo) \ |
| 293 $(SILK_SOURCES_SSE4_1:.c=.lo) \ | 325 $(SILK_SOURCES_SSE4_1:.c=.lo) \ |
| 294 $(SILK_SOURCES_FIXED_SSE4_1:.c=.lo) | 326 $(SILK_SOURCES_FIXED_SSE4_1:.c=.lo) |
| 295 $(SSE4_1_OBJ) $(OPT_UNIT_TEST_OBJ): CFLAGS += $(OPUS_X86_SSE4_1_CFLAGS) | 327 $(SSE4_1_OBJ): CFLAGS += $(OPUS_X86_SSE4_1_CFLAGS) |
| 296 endif | 328 endif |
| 297 | 329 |
| 298 if HAVE_ARM_NEON_INTR | 330 if HAVE_ARM_NEON_INTR |
| 299 ARM_NEON_INTR_OBJ = $(CELT_SOURCES_ARM_NEON_INTR:.c=.lo) $(SILK_SOURCES_ARM_NEON
_INTR:.c=.lo) | 331 ARM_NEON_INTR_OBJ = $(CELT_SOURCES_ARM_NEON_INTR:.c=.lo) \ |
| 300 $(ARM_NEON_INTR_OBJ) $(OPT_UNIT_TEST_OBJ): CFLAGS += \ | 332 $(SILK_SOURCES_ARM_NEON_INTR:.c=.lo) \ |
| 333 $(SILK_SOURCES_FIXED_ARM_NEON_INTR:.c=.lo) |
| 334 $(ARM_NEON_INTR_OBJ): CFLAGS += \ |
| 301 $(OPUS_ARM_NEON_INTR_CFLAGS) $(NE10_CFLAGS) | 335 $(OPUS_ARM_NEON_INTR_CFLAGS) $(NE10_CFLAGS) |
| 302 endif | 336 endif |
| OLD | NEW |