mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [PATCH 1/3] kbuild: add -Wmissing-prototypes and -std=gnu89 to KBUILD_HOSTCFLAGS
@ 2020-06-23  3:07 Masahiro Yamada
  2020-06-23  3:07 ` [PATCH 2/3] kbuild: add infrastructure to build userspace programs Masahiro Yamada
  2020-06-23  3:07 ` [PATCH 3/3] scripts: use 'userprogs' to build programs for target Masahiro Yamada
  0 siblings, 2 replies; 4+ messages in thread
From: Masahiro Yamada @ 2020-06-23  3:07 UTC (permalink / raw)
  To: barebox; +Cc: Masahiro Yamada

Align with Linux kernel.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
---

 Makefile | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/Makefile b/Makefile
index da01ca5b0..a4aac3db4 100644
--- a/Makefile
+++ b/Makefile
@@ -363,8 +363,8 @@ HOST_LFS_LIBS := $(shell getconf LFS_LIBS 2>/dev/null)
 
 HOSTCC       = gcc
 HOSTCXX      = g++
-KBUILD_HOSTCFLAGS   := -Wall -Wstrict-prototypes -O2 \
-		-fomit-frame-pointer $(HOST_LFS_CFLAGS) \
+KBUILD_HOSTCFLAGS   := -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 \
+		-fomit-frame-pointer -std=gnu89 $(HOST_LFS_CFLAGS) \
 		$(HOSTCFLAGS)
 KBUILD_HOSTCXXFLAGS := -Wall -O2 $(HOST_LFS_CFLAGS) $(HOSTCXXFLAGS)
 KBUILD_HOSTLDFLAGS  := $(HOST_LFS_LDFLAGS) $(HOSTLDFLAGS)
-- 
2.25.1


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 2/3] kbuild: add infrastructure to build userspace programs
  2020-06-23  3:07 [PATCH 1/3] kbuild: add -Wmissing-prototypes and -std=gnu89 to KBUILD_HOSTCFLAGS Masahiro Yamada
