These versions of conf/mconf are forked from the upstream, and the CMake system allows mconf-idf to
be installed externally on the path. So the best option is to rename.
Includes changes to Windows installer for v1.1
pip install pyserial
-MConf
-^^^^^
+MConf for IDF
+^^^^^^^^^^^^^
-Download the ESP-IDF customized version of the configuration tool mconf from the `mconf releases page <mconf>`_.
+Download the configuration tool mconf-idf from the `kconfig-frontends releases page <mconf-idf>`_. This is the ``mconf`` configuration tool with some minor customizations for ESP-IDF.
This tool will also need to be unzipped to a directory which is then `added to your Path <add-directory-windows-path>`_.
The easiest way to install ESP-IDF's prerequisites is to download the ESP-IDF Tools installer from this URL:
-https://dl.espressif.com/dl/esp-idf-tools-setup-1.0.exe
+https://dl.espressif.com/dl/esp-idf-tools-setup-1.1.exe
-The installer will automatically install the ESP32 Xtensa gcc toolchain, Ninja_ build tool, and a customized configuration tool called mconf. The installer can also download and run installers for CMake_ and Python_ 2.7 if these are not already installed on the computer.
+The installer will automatically install the ESP32 Xtensa gcc toolchain, Ninja_ build tool, and a configuration tool called mconf-idf_. The installer can also download and run installers for CMake_ and Python_ 2.7 if these are not already installed on the computer.
By default, the installer updates the Windows ``Path`` environment variable so all of these tools can be run from anywhere. If you disable this option, you will need to configure the environment where you are using ESP-IDF (terminal or chosen IDE) with the correct paths.
.. _ninja: https://ninja-build.org/
.. _Python: https://www.python.org/downloads/windows/
.. _Git for Windows: https://gitforwindows.org/
-.. _mconf: https://github.com/espressif/kconfig-frontends/releases/
+.. _mconf-idf: https://github.com/espressif/kconfig-frontends/releases/
.. _Github Desktop: https://desktop.github.com/
# overrides (usually used for esp-idf examples)
SDKCONFIG_DEFAULTS ?= $(PROJECT_PATH)/sdkconfig.defaults
-# Workaround to run make parallel (-j). mconf and conf cannot be made simultaneously
-$(KCONFIG_TOOL_DIR)/mconf: $(KCONFIG_TOOL_DIR)/conf
+# Workaround to run make parallel (-j). mconf-idf and conf-idf cannot be made simultaneously
+$(KCONFIG_TOOL_DIR)/mconf-idf: $(KCONFIG_TOOL_DIR)/conf-idf
# reset MAKEFLAGS as the menuconfig makefile uses implicit compile rules
-$(KCONFIG_TOOL_DIR)/mconf $(KCONFIG_TOOL_DIR)/conf: $(wildcard $(KCONFIG_TOOL_DIR)/*.c)
+$(KCONFIG_TOOL_DIR)/mconf-idf $(KCONFIG_TOOL_DIR)/conf-idf: $(wildcard $(KCONFIG_TOOL_DIR)/*.c)
MAKEFLAGS="" CC=$(HOSTCC) LD=$(HOSTLD) \
$(MAKE) -C $(KCONFIG_TOOL_DIR)
endif
endif
-# macro for the commands to run kconfig tools conf or mconf.
+# macro for the commands to run kconfig tools conf-idf or mconf-idf.
# $1 is the name (& args) of the conf tool to run
define RunConf
mkdir -p $(BUILD_DIR_BASE)/include/config
# depend on any prerequisite that may cause a make restart as part of
# the prerequisite's own recipe.
-menuconfig: $(KCONFIG_TOOL_DIR)/mconf
+menuconfig: $(KCONFIG_TOOL_DIR)/mconf-idf
$(summary) MENUCONFIG
ifdef BATCH_BUILD
@echo "Can't run interactive configuration inside non-interactive build process."
@echo "See esp-idf documentation for more details."
@exit 1
else
- $(call RunConf,mconf)
+ $(call RunConf,mconf-idf)
endif
# defconfig creates a default config, based on SDKCONFIG_DEFAULTS if present
-defconfig: $(KCONFIG_TOOL_DIR)/conf
+defconfig: $(KCONFIG_TOOL_DIR)/conf-idf
$(summary) DEFCONFIG
ifneq ("$(wildcard $(SDKCONFIG_DEFAULTS))","")
cat $(SDKCONFIG_DEFAULTS) >> $(SDKCONFIG) # append defaults to sdkconfig, will override existing values
endif
- $(call RunConf,conf --olddefconfig)
+ $(call RunConf,conf-idf --olddefconfig)
# if neither defconfig or menuconfig are requested, use the GENCONFIG rule to
# ensure generated config files are up to date
-$(SDKCONFIG_MAKEFILE) $(BUILD_DIR_BASE)/include/sdkconfig.h: $(KCONFIG_TOOL_DIR)/conf $(SDKCONFIG) $(COMPONENT_KCONFIGS) $(COMPONENT_KCONFIGS_PROJBUILD) | $(call prereq_if_explicit,defconfig) $(call prereq_if_explicit,menuconfig)
+$(SDKCONFIG_MAKEFILE) $(BUILD_DIR_BASE)/include/sdkconfig.h: $(KCONFIG_TOOL_DIR)/conf-idf $(SDKCONFIG) $(COMPONENT_KCONFIGS) $(COMPONENT_KCONFIGS_PROJBUILD) | $(call prereq_if_explicit,defconfig) $(call prereq_if_explicit,menuconfig)
$(summary) GENCONFIG
ifdef BATCH_BUILD # can't prompt for new config values like on terminal
- $(call RunConf,conf --olddefconfig)
+ $(call RunConf,conf-idf --olddefconfig)
endif
- $(call RunConf,conf --silentoldconfig)
+ $(call RunConf,conf-idf --silentoldconfig)
touch $(SDKCONFIG_MAKEFILE) $(BUILD_DIR_BASE)/include/sdkconfig.h # ensure newer than sdkconfig
else # "$(MAKE_RESTARTS)" != ""
endmacro()
if(CMAKE_HOST_WIN32)
- # Prefer a prebuilt mconf on Windows
+ # Prefer a prebuilt mconf-idf on Windows
find_program(WINPTY winpty)
- find_program(MCONF mconf)
+ find_program(MCONF mconf-idf)
+
+ # Fall back to the old binary which was called 'mconf' not 'mconf-idf'
+ if(NOT MCONF)
+ find_program(MCONF mconf)
+ if(MCONF)
+ message(WARNING "Falling back to mconf binary '${MCONF}' not mconf-idf. "
+ "This is probably because an old version of IDF mconf is installed and this is fine. "
+ "However if there are config problems please check the Getting Started guide for your platform.")
+ endif()
+ endif()
if(NOT MCONF)
find_program(NATIVE_GCC gcc)
if(NOT NATIVE_GCC)
message(FATAL_ERROR
- "Windows requires a prebuilt ESP-IDF-specific mconf for your platform "
- "on the PATH, or an MSYS2 version of gcc on the PATH to build mconf. "
+ "Windows requires a prebuilt mconf-idf for your platform "
+ "on the PATH, or an MSYS2 version of gcc on the PATH to build mconf-idf. "
"Consult the setup docs for ESP-IDF on Windows.")
endif()
elseif(WINPTY)
if(NOT MCONF)
# Use the existing Makefile to build mconf (out of tree) when needed
#
- set(MCONF kconfig_bin/mconf)
+ set(MCONF kconfig_bin/mconf-idf)
- Externalproject_Add(mconf
+ externalproject_add(mconf-idf
SOURCE_DIR ${IDF_PATH}/tools/kconfig
CONFIGURE_COMMAND ""
BINARY_DIR "kconfig_bin"
- BUILD_COMMAND make -f ${IDF_PATH}/tools/kconfig/Makefile mconf
+ BUILD_COMMAND make -f ${IDF_PATH}/tools/kconfig/Makefile mconf-idf
BUILD_BYPRODUCTS ${MCONF}
INSTALL_COMMAND ""
EXCLUDE_FROM_ALL 1
)
file(GLOB mconf_srcfiles ${IDF_PATH}/tools/kconfig/*.c)
- ExternalProject_Add_StepDependencies(mconf build
+ externalproject_add_stepdependencies(mconf-idf build
${mconf_srcfiles}
${IDF_PATH}/tools/kconfig/Makefile
${CMAKE_CURRENT_LIST_FILE})
unset(mconf_srcfiles)
- set(menuconfig_depends DEPENDS mconf)
+ set(menuconfig_depends DEPENDS mconf-idf)
endif()
--env "COMPONENT_KCONFIGS_PROJBUILD=${kconfigs_projbuild}"
--env "IDF_CMAKE=y")
- # Generate the menuconfig target (uses C-based mconf tool, either prebuilt or via mconf target above)
+ # Generate the menuconfig target (uses C-based mconf-idf tool, either prebuilt or via mconf-idf target above)
add_custom_target(menuconfig
${menuconfig_depends}
# create any missing config file, with defaults if necessary
# configuration programs
#
conf
+conf-idf
mconf
+mconf-idf
nconf
qconf
gconf
endif # MING32
endif # MSYSTEM
-default: mconf conf
+default: mconf-idf conf-idf
xconfig: qconf
$< $(silent) $(Kconfig)
gconfig: gconf
$< $(silent) $(Kconfig)
-menuconfig: mconf
+menuconfig: mconf-idf
$< $(silent) $(Kconfig)
-config: conf
+config: conf-idf
$< $(silent) --oldaskconfig $(Kconfig)
nconfig: nconf
$< $(silent) $(Kconfig)
-silentoldconfig: conf
+silentoldconfig: conf-idf
mkdir -p include/config include/generated
$< $(silent) --$@ $(Kconfig)
-localyesconfig localmodconfig: streamline_config.pl conf
+localyesconfig localmodconfig: streamline_config.pl conf-idf
mkdir -p include/config include/generated
perl $< --$@ . $(Kconfig) > .tmp.config
if [ -f .config ]; then \
cmp -s .tmp.config .config || \
(mv -f .config .config.old.1; \
mv -f .tmp.config .config; \
- conf $(silent) --silentoldconfig $(Kconfig); \
+ conf-idf $(silent) --silentoldconfig $(Kconfig); \
mv -f .config.old.1 .config.old) \
else \
mv -f .tmp.config .config; \
- conf $(silent) --silentoldconfig $(Kconfig); \
+ conf-idf $(silent) --silentoldconfig $(Kconfig); \
fi
rm -f .tmp.config
-# These targets map 1:1 to the commandline options of 'conf'
+# These targets map 1:1 to the commandline options of 'conf-idf'
simple-targets := oldconfig allnoconfig allyesconfig allmodconfig \
alldefconfig randconfig listnewconfig olddefconfig
PHONY += $(simple-targets)
-$(simple-targets): conf
+$(simple-targets): conf-idf
$< $(silent) --$@ $(Kconfig)
PHONY += oldnoconfig savedefconfig defconfig
# counter-intuitive name.
oldnoconfig: olddefconfig
-savedefconfig: conf
+savedefconfig: conf-idf
$< $(silent) --$@=defconfig $(Kconfig)
-defconfig: conf
+defconfig: conf-idf
ifeq ($(KBUILD_DEFCONFIG),)
$< $(silent) --defconfig $(Kconfig)
else
endif
endif
-%_defconfig: conf
+%_defconfig: conf-idf
$< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
configfiles=$(wildcard $(srctree)/kernel/configs/$@ $(srctree)/arch/$(SRCARCH)/configs/$@)
-%.config: conf
+%.config: conf-idf
$(if $(call configfiles),, $(error No configuration exists for this target on this architecture))
$(CONFIG_SHELL) $(srctree)/scripts/kconfig/merge_config.sh -m .config $(configfiles)
+yes "" | $(MAKE) -f $(srctree)/Makefile oldconfig
# ===========================================================================
# Shared Makefile for the various kconfig executables:
-# conf: Used for defconfig, oldconfig and related targets
+# conf-idf: Used for defconfig, oldconfig and related targets
# nconf: Used for the nconfig target.
# Utilizes ncurses
-# mconf: Used for the menuconfig target
+# mconf-idf: Used for the menuconfig target
# Utilizes the lxdialog package
# qconf: Used for the xconfig target
# Based on Qt which needs to be installed to compile it
qconf-objs := zconf.tab.o
gconf-objs := gconf.o zconf.tab.o
-hostprogs-y := conf nconf mconf kxgettext qconf gconf
+hostprogs-y := conf-idf nconf mconf-idf kxgettext qconf gconf
all-objs := $(conf-objs) $(mconf-objs) $(lxdialog)
all-deps := $(all-objs:.o=.d)
clean-files := qconf.moc .tmp_qtcheck .tmp_gtkcheck
clean-files += zconf.tab.c zconf.lex.c zconf.hash.c gconf.glade.h
-clean-files += $(all-objs) $(all-deps) conf mconf
+clean-files += $(all-objs) $(all-deps) conf-idf mconf-idf conf mconf
+# (note: cleans both mconf & conf (old names) and conf-idf & mconf-idf (new names))
# Check that we have the required ncurses stuff installed for lxdialog (menuconfig)
PHONY += dochecklxdialog
gconf.glade
-mconf: lxdialog $(mconf-objs)
+mconf-idf: lxdialog $(mconf-objs)
$(CC) -o $@ $(mconf-objs) $(LOADLIBES_mconf)
-conf: $(conf-objs)
+conf-idf: $(conf-objs)
$(CC) -o $@ $(conf-objs) $(LOADLIBES_conf)
zconf.tab.c: zconf.lex.c
cd `dirname $0`
pushd dl
wget --continue "https://dl.espressif.com/dl/xtensa-esp32-elf-win32-1.22.0-80-g6c4433a-5.2.0.zip"
-wget --continue "https://github.com/espressif/kconfig-frontends/releases/download/v4.6.0.0-idf-20180319/mconf-v4.6.0.0-idf-20180319-win32.zip"
+wget --continue "https://github.com/espressif/kconfig-frontends/releases/download/v4.6.0.0-idf-20180525/mconf-v4.6.0.0-idf-20180525-win32.zip"
wget --continue "https://github.com/ninja-build/ninja/releases/download/v1.8.2/ninja-win.zip"
popd
rm -rf input/*
pushd input
unzip ../dl/xtensa-esp32-elf-win32-1.22.0-80-g6c4433a-5.2.0.zip
-unzip ../dl/mconf-v4.6.0.0-idf-20180319-win32.zip
+unzip ../dl/mconf-v4.6.0.0-idf-20180525-win32.zip
unzip ../dl/ninja-win.zip
popd
[Setup]
AppName=ESP-IDF Tools
-AppVersion=1.0
-OutputBaseFilename=esp-idf-tools-setup-1.0
+AppVersion=1.1
+OutputBaseFilename=esp-idf-tools-setup-1.1
DefaultDirName={pf}\Espressif\ESP-IDF Tools
DefaultGroupName=ESP-IDF Tools
[Components]
Name: toolchain; Description: ESP32 Xtensa GCC Cross-Toolchain; Types: full custom;
-Name: mconf; Description: ESP-IDF console menuconfig tool; Types: full custom;
+Name: mconf_idf; Description: ESP-IDF console menuconfig tool; Types: full custom;
Name: ninja; Description: Install Ninja build v1.8.2; Types: full custom
[Tasks]
[Files]
Components: toolchain; Source: "input\xtensa-esp32-elf\*"; DestDir: "{app}\toolchain\"; Flags: recursesubdirs;
-Components: mconf; Source: "input\mconf-v4.6.0.0-idf-20180319-win32\*"; DestDir: "{app}\mconf\";
+Components: mconf_idf; Source: "input\mconf-v4.6.0.0-idf-20180525-win32\*"; DestDir: "{app}\mconf-idf\";
Components: ninja; Source: "input\ninja.exe"; DestDir: "{app}";
[Run]
ValueType: expandsz; ValueName: "Path"; ValueData: "{app};{olddata}"; Check: not IsInPath('{app}'); \
Components: ninja; Tasks: addpath\user
-; mconf path
+; mconf-idf path
Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; \
- ValueType: expandsz; ValueName: "Path"; ValueData: "{app}\mconf;{olddata}"; Check: not IsInPath('{app}\mconf'); \
- Components: mconf; Tasks: addpath\allusers
+ ValueType: expandsz; ValueName: "Path"; ValueData: "{app}\mconf-idf;{olddata}"; Check: not IsInPath('{app}\mconf-idf'); \
+ Components: mconf_idf; Tasks: addpath\allusers
Root: HKCU; Subkey: "Environment"; \
- ValueType: expandsz; ValueName: "Path"; ValueData: "{app}\mconf;{olddata}"; Check: not IsInPath('{app}\mconf'); \
- Components: mconf; Tasks: addpath\user
+ ValueType: expandsz; ValueName: "Path"; ValueData: "{app}\mconf-idf;{olddata}"; Check: not IsInPath('{app}\mconf-idf'); \
+ Components: mconf_idf; Tasks: addpath\user
; toolchain path
Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; \