Commit graph

253 commits

Author SHA1 Message Date
Vencislav Atanasov
a77c5d2219 3ds: Various fixes, mostly for compiler warnings
- Move all devkitpro includes before the Rockbox ones so that the macros which are both conflicting and unused can be undef'd
- Remove unused result variables
- Exclude an unused function from being compiled for this target
- Fix hex number formatting
- Fix the return value of dummy functions
- Fix macro redefinition in the plugins keypad config
- Remove duplicate button mapping
- Turn off -Wchar-subscripts as it's already handled in Rockbox's ctype.h

Change-Id: I3f5a3d492c585f233277a380feaea5fe877a044f
2026-03-13 10:24:36 -04:00
Aidan MacDonald
a80911a0ce plugins: clean up IRAM memory region definitions
Check for USE_IRAM to determine if IRAM should be used.
SoCs that don't define USE_IRAM no longer need to define
IRAMSIZE to 0 either.

When IRAM is not used, any symbols bound for IRAM will
be discarded instead of linking them in DRAM. In theory
these symbols shouldn't exist, since nothing should be
placed into IRAM sections to begin with for !USE_IRAM.
If an IRAM section attribute leaks into the plugin/codec
anyway, it should now cause a link time error.

Change-Id: I55c1854cfe8beb5cb09b865336906f9945084b33
2026-03-06 16:26:35 -05:00
Aidan MacDonald
7eeb4e4302 firmware: refactor CACHEALIGN_BITS/SIZE defines
Mostly motivated by PP needing CACHEALIGN_SIZE in linker
scripts, which can't include system.h, so move these to
cpu.h instead. Also gets rid of the default 32 byte line
size that was used if the target didn't define alignment
itself. RK24xx, DM320, and JZ4740 were missing this but
have been confirmed (from datasheets) to use 32-byte cache
lines.

Add checks to make sure the macros are appropriately
(un)defined based on the HAVE_CPU_CACHE_ALIGN define,
and make sure their values are consistent when they
are defined.

Disable HAVE_CPU_CACHE_ALIGN for hosted targets since it
arguably doesn't matter if there's a cache, if we aren't
responsible for cache maintenance.

A few files in rbcodec use CACHEALIGN_SIZE, but these
can be converted to MEM_ALIGN_SIZE, which is identical
to CACHEALIGN_SIZE if the latter is defined. On other
targets, it aligns to at least sizeof(intptr_t).

Change-Id: If8cf8f6ec327dc3732f4cd5022a858546b9e63d6
2026-03-06 14:49:00 +00:00
Solomon Peachy
6f302083b5 cleanup: Get rid of erroneous execututable bit on various source files
Change-Id: I6382ba56dc6d99189c8647b010208c33fc2da7ca
2026-02-19 07:54:35 -05:00
Aidan MacDonald
653bca7ff4 make: allow building flat binary plugins on USE_ELF targets (attempt 2)
Looks like I forgot to test the hosted builds and for some
reason thought that make would expand objcopy recursively...

Change-Id: I61264eadcb1235660566f6a9f19f8718ebe14583
2026-02-04 16:45:25 +00:00
Solomon Peachy
1e2950cc6c Revert "make: allow building flat binary plugins on USE_ELF targets"
This reverts commit 91ec6f1e1e.

Reason for revert: Massive sea of red, looks like hosted + sim builds.

Change-Id: I98a3954d68ad2cc521e13c3683bf4a6f45f88b36
2026-02-04 08:49:19 -05:00
Aidan MacDonald
91ec6f1e1e make: allow building flat binary plugins on USE_ELF targets
From what I can see the Creative Zen Vision ports, which
were the only ones to set USE_ELF prior to the Echo R1 port,
do not work except for a bootloader and never even got to
the point of booting Rockbox. This explains why they build
codecs and plugins as ELF binaries, yet there is no code to
load ELF format codecs or plugins.

Anyhow, add a new setting, PLUGIN_USE_ELF, which controls
whether plugins & codecs are left as ELF or converted to
flat binaries. This makes it possible for the Echo R1 to
use the flat binary .rock format, and makes it possible to
have ELF plugins/codecs on targets with non-ELF main binaries.

Seeing as nothing needs ELF plugins/codecs right now, the
new default is to generate them as flat binaries unless
the target requests otherwise.