@ 2020-06-23  3:07 ` Masahiro Yamada
  2020-06-23 11:14   ` Sascha Hauer
  2020-06-23  3:07 ` [PATCH 3/3] scripts: use 'userprogs' to build programs for target Masahiro Yamada
  1 sibling, 1 reply; 4+ messages in thread
From: Masahiro Yamada @ 2020-06-23  3:07 UTC (permalink / raw)
  To: barebox; +Cc: Masahiro Yamada

Import Linux commit 7f3a59db274c3e3d884c785e363a054110f1c266

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
---

 Makefile                   | 13 ++++++++---
 scripts/Makefile.build     |  6 +++++
 scripts/Makefile.clean     |  2 +-
 scripts/Makefile.userprogs | 45 ++++++++++++++++++++++++++++++++++++++
 4 files changed, 62 insertions(+), 4 deletions(-)
 create mode 100644 scripts/Makefile.userprogs

diff --git a/Makefile b/Makefile
index a4aac3db4..0da032532 100644
--- a/Makefile
+++ b/Makefile
@@ -363,9 +363,12 @@ HOST_LFS_LIBS := $(shell getconf LFS_LIBS 2>/dev/null)
 
 HOSTCC       = gcc
 HOSTCXX      = g++
-KBUILD_HOSTCFLAGS   := -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 \
-		-fomit-frame-pointer -std=gnu89 $(HOST_LFS_CFLAGS) \
-		$(HOSTCFLAGS)
+
+export KBUILD_USERCFLAGS := -Wall -Wmissing-prototypes -Wstrict-prototypes \
+			      -O2 -fomit-frame-pointer -std=gnu89
+export KBUILD_USERLDFLAGS :=
+
+KBUILD_HOSTCFLAGS   := $(KBUILD_USERCFLAGS) $(HOST_LFS_CFLAGS) $(HOSTCFLAGS)
 KBUILD_HOSTCXXFLAGS := -Wall -O2 $(HOST_LFS_CFLAGS) $(HOSTCXXFLAGS)
 KBUILD_HOSTLDFLAGS  := $(HOST_LFS_LDFLAGS) $(HOSTLDFLAGS)
 KBUILD_HOSTLDLIBS   := $(HOST_LFS_LIBS) $(HOSTLDLIBS)
@@ -608,6 +611,10 @@ KBUILD_CFLAGS += $(call cc-option, -fno-delete-null-pointer-checks,)
 
 KBUILD_CFLAGS   += $(call cc-disable-warning, address-of-packed-member)
 
+# Align the bit size of userspace programs with the kernel
+KBUILD_USERCFLAGS  += $(filter -m32 -m64, $(KBUILD_CFLAGS))
+KBUILD_USERLDFLAGS += $(filter -m32 -m64, $(KBUILD_CFLAGS))
+
 # arch Makefile may override CC so keep this after arch Makefile is included
 NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
 CHECKFLAGS     += $(NOSTDINC_FLAGS)
diff --git a/scripts/Makefile.build b/scripts/Makefile.build
index 00f627791..a3dfe261a 100644
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -49,6 +49,12 @@ ifneq ($(hostprogs)$(hostprogs-y)$(hostprogs-m),)
 include scripts/Makefile.host
 endif
 
+# Do not include userprogs rules unless needed.
+userprogs := $(sort $(userprogs))
+ifneq ($(userprogs),)
+include scripts/Makefile.userprogs
+endif
+
 ifndef obj
 $(warning kbuild: Makefile.build is included improperly)
 endif
diff --git a/scripts/Makefile.clean b/scripts/Makefile.clean
index 6e6c9ef7c..97fd2ef48 100644
--- a/scripts/Makefile.clean
+++ b/scripts/Makefile.clean
@@ -37,7 +37,7 @@ subdir-ymn	:= $(addprefix $(obj)/,$(subdir-ymn))
 
 __clean-files	:= $(extra-y) $(extra-m) $(extra-)       \
 		   $(always) $(always-y) $(always-m) $(always-) $(targets) $(clean-files)   \
-		   $(hostprogs) $(hostprogs-y) $(hostprogs-m) $(hostprogs-)
+		   $(hostprogs) $(hostprogs-y) $(hostprogs-m) $(hostprogs-) $(userprogs)
 
 # as clean-files is given relative to the current directory, this adds
 # a $(obj) prefix, except for absolute paths
diff --git a/scripts/Makefile.userprogs b/scripts/Makefile.userprogs
new file mode 100644
index 000000000..fb4152973
--- /dev/null
+++ b/scripts/Makefile.userprogs
@@ -0,0 +1,45 @@
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# Build userspace programs for the target system
+#
+
+# Executables compiled from a single .c file
+user-csingle	:= $(foreach m, $(userprogs), $(if $($(m)-objs),,$(m)))
+
+# Executables linked based on several .o files
+user-cmulti	:= $(foreach m, $(userprogs), $(if $($(m)-objs),$(m)))
+
+# Objects compiled from .c files
+user-cobjs	:= $(sort $(foreach m, $(userprogs), $($(m)-objs)))
+
+user-csingle	:= $(addprefix $(obj)/, $(user-csingle))
+user-cmulti	:= $(addprefix $(obj)/, $(user-cmulti))
+user-cobjs	:= $(addprefix $(obj)/, $(user-cobjs))
+
+user_ccflags	= -Wp,-MMD,$(depfile) $(KBUILD_USERCFLAGS) $(userccflags) \
+			$($(target-stem)-userccflags)
+user_ldflags	= $(KBUILD_USERLDFLAGS) $(userldflags) $($(target-stem)-userldflags)
+
+# Create an executable from a single .c file
+quiet_cmd_user_cc_c = CC [U]  $@
+      cmd_user_cc_c = $(CC) $(user_ccflags) $(user_ldflags) -o $@ $< \
+		      $($(target-stem)-userldlibs)
+$(user-csingle): $(obj)/%: $(src)/%.c FORCE
+	$(call if_changed_dep,user_cc_c)
+
+# Link an executable based on list of .o files
+quiet_cmd_user_ld = LD [U]  $@
+      cmd_user_ld = $(CC) $(user_ldflags) -o $@ \
+		    $(addprefix $(obj)/, $($(target-stem)-objs)) \
+		    $($(target-stem)-userldlibs)
+$(user-cmulti): FORCE
+	$(call if_changed,user_ld)
+$(call multi_depend, $(user-cmulti), , -objs)
+
+# Create .o file from a .c file
+quiet_cmd_user_cc_o_c = CC [U]  $@
+      cmd_user_cc_o_c = $(CC) $(user_ccflags) -c -o $@ $<
+$(user-cobjs): $(obj)/%.o: $(src)/%.c FORCE
+	$(call if_changed_dep,user_cc_o_c)
+
+targets += $(user-csingle) $(user-cmulti) $(user-cobjs)
-- 
2.25.1


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 3/3] scripts: use 'userprogs' to build programs for target
  2020-06-23  3:07 [PATCH 1/3] kbuild: add -Wmissing-prototypes and -std=gnu89 to KBUILD_HOSTCFLAGS Masahiro Yamada
  2020-06-23  3:07 ` [PATCH 2/3] kbuild: add infrastructure to build userspace programs Masahiro Yamada
