On Thu, Aug 11, 2022 at 11:31 PM Mark Rutland <mark.rutland@xxxxxxx> wrote: > > On Thu, Aug 11, 2022 at 03:20:43PM +0100, Russell King (Oracle) wrote: > > Hi, > > > > Please can someone try to explain what is going on when I ask for a .S > > file to be built to an object with 5.19 and GNU make 4.3 from Debian > > Bullseye (although I don't think this is a make version issue): > > > > $ rm ../build/multi/arch/arm/lib/findbit.o > > $ make -j2 CROSS_COMPILE="arm-linux-gnueabihf-" ARCH="arm" O=../build/multi arch/arm/lib/findbit.o > > make[1]: Entering directory '/home/rmk/git/build/multi' > > GEN Makefile > > CALL /home/rmk/git/linux-rmk/scripts/atomic/check-atomics.sh > > CALL /home/rmk/git/linux-rmk/scripts/checksyscalls.sh > > make[3]: *** No rule to make target 'arch/arm/lib/findbit.o'. Stop. > > make[2]: *** [/home/rmk/git/linux-rmk/scripts/Makefile.build:441: __build] Error 2 > > make[1]: *** [/home/rmk/git/linux-rmk/Makefile:1843: arch/arm] Error 2 > > make[1]: *** Waiting for unfinished jobs.... > > AS arch/arm/lib/findbit.o > > make[1]: Leaving directory '/home/rmk/git/build/multi' > > make: *** [Makefile:219: __sub-make] Error 2 > > FWIW, I think this is to do with lib-y directories rather than wheether the > object is C or assembly: > > [mark@lakrids:~/src/linux]% ls arch/arm64/lib > clear_page.S copy_from_user.S copy_template.S crc32.S delay.c insn.c Makefile memcmp.S memset.S strchr.S strlen.S strnlen.S tishift.S xor-neon.c > clear_user.S copy_page.S copy_to_user.S csum.c error-inject.c kasan_sw_tags.S memchr.S memcpy.S mte.S strcmp.S strncmp.S strrchr.S uaccess_flushcache.c > [mark@lakrids:~/src/linux]% usekorg 12.1.0 make ARCH=arm64 CROSS_COMPILE=aarch64-linux- arch/arm64/lib/insn.o > CALL scripts/checksyscalls.sh > CALL scripts/atomic/check-atomics.sh > make[2]: *** No rule to make target 'arch/arm64/lib/insn.o'. Stop. > make[1]: *** [scripts/Makefile.build:441: __build] Error 2 > make: *** [Makefile:1844: arch/arm64] Error 2 > [mark@lakrids:~/src/linux]% usekorg 12.1.0 make ARCH=arm64 CROSS_COMPILE=aarch64-linux- arch/arm64/lib/copy_page.o > CALL scripts/checksyscalls.sh > CALL scripts/atomic/check-atomics.sh > make[2]: *** No rule to make target 'arch/arm64/lib/copy_page.o'. Stop. > make[1]: *** [scripts/Makefile.build:441: __build] Error 2 > make: *** [Makefile:1844: arch/arm64] Error 2 > [mark@lakrids:~/src/linux]% usekorg 12.1.0 make ARCH=arm64 CROSS_COMPILE=aarch64-linux- arch/arm64/lib > CALL scripts/checksyscalls.sh > CALL scripts/atomic/check-atomics.sh > AS arch/arm64/lib/clear_page.o > AS arch/arm64/lib/clear_user.o > AS arch/arm64/lib/copy_from_user.o > AS arch/arm64/lib/copy_page.o > AS arch/arm64/lib/copy_to_user.o > CC arch/arm64/lib/csum.o > CC arch/arm64/lib/delay.o > CC arch/arm64/lib/insn.o > AS arch/arm64/lib/memchr.o > AS arch/arm64/lib/memcmp.o > AS arch/arm64/lib/memcpy.o > AS arch/arm64/lib/memset.o > AS arch/arm64/lib/strchr.o > AS arch/arm64/lib/strcmp.o > AS arch/arm64/lib/strlen.o > AS arch/arm64/lib/strncmp.o > AS arch/arm64/lib/strnlen.o > AS arch/arm64/lib/strrchr.o > AS arch/arm64/lib/tishift.o > AR arch/arm64/lib/lib.a > AS arch/arm64/lib/crc32.o > AS arch/arm64/lib/mte.o > AR arch/arm64/lib/built-in.a > > > ... clearly it figures how to build the directory as a whole, but can't figure > out how to build indiviual objects within that. > > Thanks, > Mark Right, you cannot build individual files in arch/*/lib/. This is a corner-case of the current implementation of single target rules. The GNU Make version, the file suffix (.S, .c, or whatever), etc. are irrelevant. Let me think if I can improve it somehow. -- Best Regards Masahiro Yamada