diff mbox series

[01/14] Makefile: Add initial kconfig support for each platform

Message ID 20220718124210.2177576-2-apatel@ventanamicro.com
State Superseded
Headers show
Series OpenSBI Kconfig Support | expand

Commit Message

Anup Patel July 18, 2022, 12:41 p.m. UTC
We extend the top-level makefile to allow kconfig based configuration
for each platform where each platform has it's own set of configs with
"defconfig" being the default config.

Signed-off-by: Anup Patel <apatel@ventanamicro.com>
---
 Kconfig                                   | 23 ++++++++++
 Makefile                                  | 54 +++++++++++++++++++++--
 firmware/Kconfig                          |  1 +
 lib/utils/Kconfig                         |  1 +
 platform/andes/ae350/Kconfig              |  5 +++
 platform/andes/ae350/configs/defconfig    |  0
 platform/fpga/ariane/Kconfig              |  5 +++
 platform/fpga/ariane/configs/defconfig    |  0
 platform/fpga/openpiton/Kconfig           |  5 +++
 platform/fpga/openpiton/configs/defconfig |  0
 platform/generic/Kconfig                  |  5 +++
 platform/generic/configs/defconfig        |  0
 platform/kendryte/k210/Kconfig            |  5 +++
 platform/kendryte/k210/configs/defconfig  |  0
 platform/nuclei/ux600/Kconfig             |  5 +++
 platform/nuclei/ux600/configs/defconfig   |  0
 platform/template/Kconfig                 |  5 +++
 platform/template/configs/defconfig       |  0
 18 files changed, 111 insertions(+), 3 deletions(-)
 create mode 100644 Kconfig
 create mode 100644 firmware/Kconfig
 create mode 100644 lib/utils/Kconfig
 create mode 100644 platform/andes/ae350/Kconfig
 create mode 100644 platform/andes/ae350/configs/defconfig
 create mode 100644 platform/fpga/ariane/Kconfig
 create mode 100644 platform/fpga/ariane/configs/defconfig
 create mode 100644 platform/fpga/openpiton/Kconfig
 create mode 100644 platform/fpga/openpiton/configs/defconfig
 create mode 100644 platform/generic/Kconfig
 create mode 100644 platform/generic/configs/defconfig
 create mode 100644 platform/kendryte/k210/Kconfig
 create mode 100644 platform/kendryte/k210/configs/defconfig
 create mode 100644 platform/nuclei/ux600/Kconfig
 create mode 100644 platform/nuclei/ux600/configs/defconfig
 create mode 100644 platform/template/Kconfig
 create mode 100644 platform/template/configs/defconfig

Comments

Jessica Clarke July 18, 2022, 1:51 p.m. UTC | #1
On 18 Jul 2022, at 13:41, Anup Patel <apatel@ventanamicro.com> wrote:
> 
> We extend the top-level makefile to allow kconfig based configuration
> for each platform where each platform has it's own set of configs with
> "defconfig" being the default config.
> 
> Signed-off-by: Anup Patel <apatel@ventanamicro.com>
> ---
> Kconfig                                   | 23 ++++++++++
> Makefile                                  | 54 +++++++++++++++++++++--
> firmware/Kconfig                          |  1 +
> lib/utils/Kconfig                         |  1 +
> platform/andes/ae350/Kconfig              |  5 +++
> platform/andes/ae350/configs/defconfig    |  0
> platform/fpga/ariane/Kconfig              |  5 +++
> platform/fpga/ariane/configs/defconfig    |  0
> platform/fpga/openpiton/Kconfig           |  5 +++
> platform/fpga/openpiton/configs/defconfig |  0
> platform/generic/Kconfig                  |  5 +++
> platform/generic/configs/defconfig        |  0
> platform/kendryte/k210/Kconfig            |  5 +++
> platform/kendryte/k210/configs/defconfig  |  0
> platform/nuclei/ux600/Kconfig             |  5 +++
> platform/nuclei/ux600/configs/defconfig   |  0
> platform/template/Kconfig                 |  5 +++
> platform/template/configs/defconfig       |  0
> 18 files changed, 111 insertions(+), 3 deletions(-)
> create mode 100644 Kconfig
> create mode 100644 firmware/Kconfig
> create mode 100644 lib/utils/Kconfig
> create mode 100644 platform/andes/ae350/Kconfig
> create mode 100644 platform/andes/ae350/configs/defconfig
> create mode 100644 platform/fpga/ariane/Kconfig
> create mode 100644 platform/fpga/ariane/configs/defconfig
> create mode 100644 platform/fpga/openpiton/Kconfig
> create mode 100644 platform/fpga/openpiton/configs/defconfig
> create mode 100644 platform/generic/Kconfig
> create mode 100644 platform/generic/configs/defconfig
> create mode 100644 platform/kendryte/k210/Kconfig
> create mode 100644 platform/kendryte/k210/configs/defconfig
> create mode 100644 platform/nuclei/ux600/Kconfig
> create mode 100644 platform/nuclei/ux600/configs/defconfig
> create mode 100644 platform/template/Kconfig
> create mode 100644 platform/template/configs/defconfig
> 
> diff --git a/Kconfig b/Kconfig
> new file mode 100644
> index 0000000..b8615d2
> --- /dev/null
> +++ b/Kconfig
> @@ -0,0 +1,23 @@
> +# SPDX-License-Identifier: GPL-2.0

GPL in OpenSBI? I suspect you blindly copied this boilerplate from
Linux (and repeated it everywhere)?..

Jess