Change-Id: I9ffae669978de5cc7ad214cd50d97ad6e8938394
2026-02-04 07:32:43 -05:00
Aidan MacDonald
1f39ae52e3 codecs: fix compile error on ARM Cortex-M DEBUG app builds
Some of the inline assembly generates "impossible constraint"
errors in this function, but only when DEBUG is enabled.

Change-Id: I3b1135a8a55436bd3068ef560ebcef64a5184a05
2026-01-05 15:33:16 -05:00
Aidan MacDonald
3d281c2ea3 apps: cleanly disable codec buffering when not supported
Move HAVE_CODEC_BUFFERING to config.h, and disable all
related code on targets that don't support the feature,
ie. hosted targets that can't implement lc_open_from_mem().

Change-Id: I0d2a43900cd05b1a80c3cee519f8ad7b26e39fe7
2026-01-05 13:15:49 -05:00
Solomon Peachy
afe128f4cc arm: Profile/variation detection improvements
* Detection of 64-bit Arm v8-a
 * Proper detection of integer division support
   * always on v7-m, v8-a, v9-a, v8-m.main
   * sometimes on v7-a, v7-r, v8-r
   * never on v8-m.base v6-m, v6 and older "classic"
   * tl;dr: Rely on toolchain preprocessor definition

For the most part these additional variations won't acutally work
for native target builds, but sane -A detection is needed for
"local" builds now. -R detection is left out as it's not likely
to matter.

Change-Id: I8f6a52edc4d14490fc00e2f487406eca701eef02
2025-12-04 20:43:30 -05:00
Mauricio Garrido
a4de1195cd 3ds: 3ds port sources. First set of two
This commit adds changes to the original rockbox sources.

Note: the port files, functions, folders, etc., will be referred
to as 'ctru' to avoid using the Nintendo name elsewhere.

Change-Id: I0e2d3d4d2a75bd45ea67dc3452eb8d5487cf1f5a
2025-10-23 20:09:09 -04:00
Solomon Peachy
caaea275eb libspc: Temporarily disable problematic armv4 asm optimization
asm volatile (
    "mov    %[t0], %[out], asr #11  \n"
    "mul    %[out], %[t0], %[envx]  \n"
    : [out]"+r"(output), [t0]"=&r"(t0)
    : [envx]"r"((int) voice->envx));

This is resulting in "Rd and Rm should be different in mul" error,
because the compiler is putting [out] and [t0] into the same
register.

After some poking there doesn't appear to be a sane way to change
the constraints, so just disable it for now.

Change-Id: I7827713c8aadb27f0bf4a6f4a3e1d910c6193686
2025-09-21 15:39:35 -04:00
Solomon Peachy
01a62372ff flac: Fix build on Cowon D2.
Not enough IRAM on this target to support larger MAX_BLOCKSIZE even with
only 2ch.

Change-Id: I91675b9eb294f8af3f7d17aa9c76c7cb83ce0bd7
2025-09-09 08:09:45 -04:00
Solomon Peachy
a98a8ce131 FLAC: Conditionally increase MAX_BLOCKSIZE to 8KB
High-frequency files increasingly use a block size of over 4608B, which
means we need larger buffers to decode them.  However, larger buffers no
longer fit in IRAM on less-capable devices, hurting performance for
"normal" file playback.

On our slowest devices (M68K and PP-based devices), this is not worth
the tradeoff as they will likely not have enough CPU oomph to decode and
downmix these files in realtime.

S5L87xx-based devices have the raw performance to do this, so we decided
to err on the side of wider file compatibility at the cost of some
performance.

All other devices are unaffected.

Change-Id: I7344cf4c8c6b7b5c14f1ea67381160665d6ece5b
2025-09-08 22:51:46 -04:00
Solomon Peachy
695698b918 SID: Don't uselessly upconvert from 16bpp mono to 28bpp stereo
cRSID natively renders its output as a 16bit mono stream.  There's no
reason to not use it as-is, and save a bunch of CPU cycles in the
process.

Change-Id: Ib934c05e77298e377053b29db91d1f05fb65eb76
2025-09-02 20:19:22 -04:00
Roman Artiukhin
38105860dc Codecs: mp3: Move strip tags to codec
Another fix for FS#13626 (replacement for 2bd88936f7)

