All of lore.kernel.org
 help / color / mirror / Atom feed
* CHECK without C compile?
@ 2006-10-23 22:35 Randy Dunlap
  2006-10-24 15:24 ` [patch, rfc] kbuild: implement checksrc without building Cources (was Re: CHECK without C compile?) Oleg Verych
  0 siblings, 1 reply; 6+ messages in thread
From: Randy Dunlap @ 2006-10-23 22:35 UTC (permalink / raw)
  To: sam; +Cc: lkml

Hi Sam,

Is there an option/variant of CHECKSRC that does something like
	make checkall
i.e., runs CHECK=sparse on all source files, without also building them
with the C compiler?

Thanks,
---
~Randy

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [patch, rfc] kbuild: implement checksrc without building Cources (was Re: CHECK without C compile?)
  2006-10-23 22:35 CHECK without C compile? Randy Dunlap
@ 2006-10-24 15:24 ` Oleg Verych
  2006-10-24 19:43   ` Oleg Verych
  0 siblings, 1 reply; 6+ messages in thread
From: Oleg Verych @ 2006-10-24 15:24 UTC (permalink / raw)
  To: linux-kernel; +Cc: kbuild-devel

On 2006-10-23, Randy Dunlap wrote:
> Hi Sam,

It seem he on vocation, let me get it, since i've started my develife
from makefiles.

> Is there an option/variant of CHECKSRC that does something like
> 	make checkall
> i.e., runs CHECK=sparse on all source files, without also building them
> with the C compiler?

As far as i can see, no, there isn't.
I have thing to propose, but something with generated header files
will not work yet (e.g kernel/config_data.h). Patch is rfc, of course.

---
From: Oleg Verych <olecom@flower.upol.cz>
Subject: [patch, rfc] kbuild: implement checksrc without building Cources

  Implementation of configured source chacking without actual building.

Cc: Randy Dunlap <rdunlap@xenotime.net>
Cc: Sam Ravnborg <sam@ravnborg.org>
Signed-off-by: Oleg Verych <olecom@flower.upol.cz>
---

  Configured sources means, some config target must be run already.
  After that
  ,-<shell>
  | make prepare
  | make C=something_not_0,1,2 _target_
  `--
  should run _target_ with checking and without building.