@ 2020-06-23  3:07 ` Masahiro Yamada
  1 sibling, 0 replies; 4+ messages in thread
From: Masahiro Yamada @ 2020-06-23  3:07 UTC (permalink / raw)
  To: barebox; +Cc: Masahiro Yamada

Use 'userprogs' syntax to build standalone programs for the target
architecture (i.e. the same architecture as the barebox).

This changes the compiler flags passed to the target programs.

Previously, it used $(KBUILD_CFLAGS), which contains the same compiler
flags as used for the barebox space.

Going forward, it will use $(KBUILD_USERCFLAGS), which contains smaller
set of compiler flags because there is no need to add low-level options
for userspace builds.

The shortlog will be annotated with [U].

  CC [U]  scripts/bareboxenv-target
  CC [U]  scripts/kernel-install-target
  CC [U]  scripts/bareboxcrc32-target
  CC [U]  scripts/bareboximd-target

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
---

 scripts/Makefile                | 29 ++++++++++-------------------
 scripts/bareboxcrc32-target.c   |  1 +
 scripts/bareboxenv-target.c     |  1 +
 scripts/bareboximd-target.c     |  1 +
 scripts/kernel-install-target.c |  1 +
 5 files changed, 14 insertions(+), 19 deletions(-)
 create mode 100644 scripts/bareboxcrc32-target.c
 create mode 100644 scripts/bareboxenv-target.c
 create mode 100644 scripts/bareboximd-target.c
 create mode 100644 scripts/kernel-install-target.c

diff --git a/scripts/Makefile b/scripts/Makefile
index f3b9aece9..75e68822d 100644
--- a/scripts/Makefile
+++ b/scripts/Makefile
@@ -35,30 +35,21 @@ HOSTCFLAGS_omap4_usbboot.o = `pkg-config --cflags libusb-1.0`
 HOSTLDLIBS_omap4_usbboot = -lpthread `pkg-config --libs libusb-1.0`
 hostprogs-$(CONFIG_OMAP4_HOSTTOOL_USBBOOT) += omap4_usbboot
 
+userprogs-$(CONFIG_BAREBOXENV_TARGET)		+= bareboxenv-target
+userprogs-$(CONFIG_KERNEL_INSTALL_TARGET)	+= kernel-install-target
+userprogs-$(CONFIG_BAREBOXCRC32_TARGET)		+= bareboxcrc32-target
+userprogs-$(CONFIG_IMD_TARGET)			+= bareboximd-target
+
+userccflags += -I $(srctree)/$(src)/include
+
+userprogs	:= $(userprogs-y)
+always-y	:= $(hostprogs-y) $(hostprogs-m) $(userprogs-y)
+
 subdir-y			+= mod
 subdir-y			+= imx
 subdir-$(CONFIG_X86)		+= setupmbr
 subdir-$(CONFIG_DTC)		+= dtc
 subdir-$(CONFIG_ARCH_TEGRA)	+= tegra
 
-targetprogs-$(CONFIG_BAREBOXENV_TARGET) += bareboxenv-target
-targetprogs-$(CONFIG_KERNEL_INSTALL_TARGET) += kernel-install-target
-targetprogs-$(CONFIG_BAREBOXCRC32_TARGET) += bareboxcrc32-target
-targetprogs-$(CONFIG_IMD_TARGET) += bareboximd-target
-
 # Let clean descend into subdirs
 subdir-	+= basic kconfig setupmbr
-
-quiet_cmd_csingle	= CC      $@
-      cmd_csingle	= $(CC) -Wp,-MD,$(depfile) $(TARGETCFLAGS) $(KBUILD_CFLAGS) -o $@ $<
-
-__targetprogs	:= $(sort $(targetprogs-y) $(targetprogs-m))
-target-csingle	:= $(foreach m,$(__targetprogs),$(if $($(m)-objs),,$(m)))
-__targetprogs	:= $(addprefix $(obj)/,$(__targetprogs))
-target-csingle	:= $(addprefix $(obj)/,$(target-csingle))
-TARGETCFLAGS += -I$(srctree)/scripts/include/
-
-always		:= $(hostprogs-y) $(hostprogs-m) $(targetprogs-y)
-
-$(target-csingle): %-target: %.c FORCE
-	$(call if_changed_dep,csingle)
diff --git a/scripts/bareboxcrc32-target.c b/scripts/bareboxcrc32-target.c
new file mode 100644
index 000000000..6c09c9f76
--- /dev/null
+++ b/scripts/bareboxcrc32-target.c
@@ -0,0 +1 @@
+#include "bareboxcrc32.c"
diff --git a/scripts/bareboxenv-target.c b/scripts/bareboxenv-target.c
new file mode 100644
index 000000000..caf175920
--- /dev/null
+++ b/scripts/bareboxenv-target.c
@@ -0,0 +1 @@
+#include "bareboxenv.c"
diff --git a/scripts/bareboximd-target.c b/scripts/bareboximd-target.c
new file mode 100644
index 000000000..903adee53
--- /dev/null
+++ b/scripts/bareboximd-target.c
@@ -0,0 +1 @@
+#include "bareboximd.c"
diff --git a/scripts/kernel-install-target.c b/scripts/kernel-install-target.c
new file mode 100644
index 000000000..845a96d29
--- /dev/null
+++ b/scripts/kernel-install-target.c
@@ -0,0 +1 @@
+#include "kernel-install.c"
-- 
2.25.1


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* Re: [PATCH 2/3] kbuild: add infrastructure to build userspace programs
  2020-06-23  3:07 ` [PATCH 2/3] kbuild: add infrastructure to build userspace programs Masahiro Yamada
