devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH V7] kbuild: create a rule to run the pre-processor on *.dts files
@ 2013-01-02 18:43 Stephen Warren
  2013-01-12 17:03 ` Simon Glass
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Stephen Warren @ 2013-01-02 18:43 UTC (permalink / raw)
  To: Grant Likely
  Cc: David Gibson, Michal Marek, Jon Loeliger, Rob Herring, Scott Wood,
	Mark Brown, Jean-Christophe PLAGNIOL-VILLARD, Sam Ravnborg,
	Simon Glass, linux-kernel, devicetree-discuss, Stephen Warren

From: Stephen Warren <swarren@nvidia.com>

Create cmd_dtc_cpp to run the C pre-processor on *.dts file before
passing them to dtc for final compilation. This allows the use of #define
and #include within the .dts file.

Signed-off-by: Stephen Warren <swarren@nvidia.com>
---
Grant, back in mid-November, you said you'd make a decision on this in
the next couple of days, but I think this got overlooked.

v7: Build *.dtb from *.dts not src/*.dts.
v6: No change.
v5:
* Update Documentation/kbuild for the new command and rule.
v4:
* Use -x assembler-with-cpp so pre-defined macros are set up so that
  #included header files know to only use cpp syntax, not C syntax.
* Define __DTS__ for similar reasons.
* use $(CPP) not $(CC) -E, and use $(cpp_flags).
* Save the pre-processed results so they can be easily inspected when
  debugging build issues.
* The use of -x assembler-with-cpp causes cpp to recognize directives in
  column 1 only. Hence, there's no need to escape property names that
  begin with #. Hence, there's no need for separate skeleton.dtsi and
  skeleton.dtsip. Maintain a separate file extension and build rule so that
  CPP-usage is opt-in. In particular, when using CPP, #include must be used
  rather than /include/ so that dependencies work.
v3: Pass "-x c" not "-xc" to cpp.
v2: Place make %.dtb: %.dtsp rule into Makefile.lib.
---
 Documentation/kbuild/makefiles.txt |   23 +++++++++++++++++++++++
 scripts/Makefile.lib               |    9 +++++++++
 2 files changed, 32 insertions(+)

diff --git a/Documentation/kbuild/makefiles.txt b/Documentation/kbuild/makefiles.txt
index 14c3f4f..5198b74 100644
--- a/Documentation/kbuild/makefiles.txt
+++ b/Documentation/kbuild/makefiles.txt
@@ -1186,6 +1186,29 @@ When kbuild executes, the following steps are followed (roughly):
 		clean-files += *.dtb
 		DTC_FLAGS ?= -p 1024
 
+    dtc_cpp
+	This is just like dtc as describe above, except that the C pre-
+	processor is invoked upon the .dtsp file before compiling the result
+	with dtc.
+
+	In order for build dependencies to work, all files compiled using
+	dtc_cpp must use the C pre-processor's #include functionality and not
+	dtc's /include/ functionality.
+
+	Using the C pre-processor allows use of #define to create named
+	constants. In turn, the #defines will typically appear in a header
+	file, which may be shared with regular C code. Since the dtc language
+	represents a data structure rather than code in C syntax, similar
+	restrictions are placed on a header file included by a device tree
+	file as for a header file included by an assembly language file.
+	In particular, the C pre-processor is passed -x assembler-with-cpp,
+	which sets macro __ASSEMBLY__. __DTS__ is also set. These allow header
+	files to restrict their content to that compatible with device tree
+	source.
+
+	A central rule exists to create $(obj)/%.dtb from $(src)/%.dtsp;
+	architecture Makefiles do no need to explicitly write out that rule.
+
 --- 6.8 Custom kbuild commands
 
 	When kbuild is executing with KBUILD_VERBOSE=0, then only a shorthand
diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
index bdf42fd..2c2a302 100644
--- a/scripts/Makefile.lib
+++ b/scripts/Makefile.lib
@@ -269,6 +269,15 @@ cmd_dtc = $(objtree)/scripts/dtc/dtc -O dtb -o $@ -b 0 $(DTC_FLAGS) -d $(depfile
 $(obj)/%.dtb: $(src)/%.dts FORCE
 	$(call if_changed_dep,dtc)
 
+dtc-tmp = $(subst $(comma),_,$(dot-target).dts)
+
+quiet_cmd_dtc_cpp = DTC+CPP $@
+cmd_dtc_cpp = $(CPP) $(cpp_flags) -D__DTS__ -x assembler-with-cpp -o $(dtc-tmp) $< ; \
+	$(objtree)/scripts/dtc/dtc -O dtb -o $@ -b 0 $(DTC_FLAGS) $(dtc-tmp)
+
+$(obj)/%.dtb: $(src)/%.dtsp FORCE
+	$(call if_changed_dep,dtc_cpp)
+
 # Bzip2
 # ---------------------------------------------------------------------------
 
-- 
1.7.10.4

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

* Re: [PATCH V7] kbuild: create a rule to run the pre-processor on *.dts files
  2013-01-02 18:43 [PATCH V7] kbuild: create a rule to run the pre-processor on *.dts files Stephen Warren
@ 2013-01-12 17:03 ` Simon Glass
  2013-01-14 14:53 ` Jean-Christophe PLAGNIOL-VILLARD
  2013-02-01  9:01 ` Srinivas KANDAGATLA
  2 siblings, 0 replies; 9+ messages in thread
From: Simon Glass @ 2013-01-12 17:03 UTC (permalink / raw)
  To: Stephen Warren
  Cc: Grant Likely, David Gibson, Michal Marek, Jon Loeliger,
	Rob Herring, Scott Wood, Mark Brown,
	Jean-Christophe PLAGNIOL-VILLARD, Sam Ravnborg, linux-kernel,
	devicetree-discuss, Stephen Warren

On Wed, Jan 2, 2013 at 10:43 AM, Stephen Warren <swarren@wwwdotorg.org> wrote:
> From: Stephen Warren <swarren@nvidia.com>
>
> Create cmd_dtc_cpp to run the C pre-processor on *.dts file before
> passing them to dtc for final compilation. This allows the use of #define
> and #include within the .dts file.
>
> Signed-off-by: Stephen Warren <swarren@nvidia.com>

Acked-by: Simon Glass <sjg@chromium.org>

> ---
> Grant, back in mid-November, you said you'd make a decision on this in
> the next couple of days, but I think this got overlooked.
>
> v7: Build *.dtb from *.dts not src/*.dts.
> v6: No change.
> v5:
> * Update Documentation/kbuild for the new command and rule.
> v4:
> * Use -x assembler-with-cpp so pre-defined macros are set up so that
>   #included header files know to only use cpp syntax, not C syntax.
> * Define __DTS__ for similar reasons.
> * use $(CPP) not $(CC) -E, and use $(cpp_flags).
> * Save the pre-processed results so they can be easily inspected when
>   debugging build issues.
> * The use of -x assembler-with-cpp causes cpp to recognize directives in
>   column 1 only. Hence, there's no need to escape property names that
>   begin with #. Hence, there's no need for separate skeleton.dtsi and
>   skeleton.dtsip. Maintain a separate file extension and build rule so that
>   CPP-usage is opt-in. In particular, when using CPP, #include must be used
>   rather than /include/ so that dependencies work.
> v3: Pass "-x c" not "-xc" to cpp.
> v2: Place make %.dtb: %.dtsp rule into Makefile.lib.
> ---
>  Documentation/kbuild/makefiles.txt |   23 +++++++++++++++++++++++
>  scripts/Makefile.lib               |    9 +++++++++
>  2 files changed, 32 insertions(+)
>
> diff --git a/Documentation/kbuild/makefiles.txt b/Documentation/kbuild/makefiles.txt
> index 14c3f4f..5198b74 100644
> --- a/Documentation/kbuild/makefiles.txt
> +++ b/Documentation/kbuild/makefiles.txt
> @@ -1186,6 +1186,29 @@ When kbuild executes, the following steps are followed (roughly):
>                 clean-files += *.dtb
>                 DTC_FLAGS ?= -p 1024
>
> +    dtc_cpp
> +       This is just like dtc as describe above, except that the C pre-
> +       processor is invoked upon the .dtsp file before compiling the result
> +       with dtc.
> +
> +       In order for build dependencies to work, all files compiled using
> +       dtc_cpp must use the C pre-processor's #include functionality and not
> +       dtc's /include/ functionality.
> +
> +       Using the C pre-processor allows use of #define to create named
> +       constants. In turn, the #defines will typically appear in a header
> +       file, which may be shared with regular C code. Since the dtc language
> +       represents a data structure rather than code in C syntax, similar
> +       restrictions are placed on a header file included by a device tree
> +       file as for a header file included by an assembly language file.
> +       In particular, the C pre-processor is passed -x assembler-with-cpp,
> +       which sets macro __ASSEMBLY__. __DTS__ is also set. These allow header
> +       files to restrict their content to that compatible with device tree
> +       source.
> +
> +       A central rule exists to create $(obj)/%.dtb from $(src)/%.dtsp;
> +       architecture Makefiles do no need to explicitly write out that rule.
> +
>  --- 6.8 Custom kbuild commands
>
>         When kbuild is executing with KBUILD_VERBOSE=0, then only a shorthand
> diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
> index bdf42fd..2c2a302 100644
> --- a/scripts/Makefile.lib
> +++ b/scripts/Makefile.lib
> @@ -269,6 +269,15 @@ cmd_dtc = $(objtree)/scripts/dtc/dtc -O dtb -o $@ -b 0 $(DTC_FLAGS) -d $(depfile
>  $(obj)/%.dtb: $(src)/%.dts FORCE
>         $(call if_changed_dep,dtc)
>
> +dtc-tmp = $(subst $(comma),_,$(dot-target).dts)
> +
> +quiet_cmd_dtc_cpp = DTC+CPP $@
> +cmd_dtc_cpp = $(CPP) $(cpp_flags) -D__DTS__ -x assembler-with-cpp -o $(dtc-tmp) $< ; \
> +       $(objtree)/scripts/dtc/dtc -O dtb -o $@ -b 0 $(DTC_FLAGS) $(dtc-tmp)
> +
> +$(obj)/%.dtb: $(src)/%.dtsp FORCE
> +       $(call if_changed_dep,dtc_cpp)
> +
>  # Bzip2
>  # ---------------------------------------------------------------------------
>
> --
> 1.7.10.4
>

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

* Re: [PATCH V7] kbuild: create a rule to run the pre-processor on *.dts files
  2013-01-02 18:43 [PATCH V7] kbuild: create a rule to run the pre-processor on *.dts files Stephen Warren
  2013-01-12 17:03 ` Simon Glass
@ 2013-01-14 14:53 ` Jean-Christophe PLAGNIOL-VILLARD
  2013-02-01  9:01 ` Srinivas KANDAGATLA
  2 siblings, 0 replies; 9+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2013-01-14 14:53 UTC (permalink / raw)
  To: Stephen Warren
  Cc: Grant Likely, David Gibson, Michal Marek, Jon Loeliger,
	Rob Herring, Scott Wood, Mark Brown, Sam Ravnborg, Simon Glass,
	linux-kernel, devicetree-discuss, Stephen Warren

On 11:43 Wed 02 Jan     , Stephen Warren wrote:
> From: Stephen Warren <swarren@nvidia.com>
> 
> Create cmd_dtc_cpp to run the C pre-processor on *.dts file before
> passing them to dtc for final compilation. This allows the use of #define
> and #include within the .dts file.
> 
> Signed-off-by: Stephen Warren <swarren@nvidia.com>
Acked-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>

Best Regards,
J.
> ---
> Grant, back in mid-November, you said you'd make a decision on this in
> the next couple of days, but I think this got overlooked.
> 
> v7: Build *.dtb from *.dts not src/*.dts.
> v6: No change.
> v5:
> * Update Documentation/kbuild for the new command and rule.
> v4:
> * Use -x assembler-with-cpp so pre-defined macros are set up so that
>   #included header files know to only use cpp syntax, not C syntax.
> * Define __DTS__ for similar reasons.
> * use $(CPP) not $(CC) -E, and use $(cpp_flags).
> * Save the pre-processed results so they can be easily inspected when
>   debugging build issues.
> * The use of -x assembler-with-cpp causes cpp to recognize directives in
>   column 1 only. Hence, there's no need to escape property names that
>   begin with #. Hence, there's no need for separate skeleton.dtsi and
>   skeleton.dtsip. Maintain a separate file extension and build rule so that
>   CPP-usage is opt-in. In particular, when using CPP, #include must be used
>   rather than /include/ so that dependencies work.
> v3: Pass "-x c" not "-xc" to cpp.
> v2: Place make %.dtb: %.dtsp rule into Makefile.lib.
> ---
>  Documentation/kbuild/makefiles.txt |   23 +++++++++++++++++++++++
>  scripts/Makefile.lib               |    9 +++++++++
>  2 files changed, 32 insertions(+)
> 
> diff --git a/Documentation/kbuild/makefiles.txt b/Documentation/kbuild/makefiles.txt
> index 14c3f4f..5198b74 100644
> --- a/Documentation/kbuild/makefiles.txt
> +++ b/Documentation/kbuild/makefiles.txt
> @@ -1186,6 +1186,29 @@ When kbuild executes, the following steps are followed (roughly):
>  		clean-files += *.dtb
>  		DTC_FLAGS ?= -p 1024
>  
> +    dtc_cpp
> +	This is just like dtc as describe above, except that the C pre-
> +	processor is invoked upon the .dtsp file before compiling the result
> +	with dtc.
> +
> +	In order for build dependencies to work, all files compiled using
> +	dtc_cpp must use the C pre-processor's #include functionality and not
> +	dtc's /include/ functionality.
> +
> +	Using the C pre-processor allows use of #define to create named
> +	constants. In turn, the #defines will typically appear in a header
> +	file, which may be shared with regular C code. Since the dtc language
> +	represents a data structure rather than code in C syntax, similar
> +	restrictions are placed on a header file included by a device tree
> +	file as for a header file included by an assembly language file.
> +	In particular, the C pre-processor is passed -x assembler-with-cpp,
> +	which sets macro __ASSEMBLY__. __DTS__ is also set. These allow header
> +	files to restrict their content to that compatible with device tree
> +	source.
> +
> +	A central rule exists to create $(obj)/%.dtb from $(src)/%.dtsp;
> +	architecture Makefiles do no need to explicitly write out that rule.
> +
>  --- 6.8 Custom kbuild commands
>  
>  	When kbuild is executing with KBUILD_VERBOSE=0, then only a shorthand
> diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
> index bdf42fd..2c2a302 100644
> --- a/scripts/Makefile.lib
> +++ b/scripts/Makefile.lib
> @@ -269,6 +269,15 @@ cmd_dtc = $(objtree)/scripts/dtc/dtc -O dtb -o $@ -b 0 $(DTC_FLAGS) -d $(depfile
>  $(obj)/%.dtb: $(src)/%.dts FORCE
>  	$(call if_changed_dep,dtc)
>  
> +dtc-tmp = $(subst $(comma),_,$(dot-target).dts)
> +
> +quiet_cmd_dtc_cpp = DTC+CPP $@
> +cmd_dtc_cpp = $(CPP) $(cpp_flags) -D__DTS__ -x assembler-with-cpp -o $(dtc-tmp) $< ; \
> +	$(objtree)/scripts/dtc/dtc -O dtb -o $@ -b 0 $(DTC_FLAGS) $(dtc-tmp)
> +
> +$(obj)/%.dtb: $(src)/%.dtsp FORCE
> +	$(call if_changed_dep,dtc_cpp)
> +
>  # Bzip2
>  # ---------------------------------------------------------------------------
>  
> -- 
> 1.7.10.4
> 

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

* Re: [PATCH V7] kbuild: create a rule to run the pre-processor on *.dts files
  2013-01-02 18:43 [PATCH V7] kbuild: create a rule to run the pre-processor on *.dts files Stephen Warren
  2013-01-12 17:03 ` Simon Glass
  2013-01-14 14:53 ` Jean-Christophe PLAGNIOL-VILLARD
@ 2013-02-01  9:01 ` Srinivas KANDAGATLA
  2013-02-01 16:51   ` Rob Herring
  2 siblings, 1 reply; 9+ messages in thread
From: Srinivas KANDAGATLA @ 2013-02-01  9:01 UTC (permalink / raw)
  To: Stephen Warren
  Cc: Grant Likely, Michal Marek, Stephen Warren, Sam Ravnborg,
	Mark Brown, linux-kernel, Rob Herring, Scott Wood,
	devicetree-discuss

Hi Stephen,
Not sure if you have already noticed this but,
I did try this patch on my 3.8, and it looks like the intermediate dts
file replaces all instances of linux with 1 because of predefined macros
in gcc.
As a result
    linux,stdout-path = "/soc/stm-asc2";
is changed to.
    1,stdout-path = "/soc/stm-asc2";

On my version of compiler(gcc version 4.6.3) I have

armv7-linux-gcc -E -dM - < /dev/null | grep -v _
#define unix 1
#define linux 1

Which might be true with most compiler versions aswell.
As we are using linux as prefix for some device tree properties it makes
sense to undef the linux gcc define.
Adding -Ulinux to cmd_dtc_cpp should fix it.

-cmd_dtc_cpp = $(CPP) $(cpp_flags) -D__DTS__ -x assembler-with-cpp -o
$(dtc-tmp) $< ; \
+cmd_dtc_cpp = $(CPP) $(cpp_flags) -D__DTS__  -Ulinux -x
assembler-with-cpp -o $(dtc-tmp) $< ; \
    $(objtree)/scripts/dtc/dtc -O dtb -o $@ -b 0 $(DTC_FLAGS) $(dtc-tmp)


Acked-by: Srinivas Kandagatla <srinivas.kandagatla@st.com>



Thanks,
srini



On 02/01/13 18:43, Stephen Warren wrote:
> From: Stephen Warren <swarren@nvidia.com>
>
> Create cmd_dtc_cpp to run the C pre-processor on *.dts file before
> passing them to dtc for final compilation. This allows the use of #define
> and #include within the .dts file.
>
> Signed-off-by: Stephen Warren <swarren@nvidia.com>
> ---
> Grant, back in mid-November, you said you'd make a decision on this in
> the next couple of days, but I think this got overlooked.
>
> v7: Build *.dtb from *.dts not src/*.dts.
> v6: No change.
> v5:
> * Update Documentation/kbuild for the new command and rule.
> v4:
> * Use -x assembler-with-cpp so pre-defined macros are set up so that
>   #included header files know to only use cpp syntax, not C syntax.
> * Define __DTS__ for similar reasons.
> * use $(CPP) not $(CC) -E, and use $(cpp_flags).
> * Save the pre-processed results so they can be easily inspected when
>   debugging build issues.
> * The use of -x assembler-with-cpp causes cpp to recognize directives in
>   column 1 only. Hence, there's no need to escape property names that
>   begin with #. Hence, there's no need for separate skeleton.dtsi and
>   skeleton.dtsip. Maintain a separate file extension and build rule so that
>   CPP-usage is opt-in. In particular, when using CPP, #include must be used
>   rather than /include/ so that dependencies work.
> v3: Pass "-x c" not "-xc" to cpp.
> v2: Place make %.dtb: %.dtsp rule into Makefile.lib.
> ---
>  Documentation/kbuild/makefiles.txt |   23 +++++++++++++++++++++++
>  scripts/Makefile.lib               |    9 +++++++++
>  2 files changed, 32 insertions(+)
>
> diff --git a/Documentation/kbuild/makefiles.txt b/Documentation/kbuild/makefiles.txt
> index 14c3f4f..5198b74 100644
> --- a/Documentation/kbuild/makefiles.txt
> +++ b/Documentation/kbuild/makefiles.txt
> @@ -1186,6 +1186,29 @@ When kbuild executes, the following steps are followed (roughly):
>  		clean-files += *.dtb
>  		DTC_FLAGS ?= -p 1024
>  
> +    dtc_cpp
> +	This is just like dtc as describe above, except that the C pre-
> +	processor is invoked upon the .dtsp file before compiling the result
> +	with dtc.
> +
> +	In order for build dependencies to work, all files compiled using
> +	dtc_cpp must use the C pre-processor's #include functionality and not
> +	dtc's /include/ functionality.
> +
> +	Using the C pre-processor allows use of #define to create named
> +	constants. In turn, the #defines will typically appear in a header
> +	file, which may be shared with regular C code. Since the dtc language
> +	represents a data structure rather than code in C syntax, similar
> +	restrictions are placed on a header file included by a device tree
> +	file as for a header file included by an assembly language file.
> +	In particular, the C pre-processor is passed -x assembler-with-cpp,
> +	which sets macro __ASSEMBLY__. __DTS__ is also set. These allow header
> +	files to restrict their content to that compatible with device tree
> +	source.
> +
> +	A central rule exists to create $(obj)/%.dtb from $(src)/%.dtsp;
> +	architecture Makefiles do no need to explicitly write out that rule.
> +
>  --- 6.8 Custom kbuild commands
>  
>  	When kbuild is executing with KBUILD_VERBOSE=0, then only a shorthand
> diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
> index bdf42fd..2c2a302 100644
> --- a/scripts/Makefile.lib
> +++ b/scripts/Makefile.lib
> @@ -269,6 +269,15 @@ cmd_dtc = $(objtree)/scripts/dtc/dtc -O dtb -o $@ -b 0 $(DTC_FLAGS) -d $(depfile
>  $(obj)/%.dtb: $(src)/%.dts FORCE
>  	$(call if_changed_dep,dtc)
>  
> +dtc-tmp = $(subst $(comma),_,$(dot-target).dts)
> +
> +quiet_cmd_dtc_cpp = DTC+CPP $@
> +cmd_dtc_cpp = $(CPP) $(cpp_flags) -D__DTS__ -x assembler-with-cpp -o $(dtc-tmp) $< ; \
> +	$(objtree)/scripts/dtc/dtc -O dtb -o $@ -b 0 $(DTC_FLAGS) $(dtc-tmp)
> +
> +$(obj)/%.dtb: $(src)/%.dtsp FORCE
> +	$(call if_changed_dep,dtc_cpp)
> +
>  # Bzip2
>  # ---------------------------------------------------------------------------
>  

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

* Re: [PATCH V7] kbuild: create a rule to run the pre-processor on *.dts files
  2013-02-01  9:01 ` Srinivas KANDAGATLA
@ 2013-02-01 16:51   ` Rob Herring
  2013-02-01 17:27     ` Stephen Warren
       [not found]     ` <510BF281.1080309-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
  0 siblings, 2 replies; 9+ messages in thread
From: Rob Herring @ 2013-02-01 16:51 UTC (permalink / raw)
  To: srinivas.kandagatla
  Cc: Stephen Warren, Grant Likely, Michal Marek, Stephen Warren,
	Sam Ravnborg, Mark Brown, linux-kernel, Scott Wood,
	devicetree-discuss

On 02/01/2013 03:01 AM, Srinivas KANDAGATLA wrote:
> Hi Stephen,
> Not sure if you have already noticed this but,
> I did try this patch on my 3.8, and it looks like the intermediate dts
> file replaces all instances of linux with 1 because of predefined macros
> in gcc.
> As a result
>     linux,stdout-path = "/soc/stm-asc2";
> is changed to.
>     1,stdout-path = "/soc/stm-asc2";
> 
> On my version of compiler(gcc version 4.6.3) I have
> 
> armv7-linux-gcc -E -dM - < /dev/null | grep -v _
> #define unix 1
> #define linux 1
> 
> Which might be true with most compiler versions aswell.
> As we are using linux as prefix for some device tree properties it makes
> sense to undef the linux gcc define.
> Adding -Ulinux to cmd_dtc_cpp should fix it.
>
> -cmd_dtc_cpp = $(CPP) $(cpp_flags) -D__DTS__ -x assembler-with-cpp -o
> $(dtc-tmp) $< ; \
> +cmd_dtc_cpp = $(CPP) $(cpp_flags) -D__DTS__  -Ulinux -x
> assembler-with-cpp -o $(dtc-tmp) $< ; \
>     $(objtree)/scripts/dtc/dtc -O dtb -o $@ -b 0 $(DTC_FLAGS) $(dtc-tmp)

That's a hackish solution that seems fragile as well. Is there no way to
turn off all built-in defines?

Rob

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

* Re: [PATCH V7] kbuild: create a rule to run the pre-processor on *.dts files
  2013-02-01 16:51   ` Rob Herring
@ 2013-02-01 17:27     ` Stephen Warren
  2013-02-01 19:25       ` Stephen Warren
       [not found]     ` <510BF281.1080309-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
  1 sibling, 1 reply; 9+ messages in thread
From: Stephen Warren @ 2013-02-01 17:27 UTC (permalink / raw)
  To: Rob Herring
  Cc: srinivas.kandagatla, Grant Likely, Michal Marek, Stephen Warren,
	Sam Ravnborg, Mark Brown, linux-kernel, Scott Wood,
	devicetree-discuss

On 02/01/2013 09:51 AM, Rob Herring wrote:
> On 02/01/2013 03:01 AM, Srinivas KANDAGATLA wrote:
>> Hi Stephen,
>> Not sure if you have already noticed this but,
>> I did try this patch on my 3.8, and it looks like the intermediate dts
>> file replaces all instances of linux with 1 because of predefined macros
>> in gcc.
>> As a result
>>     linux,stdout-path = "/soc/stm-asc2";
>> is changed to.
>>     1,stdout-path = "/soc/stm-asc2";
>>
>> On my version of compiler(gcc version 4.6.3) I have
>>
>> armv7-linux-gcc -E -dM - < /dev/null | grep -v _
>> #define unix 1
>> #define linux 1
>>
>> Which might be true with most compiler versions aswell.
>> As we are using linux as prefix for some device tree properties it makes
>> sense to undef the linux gcc define.
>> Adding -Ulinux to cmd_dtc_cpp should fix it.
>>
>> -cmd_dtc_cpp = $(CPP) $(cpp_flags) -D__DTS__ -x assembler-with-cpp -o
>> $(dtc-tmp) $< ; \
>> +cmd_dtc_cpp = $(CPP) $(cpp_flags) -D__DTS__  -Ulinux -x
>> assembler-with-cpp -o $(dtc-tmp) $< ; \
>>     $(objtree)/scripts/dtc/dtc -O dtb -o $@ -b 0 $(DTC_FLAGS) $(dtc-tmp)
> 
> That's a hackish solution that seems fragile as well. Is there no way to
> turn off all built-in defines?

I'm pretty sure there is; I'll go find it.

But we do want to keep some of the built-in defines. for example, -x
assembler-with-cpp turns on __ASSEMBLY__ or similar, which headers can
use to determine whether to only set up #defines, or also C-oriented
stuff like types/prototypes. So, at least that one would need to be
explicitly re-defined.

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

* Re: [PATCH V7] kbuild: create a rule to run the pre-processor on *.dts files
       [not found]     ` <510BF281.1080309-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
@ 2013-02-01 19:22       ` Srinivas KANDAGATLA
  0 siblings, 0 replies; 9+ messages in thread
From: Srinivas KANDAGATLA @ 2013-02-01 19:22 UTC (permalink / raw)
  To: Rob Herring
  Cc: Michal Marek, Stephen Warren,
	devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ, Mark Brown,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA, Scott Wood, Grant Likely,
	Sam Ravnborg


[-- Attachment #1.1: Type: text/plain, Size: 1796 bytes --]

On 01/02/13 16:51, Rob Herring wrote:
> On 02/01/2013 03:01 AM, Srinivas KANDAGATLA wrote:
>> Hi Stephen,
>> Not sure if you have already noticed this but,
>> I did try this patch on my 3.8, and it looks like the intermediate dts
>> file replaces all instances of linux with 1 because of predefined macros
>> in gcc.
>> As a result
>>     linux,stdout-path = "/soc/stm-asc2";
>> is changed to.
>>     1,stdout-path = "/soc/stm-asc2";
>>
>> On my version of compiler(gcc version 4.6.3) I have
>>
>> armv7-linux-gcc -E -dM - < /dev/null | grep -v _
>> #define unix 1
>> #define linux 1
>>
>> Which might be true with most compiler versions aswell.
>> As we are using linux as prefix for some device tree properties it makes
>> sense to undef the linux gcc define.
>> Adding -Ulinux to cmd_dtc_cpp should fix it.
>>
>> -cmd_dtc_cpp = $(CPP) $(cpp_flags) -D__DTS__ -x assembler-with-cpp -o
>> $(dtc-tmp) $< ; \
>> +cmd_dtc_cpp = $(CPP) $(cpp_flags) -D__DTS__  -Ulinux -x
>> assembler-with-cpp -o $(dtc-tmp) $< ; \
>>     $(objtree)/scripts/dtc/dtc -O dtb -o $@ -b 0 $(DTC_FLAGS) $(dtc-tmp)
> That's a hackish solution that seems fragile as well. Is there no way to
> turn off all built-in defines?
Yes, there is another option to turn of system-specific options and keep
macros like __ASSEMBLER__

|-undef||(|Do not predefine any system-specific or GCC-specific macros.
The standard predefined macros remain defined. See Standard Predefined
Macros
<http://gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.html#Standard-Predefined-Macros>.)
This option also worked for me.

--srini



>
> Rob
> _______________________________________________
> devicetree-discuss mailing list
> devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org
> https://lists.ozlabs.org/listinfo/devicetree-discuss
>


[-- Attachment #1.2: Type: text/html, Size: 2794 bytes --]

[-- Attachment #2: Type: text/plain, Size: 192 bytes --]

_______________________________________________
devicetree-discuss mailing list
devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org
https://lists.ozlabs.org/listinfo/devicetree-discuss

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

* Re: [PATCH V7] kbuild: create a rule to run the pre-processor on *.dts files
  2013-02-01 17:27     ` Stephen Warren
@ 2013-02-01 19:25       ` Stephen Warren
  2013-02-04  7:36         ` Srinivas KANDAGATLA
  0 siblings, 1 reply; 9+ messages in thread
From: Stephen Warren @ 2013-02-01 19:25 UTC (permalink / raw)
  To: Rob Herring
  Cc: Michal Marek, Stephen Warren, srinivas.kandagatla,
	devicetree-discuss, Mark Brown, linux-kernel, Scott Wood,
	Grant Likely, Sam Ravnborg

On 02/01/2013 10:27 AM, Stephen Warren wrote:
> On 02/01/2013 09:51 AM, Rob Herring wrote:
>> On 02/01/2013 03:01 AM, Srinivas KANDAGATLA wrote:
>>> Hi Stephen,
>>> Not sure if you have already noticed this but,
>>> I did try this patch on my 3.8, and it looks like the intermediate dts
>>> file replaces all instances of linux with 1 because of predefined macros
>>> in gcc.
>>> As a result
>>>     linux,stdout-path = "/soc/stm-asc2";
>>> is changed to.
>>>     1,stdout-path = "/soc/stm-asc2";
>>>
>>> On my version of compiler(gcc version 4.6.3) I have
>>>
>>> armv7-linux-gcc -E -dM - < /dev/null | grep -v _
>>> #define unix 1
>>> #define linux 1
>>>
>>> Which might be true with most compiler versions aswell.
>>> As we are using linux as prefix for some device tree properties it makes
>>> sense to undef the linux gcc define.
>>> Adding -Ulinux to cmd_dtc_cpp should fix it.
>>>
>>> -cmd_dtc_cpp = $(CPP) $(cpp_flags) -D__DTS__ -x assembler-with-cpp -o
>>> $(dtc-tmp) $< ; \
>>> +cmd_dtc_cpp = $(CPP) $(cpp_flags) -D__DTS__  -Ulinux -x
>>> assembler-with-cpp -o $(dtc-tmp) $< ; \
>>>     $(objtree)/scripts/dtc/dtc -O dtb -o $@ -b 0 $(DTC_FLAGS) $(dtc-tmp)
>>
>> That's a hackish solution that seems fragile as well. Is there no way to
>> turn off all built-in defines?
> 
> I'm pretty sure there is; I'll go find it.

Hmmm. I can't actually find one.

> But we do want to keep some of the built-in defines. for example, -x
> assembler-with-cpp turns on __ASSEMBLY__ or similar, which headers can
> use to determine whether to only set up #defines, or also C-oriented
> stuff like types/prototypes. So, at least that one would need to be
> explicitly re-defined.

I grep'd through the kernel's include/ and there are quite a few hits
for some of the pre-define macros such as __linux__, __GNUC__,
__STRICT_ANSI__, __KERNEL__, __arm__ (and presumably other arch macros),
etc. I'd guess that an explicit blacklisting of -Dlinux and -Dunix might
be the most manageable path. Thoughts?

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

* Re: [PATCH V7] kbuild: create a rule to run the pre-processor on *.dts files
  2013-02-01 19:25       ` Stephen Warren
@ 2013-02-04  7:36         ` Srinivas KANDAGATLA
  0 siblings, 0 replies; 9+ messages in thread
From: Srinivas KANDAGATLA @ 2013-02-04  7:36 UTC (permalink / raw)
  To: Stephen Warren
  Cc: Rob Herring, Michal Marek, Stephen Warren, devicetree-discuss,
	Mark Brown, linux-kernel, Scott Wood, Grant Likely, Sam Ravnborg

On 01/02/13 19:25, Stephen Warren wrote:
> On 02/01/2013 10:27 AM, Stephen Warren wrote:
>> On 02/01/2013 09:51 AM, Rob Herring wrote:
>>> On 02/01/2013 03:01 AM, Srinivas KANDAGATLA wrote:
>>>> Hi Stephen,
>>>> Not sure if you have already noticed this but,
>>>> I did try this patch on my 3.8, and it looks like the intermediate dts
>>>> file replaces all instances of linux with 1 because of predefined macros
>>>> in gcc.
>>>> As a result
>>>>     linux,stdout-path = "/soc/stm-asc2";
>>>> is changed to.
>>>>     1,stdout-path = "/soc/stm-asc2";
>>>>
>>>> On my version of compiler(gcc version 4.6.3) I have
>>>>
>>>> armv7-linux-gcc -E -dM - < /dev/null | grep -v _
>>>> #define unix 1
>>>> #define linux 1
>>>>
>>>> Which might be true with most compiler versions aswell.
>>>> As we are using linux as prefix for some device tree properties it makes
>>>> sense to undef the linux gcc define.
>>>> Adding -Ulinux to cmd_dtc_cpp should fix it.
>>>>
>>>> -cmd_dtc_cpp = $(CPP) $(cpp_flags) -D__DTS__ -x assembler-with-cpp -o
>>>> $(dtc-tmp) $< ; \
>>>> +cmd_dtc_cpp = $(CPP) $(cpp_flags) -D__DTS__  -Ulinux -x
>>>> assembler-with-cpp -o $(dtc-tmp) $< ; \
>>>>     $(objtree)/scripts/dtc/dtc -O dtb -o $@ -b 0 $(DTC_FLAGS) $(dtc-tmp)
>>> That's a hackish solution that seems fragile as well. Is there no way to
>>> turn off all built-in defines?
>> I'm pretty sure there is; I'll go find it.
> Hmmm. I can't actually find one.
There is another option(-undef) to turn of system-specific options and
keep standard macros like __ASSEMBLER__

|-undef||(|Do not predefine any system-specific or GCC-specific macros.
The standard predefined macros remain defined.
(http://gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.html#Standard-Predefined-Macros))
This option also worked for me.

--srini

>
>> But we do want to keep some of the built-in defines. for example, -x
>> assembler-with-cpp turns on __ASSEMBLY__ or similar, which headers can
>> use to determine whether to only set up #defines, or also C-oriented
>> stuff like types/prototypes. So, at least that one would need to be
>> explicitly re-defined.
> I grep'd through the kernel's include/ and there are quite a few hits
> for some of the pre-define macros such as __linux__, __GNUC__,
> __STRICT_ANSI__, __KERNEL__, __arm__ (and presumably other arch macros),
> etc. I'd guess that an explicit blacklisting of -Dlinux and -Dunix might
> be the most manageable path. Thoughts?
> _______________________________________________
> devicetree-discuss mailing list
> devicetree-discuss@lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/devicetree-discuss
>
>

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

end of thread, other threads:[~2013-02-04  7:36 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-01-02 18:43 [PATCH V7] kbuild: create a rule to run the pre-processor on *.dts files Stephen Warren
2013-01-12 17:03 ` Simon Glass
2013-01-14 14:53 ` Jean-Christophe PLAGNIOL-VILLARD
2013-02-01  9:01 ` Srinivas KANDAGATLA
2013-02-01 16:51   ` Rob Herring
2013-02-01 17:27     ` Stephen Warren
2013-02-01 19:25       ` Stephen Warren
2013-02-04  7:36         ` Srinivas KANDAGATLA
     [not found]     ` <510BF281.1080309-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-02-01 19:22       ` Srinivas KANDAGATLA

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).