-o--=O`C  /. .\
 #oo'L O      o
<___=E M    ^--

 scripts/Kbuild.include |    6 +++---
 scripts/Makefile.build |   21 +++++++++++++--------
 2 files changed, 16 insertions(+), 11 deletions(-)

Index: linux-2.6.19-rc3/scripts/Kbuild.include
===================================================================
--- linux-2.6.19-rc3.orig/scripts/Kbuild.include	2006-10-24 12:47:09.670676021 +0000
+++ linux-2.6.19-rc3/scripts/Kbuild.include	2006-10-24 12:54:25.823530955 +0000
@@ -153,7 +153,7 @@
 if_changed = $(if $(strip $(any-prereq) $(arg-check)),                       \
 	@set -e;                                                             \
 	$(echo-cmd) $(cmd_$(1));                                             \
-	echo 'cmd_$@ := $(make-cmd)' > $(dot-target).cmd)
+	echo 'cmd_$@ := $(make-cmd)' > $(dot-target).cmd, @:)
 
 # execute the command and also postprocess generated .d dependencies
 # file
@@ -162,14 +162,14 @@
 	$(echo-cmd) $(cmd_$(1));                                             \
 	scripts/basic/fixdep $(depfile) $@ '$(make-cmd)' > $(dot-target).tmp;\
 	rm -f $(depfile);                                                    \
-	mv -f $(dot-target).tmp $(dot-target).cmd)
+	mv -f $(dot-target).tmp $(dot-target).cmd, @:)
 
 # Usage: $(call if_changed_rule,foo)
 # will check if $(cmd_foo) changed, or any of the prequisites changed,
 # and if so will execute $(rule_foo)
 if_changed_rule = $(if $(strip $(any-prereq) $(arg-check) ),                 \
 	@set -e;                                                             \
-	$(rule_$(1)))
+	$(rule_$(1)), @:)
 
 ###
 # why - tell why a a target got build
Index: linux-2.6.19-rc3/scripts/Makefile.build
===================================================================
--- linux-2.6.19-rc3.orig/scripts/Makefile.build	2006-10-24 12:46:45.161279310 +0000
+++ linux-2.6.19-rc3/scripts/Makefile.build	2006-10-24 13:14:11.947124287 +0000
@@ -87,12 +87,17 @@
 
 # Linus' kernel sanity checking tool
 ifneq ($(KBUILD_CHECKSRC),0)
-  ifeq ($(KBUILD_CHECKSRC),2)
-    quiet_cmd_force_checksrc = CHECK   $<
-          cmd_force_checksrc = $(CHECK) $(CHECKFLAGS) $(c_flags) $< ;
-  else
+  ifeq ($(KBUILD_CHECKSRC),1)
       quiet_cmd_checksrc     = CHECK   $<
             cmd_checksrc     = $(CHECK) $(CHECKFLAGS) $(c_flags) $< ;
+  else
+    quiet_cmd_force_checksrc = CHECK   $<
+          cmd_force_checksrc = $(CHECK) $(CHECKFLAGS) $(c_flags) $< ;
+    ifneq ($(KBUILD_CHECKSRC),2)
+      if_changed      = @:
+      if_changed_dep  = @:
+      if_changed_rule = @:
+    endif
   endif
 endif
 
@@ -207,8 +212,8 @@
 
 $(single-used-m): %.o: %.c FORCE
 	$(call cmd,force_checksrc)
-	$(call if_changed_rule,cc_o_c)
-	@{ echo $(@:.o=.ko); echo $@; } > $(MODVERDIR)/$(@F:.o=.mod)
+	$(call if_changed_rule,cc_o_c) || \
+	{ echo $(@:.o=.ko); echo $@; } > $(MODVERDIR)/$(@F:.o=.mod)
 
 quiet_cmd_cc_lst_c = MKLST   $@
       cmd_cc_lst_c = $(CC) $(c_flags) -g -c -o $*.o $< && \
@@ -310,8 +315,8 @@
 	$(call if_changed,link_multi-y)
 
 $(multi-used-m) : %.o: $(multi-objs-m) FORCE
-	$(call if_changed,link_multi-m)
-	@{ echo $(@:.o=.ko); echo $(link_multi_deps); } > $(MODVERDIR)/$(@F:.o=.mod)
+	$(call if_changed,link_multi-m) || \
+	{ echo $(@:.o=.ko); echo $(link_multi_deps); } > $(MODVERDIR)/$(@F:.o=.mod)
 
 targets += $(multi-used-y) $(multi-used-m)
 


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [patch, rfc] kbuild: implement checksrc without building Cources  (was Re: CHECK without C compile?)
  2006-10-24 15:24 ` [patch, rfc] kbuild: implement checksrc without building Cources (was Re: CHECK without C compile?) Oleg Verych
@ 2006-10-24 19:43   ` Oleg Verych
  2006-10-24 20:45     ` Randy Dunlap
  0 siblings, 1 reply; 6+ messages in thread
From: Oleg Verych @ 2006-10-24 19:43 UTC (permalink / raw)
  To: linux-kernel; +Cc: kbuild-devel

On 2006-10-24, Oleg Verych wrote:
> On 2006-10-23, Randy Dunlap wrote:
>> Hi Sam,
>
* It seems*
>
> +     $(call if_changed_rule,cc_o_c) || \
> +     { echo $(@:.o=.ko); echo $@; } > $(MODVERDIR)/$(@F:.o=.mod)

This doesn't work, use ifs instead. Updated.
I have no idea what to do with generated sources and headers.
One may be: check target `if_changed' to be %.c or %.h and let it be
built.
____
From: Oleg Verych <olecom@flower.upol.cz>
Subject: [patch, rfc] kbuild: implement checksrc without building Cources

  Implementation of configured source chacking without actual building.

Cc: Randy Dunlap <rdunlap@xenotime.net>
Cc: Sam Ravnborg <sam@ravnborg.org>
Signed-off-by: Oleg Verych <olecom@flower.upol.cz>
---

  Configured sources means, some config target must be run already.
  After that
  ,-<shell>
  | make prepare
  | make C=something_not_0,1,2 _target_
  `--
  should run _target_ with checking and without building.