@ 2020-06-23 11:14   ` Sascha Hauer
  0 siblings, 0 replies; 4+ messages in thread
From: Sascha Hauer @ 2020-06-23 11:14 UTC (permalink / raw)
  To: Masahiro Yamada; +Cc: barebox

On Tue, Jun 23, 2020 at 12:07:01PM +0900, Masahiro Yamada wrote:
> Import Linux commit 7f3a59db274c3e3d884c785e363a054110f1c266
> 
> Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
> ---
>

Very nice. Building userspace programs always was kind of a hack.

Applied, thanks

Sascha

>  Makefile                   | 13 ++++++++---
>  scripts/Makefile.build     |  6 +++++
>  scripts/Makefile.clean     |  2 +-
>  scripts/Makefile.userprogs | 45 ++++++++++++++++++++++++++++++++++++++
>  4 files changed, 62 insertions(+), 4 deletions(-)
>  create mode 100644 scripts/Makefile.userprogs
> 
> diff --git a/Makefile b/Makefile
> index a4aac3db4..0da032532 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -363,9 +363,12 @@ HOST_LFS_LIBS := $(shell getconf LFS_LIBS 2>/dev/null)
>  
>  HOSTCC       = gcc
>  HOSTCXX      = g++
> -KBUILD_HOSTCFLAGS   := -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 \
> -		-fomit-frame-pointer -std=gnu89 $(HOST_LFS_CFLAGS) \
> -		$(HOSTCFLAGS)
> +
> +export KBUILD_USERCFLAGS := -Wall -Wmissing-prototypes -Wstrict-prototypes \
> +			      -O2 -fomit-frame-pointer -std=gnu89
> +export KBUILD_USERLDFLAGS :=
> +
> +KBUILD_HOSTCFLAGS   := $(KBUILD_USERCFLAGS) $(HOST_LFS_CFLAGS) $(HOSTCFLAGS)
>  KBUILD_HOSTCXXFLAGS := -Wall -O2 $(HOST_LFS_CFLAGS) $(HOSTCXXFLAGS)
>  KBUILD_HOSTLDFLAGS  := $(HOST_LFS_LDFLAGS) $(HOSTLDFLAGS)
>  KBUILD_HOSTLDLIBS   := $(HOST_LFS_LIBS) $(HOSTLDLIBS)
> @@ -608,6 +611,10 @@ KBUILD_CFLAGS += $(call cc-option, -fno-delete-null-pointer-checks,)
>  
>  KBUILD_CFLAGS   += $(call cc-disable-warning, address-of-packed-member)
>  
> +# Align the bit size of userspace programs with the kernel
> +KBUILD_USERCFLAGS  += $(filter -m32 -m64, $(KBUILD_CFLAGS))
> +KBUILD_USERLDFLAGS += $(filter -m32 -m64, $(KBUILD_CFLAGS))
> +
>  # arch Makefile may override CC so keep this after arch Makefile is included
>  NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
>  CHECKFLAGS     += $(NOSTDINC_FLAGS)
> diff --git a/scripts/Makefile.build b/scripts/Makefile.build
> index 00f627791..a3dfe261a 100644
> --- a/scripts/Makefile.build
> +++ b/scripts/Makefile.build
> @@ -49,6 +49,12 @@ ifneq ($(hostprogs)$(hostprogs-y)$(hostprogs-m),)
>  include scripts/Makefile.host
>  endif
>  
> +# Do not include userprogs rules unless needed.
> +userprogs := $(sort $(userprogs))
> +ifneq ($(userprogs),)
> +include scripts/Makefile.userprogs
> +endif
> +
>  ifndef obj
>  $(warning kbuild: Makefile.build is included improperly)
>  endif
> diff --git a/scripts/Makefile.clean b/scripts/Makefile.clean
> index 6e6c9ef7c..97fd2ef48 100644
> --- a/scripts/Makefile.clean
> +++ b/scripts/Makefile.clean
> @@ -37,7 +37,7 @@ subdir-ymn	:= $(addprefix $(obj)/,$(subdir-ymn))
>  
>  __clean-files	:= $(extra-y) $(extra-m) $(extra-)       \
>  		   $(always) $(always-y) $(always-m) $(always-) $(targets) $(clean-files)   \
> -		   $(hostprogs) $(hostprogs-y) $(hostprogs-m) $(hostprogs-)
> +		   $(hostprogs) $(hostprogs-y) $(hostprogs-m) $(hostprogs-) $(userprogs)
>  
>  # as clean-files is given relative to the current directory, this adds
>  # a $(obj) prefix, except for absolute paths
> diff --git a/scripts/Makefile.userprogs b/scripts/Makefile.userprogs
> new file mode 100644
> index 000000000..fb4152973
> --- /dev/null
> +++ b/scripts/Makefile.userprogs
> @@ -0,0 +1,45 @@
> +# SPDX-License-Identifier: GPL-2.0-only
> +#
> +# Build userspace programs for the target system
> +#
> +
> +# Executables compiled from a single .c file
> +user-csingle	:= $(foreach m, $(userprogs), $(if $($(m)-objs),,$(m)))
> +
> +# Executables linked based on several .o files
> +user-cmulti	:= $(foreach m, $(userprogs), $(if $($(m)-objs),$(m)))
> +
> +# Objects compiled from .c files
> +user-cobjs	:= $(sort $(foreach m, $(userprogs), $($(m)-objs)))
> +
> +user-csingle	:= $(addprefix $(obj)/, $(user-csingle))
> +user-cmulti	:= $(addprefix $(obj)/, $(user-cmulti))
> +user-cobjs	:= $(addprefix $(obj)/, $(user-cobjs))
> +
> +user_ccflags	= -Wp,-MMD,$(depfile) $(KBUILD_USERCFLAGS) $(userccflags) \
> +			$($(target-stem)-userccflags)
> +user_ldflags	= $(KBUILD_USERLDFLAGS) $(userldflags) $($(target-stem)-userldflags)
> +
> +# Create an executable from a single .c file
> +quiet_cmd_user_cc_c = CC [U]  $@
> +      cmd_user_cc_c = $(CC) $(user_ccflags) $(user_ldflags) -o $@ $< \
> +		      $($(target-stem)-userldlibs)
> +$(user-csingle): $(obj)/%: $(src)/%.c FORCE
> +	$(call if_changed_dep,user_cc_c)
> +
> +# Link an executable based on list of .o files
> +quiet_cmd_user_ld = LD [U]  $@
> +      cmd_user_ld = $(CC) $(user_ldflags) -o $@ \
> +		    $(addprefix $(obj)/, $($(target-stem)-objs)) \
> +		    $($(target-stem)-userldlibs)
> +$(user-cmulti): FORCE
> +	$(call if_changed,user_ld)
> +$(call multi_depend, $(user-cmulti), , -objs)
> +
> +# Create .o file from a .c file
> +quiet_cmd_user_cc_o_c = CC [U]  $@
> +      cmd_user_cc_o_c = $(CC) $(user_ccflags) -c -o $@ $<
> +$(user-cobjs): $(obj)/%.o: $(src)/%.c FORCE
> +	$(call if_changed_dep,user_cc_o_c)
> +
> +targets += $(user-csingle) $(user-cmulti) $(user-cobjs)
> -- 
> 2.25.1
> 
> 
> _______________________________________________
> barebox mailing list
> barebox@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/barebox
> 

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

end of thread, other threads:[~2020-06-23 11:14 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-06-23  3:07 [PATCH 1/3] kbuild: add -Wmissing-prototypes and -std=gnu89 to KBUILD_HOSTCFLAGS Masahiro Yamada
2020-06-23  3:07 ` [PATCH 2/3] kbuild: add infrastructure to build userspace programs Masahiro Yamada
2020-06-23 11:14   ` Sascha Hauer
2020-06-23  3:07 ` [PATCH 3/3] scripts: use 'userprogs' to build programs for target Masahiro Yamada

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox