diff --git a/include/cmake.mk b/include/cmake.mk
index 9a5e311c3c7e8792fa33a3e9324b0e256e2c09b4..6ab628ee2e09d981b55650d13167778aa0849e31 100644
--- a/include/cmake.mk
+++ b/include/cmake.mk
@@ -27,8 +27,9 @@ else
   CMAKE_CXX_COMPILER:=$(CCACHE)
   CMAKE_CXX_COMPILER_ARG1:=$(TARGET_CXX_NOCACHE)
 endif
-CMAKE_AR:=$(call cmake_tool,$(TARGET_CROSS)ar)
-CMAKE_RANLIB:=$(call cmake_tool,$(TARGET_CROSS)ranlib)
+CMAKE_AR:=$(call cmake_tool,$(TARGET_AR))
+CMAKE_NM:=$(call cmake_tool,$(TARGET_NM))
+CMAKE_RANLIB:=$(call cmake_tool,$(TARGET_RANLIB))
 
 define Build/Configure/Default
 	(cd $(PKG_BUILD_DIR); \
@@ -50,6 +51,7 @@ define Build/Configure/Default
 			-DCMAKE_MODULE_LINKER_FLAGS:STRING="$(TARGET_LDFLAGS)" \
 			-DCMAKE_SHARED_LINKER_FLAGS:STRING="$(TARGET_LDFLAGS)" \
 			-DCMAKE_AR="$(CMAKE_AR)" \
+			-DCMAKE_NM="$(CMAKE_NM)" \
 			-DCMAKE_RANLIB="$(CMAKE_RANLIB)" \
 			-DCMAKE_FIND_ROOT_PATH="$(STAGING_DIR);$(TOOLCHAIN_DIR)" \
 			-DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=BOTH \
diff --git a/rules.mk b/rules.mk
index 0822979012d5b985716fe5c24fd278535f388b1e..8f42fe312956c882911c628de5675c6498f69bc1 100644
--- a/rules.mk
+++ b/rules.mk
@@ -192,9 +192,17 @@ HOST_CPPFLAGS:=-I$(STAGING_DIR_HOST)/include -I$(STAGING_DIR_HOST)/usr/include
 HOST_CFLAGS:=-O2 $(HOST_CPPFLAGS)
 HOST_LDFLAGS:=-L$(STAGING_DIR_HOST)/lib -L$(STAGING_DIR_HOST)/usr/lib
 
+ifeq ($(CONFIG_GCC_VERSION_4_4)$(CONFIG_GCC_VERSION_4_6),)
+  TARGET_AR:=$(TARGET_CROSS)gcc-ar
+  TARGET_RANLIB:=$(TARGET_CROSS)gcc-ranlib
+  TARGET_NM:=$(TARGET_CROSS)gcc-nm
+else
+  TARGET_AR:=$(TARGET_CROSS)ar
+  TARGET_RANLIB:=$(TARGET_CROSS)ranlib
+  TARGET_NM:=$(TARGET_CROSS)nm
+endif
+
 TARGET_CC:=$(TARGET_CROSS)gcc
-TARGET_AR:=$(TARGET_CROSS)ar
-TARGET_RANLIB:=$(TARGET_CROSS)ranlib
 TARGET_CXX:=$(TARGET_CROSS)g++
 KPATCH:=$(SCRIPT_DIR)/patch-kernel.sh
 SED:=$(STAGING_DIR_HOST)/bin/sed -i -e
@@ -223,14 +231,14 @@ ifneq ($(CONFIG_CCACHE),)
 endif
 
 TARGET_CONFIGURE_OPTS = \
-  AR=$(TARGET_CROSS)ar \
+  AR="$(TARGET_AR)" \
   AS="$(TARGET_CC) -c $(TARGET_ASFLAGS)" \
   LD=$(TARGET_CROSS)ld \
-  NM=$(TARGET_CROSS)nm \
+  NM="$(TARGET_NM)" \
   CC="$(TARGET_CC)" \
   GCC="$(TARGET_CC)" \
   CXX="$(TARGET_CXX)" \
-  RANLIB=$(TARGET_CROSS)ranlib \
+  RANLIB="$(TARGET_RANLIB)" \
   STRIP=$(TARGET_CROSS)strip \
   OBJCOPY=$(TARGET_CROSS)objcopy \
   OBJDUMP=$(TARGET_CROSS)objdump \