-o--=O`C  /. .\
 #oo'L O      o
<___=E M    ^--

 scripts/Kbuild.include |    6 +++---
 scripts/Makefile.build |   25 ++++++++++++++++---------
 2 files changed, 19 insertions(+), 12 deletions(-)

Index: linux-2.6.19-rc3/scripts/Kbuild.include
===================================================================
--- linux-2.6.19-rc3.orig/scripts/Kbuild.include	2006-10-24 18:45:36.708292246 +0000
+++ linux-2.6.19-rc3/scripts/Kbuild.include	2006-10-24 19:11:29.552783811 +0000
@@ -153,7 +153,7 @@
 if_changed = $(if $(strip $(any-prereq) $(arg-check)),                       \
 	@set -e;                                                             \
 	$(echo-cmd) $(cmd_$(1));                                             \
-	echo 'cmd_$@ := $(make-cmd)' > $(dot-target).cmd)
+	echo 'cmd_$@ := $(make-cmd)' > $(dot-target).cmd ;)
 
 # execute the command and also postprocess generated .d dependencies
 # file
@@ -162,14 +162,14 @@
 	$(echo-cmd) $(cmd_$(1));                                             \
 	scripts/basic/fixdep $(depfile) $@ '$(make-cmd)' > $(dot-target).tmp;\
 	rm -f $(depfile);                                                    \
-	mv -f $(dot-target).tmp $(dot-target).cmd)
+	mv -f $(dot-target).tmp $(dot-target).cmd ;)
 
 # Usage: $(call if_changed_rule,foo)
 # will check if $(cmd_foo) changed, or any of the prequisites changed,
 # and if so will execute $(rule_foo)
 if_changed_rule = $(if $(strip $(any-prereq) $(arg-check) ),                 \
 	@set -e;                                                             \
-	$(rule_$(1)))
+	$(rule_$(1)) ;)
 
 ###
 # why - tell why a a target got build
Index: linux-2.6.19-rc3/scripts/Makefile.build
===================================================================
--- linux-2.6.19-rc3.orig/scripts/Makefile.build	2006-10-24 18:45:36.720292930 +0000
+++ linux-2.6.19-rc3/scripts/Makefile.build	2006-10-24 19:25:50.977873629 +0000
@@ -87,12 +87,17 @@
 
 # Linus' kernel sanity checking tool
 ifneq ($(KBUILD_CHECKSRC),0)
-  ifeq ($(KBUILD_CHECKSRC),2)
-    quiet_cmd_force_checksrc = CHECK   $<
-          cmd_force_checksrc = $(CHECK) $(CHECKFLAGS) $(c_flags) $< ;
-  else
+  ifeq ($(KBUILD_CHECKSRC),1)
       quiet_cmd_checksrc     = CHECK   $<
             cmd_checksrc     = $(CHECK) $(CHECKFLAGS) $(c_flags) $< ;
+  else
+    quiet_cmd_force_checksrc = CHECK   $<
+          cmd_force_checksrc = $(CHECK) $(CHECKFLAGS) $(c_flags) $< ;
+    ifneq ($(KBUILD_CHECKSRC),2)
+      if_changed      =#
+      if_changed_dep  =#
+      if_changed_rule =#
+    endif
   endif
 endif
 
@@ -204,11 +209,11 @@
 	$(call if_changed_rule,cc_o_c)
 
 # Single-part modules are special since we need to mark them in $(MODVERDIR)
-
 $(single-used-m): %.o: %.c FORCE
 	$(call cmd,force_checksrc)
-	$(call if_changed_rule,cc_o_c)
-	@{ echo $(@:.o=.ko); echo $@; } > $(MODVERDIR)/$(@F:.o=.mod)
+	$(if $(if_changed_rule), \
+	  $(call if_changed_rule,cc_o_c) \
+	  { echo $(@:.o=.ko); echo $@; } > $(MODVERDIR)/$(@F:.o=.mod))
 
 quiet_cmd_cc_lst_c = MKLST   $@
       cmd_cc_lst_c = $(CC) $(c_flags) -g -c -o $*.o $< && \
@@ -310,8 +315,10 @@
 	$(call if_changed,link_multi-y)
 
 $(multi-used-m) : %.o: $(multi-objs-m) FORCE
-	$(call if_changed,link_multi-m)
-	@{ echo $(@:.o=.ko); echo $(link_multi_deps); } > $(MODVERDIR)/$(@F:.o=.mod)
+	$(if $(if_changed), \
+	  $(call if_changed,link_multi-m) \
+	  { echo $(@:.o=.ko); \
+	    echo $(link_multi_deps); } > $(MODVERDIR)/$(@F:.o=.mod))
 
 targets += $(multi-used-y) $(multi-used-m)
 


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [patch, rfc] kbuild: implement checksrc without building Cources  (was Re: CHECK without C compile?)
  2006-10-24 19:43   ` Oleg Verych
