[U-Boot] How to build multiple object files from one source?

Hello,
I've been playing with libgcc sources imported in U-Boot [1] and so far for some platforms it works but for some doesn't.
The problem I just discovered is how libgcc's assembly is composed. It has a couple of not very usual features: 1. The same labels used in different functions 2. A lot of functions are collected in the same source file [2] 3. Every function is wrapped in individual #ifdef 4. Very special target is used for compilation [3] which iterates through the list of all those per-function defines LIB1ASMFUNCS [4] and compiles the same one lib1funcs.S many times each time with just one define provided and creates similarly named .o file. Then all objects are easily collected in libgcc.s because all labels are already resolved into offsets.
And I'm wondering if something similar could be achieved in U-Boot?
Ideal solution is reproduction of libgcc's original approach but that requires implementation of my own build "script" which might deal with input and output of different names. Because obviously "obj-y += xxx" won't work.
That's what I want: Source file: lib1funcs.S Object files: _mulsi3.o, _umulsidi3.o, _umulsi3_highpart.o etc. [that I may achieve with creating of multiple symlinks to original lib1funcs.S]
And what's even more important important I need to set per-file ASFLAGS: ASFLAGS__mulsi3.o = -DL_mulsi3, ASFLAGS__umulsidi3.o = -DL_umulsidi3, ASFLAGS__umulsi3_highpart.o = -DL_umulsi3_highpart etc.
If that's not possible probably I'll need to split that combined lib1funcs.S into many files but this is: a) Pretty painful as we're talking about ~15 files b) Maintenance, i.e. the next import from future versions of GCC will be even more painful as lib1funcs.S might be restructured etc
Any ideas?
-Alexey
[1] https://patchwork.ozlabs.org/patch/926522/ [2] https://github.com/gcc-mirror/gcc/blob/master/libgcc/config/arc/lib1funcs.S [3] https://github.com/gcc-mirror/gcc/blob/master/libgcc/Makefile.in#L473 [4] https://github.com/gcc-mirror/gcc/blob/master/libgcc/config/arc/t-arc#L24

On Fri, Jun 08, 2018 at 07:18:34PM +0000, Alexey Brodkin wrote:
Hello,
I've been playing with libgcc sources imported in U-Boot [1] and so far for some platforms it works but for some doesn't.
The problem I just discovered is how libgcc's assembly is composed. It has a couple of not very usual features:
- The same labels used in different functions
- A lot of functions are collected in the same source file [2]
- Every function is wrapped in individual #ifdef
- Very special target is used for compilation [3] which iterates through the list of all those per-function defines LIB1ASMFUNCS [4] and compiles the same one lib1funcs.S many times each time with just one define provided and creates similarly named .o file. Then all objects are easily collected in libgcc.s because all labels are already resolved into offsets.
And I'm wondering if something similar could be achieved in U-Boot?
I would suggest, given that we have good Kbuild infrastructure now, and that sounds a lot like how, from the last time I skimmed the current kernel lib1asmfunc stuff for ARM, it's done today there. It's not a 1:1 but it's cleaner/clearer than what we have today.
participants (2)
-
Alexey Brodkin
-
Tom Rini