> +mainmenu "OpenSBI $OPENSBI_PLATFORM Configuration"
> +
> +config OPENSBI_SRC_DIR
> +	string
> +	option env="OPENSBI_SRC_DIR"
> +
> +config OPENSBI_PLATFORM
> +	string
> +	option env="OPENSBI_PLATFORM"
> +
> +config OPENSBI_PLATFORM_SRC_DIR
> +	string
> +	option env="OPENSBI_PLATFORM_SRC_DIR"
> +
> +menu "Platform Options"
> +source "$OPENSBI_PLATFORM_SRC_DIR/Kconfig"
> +endmenu
> +
> +source "$OPENSBI_SRC_DIR/lib/utils/Kconfig"
> +
> +source "$OPENSBI_SRC_DIR/firmware/Kconfig"
> diff --git a/Makefile b/Makefile
> index f619ef7..46c7c1c 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -52,6 +52,9 @@ ifdef PLATFORM_DIR
> else
>  platform_parent_dir=$(src_dir)/platform
> endif
> +ifndef PLATFORM_DEFCONFIG
> +PLATFORM_DEFCONFIG=defconfig
> +endif
> 
> # Check if verbosity is ON for build process
> CMD_PREFIX_DEFAULT := @
> @@ -70,6 +73,19 @@ export libsbi_dir=$(CURDIR)/lib/sbi
> export libsbiutils_dir=$(CURDIR)/lib/utils
> export firmware_dir=$(CURDIR)/firmware
> 
> +# Setup variables for kconfig-frontends
> +ifdef PLATFORM
> +export KCONFIG_CONFIG=$(platform_build_dir)/.config
> +export KCONFIG_AUTOCONFIG=$(platform_build_dir)/auto.conf
> +export KCONFIG_TRISTATE=$(platform_build_dir)/tristate.conf
> +export KCONFIG_AUTOHEADER=$(platform_build_dir)/autoconf.h
> +export KCONFIG_AUTOCONF_CMD=$(platform_build_dir)/include/config/auto.conf.cmd
> +# Additional exports for include paths in Kconfig files
> +export OPENSBI_SRC_DIR=$(src_dir)
> +export OPENSBI_PLATFORM=$(PLATFORM)
> +export OPENSBI_PLATFORM_SRC_DIR=$(platform_src_dir)
> +endif
> +
> # Find library version
> OPENSBI_VERSION_MAJOR=`grep "define OPENSBI_VERSION_MAJOR" $(include_dir)/sbi/sbi_version.h | sed 's/.*MAJOR.*\([0-9][0-9]*\)/\1/'`
> OPENSBI_VERSION_MINOR=`grep "define OPENSBI_VERSION_MINOR" $(include_dir)/sbi/sbi_version.h | sed 's/.*MINOR.*\([0-9][0-9]*\)/\1/'`
> @@ -183,8 +199,34 @@ libsbi-object-mks=$(shell if [ -d $(libsbi_dir) ]; then find $(libsbi_dir) -inam
> libsbiutils-object-mks=$(shell if [ -d $(libsbiutils_dir) ]; then find $(libsbiutils_dir) -iname "objects.mk" | sort -r; fi)
> firmware-object-mks=$(shell if [ -d $(firmware_dir) ]; then find $(firmware_dir) -iname "objects.mk" | sort -r; fi)
> 
> -# Include platform specifig config.mk
> +# The "make all" rule should always be first rule
> +.PHONY: all
> +all:
> +
> +# Include platform specific .config and config.mk
> ifdef PLATFORM
> +.PHONY: menuconfig
> +menuconfig: $(platform_src_dir)/Kconfig $(src_dir)/Kconfig
> +	$(CMD_PREFIX)mkdir -p `dirname $(KCONFIG_CONFIG)`
> +	$(CMD_PREFIX)mkdir -p `dirname $(KCONFIG_AUTOCONF_CMD)`
> +	$(CMD_PREFIX)kconfig-mconf $(src_dir)/Kconfig
> +	$(CMD_PREFIX)cd $(platform_build_dir) && kconfig-conf --silentoldconfig $(src_dir)/Kconfig
> +
> +.PHONY: savedefconfig
> +savedefconfig: $(platform_src_dir)/Kconfig $(src_dir)/Kconfig
> +	$(CMD_PREFIX)mkdir -p `dirname $(KCONFIG_CONFIG)`
> +	$(CMD_PREFIX)mkdir -p `dirname $(KCONFIG_AUTOCONF_CMD)`
> +	$(CMD_PREFIX)kconfig-conf --savedefconfig `dirname $(KCONFIG_CONFIG)`/defconfig $(src_dir)/Kconfig
> +
> +$(KCONFIG_CONFIG): $(platform_src_dir)/configs/$(PLATFORM_DEFCONFIG) $(platform_src_dir)/Kconfig $(src_dir)/Kconfig
> +	$(CMD_PREFIX)mkdir -p `dirname $(KCONFIG_CONFIG)`
> +	$(CMD_PREFIX)mkdir -p `dirname $(KCONFIG_AUTOCONF_CMD)`
> +	$(CMD_PREFIX)cp -f $(platform_src_dir)/configs/$(PLATFORM_DEFCONFIG) $(KCONFIG_CONFIG)
> +	$(CMD_PREFIX)cd $(platform_build_dir) && kconfig-conf --silentoldconfig --olddefconfig $(src_dir)/Kconfig
> +$(KCONFIG_AUTOCONF_CMD): $(KCONFIG_CONFIG)
> +include $(KCONFIG_CONFIG)
> +include $(KCONFIG_AUTOCONF_CMD)
> +
> include $(platform_src_dir)/config.mk
> endif
> 
> @@ -280,6 +322,9 @@ ifeq ($(BUILD_INFO),y)
> GENFLAGS	+=	-DOPENSBI_BUILD_TIME_STAMP="\"$(OPENSBI_BUILD_TIME_STAMP)\""
> GENFLAGS	+=	-DOPENSBI_BUILD_COMPILER_VERSION="\"$(OPENSBI_BUILD_COMPILER_VERSION)\""
> endif
> +ifdef PLATFORM
> +GENFLAGS	+=	-include $(KCONFIG_AUTOHEADER)
> +endif
> GENFLAGS	+=	$(libsbiutils-genflags-y)
> GENFLAGS	+=	$(platform-genflags-y)
> GENFLAGS	+=	$(firmware-genflags-y)
> @@ -419,7 +464,7 @@ targets-y += $(platform_build_dir)/lib/libplatsbi.a
> endif
> targets-y += $(firmware-bins-path-y)
> 
> -# Default rule "make" should always be first rule
> +# The default "make all" rule
> .PHONY: all
> all: $(targets-y)
> 
> @@ -456,7 +501,7 @@ $(build_dir)/%.o: $(src_dir)/%.S
> 	$(call compile_as,$@,$<)
> 
> $(build_dir)/%.dep: $(src_dir)/%.carray
> -	$(call compile_gen_dep,$@,.c,$<)
> +	$(call compile_gen_dep,$@,.c,$< $(KCONFIG_CONFIG))
> 	$(call compile_gen_dep,$@,.o,$(@:.dep=.c))
> 
> $(build_dir)/%.c: $(src_dir)/%.carray
> @@ -523,6 +568,9 @@ docs: $(build_dir)/docs/latex/refman.pdf
> # They should not be included for any "xxxconfig" or "xxxclean" rule
> all-deps-1 = $(if $(findstring config,$(MAKECMDGOALS)),,$(deps-y))
> all-deps-2 = $(if $(findstring clean,$(MAKECMDGOALS)),,$(all-deps-1))
> +ifdef PLATFORM
> +$(all-deps-2): | $(KCONFIG_CONFIG)
> +endif
> -include $(all-deps-2)
> 
> # Include external dependency of firmwares after default Makefile rules
> diff --git a/firmware/Kconfig b/firmware/Kconfig
> new file mode 100644
> index 0000000..f66554c
> --- /dev/null
> +++ b/firmware/Kconfig
> @@ -0,0 +1 @@
> +# SPDX-License-Identifier: GPL-2.0
> diff --git a/lib/utils/Kconfig b/lib/utils/Kconfig
> new file mode 100644
> index 0000000..f66554c
> --- /dev/null
> +++ b/lib/utils/Kconfig
> @@ -0,0 +1 @@
> +# SPDX-License-Identifier: GPL-2.0
> diff --git a/platform/andes/ae350/Kconfig b/platform/andes/ae350/Kconfig
> new file mode 100644
> index 0000000..349c1d3
> --- /dev/null
> +++ b/platform/andes/ae350/Kconfig
> @@ -0,0 +1,5 @@
> +# SPDX-License-Identifier: GPL-2.0
> +
> +config PLATFORM_ANDES_AE350
> +	bool
> +	default y
> diff --git a/platform/andes/ae350/configs/defconfig b/platform/andes/ae350/configs/defconfig
> new file mode 100644
> index 0000000..e69de29
> diff --git a/platform/fpga/ariane/Kconfig b/platform/fpga/ariane/Kconfig
> new file mode 100644
> index 0000000..26f9beb
> --- /dev/null
> +++ b/platform/fpga/ariane/Kconfig
> @@ -0,0 +1,5 @@
> +# SPDX-License-Identifier: GPL-2.0
> +
> +config PLATFORM_ARIANE_FPGA
> +	bool
> +	default y
> diff --git a/platform/fpga/ariane/configs/defconfig b/platform/fpga/ariane/configs/defconfig
> new file mode 100644
> index 0000000..e69de29
> diff --git a/platform/fpga/openpiton/Kconfig b/platform/fpga/openpiton/Kconfig
> new file mode 100644
> index 0000000..8bfa85a
> --- /dev/null
> +++ b/platform/fpga/openpiton/Kconfig
> @@ -0,0 +1,5 @@
> +# SPDX-License-Identifier: GPL-2.0
> +
> +config PLATFORM_OPENPITON_FPGA
> +	bool
> +	default y
> diff --git a/platform/fpga/openpiton/configs/defconfig b/platform/fpga/openpiton/configs/defconfig
> new file mode 100644
> index 0000000..e69de29
> diff --git a/platform/generic/Kconfig b/platform/generic/Kconfig
> new file mode 100644
> index 0000000..a811a05
> --- /dev/null
> +++ b/platform/generic/Kconfig
> @@ -0,0 +1,5 @@
> +# SPDX-License-Identifier: GPL-2.0
> +
> +config PLATFORM_GENERIC
> +	bool
> +	default y
> diff --git a/platform/generic/configs/defconfig b/platform/generic/configs/defconfig
> new file mode 100644
> index 0000000..e69de29
> diff --git a/platform/kendryte/k210/Kconfig b/platform/kendryte/k210/Kconfig
> new file mode 100644
> index 0000000..726423a
> --- /dev/null
> +++ b/platform/kendryte/k210/Kconfig
> @@ -0,0 +1,5 @@
> +# SPDX-License-Identifier: GPL-2.0
> +
> +config PLATFORM_KENDRYTE_K210
> +	bool
> +	default y
> diff --git a/platform/kendryte/k210/configs/defconfig b/platform/kendryte/k210/configs/defconfig
> new file mode 100644
> index 0000000..e69de29
> diff --git a/platform/nuclei/ux600/Kconfig b/platform/nuclei/ux600/Kconfig
> new file mode 100644
> index 0000000..bb8410f
> --- /dev/null
> +++ b/platform/nuclei/ux600/Kconfig
> @@ -0,0 +1,5 @@
> +# SPDX-License-Identifier: GPL-2.0
> +
> +config PLATFORM_NUCLEI_UX600
> +	bool
> +	default y
> diff --git a/platform/nuclei/ux600/configs/defconfig b/platform/nuclei/ux600/configs/defconfig
> new file mode 100644
> index 0000000..e69de29
> diff --git a/platform/template/Kconfig b/platform/template/Kconfig
> new file mode 100644
> index 0000000..bd95ea0
> --- /dev/null
> +++ b/platform/template/Kconfig
> @@ -0,0 +1,5 @@
> +# SPDX-License-Identifier: GPL-2.0
> +
> +config PLATFORM_TEMPLATE
> +	bool
> +	default y
> diff --git a/platform/template/configs/defconfig b/platform/template/configs/defconfig
> new file mode 100644
> index 0000000..e69de29
> -- 
> 2.34.1
> 
> 
> -- 
> opensbi mailing list
> opensbi@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi
Anup Patel July 18, 2022, 2:44 p.m. UTC | #2
On Mon, Jul 18, 2022 at 7:21 PM Jessica Clarke <jrtc27@jrtc27.com> wrote:
>
> On 18 Jul 2022, at 13:41, Anup Patel <apatel@ventanamicro.com> wrote:
> >
> > We extend the top-level makefile to allow kconfig based configuration
> > for each platform where each platform has it's own set of configs with
> > "defconfig" being the default config.
> >
> > Signed-off-by: Anup Patel <apatel@ventanamicro.com>
> > ---
> > Kconfig                                   | 23 ++++++++++
> > Makefile                                  | 54 +++++++++++++++++++++--
> > firmware/Kconfig                          |  1 +
> > lib/utils/Kconfig                         |  1 +
> > platform/andes/ae350/Kconfig              |  5 +++
> > platform/andes/ae350/configs/defconfig    |  0
> > platform/fpga/ariane/Kconfig              |  5 +++
> > platform/fpga/ariane/configs/defconfig    |  0
> > platform/fpga/openpiton/Kconfig           |  5 +++
> > platform/fpga/openpiton/configs/defconfig |  0
> > platform/generic/Kconfig                  |  5 +++
> > platform/generic/configs/defconfig        |  0
> > platform/kendryte/k210/Kconfig            |  5 +++
> > platform/kendryte/k210/configs/defconfig  |  0
> > platform/nuclei/ux600/Kconfig             |  5 +++
> > platform/nuclei/ux600/configs/defconfig   |  0
> > platform/template/Kconfig                 |  5 +++
> > platform/template/configs/defconfig       |  0
> > 18 files changed, 111 insertions(+), 3 deletions(-)
> > create mode 100644 Kconfig
> > create mode 100644 firmware/Kconfig
> > create mode 100644 lib/utils/Kconfig
> > create mode 100644 platform/andes/ae350/Kconfig
> > create mode 100644 platform/andes/ae350/configs/defconfig
> > create mode 100644 platform/fpga/ariane/Kconfig
> > create mode 100644 platform/fpga/ariane/configs/defconfig
> > create mode 100644 platform/fpga/openpiton/Kconfig
> > create mode 100644 platform/fpga/openpiton/configs/defconfig
> > create mode 100644 platform/generic/Kconfig
> > create mode 100644 platform/generic/configs/defconfig
> > create mode 100644 platform/kendryte/k210/Kconfig
> > create mode 100644 platform/kendryte/k210/configs/defconfig
> > create mode 100644 platform/nuclei/ux600/Kconfig
> > create mode 100644 platform/nuclei/ux600/configs/defconfig
> > create mode 100644 platform/template/Kconfig
> > create mode 100644 platform/template/configs/defconfig
> >
> > diff --git a/Kconfig b/Kconfig
> > new file mode 100644
> > index 0000000..b8615d2
> > --- /dev/null
> > +++ b/Kconfig
> > @@ -0,0 +1,23 @@
> > +# SPDX-License-Identifier: GPL-2.0
>
> GPL in OpenSBI? I suspect you blindly copied this boilerplate from
> Linux (and repeated it everywhere)?..

Aargh !!! This was totally unintentional.

Thanks for catching. I will quickly send a v2.

Regards,
Anup

>
> Jess
>
> > +mainmenu "OpenSBI $OPENSBI_PLATFORM Configuration"
> > +
> > +config OPENSBI_SRC_DIR
> > +     string
> > +     option env="OPENSBI_SRC_DIR"
> > +
> > +config OPENSBI_PLATFORM
> > +     string
> > +     option env="OPENSBI_PLATFORM"
> > +
> > +config OPENSBI_PLATFORM_SRC_DIR
> > +     string
> > +     option env="OPENSBI_PLATFORM_SRC_DIR"
> > +
> > +menu "Platform Options"
> > +source "$OPENSBI_PLATFORM_SRC_DIR/Kconfig"
> > +endmenu
> > +
> > +source "$OPENSBI_SRC_DIR/lib/utils/Kconfig"
> > +
> > +source "$OPENSBI_SRC_DIR/firmware/Kconfig"
> > diff --git a/Makefile b/Makefile
> > index f619ef7..46c7c1c 100644
> > --- a/Makefile
> > +++ b/Makefile
> > @@ -52,6 +52,9 @@ ifdef PLATFORM_DIR
> > else
> >  platform_parent_dir=$(src_dir)/platform
> > endif
> > +ifndef PLATFORM_DEFCONFIG
> > +PLATFORM_DEFCONFIG=defconfig
> > +endif
> >
> > # Check if verbosity is ON for build process
> > CMD_PREFIX_DEFAULT := @
> > @@ -70,6 +73,19 @@ export libsbi_dir=$(CURDIR)/lib/sbi
> > export libsbiutils_dir=$(CURDIR)/lib/utils
> > export firmware_dir=$(CURDIR)/firmware
> >
> > +# Setup variables for kconfig-frontends
> > +ifdef PLATFORM
> > +export KCONFIG_CONFIG=$(platform_build_dir)/.config
> > +export KCONFIG_AUTOCONFIG=$(platform_build_dir)/auto.conf
> > +export KCONFIG_TRISTATE=$(platform_build_dir)/tristate.conf
> > +export KCONFIG_AUTOHEADER=$(platform_build_dir)/autoconf.h
> > +export KCONFIG_AUTOCONF_CMD=$(platform_build_dir)/include/config/auto.conf.cmd
> > +# Additional exports for include paths in Kconfig files
> > +export OPENSBI_SRC_DIR=$(src_dir)
> > +export OPENSBI_PLATFORM=$(PLATFORM)
> > +export OPENSBI_PLATFORM_SRC_DIR=$(platform_src_dir)
> > +endif
> > +
> > # Find library version
> > OPENSBI_VERSION_MAJOR=`grep "define OPENSBI_VERSION_MAJOR" $(include_dir)/sbi/sbi_version.h | sed 's/.*MAJOR.*\([0-9][0-9]*\)/\1/'`
> > OPENSBI_VERSION_MINOR=`grep "define OPENSBI_VERSION_MINOR" $(include_dir)/sbi/sbi_version.h | sed 's/.*MINOR.*\([0-9][0-9]*\)/\1/'`
> > @@ -183,8 +199,34 @@ libsbi-object-mks=$(shell if [ -d $(libsbi_dir) ]; then find $(libsbi_dir) -inam
> > libsbiutils-object-mks=$(shell if [ -d $(libsbiutils_dir) ]; then find $(libsbiutils_dir) -iname "objects.mk" | sort -r; fi)
> > firmware-object-mks=$(shell if [ -d $(firmware_dir) ]; then find $(firmware_dir) -iname "objects.mk" | sort -r; fi)
> >
> > -# Include platform specifig config.mk
> > +# The "make all" rule should always be first rule
> > +.PHONY: all
> > +all:
> > +
> > +# Include platform specific .config and config.mk
> > ifdef PLATFORM
> > +.PHONY: menuconfig
> > +menuconfig: $(platform_src_dir)/Kconfig $(src_dir)/Kconfig
> > +     $(CMD_PREFIX)mkdir -p `dirname $(KCONFIG_CONFIG)`
> > +     $(CMD_PREFIX)mkdir -p `dirname $(KCONFIG_AUTOCONF_CMD)`
> > +     $(CMD_PREFIX)kconfig-mconf $(src_dir)/Kconfig
> > +     $(CMD_PREFIX)cd $(platform_build_dir) && kconfig-conf --silentoldconfig $(src_dir)/Kconfig
> > +
> > +.PHONY: savedefconfig
> > +savedefconfig: $(platform_src_dir)/Kconfig $(src_dir)/Kconfig
> > +     $(CMD_PREFIX)mkdir -p `dirname $(KCONFIG_CONFIG)`
> > +     $(CMD_PREFIX)mkdir -p `dirname $(KCONFIG_AUTOCONF_CMD)`
> > +     $(CMD_PREFIX)kconfig-conf --savedefconfig `dirname $(KCONFIG_CONFIG)`/defconfig $(src_dir)/Kconfig
> > +
> > +$(KCONFIG_CONFIG): $(platform_src_dir)/configs/$(PLATFORM_DEFCONFIG) $(platform_src_dir)/Kconfig $(src_dir)/Kconfig
> > +     $(CMD_PREFIX)mkdir -p `dirname $(KCONFIG_CONFIG)`
> > +     $(CMD_PREFIX)mkdir -p `dirname $(KCONFIG_AUTOCONF_CMD)`
> > +     $(CMD_PREFIX)cp -f $(platform_src_dir)/configs/$(PLATFORM_DEFCONFIG) $(KCONFIG_CONFIG)
> > +     $(CMD_PREFIX)cd $(platform_build_dir) && kconfig-conf --silentoldconfig --olddefconfig $(src_dir)/Kconfig
> > +$(KCONFIG_AUTOCONF_CMD): $(KCONFIG_CONFIG)
> > +include $(KCONFIG_CONFIG)
> > +include $(KCONFIG_AUTOCONF_CMD)
> > +
> > include $(platform_src_dir)/config.mk
> > endif
> >
> > @@ -280,6 +322,9 @@ ifeq ($(BUILD_INFO),y)
> > GENFLAGS      +=      -DOPENSBI_BUILD_TIME_STAMP="\"$(OPENSBI_BUILD_TIME_STAMP)\""
> > GENFLAGS      +=      -DOPENSBI_BUILD_COMPILER_VERSION="\"$(OPENSBI_BUILD_COMPILER_VERSION)\""
> > endif
> > +ifdef PLATFORM
> > +GENFLAGS     +=      -include $(KCONFIG_AUTOHEADER)
> > +endif
> > GENFLAGS      +=      $(libsbiutils-genflags-y)
> > GENFLAGS      +=      $(platform-genflags-y)
> > GENFLAGS      +=      $(firmware-genflags-y)
> > @@ -419,7 +464,7 @@ targets-y += $(platform_build_dir)/lib/libplatsbi.a
> > endif
> > targets-y += $(firmware-bins-path-y)
> >
> > -# Default rule "make" should always be first rule
> > +# The default "make all" rule
> > .PHONY: all
> > all: $(targets-y)
> >
> > @@ -456,7 +501,7 @@ $(build_dir)/%.o: $(src_dir)/%.S
> >       $(call compile_as,$@,$<)
> >
> > $(build_dir)/%.dep: $(src_dir)/%.carray
> > -     $(call compile_gen_dep,$@,.c,$<)
> > +     $(call compile_gen_dep,$@,.c,$< $(KCONFIG_CONFIG))
> >       $(call compile_gen_dep,$@,.o,$(@:.dep=.c))
> >
> > $(build_dir)/%.c: $(src_dir)/%.carray
> > @@ -523,6 +568,9 @@ docs: $(build_dir)/docs/latex/refman.pdf
> > # They should not be included for any "xxxconfig" or "xxxclean" rule
> > all-deps-1 = $(if $(findstring config,$(MAKECMDGOALS)),,$(deps-y))
> > all-deps-2 = $(if $(findstring clean,$(MAKECMDGOALS)),,$(all-deps-1))
> > +ifdef PLATFORM
> > +$(all-deps-2): | $(KCONFIG_CONFIG)
> > +endif
> > -include $(all-deps-2)
> >
> > # Include external dependency of firmwares after default Makefile rules
> > diff --git a/firmware/Kconfig b/firmware/Kconfig
> > new file mode 100644
> > index 0000000..f66554c
> > --- /dev/null
> > +++ b/firmware/Kconfig
> > @@ -0,0 +1 @@
> > +# SPDX-License-Identifier: GPL-2.0
> > diff --git a/lib/utils/Kconfig b/lib/utils/Kconfig
> > new file mode 100644
> > index 0000000..f66554c
> > --- /dev/null
> > +++ b/lib/utils/Kconfig
> > @@ -0,0 +1 @@
> > +# SPDX-License-Identifier: GPL-2.0
> > diff --git a/platform/andes/ae350/Kconfig b/platform/andes/ae350/Kconfig
> > new file mode 100644
> > index 0000000..349c1d3
> > --- /dev/null
> > +++ b/platform/andes/ae350/Kconfig
> > @@ -0,0 +1,5 @@
> > +# SPDX-License-Identifier: GPL-2.0
> > +
> > +config PLATFORM_ANDES_AE350
> > +     bool
> > +     default y
> > diff --git a/platform/andes/ae350/configs/defconfig b/platform/andes/ae350/configs/defconfig
> > new file mode 100644
> > index 0000000..e69de29
> > diff --git a/platform/fpga/ariane/Kconfig b/platform/fpga/ariane/Kconfig
> > new file mode 100644
> > index 0000000..26f9beb
> > --- /dev/null
> > +++ b/platform/fpga/ariane/Kconfig
> > @@ -0,0 +1,5 @@
> > +# SPDX-License-Identifier: GPL-2.0
> > +
> > +config PLATFORM_ARIANE_FPGA
> > +     bool
> > +     default y
> > diff --git a/platform/fpga/ariane/configs/defconfig b/platform/fpga/ariane/configs/defconfig
> > new file mode 100644
> > index 0000000..e69de29
> > diff --git a/platform/fpga/openpiton/Kconfig b/platform/fpga/openpiton/Kconfig
> > new file mode 100644
> > index 0000000..8bfa85a
> > --- /dev/null
> > +++ b/platform/fpga/openpiton/Kconfig
> > @@ -0,0 +1,5 @@
> > +# SPDX-License-Identifier: GPL-2.0
> > +
> > +config PLATFORM_OPENPITON_FPGA
> > +     bool
> > +     default y
> > diff --git a/platform/fpga/openpiton/configs/defconfig b/platform/fpga/openpiton/configs/defconfig
> > new file mode 100644
> > index 0000000..e69de29
> > diff --git a/platform/generic/Kconfig b/platform/generic/Kconfig
> > new file mode 100644
> > index 0000000..a811a05
> > --- /dev/null
> > +++ b/platform/generic/Kconfig
> > @@ -0,0 +1,5 @@
> > +# SPDX-License-Identifier: GPL-2.0
> > +
> > +config PLATFORM_GENERIC
> > +     bool
> > +     default y
> > diff --git a/platform/generic/configs/defconfig b/platform/generic/configs/defconfig
> > new file mode 100644
> > index 0000000..e69de29
> > diff --git a/platform/kendryte/k210/Kconfig b/platform/kendryte/k210/Kconfig
> > new file mode 100644
> > index 0000000..726423a
> > --- /dev/null
> > +++ b/platform/kendryte/k210/Kconfig
> > @@ -0,0 +1,5 @@
> > +# SPDX-License-Identifier: GPL-2.0
> > +
> > +config PLATFORM_KENDRYTE_K210
> > +     bool
> > +     default y
> > diff --git a/platform/kendryte/k210/configs/defconfig b/platform/kendryte/k210/configs/defconfig
> > new file mode 100644
> > index 0000000..e69de29
> > diff --git a/platform/nuclei/ux600/Kconfig b/platform/nuclei/ux600/Kconfig
> > new file mode 100644
> > index 0000000..bb8410f
> > --- /dev/null
> > +++ b/platform/nuclei/ux600/Kconfig
> > @@ -0,0 +1,5 @@
> > +# SPDX-License-Identifier: GPL-2.0
> > +
> > +config PLATFORM_NUCLEI_UX600
> > +     bool
> > +     default y
> > diff --git a/platform/nuclei/ux600/configs/defconfig b/platform/nuclei/ux600/configs/defconfig
> > new file mode 100644
> > index 0000000..e69de29
> > diff --git a/platform/template/Kconfig b/platform/template/Kconfig
> > new file mode 100644
> > index 0000000..bd95ea0
> > --- /dev/null
> > +++ b/platform/template/Kconfig
> > @@ -0,0 +1,5 @@
> > +# SPDX-License-Identifier: GPL-2.0
> > +
> > +config PLATFORM_TEMPLATE
> > +     bool
> > +     default y
> > diff --git a/platform/template/configs/defconfig b/platform/template/configs/defconfig
> > new file mode 100644
> > index 0000000..e69de29
> > --
> > 2.34.1
> >
> >
> > --
> > opensbi mailing list
> > opensbi@lists.infradead.org
> > http://lists.infradead.org/mailman/listinfo/opensbi
>
diff mbox series

Patch

diff --git a/Kconfig b/Kconfig
new file mode 100644
index 0000000..b8615d2
--- /dev/null
+++ b/Kconfig
@@ -0,0 +1,23 @@ 
+# SPDX-License-Identifier: GPL-2.0
+
+mainmenu "OpenSBI $OPENSBI_PLATFORM Configuration"
+
+config OPENSBI_SRC_DIR
+	string
+	option env="OPENSBI_SRC_DIR"
+
+config OPENSBI_PLATFORM
+	string
+	option env="OPENSBI_PLATFORM"
+
+config OPENSBI_PLATFORM_SRC_DIR
+	string
+	option env="OPENSBI_PLATFORM_SRC_DIR"
+
+menu "Platform Options"
+source "$OPENSBI_PLATFORM_SRC_DIR/Kconfig"
+endmenu
+
+source "$OPENSBI_SRC_DIR/lib/utils/Kconfig"
+
+source "$OPENSBI_SRC_DIR/firmware/Kconfig"
diff --git a/Makefile b/Makefile
index f619ef7..46c7c1c 100644
--- a/Makefile
+++ b/Makefile
@@ -52,6 +52,9 @@  ifdef PLATFORM_DIR
 else
  platform_parent_dir=$(src_dir)/platform
 endif
+ifndef PLATFORM_DEFCONFIG
+PLATFORM_DEFCONFIG=defconfig
+endif
 
 # Check if verbosity is ON for build process
 CMD_PREFIX_DEFAULT := @
@@ -70,6 +73,19 @@  export libsbi_dir=$(CURDIR)/lib/sbi
 export libsbiutils_dir=$(CURDIR)/lib/utils
 export firmware_dir=$(CURDIR)/firmware
 
+# Setup variables for kconfig-frontends
+ifdef PLATFORM
+export KCONFIG_CONFIG=$(platform_build_dir)/.config
+export KCONFIG_AUTOCONFIG=$(platform_build_dir)/auto.conf
+export KCONFIG_TRISTATE=$(platform_build_dir)/tristate.conf
+export KCONFIG_AUTOHEADER=$(platform_build_dir)/autoconf.h
+export KCONFIG_AUTOCONF_CMD=$(platform_build_dir)/include/config/auto.conf.cmd
+# Additional exports for include paths in Kconfig files
+export OPENSBI_SRC_DIR=$(src_dir)
+export OPENSBI_PLATFORM=$(PLATFORM)
+export OPENSBI_PLATFORM_SRC_DIR=$(platform_src_dir)
+endif
+
 # Find library version
 OPENSBI_VERSION_MAJOR=`grep "define OPENSBI_VERSION_MAJOR" $(include_dir)/sbi/sbi_version.h | sed 's/.*MAJOR.*\([0-9][0-9]*\)/\1/'`
 OPENSBI_VERSION_MINOR=`grep "define OPENSBI_VERSION_MINOR" $(include_dir)/sbi/sbi_version.h | sed 's/.*MINOR.*\([0-9][0-9]*\)/\1/'`
@@ -183,8 +199,34 @@  libsbi-object-mks=$(shell if [ -d $(libsbi_dir) ]; then find $(libsbi_dir) -inam
 libsbiutils-object-mks=$(shell if [ -d $(libsbiutils_dir) ]; then find $(libsbiutils_dir) -iname "objects.mk" | sort -r; fi)
 firmware-object-mks=$(shell if [ -d $(firmware_dir) ]; then find $(firmware_dir) -iname "objects.mk" | sort -r; fi)
 
-# Include platform specifig config.mk
+# The "make all" rule should always be first rule
+.PHONY: all
+all:
+
+# Include platform specific .config and config.mk
 ifdef PLATFORM
+.PHONY: menuconfig
+menuconfig: $(platform_src_dir)/Kconfig $(src_dir)/Kconfig
+	$(CMD_PREFIX)mkdir -p `dirname $(KCONFIG_CONFIG)`
+	$(CMD_PREFIX)mkdir -p `dirname $(KCONFIG_AUTOCONF_CMD)`
+	$(CMD_PREFIX)kconfig-mconf $(src_dir)/Kconfig
+	$(CMD_PREFIX)cd $(platform_build_dir) && kconfig-conf --silentoldconfig $(src_dir)/Kconfig
+
+.PHONY: savedefconfig
+savedefconfig: $(platform_src_dir)/Kconfig $(src_dir)/Kconfig
+	$(CMD_PREFIX)mkdir -p `dirname $(KCONFIG_CONFIG)`
+	$(CMD_PREFIX)mkdir -p `dirname $(KCONFIG_AUTOCONF_CMD)`
+	$(CMD_PREFIX)kconfig-conf --savedefconfig `dirname $(KCONFIG_CONFIG)`/defconfig $(src_dir)/Kconfig
+
+$(KCONFIG_CONFIG): $(platform_src_dir)/configs/$(PLATFORM_DEFCONFIG) $(platform_src_dir)/Kconfig $(src_dir)/Kconfig
+	$(CMD_PREFIX)mkdir -p `dirname $(KCONFIG_CONFIG)`
+	$(CMD_PREFIX)mkdir -p `dirname $(KCONFIG_AUTOCONF_CMD)`
+	$(CMD_PREFIX)cp -f $(platform_src_dir)/configs/$(PLATFORM_DEFCONFIG) $(KCONFIG_CONFIG)
+	$(CMD_PREFIX)cd $(platform_build_dir) && kconfig-conf --silentoldconfig --olddefconfig $(src_dir)/Kconfig
+$(KCONFIG_AUTOCONF_CMD): $(KCONFIG_CONFIG)
+include $(KCONFIG_CONFIG)
+include $(KCONFIG_AUTOCONF_CMD)
+
 include $(platform_src_dir)/config.mk
 endif
 
@@ -280,6 +322,9 @@  ifeq ($(BUILD_INFO),y)
 GENFLAGS	+=	-DOPENSBI_BUILD_TIME_STAMP="\"$(OPENSBI_BUILD_TIME_STAMP)\""
 GENFLAGS	+=	-DOPENSBI_BUILD_COMPILER_VERSION="\"$(OPENSBI_BUILD_COMPILER_VERSION)\""
 endif
+ifdef PLATFORM
+GENFLAGS	+=	-include $(KCONFIG_AUTOHEADER)
+endif
 GENFLAGS	+=	$(libsbiutils-genflags-y)
 GENFLAGS	+=	$(platform-genflags-y)
 GENFLAGS	+=	$(firmware-genflags-y)
@@ -419,7 +464,7 @@  targets-y += $(platform_build_dir)/lib/libplatsbi.a
 endif
 targets-y += $(firmware-bins-path-y)
 
-# Default rule "make" should always be first rule
+# The default "make all" rule
 .PHONY: all
 all: $(targets-y)
 
@@ -456,7 +501,7 @@  $(build_dir)/%.o: $(src_dir)/%.S
 	$(call compile_as,$@,$<)
 
 $(build_dir)/%.dep: $(src_dir)/%.carray
-	$(call compile_gen_dep,$@,.c,$<)
+	$(call compile_gen_dep,$@,.c,$< $(KCONFIG_CONFIG))
 	$(call compile_gen_dep,$@,.o,$(@:.dep=.c))
 
 $(build_dir)/%.c: $(src_dir)/%.carray
@@ -523,6 +568,9 @@  docs: $(build_dir)/docs/latex/refman.pdf
 # They should not be included for any "xxxconfig" or "xxxclean" rule
 all-deps-1 = $(if $(findstring config,$(MAKECMDGOALS)),,$(deps-y))
 all-deps-2 = $(if $(findstring clean,$(MAKECMDGOALS)),,$(all-deps-1))
+ifdef PLATFORM
+$(all-deps-2): | $(KCONFIG_CONFIG)
+endif
 -include $(all-deps-2)
 
 # Include external dependency of firmwares after default Makefile rules
diff --git a/firmware/Kconfig b/firmware/Kconfig
new file mode 100644
index 0000000..f66554c
--- /dev/null
+++ b/firmware/Kconfig
@@ -0,0 +1 @@ 
+# SPDX-License-Identifier: GPL-2.0
diff --git a/lib/utils/Kconfig b/lib/utils/Kconfig
new file mode 100644
index 0000000..f66554c
--- /dev/null
+++ b/lib/utils/Kconfig
@@ -0,0 +1 @@ 
+# SPDX-License-Identifier: GPL-2.0
diff --git a/platform/andes/ae350/Kconfig b/platform/andes/ae350/Kconfig
new file mode 100644
index 0000000..349c1d3
--- /dev/null
+++ b/platform/andes/ae350/Kconfig
@@ -0,0 +1,5 @@ 
+# SPDX-License-Identifier: GPL-2.0
+
+config PLATFORM_ANDES_AE350
+	bool
+	default y
diff --git a/platform/andes/ae350/configs/defconfig b/platform/andes/ae350/configs/defconfig
new file mode 100644
index 0000000..e69de29
diff --git a/platform/fpga/ariane/Kconfig b/platform/fpga/ariane/Kconfig
new file mode 100644
index 0000000..26f9beb
--- /dev/null
+++ b/platform/fpga/ariane/Kconfig
@@ -0,0 +1,5 @@ 
+# SPDX-License-Identifier: GPL-2.0
+
+config PLATFORM_ARIANE_FPGA
+	bool
+	default y
diff --git a/platform/fpga/ariane/configs/defconfig b/platform/fpga/ariane/configs/defconfig
new file mode 100644
index 0000000..e69de29
diff --git a/platform/fpga/openpiton/Kconfig b/platform/fpga/openpiton/Kconfig
new file mode 100644
index 0000000..8bfa85a
--- /dev/null
+++ b/platform/fpga/openpiton/Kconfig
@@ -0,0 +1,5 @@ 
+# SPDX-License-Identifier: GPL-2.0
+
+config PLATFORM_OPENPITON_FPGA
+	bool
+	default y
diff --git a/platform/fpga/openpiton/configs/defconfig b/platform/fpga/openpiton/configs/defconfig
new file mode 100644
index 0000000..e69de29
diff --git a/platform/generic/Kconfig b/platform/generic/Kconfig
new file mode 100644
index 0000000..a811a05
--- /dev/null
+++ b/platform/generic/Kconfig
@@ -0,0 +1,5 @@ 
+# SPDX-License-Identifier: GPL-2.0
+
+config PLATFORM_GENERIC
+	bool
+	default y
diff --git a/platform/generic/configs/defconfig b/platform/generic/configs/defconfig
new file mode 100644
index 0000000..e69de29
diff --git a/platform/kendryte/k210/Kconfig b/platform/kendryte/k210/Kconfig
new file mode 100644
index 0000000..726423a
--- /dev/null
+++ b/platform/kendryte/k210/Kconfig
@@ -0,0 +1,5 @@ 
+# SPDX-License-Identifier: GPL-2.0
+
+config PLATFORM_KENDRYTE_K210
+	bool
+	default y
diff --git a/platform/kendryte/k210/configs/defconfig b/platform/kendryte/k210/configs/defconfig
new file mode 100644
index 0000000..e69de29
diff --git a/platform/nuclei/ux600/Kconfig b/platform/nuclei/ux600/Kconfig
new file mode 100644
index 0000000..bb8410f
--- /dev/null
+++ b/platform/nuclei/ux600/Kconfig
@@ -0,0 +1,5 @@ 
+# SPDX-License-Identifier: GPL-2.0
+
+config PLATFORM_NUCLEI_UX600
+	bool
+	default y
diff --git a/platform/nuclei/ux600/configs/defconfig b/platform/nuclei/ux600/configs/defconfig
new file mode 100644
index 0000000..e69de29
diff --git a/platform/template/Kconfig b/platform/template/Kconfig
new file mode 100644
index 0000000..bd95ea0
--- /dev/null
+++ b/platform/template/Kconfig
@@ -0,0 +1,5 @@ 
+# SPDX-License-Identifier: GPL-2.0
+
+config PLATFORM_TEMPLATE
+	bool
+	default y
diff --git a/platform/template/configs/defconfig b/platform/template/configs/defconfig
new file mode 100644
index 0000000..e69de29