@ 2006-10-24 20:45     ` Randy Dunlap
  2006-10-26 13:07       ` Re:[patch, rfc] kbuild: implement checksrc without building Cources Oleg Verych
  0 siblings, 1 reply; 6+ messages in thread
From: Randy Dunlap @ 2006-10-24 20:45 UTC (permalink / raw)
  To: Oleg Verych; +Cc: linux-kernel, kbuild-devel

On Tue, 24 Oct 2006 19:43:40 +0000 (UTC) Oleg Verych wrote:

> On 2006-10-24, Oleg Verych wrote:
> > On 2006-10-23, Randy Dunlap wrote:
> >> Hi Sam,
> >
> * It seems*
> >
> > +     $(call if_changed_rule,cc_o_c) || \
> > +     { echo $(@:.o=.ko); echo $@; } > $(MODVERDIR)/$(@F:.o=.mod)
> 
> This doesn't work, use ifs instead. Updated.
> I have no idea what to do with generated sources and headers.
> One may be: check target `if_changed' to be %.c or %.h and let it be
> built.

Hi Oleg,

Yes, it works for me, with the exception of host-generated
files, as you mentioned.  I ran into those with:
IKCONFIG (the one that you mentioned), ATM_FORE200E firmware,
IEEE 1394 OUI database (which I sent a patch for -- it should
not be generated when the config option is not enabled),
RAID456 tables, VIDEO_LOGO files, and CRC32 table.

Thanks for your time and effort.  Maybe Sam will have some ideas.

> ____
> From: Oleg Verych <olecom@flower.upol.cz>
> Subject: [patch, rfc] kbuild: implement checksrc without building Cources
> 
>   Implementation of configured source chacking without actual building.
> 
> Cc: Randy Dunlap <rdunlap@xenotime.net>
> Cc: Sam Ravnborg <sam@ravnborg.org>
> Signed-off-by: Oleg Verych <olecom@flower.upol.cz>
> ---
> 
>   Configured sources means, some config target must be run already.
>   After that
>   ,-<shell>
>   | make prepare
>   | make C=something_not_0,1,2 _target_
>   `--
>   should run _target_ with checking and without building.
> 
> -o--=O`C  /. .\
>  #oo'L O      o
> <___=E M    ^--
> 
>  scripts/Kbuild.include |    6 +++---
>  scripts/Makefile.build |   25 ++++++++++++++++---------
>  2 files changed, 19 insertions(+), 12 deletions(-)


---
~Randy

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re:[patch, rfc] kbuild: implement checksrc without building Cources...
  2006-10-24 20:45     ` Randy Dunlap