Change-Id: Ife5f65539457559fd908d0048d4df94649b0b894
2025-05-26 10:59:56 -04:00
Roman Artiukhin
9e95b337cc Codecs: mp3: Skip attempts to recover from buffer errors when the stream has ended
Change-Id: I81a636b48ea1e55de1dc8911a20d84f0f73c43ad
2025-05-23 11:35:47 -04:00
Solomon Peachy
bcf925a35f codecs: Silence two sets of warnings in musepak and wma codecs
The warnings triggered by -Wshift-negative-value are in the
upstream code, and presumably "correct"

Change-Id: I1cf20e12208f493c69e0852477d800cd417a67c6
2025-04-22 08:55:37 -04:00
Solomon Peachy
3b974e791a misc: Fix more build warnings uncovered with GCC15 and -Wunused-const-variable
Change-Id: I43f5d03d8496b2ac8b30df30b14d1c6e816ef0e2
2025-04-21 21:55:03 -04:00
Solomon Peachy
9d4632b0c3 misc: Clean up a pile of -Wunused-const-variable warnings
And re-enable the warning (applies to GCC 6+)

Change-Id: I7aa679ec65707db12de83c0433966b3821d07087
2025-04-21 21:13:59 -04:00
Roman Artiukhin
17d73c968a Codecs: mp4: Fix possible glitch at the end of song
sample_to_chunk last value was ignored in some cases leading to invalid sample value in lookup_table.

Fixes FS#13600

Change-Id: I8f066966e15c384d3185f689b68a2cc2a3abad1d
2025-04-20 13:43:15 +03:00
Aidan MacDonald
1aa9f26b02 arm: workaround to build Cortex-M7 targets with GCC 4.9
Cortex-M7 support was added in GCC 5, while GCC 4.9 only
supports the M4. The instruction set is almost identical
between both processors; the only difference is that the
M7 supports double-precision floating point and the M4
doesn't.

Since Rockbox currently doesn't use the FPU, building M7
targets as M4 works fine.

Change-Id: I5880d6e81a85fa9b3e16e08d57e7955b4493df0b
2025-04-19 13:16:36 -04:00
Aidan MacDonald
da4e02cdd3 codecs: disable incompatible ARM assembly for Cortex-M
Some assembly routines don't work on Thumb as-is. For now
just disable these so the codecs compile.

Affected codecs:

- libflac
- libmad
- libspeex
- libtta
- libwavpack

A few DSP routines need to be disabled for the same reason:

- crossfeed_process
- crossfeed_meier_process
- resample_hermite
- filter_process
- sample_output_stereo

Change-Id: I277e0719652096745a19a7e2b597eff32d8e1553
2025-04-19 13:00:17 -04:00
Aidan MacDonald
94c7c908b3 libmusepack: add ARMv7-M version of MPC_MULTIPLY_EX
We can't use Operand2 with register based shifts on ARMv7-M as it
isn't supported in the Thumb encoding. Instead, perform the shift
separately.

Change-Id: Ie96aa0a565e98bbca724dffc2ffc6d64fdb5d7c3
2025-04-19 12:26:47 -04:00
Aidan MacDonald
a0bfcd77c8 arm: enable unified assembly syntax in more files
This makes these files compileable, or in some cases less
broken, on Cortex-M targets.

In lcd-16bit.c, newer versions of GAS complain about the
infix condition codes so we use the suffix form instead,
which requires unified syntax to compile on GCC 4.9.

Change-Id: If45166d3fc83d64c692cbb331096a966397aa9e9
2025-04-18 10:26:02 -04:00
Aidan MacDonald
639b587fc7 arm: add support for processors with hardware division
ARMv7-M has hardware division, so it doesn't require __div0
or any support functions for 32-bit division.

Change-Id: I840683a1a77d737f378899ca4bcf858216b81014
2025-04-18 09:22:48 -04:00
Solomon Peachy
dc0cef8304 libopus: Re-add another optimization that was accidently dropped pre-3.15
This puts the entire ~26K decoder state structure into IRAM.

(was lost as part of 14c6bb798d, Nov 2019)

Change-Id: Idbf53657e7c0581b4e47247fc5550b59842b23f1
2025-02-12 08:51:37 -05:00
Christian Soffke
727c800c0d Don't force gcc as host compiler + fix clang warnings
On MacOS, gcc is a symlink for clang.

Patch gets rid of the warnings produced by clang,
when it is set as HOSTCC, and fixes voicetools
compilation on MacOS when calling make voicetools
from the simulator directory.

lua rb_defines_helper:
format specifies type 'int' but the argument has
type 'long'

