SoC common : build :Add multi-config files choice supported. [1/1]

PD#SWPL-189565

Problem:
Fixed use menuconfig to load the last configuration.

Solution:
Add a cache variable to save the config name and use it if needed.

Verify:
N/A

Change-Id: If34583432cc78512ef56f4f8471d3770be6b1587
Signed-off-by: xiaohu.huang <xiaohu.huang@amlogic.com>
diff --git a/Makefile b/Makefile
index 7fa8d73..199792b 100644
--- a/Makefile
+++ b/Makefile
@@ -287,16 +287,20 @@
 menuconfig: toolchain $(kernel_BUILD_DIR)
 	@ cmake --build $(kernel_BUILD_DIR) --target $@
 
-%defconfig:
-	@ make config BOARD_SPEC_CONFIG=$@
+%defconfig:config_clean toolchain
+	@ make $(kernel_BUILD_DIR) BOARD_SPEC_CONFIG=$@
+	@ echo "configuration $@ written to $(kernel_BUILD_DIR)/.config"
 
 .PHONY: config
-config: config_clean toolchain $(kernel_BUILD_DIR)
-	@ echo "configuration written to $(kernel_BUILD_DIR)/.config"
+config: config_clean toolchain
+	@ make $(kernel_BUILD_DIR) BOARD_SPEC_CONFIG=defconfig
+	@ echo "configuration defconfig written to $(kernel_BUILD_DIR)/.config"
 
 .PHONY: config_clean
 config_clean:
-	@ rm -f $(kernel_BUILD_DIR)/build.ninja;
+	@ if [ -f $(kernel_BUILD_DIR)/build.ninja ]; then \
+		rm -f $(kernel_BUILD_DIR)/build.ninja; \
+	fi
 
 .PHONY: flash
 flash:
diff --git a/cmake/kconfig.cmake b/cmake/kconfig.cmake
index d7beacd..c11b6e5 100755
--- a/cmake/kconfig.cmake
+++ b/cmake/kconfig.cmake
@@ -18,12 +18,17 @@
   set(KCONFIG_ROOT ${SDK_BASE}/Kconfig)
 endif()
 
-if(NOT DEFINED ENV{BOARD_SPEC_CONFIG} OR "$ENV{BOARD_SPEC_CONFIG}" STREQUAL "")
+if(NOT DEFINED ENV{BOARD_SPEC_CONFIG} AND NOT DEFINED DEFCONFIG_NAME)
   message(STATUS "Use default config file:defconfig.")
   set(BOARD_DEFCONFIG ${BOARD_DIR}/defconfig)
 else()
-  message(STATUS "Use config file $ENV{BOARD_SPEC_CONFIG}.")
+  if (NOT "$ENV{BOARD_SPEC_CONFIG}" STREQUAL "")
+      set(DEFCONFIG_NAME $ENV{BOARD_SPEC_CONFIG} CACHE STRING "save defconfig file name" FORCE)
+  else()
+      set(ENV{BOARD_SPEC_CONFIG} ${DEFCONFIG_NAME}) 
+  endif()
   set(BOARD_DEFCONFIG ${BOARD_DIR}/$ENV{BOARD_SPEC_CONFIG})
+  message(STATUS "Use config file $ENV{BOARD_SPEC_CONFIG}.")
 endif()
 
 set(DOTCONFIG                  ${PROJECT_BINARY_DIR}/.config)