@ 2006-10-26 13:07       ` Oleg Verych
  2007-02-01 15:04         ` [patch, " Oleg Verych
  0 siblings, 1 reply; 6+ messages in thread
From: Oleg Verych @ 2006-10-26 13:07 UTC (permalink / raw)
  To: Randy Dunlap; +Cc: linux-kernel, kbuild-devel

On Tue, Oct 24, 2006 at 01:45:08PM -0700, Randy Dunlap wrote:
> On Tue, 24 Oct 2006 19:43:40 +0000 (UTC) Oleg Verych wrote:
> > This doesn't work, use ifs instead. Updated.
> > I have no idea what to do with generated sources and headers.
> > One may be: check target `if_changed' to be %.c or %.h and let it be
> > built.
> 
> Hi Oleg,
> 
> Yes, it works for me, with the exception of host-generated
> files, as you mentioned.  I ran into those with:
> IKCONFIG (the one that you mentioned), ATM_FORE200E firmware,
> IEEE 1394 OUI database (which I sent a patch for -- it should
> not be generated when the config option is not enabled),
> RAID456 tables, VIDEO_LOGO files, and CRC32 table.

I'm glad, that semi-working thing was helpful. But it's ugly hack.

Idea is to substitute objects (*.o) with sparse output, thus targets
like
,--
|%.o : %.c
+--
will be updated and new check will pass them (force check may be applied).
Also having results in files (even in so messy called *.o) is good for
collecting and sorting errors. Headers will be generated as needed.

Finally short statistics maybe printed in the end of the check:
[(stat -c %s *.o > 0 | wc -l) / find --name *.o]
  ^ with error file size > 0  / overall error files

But implementing all this in non-hack way isn't easy. Maybe Sam will
came back and will do it magically quickly. Until that, i'll try to
fight with current makefiles myself.

> Thanks for your time and effort.  Maybe Sam will have some ideas.

I've found "sparse" and read some philosophy from README. Nice.
Thanks you also !
____

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [patch, rfc] kbuild: implement checksrc without building Cources...
  2006-10-26 13:07       ` Re:[patch, rfc] kbuild: implement checksrc without building Cources Oleg Verych
@ 2007-02-01 15:04         ` Oleg Verych
  0 siblings, 0 replies; 6+ messages in thread
From: Oleg Verych @ 2007-02-01 15:04 UTC (permalink / raw)
  To: linux-kernel; +Cc: kbuild-devel

> From: Oleg Verych
> Newsgroups: gmane.linux.kernel,gmane.linux.kbuild.devel
> Subject: Re:[patch, rfc] kbuild: implement checksrc without building Cources...
> Date: Thu, 26 Oct 2006 15:07:20 +0200
> Archived-At: <http://permalink.gmane.org/gmane.linux.kernel/460736>

> On Tue, Oct 24, 2006 at 01:45:08PM -0700, Randy Dunlap wrote:
>> On Tue, 24 Oct 2006 19:43:40 +0000 (UTC) Oleg Verych wrote:
>> > This doesn't work, use ifs instead. Updated.
>> > I have no idea what to do with generated sources and headers.
>> > One may be: check target `if_changed' to be %.c or %.h and let it be
>> > built.
>> 
>> Hi Oleg,
>> 
>> Yes, it works for me, with the exception of host-generated
>> files, as you mentioned.  I ran into those with:
>> IKCONFIG (the one that you mentioned), ATM_FORE200E firmware,
>> IEEE 1394 OUI database (which I sent a patch for -- it should
>> not be generated when the config option is not enabled),
>> RAID456 tables, VIDEO_LOGO files, and CRC32 table.
>
> I'm glad, that semi-working thing was helpful. But it's ugly hack.
>
> Idea is to substitute objects (*.o) with sparse output, thus targets
> like
> ,--
>|%.o : %.c
> +--
> will be updated and new check will pass them (force check may be applied).
> Also having results in files (even in so messy called *.o) is good for
> collecting and sorting errors. Headers will be generated as needed.
>
> Finally short statistics maybe printed in the end of the check:
> [(stat -c %s *.o > 0 | wc -l) / find --name *.o]
>   ^ with error file size > 0  / overall error files
>
> But implementing all this in non-hack way isn't easy. Maybe Sam will
> came back and will do it magically quickly. Until that, i'll try to
> fight with current makefiles myself.
>
>> Thanks for your time and effort.  Maybe Sam will have some ideas.
>
> I've found "sparse" and read some philosophy from README. Nice.
> Thanks you also !
> ____

So far nothing has changed. Is it still worth to try to make more
comprehensive solution ?

p.s. Note. Please honor "Mail-Followup-To" header. Thanks.
____


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2007-02-01 15:05 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-10-23 22:35 CHECK without C compile? Randy Dunlap
2006-10-24 15:24 ` [patch, rfc] kbuild: implement checksrc without building Cources (was Re: CHECK without C compile?) Oleg Verych
2006-10-24 19:43   ` Oleg Verych
2006-10-24 20:45     ` Randy Dunlap
2006-10-26 13:07       ` Re:[patch, rfc] kbuild: implement checksrc without building Cources Oleg Verych
2007-02-01 15:04         ` [patch, " Oleg Verych

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.