658937e999a08a76caa83c7251cb4ba9d88b6930
[feed/packages.git] / libs / opus / patches / 010-fix-meson.patch
1 From 49d4effeea9107d18f6897255139d30fc80204df Mon Sep 17 00:00:00 2001
2 From: Rudi Heitbaum <rudi@heitbaum.com>
3 Date: Wed, 6 Mar 2024 11:21:07 +0000
4 Subject: [PATCH] fix arm asm meson source build
5
6 meson does mot support output with paths; add a meson.build file in the arm
7 directory. The output files were being incorrectly placed in the celt/ directory.
8
9 Program arm/arm2gnu.pl found: YES (/var/media/DATA/home-rudi/LibreELEC.kernel11/build.LibreELEC-H3.arm-12.0-devel/build/opus-v1.5.1/celt/arm/arm2gnu.pl)
10 Configuring celt_pitch_xcorr_arm-gnu.S with command
11
12 ../celt/meson.build:51:25: ERROR: configure_file keyword argument "output" Output 'arm/armopts.s' must not contain a path segment.
13
14 before:
15 celt/celt_pitch_xcorr_arm-gnu.S
16
17 after:
18 celt/arm/celt_pitch_xcorr_arm-gnu.S
19 celt/arm/armopts.s
20 celt/arm/armopts-gnu.S
21
22 Signed-off-by: Rudi Heitbaum <rudi@heitbaum.com>
23 Signed-off-by: Jean-Marc Valin <jmvalin@jmvalin.ca>
24 ---
25 celt/arm/meson.build | 12 ++++++++++++
26 celt/meson.build | 9 +--------
27 2 files changed, 13 insertions(+), 8 deletions(-)
28 create mode 100644 celt/arm/meson.build
29
30 --- /dev/null
31 +++ b/celt/arm/meson.build
32 @@ -0,0 +1,12 @@
33 +arm2gnu = [find_program('arm2gnu.pl')] + arm2gnu_args
34 +celt_sources_arm_asm = configure_file(input: 'celt_pitch_xcorr_arm.s',
35 + output: '@BASENAME@-gnu.S',
36 + command: arm2gnu + ['@INPUT@'],
37 + capture: true)
38 +celt_arm_armopts_s_in = configure_file(input: 'armopts.s.in',
39 + output: 'armopts.s',
40 + configuration: opus_conf)
41 +celt_arm_armopts_s = configure_file(input: [celt_arm_armopts_s_in],
42 + output: '@BASENAME@-gnu.S',
43 + command: arm2gnu + ['@INPUT@'],
44 + capture: true)
45 --- a/celt/meson.build
46 +++ b/celt/meson.build
47 @@ -43,14 +43,7 @@ if host_cpu_family in ['arm', 'aarch64']
48 celt_sources += sources['CELT_SOURCES_ARM_NE10']
49 endif
50 if opus_arm_external_asm
51 - arm2gnu = [find_program('arm/arm2gnu.pl')] + arm2gnu_args
52 - celt_sources_arm_asm = configure_file(input: 'arm/celt_pitch_xcorr_arm.s',
53 - output: '@BASENAME@-gnu.S',
54 - command: arm2gnu + ['@INPUT@'],
55 - capture: true)
56 - celt_arm_armopts_s = configure_file(input: 'arm/armopts.s.in',
57 - output: 'arm/armopts.s',
58 - configuration: opus_conf)
59 + subdir('arm')
60 celt_static_libs += static_library('celt-armasm',
61 celt_arm_armopts_s, celt_sources_arm_asm,
62 install: false)
63 --- a/meson.build
64 +++ b/meson.build
65 @@ -252,6 +252,13 @@ if not opt_asm.disabled()
66 opus_conf.set('OPUS_ARM_INLINE_NEON', 1)
67 inline_optimization += ['NEON']
68 endif
69 +
70 + # AS_ASM_ARM_DOTPROD
71 + if cc.compiles(asm_tmpl.format('udot v0.4s,v1.16b,v2.16b'),
72 + name : 'assembler supports DOTPROD instructions on ARM')
73 + opus_conf.set('OPUS_ARM_INLINE_DOTPROD', 1)
74 + inline_optimization += ['DOTPROD']
75 + endif
76 endif
77
78 # We need Perl to translate RVCT-syntax asm to gas syntax
79 @@ -273,21 +280,24 @@ if not opt_asm.disabled()
80 opus_arm_may_have_neon = opus_conf.has('OPUS_ARM_INLINE_NEON')
81 opus_arm_presume_neon = opus_arm_may_have_neon and opus_can_presume_simd
82
83 + opus_arm_may_have_dotprod = opus_conf.has('OPUS_ARM_INLINE_DOTPROD')
84 + opus_arm_presume_dotprod = opus_arm_may_have_dotprod and opus_can_presume_simd
85 +
86 if not opt_rtcd.disabled()
87 if not opus_arm_may_have_edsp
88 message('Trying to force-enable armv5e EDSP instructions...')
89 # AS_ASM_ARM_EDSP_FORCE
90 - opus_arm_may_have_edsp = cc.compiles(asm_tmpl.format('.arch armv5te\n.object_arch armv4t\nqadd r3,r3,r3'),
91 + opus_arm_may_have_edsp = cc.compiles(asm_tmpl.format('.arch armv5te;.object_arch armv4t;qadd r3,r3,r3'),
92 name : 'Assembler supports EDSP instructions on ARM (forced)')
93 endif
94 if not opus_arm_may_have_media
95 message('Trying to force-enable ARMv6 media instructions...')
96 - opus_arm_may_have_media = cc.compiles(asm_tmpl.format('.arch armv6\n.object_arch armv4t\nshadd8 r3,r3,r3'),
97 + opus_arm_may_have_media = cc.compiles(asm_tmpl.format('.arch armv6;.object_arch armv4t;shadd8 r3,r3,r3'),
98 name : 'Assembler supports ARMv6 media instructions on ARM (forced)')
99 endif
100 if not opus_arm_may_have_neon
101 message('Trying to force-enable NEON instructions...')
102 - opus_arm_may_have_neon = cc.compiles(asm_tmpl.format('.arch armv7-a\n.fpu neon\n.object_arch armv4t\nvorr d0,d0,d0'),
103 + opus_arm_may_have_neon = cc.compiles(asm_tmpl.format('.arch armv7-a;.fpu neon;.object_arch armv4t;vorr d0,d0,d0'),
104 name : 'Assembler supports NEON instructions on ARM (forced)')
105 endif
106 endif