codecs: opus / speex (LOGF):
format '%ld' expects argument of type 'long int',
but argument 7 has type 'off_t'

gigabeat:
variable 'size' set but not used

rdf2binary:
a function declaration without a prototype is
deprecated in all versions of C

rbspeexdec:
passing 'unsigned char *' to parameter of type
'char *' converts between pointers to integer
types where one is of the unique plain 'char'
type and the other is not

hmac-sha1.c
defining a type within 'offsetof' is a Clang
extension

Change-Id: I90539906698868f9589650585d865aee9f7e8539
2024-12-20 05:29:18 +01:00
Christian Soffke
a86b1999d0 simulator: fix missing Werror option + eliminate lib duplicate
configure:
Ensure Werror option doesn't get lost when simcc resets GCCOPTS

uisimulator.make:
Remove ignored duplicate SIMLIB on Darwin

codecs.make:
Eliminate some redundancy

Change-Id: Ieee6f677fd22666cb58aa6fe53eabdc0b0f8c190
2024-12-19 15:04:46 -05:00
Vencislav Atanasov
1468649258 Convert non-ASCII characters to UTF-8 or C-string literals
Comments are converted to UTF-8.

Strings which are part of executable code are converted using C-string hex literals. A comment with the intended UTF-8 character is appended to such lines.

The "c"-looking character in mpa.c was actually a small cyrillic "s" (i.e. "с").

Change-Id: If3a889080ef60b8bf756ad9ada38baede93ce35b
2024-12-15 21:16:12 -05:00
Vencislav Atanasov
5d7c8a0df1 Convert non-ASCII characters to UTF-8
Comments and notes are converted to UTF-8. Already broken multibyte characters are fixed using common sense.

This patch contains no code changes.

Change-Id: Ia511ab84936cb2495ac17309493a9b98727a7902
2024-12-15 21:16:12 -05:00
William Wilgus
f233b6e2f2 'libmad remove warnings
calculating inside a function makes it work
adding FORCE_INLINE makes warning reappear
anything else in bounds of the array asounds ok but has digital
distortion so pretty confident the code is right

Change-Id: Ibb2babe20b1d8a980f3e3fd19b4cddaaff9213a6
2024-12-14 01:21:56 -05:00
William Wilgus
e9b14b3986 libmad synth.c silence warnings try #3
https://godbolt.org/z/3bM7fxPP3 shows some of the disasm around the troble area for compiling

Change-Id: I7b2897ae20dad1b11af39439a4d1856267b1222b
2024-12-10 11:16:40 -05:00
Solomon Peachy
95681c3959 Revert "libmad synth.c silence warnings try #2"
This reverts commit 5650007399.

Reason for revert:  Results in warnings on *all* device builds.

Change-Id: I635be6791c3ea9c7d7e89f9cf5dd2e4e4e042a80
2024-12-10 08:59:00 -05:00
William Wilgus
5650007399 libmad synth.c silence warnings try #2
https://godbolt.org/z/3bM7fxPP3 shows some of the disasm around the troble area for compiling

Change-Id: I135af6df5569fb4b6d18d79f7893b5c27f6f83ea
2024-12-10 02:17:55 -05:00
Solomon Peachy
e3323e3ba7 Revert "libmad synth.c silence warnings"
This reverts commit b14056e90f.

Reason for revert: Not mathematically equivalent, inconsistent with other code paths, and leads to audio artifacts on ARM targets.

Change-Id: I71646e6e8df2aa2c57decdb5360daff870670c87
2024-12-08 19:14:01 -05:00
William Wilgus
b14056e90f libmad synth.c silence warnings
synth.c is using a negative offset which gcc doesn't like

equlivalent code just uses pointer math instead

Change-Id: Ia1282c5608409cdff05cd4b90c4d4b695174482a
2024-12-08 00:06:59 -05:00
Christian Soffke
87452d775e fix warnings on some systems / format specifier mismatch
Instead of %ld or %lx, use %jd or %jx
for off_t (after casting to intmax_t)

Change-Id: I4cd1831816820d2862b383ff8782e548b2fca294
2024-12-07 11:07:44 -05:00
Christian Soffke
1745b74576 Make simulator compile on MacOS
Tested on MacOS Sequoia (Apple Silicon) with the
latest Xcode command line tools, gcc 14
(Homebrew GCC 14.2.0_1) and sdl2 (Homebrew 2.30.9)

