Thread (5 messages) 5 messages, 2 authors, 2019-06-30

Re: [PATCH v3 4/4] kbuild: compile-test kernel headers to ensure they are self-contained

From: Masahiro Yamada <hidden>
Date: 2019-06-30 07:58:27
Also in: bpf, linux-kbuild, linux-mediatek, lkml, netdev

Hi Sam,


On Sat, Jun 29, 2019 at 3:01 AM Sam Ravnborg [off-list ref] wrote:
Hi Masahiro.

On Fri, Jun 28, 2019 at 01:39:02AM +0900, Masahiro Yamada wrote:
quoted
The headers in include/ are globally used in the kernel source tree
to provide common APIs. They are included from external modules, too.

It will be useful to make as many headers self-contained as possible
so that we do not have to rely on a specific include order.

There are more than 4000 headers in include/. In my rough analysis,
70% of them are already self-contained. With efforts, most of them
can be self-contained.

For now, we must exclude more than 1000 headers just because they
cannot be compiled as standalone units. I added them to header-test-.
The black list was mostly generated by a script, so should be checked
later.
The list is smaller than I had expected.
And I see why you insisted on avoiding a maze ok Kbuild files.
It looks good, except there is a few issues..


The file kernel/kheaders_data.tar.xz includes all the .s files.
Something needs to be done to exclude the .s files...
Good catch. I will change scripts/gen_kheaders.sh

When building a full kernel the build fails like this:
  LD      vmlinux.o
aarch64-linux-gnu-ld: cannot find include/lib.a: No such file or directory
make[1]: *** [/home/sam/kernel/linux-kbuild.git/Makefile:1054: vmlinux] Error 1
make[1]: Leaving directory '/home/sam/kernel/linux-kbuild.git/.build/arm64-allyesconfig'
make: *** [Makefile:179: sub-make] Error 2
My bad - I built only include/,
without testing full build.

I will fix.

include/uapi/linux/mman.h fails when building sparc64 allmodconfig.
There is likely more header files that will fail when we start to
throw this after diverse randconfigs.
I have no good idea how to catch this.
Unless your scripts could automate this across several architectures.
Thanks. I excluded a little more headers.

I did not continue my testing futher.
quoted
+header-test-                 += uapi/drm/vmwgfx_drm.h
+header-test-                 += uapi/linux/a.out.h
+header-test-                 += uapi/linux/coda.h
...
quoted
+header-test-                 += uapi/xen/evtchn.h
+header-test-                 += uapi/xen/gntdev.h
+header-test-                 += uapi/xen/privcmd.h
I though uapi files were covered by another Makefile?
If they are added because we pull them in using a pattern, maybe they
should be removed using a specific filer-out?
I have not looked at this closely yet.

usr/include/Makefile tests UAPI headers
crafted by scripts/headers_install.sh

Testing UAPI headers in their raw form
makes sense, I think.



-- 
Best Regards
Masahiro Yamada

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help