Make sure 'gcc' (and 'gcc-ar') is in your PATH
ahead of the Xcode-provided "gcc"(clang). E.g.
by setting up symlinks in /usr/local/bin that
point to gcc-14 and gcc-ar-14.

Notes:
- The appropriate bmp from uisimulator/bitmaps
  has to be manually copied to your build folder
  and renamed to UI256.bmp, if you want the sim
  background to be displayed

Change-Id: I559f33d2165065f913f30c016b85906af380fb81
2024-11-30 22:19:02 -05:00
William Wilgus
1fddea5e8e Revert "[BugFix] Enums are only 2 bytes on some Devices"
This reverts commit 4ec34f6986.

Reason for revert:
 -fshort-enums makes them smaller if the explicitrly enumerated values will fit in a smaller type

Change-Id: I834dfd2b2039eda91bc02c9cf95a0f9dfc5783f6
2024-11-24 11:38:16 -05:00
William Wilgus
4ec34f6986 [BugFix] Enums are only 2 bytes on some Devices
using enums to hold values larger than 0xFFFF could be problematic

WIP

Change-Id: I3a9be957265364b545f022fe26163f0869569e3e
2024-11-24 10:23:53 -05:00
Solomon Peachy
bdf1690cb2 build: Allow LTO to work globally, not just codecs/plugins
IMPORTANT: There is no guarantee this will compile cleanly much less
_work_ on any given target.  This is purely to enable future hackery.

Change-Id: Ib58f21b717719fd4325622b446a60779406ae035
2024-11-24 08:23:38 -05:00
Vencislav Atanasov
f040c4c9ec Rename CPU_S5L870X to CPU_S5L87XX
This is a preparation to introduce support for the following SoC models: S5L8720 (iPod Nano 4G, iPod Touch 2G), S5L8730 (iPod Nano 5G), S5L8723 (iPod Nano 6G) and S5L8740 (iPod Nano 7G)

The whole family consists of SoCs which are similar, running ARMv6 and Thumb2 instructions, but some peripherals are located at a different address.

No functional change is to be expected so far.

Change-Id: If1f7669c49cf110ccc52c5234cc42ffd6f2b4e80
2024-11-20 10:58:32 -05:00
Vencislav Atanasov
5c6d463cc3 Simplify libgme define
Change-Id: I3e66f57b3640246bde9fc1c5d75b094553f8598c
2024-11-20 12:31:09 +02:00
Solomon Peachy
2f109a7c2a flac: 7th channel decode buffer may not fit into IRAM.
(Fixes failure to compile on nano2g)

Change-Id: Ibe40a18ee74a3ac3ca2ec9dfac478d1fda5d34ee
2024-10-14 13:43:54 -04:00
Solomon Peachy
29f28ad8e6 flac: Implement proper support for 7 channel FLACs
* Allocate buffer for additional channel
 * Proper downmixing

Change-Id: I4190358a93bb328585952affcd42db05b05c19a5
2024-10-14 12:28:07 -04:00
Solomon Peachy
3aef933348 flac: Bump maximum channel count to 7 (FS#13306)
This is actually the root fix for the crash; the fix in
772eff8ca6 didn't restrict it to 2 channels, just sanity
checked the file vs MAX_CHANNELS.

Change-Id: If5a0a9b946a179ad47d6e7955f7c025de3aaaa0e
2024-10-14 11:05:28 -04:00
Solomon Peachy
772eff8ca6 flac: Explicitly reject FLAC files with more than two channels (FS#13306)
It's not clear that we've ever intended to support >2ch files, based on
'#define MAX_CHANNELS 2' and other logic that only seems to care about
mono vs not.

Change-Id: I15e92fb29cceef32e63fc3a821f6e96bbde930b6
2024-10-14 09:00:26 -04:00
Solomon Peachy
d4d74fda00 codecs: abs() --> llabs() in speex and libgme
We were calling abs() on 64-bit (ie long long) variables.

Change-Id: I8326910a4ce733e9e2251aa5f9047e336c8be6df
2024-10-12 12:01:36 -04:00
Roman Artiukhin
ef6da7503a Codecs: mp4: Support object type 29 (AAC LC + SBR + PS).
Backport libfaad commit d35cf8f24d

Change-Id: I0d637d2be36f5e4bb10d7d09adc442b470e81bf7
2024-09-25 14:01:57 +03:00