This is an automated email from the ASF dual-hosted git repository.

acassis pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git


The following commit(s) were added to refs/heads/master by this push:
     new 87260499e19 cmake: Use NUTTX(_DIR/_BIN_DIR) instead 
CMAKE(_SRC_DIR/_BIN_DIR)
87260499e19 is described below

commit 87260499e192e5a7903a5175cbea402e929070f5
Author: Alan Carvalho de Assis <[email protected]>
AuthorDate: Sat Aug 8 15:52:46 2026 -0300

    cmake: Use NUTTX(_DIR/_BIN_DIR) instead CMAKE(_SRC_DIR/_BIN_DIR)
    
    This change fixes NuttX’s CMake support when NuttX is embedded
    in another project via add_subdirectory(). CMake’s CMAKE_SOURCE_DIR
    and CMAKE_BINARY_DIR refer to the outermost project, causing NuttX
    to access its .config, generated files, host tools, and build artifacts
    in the parent project’s directories. The fix introduces NUTTX_DIR and
    NUTTX_BINARY_DIR, based on CMAKE_CURRENT_SOURCE_DIR and
    CMAKE_CURRENT_BINARY_DIR, and consistently uses them for NuttX
    self-references while preserving existing standalone builds. It fixes
    the Kconfig initialization failure reported in #19697 and allows an
    embedded sim:nsh build to configure, build, and boot successfully.
    The change affects only the CMake build system (not Make or Kconfig
    defaults), requires the corresponding nuttx-apps change, and does not
    extend add_subdirectory() support to cross-compiled non-sim boards due
    to CMake’s toolchain-file limitation.
    
    Fixes #19697.
    
    Assisted-by: Claude:claude-sonnet-5
    Signed-off-by: Alan Carvalho de Assis <[email protected]>
---
 CMakeLists.txt                                     | 94 +++++++++++-----------
 arch/CMakeLists.txt                                |  4 +-
 arch/arm/src/cmake/ghs.cmake                       |  2 +-
 arch/arm/src/cmake/platform.cmake                  |  2 +-
 arch/arm/src/common/ameba/cmake/ameba_board.cmake  | 16 ++--
 arch/arm/src/nrf52/CMakeLists.txt                  |  2 +-
 arch/arm/src/nrf53/CMakeLists.txt                  |  2 +-
 arch/arm/src/nrf91/CMakeLists.txt                  |  2 +-
 arch/arm/src/rp2040/CMakeLists.txt                 |  2 +-
 arch/arm64/src/cmake/platform.cmake                |  2 +-
 arch/risc-v/src/cmake/platform.cmake               |  2 +-
 arch/risc-v/src/common/espressif/Bootloader.cmake  |  2 +-
 arch/risc-v/src/common/espressif/CMakeLists.txt    | 25 +++---
 arch/risc-v/src/common/espressif/esp_ulp.cmake     |  8 +-
 arch/risc-v/src/esp32h2/hal_esp32h2.cmake          |  2 +-
 arch/risc-v/src/esp32p4/hal_esp32p4.cmake          |  2 +-
 arch/sim/src/sim/CMakeLists.txt                    |  2 +-
 arch/tricore/src/cmake/platform.cmake              |  2 +-
 arch/tricore/src/common/CMakeLists.txt             |  4 +-
 arch/tricore/src/tc3xx/CMakeLists.txt              | 10 +--
 arch/tricore/src/tc4xx/CMakeLists.txt              | 10 +--
 arch/x86_64/src/cmake/platform.cmake               | 12 +--
 arch/xtensa/src/cmake/platform.cmake               |  2 +-
 binfmt/CMakeLists.txt                              |  2 +-
 boards/CMakeLists.txt                              |  8 +-
 boards/arm/cxd56xx/spresense/CMakeLists.txt        | 10 +--
 .../rp2040/adafruit-feather-rp2040/CMakeLists.txt  |  6 +-
 boards/arm/rp2040/adafruit-kb2040/CMakeLists.txt   |  6 +-
 .../rp2040/adafruit-qt-py-rp2040/CMakeLists.txt    |  6 +-
 boards/arm/rp2040/pimoroni-tiny2040/CMakeLists.txt |  6 +-
 .../arm/rp2040/raspberrypi-pico-w/CMakeLists.txt   |  6 +-
 boards/arm/rp2040/raspberrypi-pico/CMakeLists.txt  |  6 +-
 boards/arm/rp2040/seeed-xiao-rp2040/CMakeLists.txt |  6 +-
 boards/arm/rp2040/w5500-evb-pico/CMakeLists.txt    |  6 +-
 .../waveshare-rp2040-lcd-1.28/CMakeLists.txt       |  6 +-
 .../rp2040/waveshare-rp2040-zero/CMakeLists.txt    |  6 +-
 .../arm/rp23xx/pimoroni-pico-2-plus/CMakeLists.txt |  6 +-
 .../rp23xx/pimoroni-pico-plus-2-w/CMakeLists.txt   |  6 +-
 .../arm/rp23xx/raspberrypi-pico-2/CMakeLists.txt   |  6 +-
 boards/arm/rp23xx/xiao-rp2350/CMakeLists.txt       |  6 +-
 boards/risc-v/k230/canmv230/src/CMakeLists.txt     |  4 +-
 .../rp23xx-rv/raspberrypi-pico-2-rv/CMakeLists.txt |  6 +-
 boards/sim/sim/sim/CMakeLists.txt                  |  5 +-
 boards/x86_64/qemu/qemu-intel64/src/CMakeLists.txt |  2 +-
 cmake/menuconfig.cmake                             | 55 +++++++------
 cmake/nuttx_add_application.cmake                  | 20 ++---
 cmake/nuttx_add_library.cmake                      |  3 +-
 cmake/nuttx_add_romfs.cmake                        |  6 +-
 cmake/nuttx_add_symtab.cmake                       |  2 +-
 cmake/nuttx_export_header.cmake                    |  2 +-
 cmake/nuttx_extensions.cmake                       |  8 +-
 cmake/nuttx_generate_headers.cmake                 | 66 +++++++--------
 cmake/nuttx_generate_outputs.cmake                 |  8 +-
 cmake/nuttx_generate_sim_ld.cmake                  |  8 +-
 cmake/nuttx_kconfig.cmake                          |  8 +-
 cmake/nuttx_mkconfig.cmake                         | 24 +++---
 cmake/nuttx_mkversion.cmake                        |  2 +-
 cmake/nuttx_multiple_link.cmake                    | 25 +++---
 cmake/nuttx_process_config.cmake                   | 14 ++--
 cmake/nuttx_redefine_symbols.cmake                 |  4 +-
 cmake/nuttx_sethost.cmake                          |  2 +-
 cmake/nuttx_toolchain.cmake                        |  2 +-
 drivers/mtd/CMakeLists.txt                         |  4 +-
 drivers/segger/CMakeLists.txt                      |  2 +-
 fs/littlefs/CMakeLists.txt                         |  4 +-
 libs/libbuiltin/compiler-rt/CMakeLists.txt         |  2 +-
 libs/libc/elf/CMakeLists.txt                       |  2 +-
 libs/libc/fdt/CMakeLists.txt                       |  2 +-
 libs/libc/gnssutils/CMakeLists.txt                 |  8 +-
 libs/libm/libmcs/CMakeLists.txt                    |  4 +-
 libs/libm/newlib/CMakeLists.txt                    |  2 +-
 libs/libm/openlibm/CMakeLists.txt                  |  2 +-
 libs/libxx/libcxx/CMakeLists.txt                   | 10 +--
 libs/libxx/libcxxabi/CMakeLists.txt                |  6 +-
 libs/libxx/libstdc++/CMakeLists.txt                | 13 ++-
 libs/libxx/uClibc++/CMakeLists.txt                 |  8 +-
 mm/tlsf/CMakeLists.txt                             |  2 +-
 openamp/libmetal.cmake                             |  4 +-
 openamp/open-amp.cmake                             |  4 +-
 syscall/CMakeLists.txt                             |  2 +-
 syscall/proxies/CMakeLists.txt                     |  2 +-
 syscall/stubs/CMakeLists.txt                       |  2 +-
 syscall/wraps/CMakeLists.txt                       |  2 +-
 tools/espressif/espressif_burn_enc_key.cmake       |  8 +-
 wireless/CMakeLists.txt                            | 10 +--
 85 files changed, 345 insertions(+), 351 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index e598d7a5bf7..820c5a4faa7 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -89,6 +89,7 @@ set(CMAKE_USER_MAKE_RULES_OVERRIDE
 # Process board config & directory locations #################################
 
 set(NUTTX_DIR ${CMAKE_CURRENT_SOURCE_DIR})
+set(NUTTX_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
 
 # uncleaned previous make build can cause various types of cmake error
 if(EXISTS "${NUTTX_DIR}/.config")
@@ -211,7 +212,7 @@ endif()
 
 get_filename_component(NUTTX_APPS_DIR ${NUTTX_APPS_DIR} ABSOLUTE)
 get_filename_component(apps_dir ${NUTTX_APPS_DIR} NAME)
-set(NUTTX_APPS_BINDIR "${CMAKE_BINARY_DIR}/${apps_dir}")
+set(NUTTX_APPS_BINDIR "${NUTTX_BINARY_DIR}/${apps_dir}")
 
 # Support not having application directory
 
@@ -220,10 +221,10 @@ if("${apps_dir}" STREQUAL "dummy")
   file(TOUCH ${NUTTX_APPS_BINDIR}/Kconfig)
 endif()
 
-set(ENV{PYTHONPYCACHEPREFIX} ${CMAKE_BINARY_DIR})
+set(ENV{PYTHONPYCACHEPREFIX} ${NUTTX_BINARY_DIR})
 set(ENV{APPSDIR} ${NUTTX_APPS_DIR}) # TODO: support not having apps/
 set(ENV{APPSBINDIR} ${NUTTX_APPS_BINDIR}) # TODO: support not having apps/
-set(ENV{BINDIR} ${CMAKE_BINARY_DIR}) # TODO: support not having apps/
+set(ENV{BINDIR} ${NUTTX_BINARY_DIR}) # TODO: support not having apps/
 set(ENV{EXTERNALDIR} dummy) # TODO
 set(ENV{DRIVERS_PLATFORM_DIR} dummy) # TODO
 
@@ -273,7 +274,7 @@ endif()
 
 # Custom board ###################################################
 
-file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/boards/dummy)
+file(MAKE_DIRECTORY ${NUTTX_BINARY_DIR}/boards/dummy)
 if(CONFIG_ARCH_BOARD_CUSTOM)
   get_filename_component(NUTTX_BOARD_ABS_DIR ${CONFIG_ARCH_BOARD_CUSTOM_DIR}
                          ABSOLUTE BASE_DIR ${NUTTX_DIR})
@@ -291,22 +292,22 @@ if(CONFIG_ARCH_BOARD_CUSTOM
    AND EXISTS ${NUTTX_BOARD_ABS_DIR}/Kconfig
    AND NOT (IS_NUTTX_BOARD EQUAL 0))
   nuttx_create_symlink(${NUTTX_BOARD_ABS_DIR}/Kconfig
-                       ${CMAKE_BINARY_DIR}/boards/dummy/Kconfig)
+                       ${NUTTX_BINARY_DIR}/boards/dummy/Kconfig)
 else()
-  file(TOUCH ${CMAKE_BINARY_DIR}/boards/dummy/Kconfig)
+  file(TOUCH ${NUTTX_BINARY_DIR}/boards/dummy/Kconfig)
 endif()
 
 # board platform driver
 
-file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/drivers)
+file(MAKE_DIRECTORY ${NUTTX_BINARY_DIR}/drivers)
 
 if(EXISTS ${NUTTX_BOARD_ABS_DIR}/../drivers
    AND EXISTS ${NUTTX_BOARD_ABS_DIR}/../drivers/Kconfig)
   nuttx_create_symlink(${NUTTX_BOARD_ABS_DIR}/../drivers
-                       ${CMAKE_BINARY_DIR}/drivers/platform)
+                       ${NUTTX_BINARY_DIR}/drivers/platform)
 else()
-  file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/drivers/platform)
-  file(TOUCH ${CMAKE_BINARY_DIR}/drivers/platform/Kconfig)
+  file(MAKE_DIRECTORY ${NUTTX_BINARY_DIR}/drivers/platform)
+  file(TOUCH ${NUTTX_BINARY_DIR}/drivers/platform/Kconfig)
 endif()
 
 # Custom chip ###################################################
@@ -320,25 +321,25 @@ else()
       "${NUTTX_DIR}/arch/${CONFIG_ARCH}/src/${CONFIG_ARCH_CHIP}")
 endif()
 
-if(NOT EXISTS ${CMAKE_BINARY_DIR}/arch/dummy)
-  file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/arch/dummy)
+if(NOT EXISTS ${NUTTX_BINARY_DIR}/arch/dummy)
+  file(MAKE_DIRECTORY ${NUTTX_BINARY_DIR}/arch/dummy)
 endif()
 
 if(CONFIG_ARCH_CHIP_CUSTOM AND EXISTS ${NUTTX_CHIP_ABS_DIR}/Kconfig)
   nuttx_create_symlink(${NUTTX_CHIP_ABS_DIR}/Kconfig
-                       ${CMAKE_BINARY_DIR}/arch/dummy/Kconfig)
+                       ${NUTTX_BINARY_DIR}/arch/dummy/Kconfig)
 else()
-  file(TOUCH ${CMAKE_BINARY_DIR}/arch/dummy/Kconfig)
+  file(TOUCH ${NUTTX_BINARY_DIR}/arch/dummy/Kconfig)
 endif()
 
-if(NOT EXISTS ${CMAKE_BINARY_DIR}/arch/${CONFIG_ARCH})
-  file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/arch/${CONFIG_ARCH})
-  file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/arch/${CONFIG_ARCH}/src)
+if(NOT EXISTS ${NUTTX_BINARY_DIR}/arch/${CONFIG_ARCH})
+  file(MAKE_DIRECTORY ${NUTTX_BINARY_DIR}/arch/${CONFIG_ARCH})
+  file(MAKE_DIRECTORY ${NUTTX_BINARY_DIR}/arch/${CONFIG_ARCH}/src)
 endif()
 
-if(NOT EXISTS ${CMAKE_BINARY_DIR}/arch/${CONFIG_ARCH}/src/chip)
+if(NOT EXISTS ${NUTTX_BINARY_DIR}/arch/${CONFIG_ARCH}/src/chip)
   nuttx_create_symlink(${NUTTX_CHIP_ABS_DIR}
-                       ${CMAKE_BINARY_DIR}/arch/${CONFIG_ARCH}/src/chip)
+                       ${NUTTX_BINARY_DIR}/arch/${CONFIG_ARCH}/src/chip)
 endif()
 
 # Unsupported custom board/chips yet, workaround
@@ -351,28 +352,28 @@ endif()
 # Copy board defconfig into main directory and expand TODO: do also for changes
 # in board/config (by comparing stored defconfig to specified one)
 
-if(NOT EXISTS ${CMAKE_BINARY_DIR}/.config OR NOT "${NUTTX_DEFCONFIG}" STREQUAL
+if(NOT EXISTS ${NUTTX_BINARY_DIR}/.config OR NOT "${NUTTX_DEFCONFIG}" STREQUAL
                                              "${NUTTX_DEFCONFIG_SAVED}")
 
   message(STATUS "Initializing NuttX")
   configure_file(${NUTTX_DEFCONFIG} defconfig COPYONLY)
   configure_file(${NUTTX_DEFCONFIG} .config.compressed COPYONLY)
 
-  set(ENV{KCONFIG_CONFIG} ${CMAKE_BINARY_DIR}/.config.compressed)
+  set(ENV{KCONFIG_CONFIG} ${NUTTX_BINARY_DIR}/.config.compressed)
 
   # Define host before the first olddefconfig so host-dependent defaults, such
   # as the sim toolchain choice on macOS, resolve the same way as configure.sh.
-  nuttx_sethost(CONFIG_FILE ${CMAKE_BINARY_DIR}/.config.compressed)
+  nuttx_sethost(CONFIG_FILE ${NUTTX_BINARY_DIR}/.config.compressed)
 
   # Do olddefconfig step to expand the abbreviated defconfig into normal config
   nuttx_olddefconfig()
 
-  file(RENAME ${CMAKE_BINARY_DIR}/.config.compressed
-       ${CMAKE_BINARY_DIR}/.config)
-  set(ENV{KCONFIG_CONFIG} ${CMAKE_BINARY_DIR}/.config)
+  file(RENAME ${NUTTX_BINARY_DIR}/.config.compressed
+       ${NUTTX_BINARY_DIR}/.config)
+  set(ENV{KCONFIG_CONFIG} ${NUTTX_BINARY_DIR}/.config)
 
   # Set CONFIG_BASE_DEFCONFIG so .config matches Make behavior (configure.sh)
-  file(READ ${CMAKE_BINARY_DIR}/.config _config_init_content)
+  file(READ ${NUTTX_BINARY_DIR}/.config _config_init_content)
   string(
     REGEX
     REPLACE "CONFIG_BASE_DEFCONFIG=\"[^\"]*\""
@@ -382,10 +383,10 @@ if(NOT EXISTS ${CMAKE_BINARY_DIR}/.config OR NOT 
"${NUTTX_DEFCONFIG}" STREQUAL
     string(APPEND _config_init_content
            "\nCONFIG_BASE_DEFCONFIG=\"${NUTTX_BOARD}/${NUTTX_CONFIG}\"\n")
   endif()
-  file(WRITE ${CMAKE_BINARY_DIR}/.config "${_config_init_content}")
+  file(WRITE ${NUTTX_BINARY_DIR}/.config "${_config_init_content}")
 
   # store original expanded .config
-  configure_file(${CMAKE_BINARY_DIR}/.config ${CMAKE_BINARY_DIR}/.config.orig
+  configure_file(${NUTTX_BINARY_DIR}/.config ${NUTTX_BINARY_DIR}/.config.orig
                  COPYONLY)
 
   set(NUTTX_DEFCONFIG_SAVED
@@ -422,7 +423,7 @@ add_custom_target(nuttx_global)
 
 # this exposes all Kconfig vars to CMake
 
-nuttx_export_kconfig(${CMAKE_BINARY_DIR}/.config)
+nuttx_export_kconfig(${NUTTX_BINARY_DIR}/.config)
 
 include(nuttx_generate_headers)
 include(nuttx_generate_outputs)
@@ -471,9 +472,9 @@ endif()
 
 # This needs to happen before project() when binaries are searched for
 
-list(APPEND CMAKE_MODULE_PATH 
${CMAKE_SOURCE_DIR}/arch/${CONFIG_ARCH}/src/cmake)
+list(APPEND CMAKE_MODULE_PATH ${NUTTX_DIR}/arch/${CONFIG_ARCH}/src/cmake)
 set(CMAKE_TOOLCHAIN_FILE
-    "${CMAKE_SOURCE_DIR}/arch/${CONFIG_ARCH}/src/cmake/Toolchain.cmake")
+    "${NUTTX_DIR}/arch/${CONFIG_ARCH}/src/cmake/Toolchain.cmake")
 
 # Compiler detection must not try to link a full executable.  CMake validates a
 # compiler by building and linking a test program, but a bare metal cross
@@ -511,8 +512,8 @@ if(EXISTS ${NUTTX_BOARD_ABS_DIR}/cmake
 endif()
 
 # Support loadable and kernel options by specific arch
-if(EXISTS ${CMAKE_SOURCE_DIR}/arch/${CONFIG_ARCH}/src/cmake/elf.cmake)
-  include(${CMAKE_SOURCE_DIR}/arch/${CONFIG_ARCH}/src/cmake/elf.cmake)
+if(EXISTS ${NUTTX_DIR}/arch/${CONFIG_ARCH}/src/cmake/elf.cmake)
+  include(${NUTTX_DIR}/arch/${CONFIG_ARCH}/src/cmake/elf.cmake)
 endif()
 
 include(platform)
@@ -598,7 +599,7 @@ if(CONFIG_ARCH_SIM)
   # linked against final nuttx binary
 
   if(NOT WIN32)
-    target_link_libraries(nuttx PRIVATE ${CMAKE_BINARY_DIR}/nuttx.rel)
+    target_link_libraries(nuttx PRIVATE ${NUTTX_BINARY_DIR}/nuttx.rel)
   endif()
 else()
   # These flags apply to source files not part of the library. In sim build 
this
@@ -620,7 +621,7 @@ set_property(
 # Each subdirectory will generate a static library
 
 if(CONFIG_OPENAMP)
-  include_directories(${CMAKE_SOURCE_DIR}/openamp/open-amp/lib/include)
+  include_directories(${NUTTX_DIR}/openamp/open-amp/lib/include)
 endif()
 
 add_subdirectory(openamp)
@@ -678,7 +679,7 @@ if(NOT CONFIG_ARCH_SIM)
   set(ldscript_tmp_list)
   foreach(ld ${ldscript})
     get_filename_component(LD_SCRIPT_NAME ${ld} NAME)
-    set(LD_SCRIPT_TMP "${CMAKE_BINARY_DIR}/${LD_SCRIPT_NAME}.tmp")
+    set(LD_SCRIPT_TMP "${NUTTX_BINARY_DIR}/${LD_SCRIPT_NAME}.tmp")
 
     nuttx_generate_preprocess_target(SOURCE_FILE ${ld} TARGET_FILE
                                      ${LD_SCRIPT_TMP})
@@ -705,7 +706,7 @@ else()
 endif()
 
 # initialize manifest to hold all generated files
-file(TOUCH ${CMAKE_BINARY_DIR}/nuttx.manifest)
+file(TOUCH ${NUTTX_BINARY_DIR}/nuttx.manifest)
 
 get_property(nuttx_kernel_libs GLOBAL PROPERTY NUTTX_KERNEL_LIBRARIES)
 get_property(nuttx_extra_libs GLOBAL PROPERTY NUTTX_EXTRA_LIBRARIES)
@@ -749,7 +750,7 @@ if(NOT CONFIG_ARCH_SIM)
 
     # TODO: install? $(Q) if [ -w /tftpboot ] ; then \ cp -f uImage
     # /tftpboot/uImage; \ fi
-    file(APPEND ${CMAKE_BINARY_DIR}/nuttx.manifest uImage)
+    file(APPEND ${NUTTX_BINARY_DIR}/nuttx.manifest uImage)
   endif()
 elseif(WIN32)
   target_link_options(nuttx PUBLIC /SAFESEH:NO)
@@ -766,15 +767,15 @@ elseif(WIN32)
   endforeach()
 
   add_custom_command(
-    OUTPUT ${CMAKE_BINARY_DIR}/nuttx_all.lib
-    COMMAND ${CMAKE_AR} /OUT:${CMAKE_BINARY_DIR}/nuttx_all.lib
+    OUTPUT ${NUTTX_BINARY_DIR}/nuttx_all.lib
+    COMMAND ${CMAKE_AR} /OUT:${NUTTX_BINARY_DIR}/nuttx_all.lib
             ${nuttx_libs_paths}
     DEPENDS ${nuttx_libs}
     VERBATIM)
-  add_custom_target(nuttx_all-lib DEPENDS ${CMAKE_BINARY_DIR}/nuttx_all.lib)
+  add_custom_target(nuttx_all-lib DEPENDS ${NUTTX_BINARY_DIR}/nuttx_all.lib)
   add_dependencies(nuttx nuttx_all-lib)
   target_link_libraries(nuttx PRIVATE $<TARGET_OBJECTS:sim_head>
-                                      ${CMAKE_BINARY_DIR}/nuttx_all.lib)
+                                      ${NUTTX_BINARY_DIR}/nuttx_all.lib)
 else()
 
   if(NOT APPLE)
@@ -828,7 +829,7 @@ endif()
 
 # TODO: if we use an install target a manifest may not be needed
 if(CONFIG_ARCH_SIM)
-  file(APPEND ${CMAKE_BINARY_DIR}/nuttx.manifest "nuttx\n")
+  file(APPEND ${NUTTX_BINARY_DIR}/nuttx.manifest "nuttx\n")
 endif()
 
 # Generate system map using the compiler toolchain. Conventionally, the tool
@@ -862,7 +863,7 @@ if(CONFIG_BUILD_PROTECTED)
   set(user_ldscript_tmp_list)
   foreach(ldscript ${user_ldscript})
     get_filename_component(LD_SCRIPT_USER_NAME ${ldscript} NAME)
-    set(LD_SCRIPT_USER_TMP "${CMAKE_BINARY_DIR}/${LD_SCRIPT_USER_NAME}.tmp")
+    set(LD_SCRIPT_USER_TMP "${NUTTX_BINARY_DIR}/${LD_SCRIPT_USER_NAME}.tmp")
     nuttx_generate_preprocess_target(SOURCE_FILE ${ldscript} TARGET_FILE
                                      ${LD_SCRIPT_USER_TMP})
     add_custom_target(user_ldscript_tmp_${LD_SCRIPT_USER_NAME}
@@ -909,9 +910,8 @@ if(CONFIG_BUILD_PROTECTED)
             $<$<NOT:$<BOOL:${DISABLE_LINK_GROUP}>>:-Wl,--end-group>)
 
   target_include_directories(
-    nuttx_user SYSTEM
-    PRIVATE ${CMAKE_SOURCE_DIR}/include ${CMAKE_BINARY_DIR}/include
-            ${CMAKE_BINARY_DIR}/include_arch)
+    nuttx_user SYSTEM PRIVATE ${NUTTX_DIR}/include ${NUTTX_BINARY_DIR}/include
+                              ${NUTTX_BINARY_DIR}/include_arch)
 
   add_custom_command(
     OUTPUT User.map
diff --git a/arch/CMakeLists.txt b/arch/CMakeLists.txt
index 287370dd040..30a6b7fe78d 100644
--- a/arch/CMakeLists.txt
+++ b/arch/CMakeLists.txt
@@ -25,13 +25,13 @@
 # the "user" portion is named "arch_interface".
 
 nuttx_add_kernel_library(arch)
-target_include_directories(arch PRIVATE ${CMAKE_SOURCE_DIR}/sched)
+target_include_directories(arch PRIVATE ${NUTTX_DIR}/sched)
 
 if(CONFIG_BUILD_PROTECTED)
   nuttx_add_system_library(arch_interface)
   file(TOUCH "${CMAKE_CURRENT_BINARY_DIR}/empty.c")
   target_sources(arch_interface PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/empty.c")
-  target_include_directories(arch_interface PRIVATE ${CMAKE_SOURCE_DIR}/sched)
+  target_include_directories(arch_interface PRIVATE ${NUTTX_DIR}/sched)
 endif()
 
 # TODO: move this higher up ifeq ($(CONFIG_SCHED_INSTRUMENTATION_SYSCALL),y)
diff --git a/arch/arm/src/cmake/ghs.cmake b/arch/arm/src/cmake/ghs.cmake
index f883b17ab4f..288085616da 100644
--- a/arch/arm/src/cmake/ghs.cmake
+++ b/arch/arm/src/cmake/ghs.cmake
@@ -278,7 +278,7 @@ function(nuttx_generate_preprocess_target)
     COMMAND
       ${PREPROCESS}
       $<GENEX_EVAL:$<TARGET_PROPERTY:nuttx_global,NUTTX_CPP_COMPILE_OPTIONS>>
-      -I${CMAKE_BINARY_DIR}/include -filetype.cpp ${SOURCE_FILE} -o
+      -I${NUTTX_BINARY_DIR}/include -filetype.cpp ${SOURCE_FILE} -o
       ${EXPECT_TARGET_FILE_NAME}
     DEPENDS ${SOURCE_FILE} ${DEPENDS})
 
diff --git a/arch/arm/src/cmake/platform.cmake 
b/arch/arm/src/cmake/platform.cmake
index e7c10544552..10f051eaf24 100644
--- a/arch/arm/src/cmake/platform.cmake
+++ b/arch/arm/src/cmake/platform.cmake
@@ -58,7 +58,7 @@ else()
   message(FATAL_ERROR "CMAKE_SYSTEM_PROCESSOR not set")
 endif()
 
-get_directory_property(TOOLCHAIN_DIR_FLAGS DIRECTORY ${CMAKE_SOURCE_DIR}
+get_directory_property(TOOLCHAIN_DIR_FLAGS DIRECTORY ${NUTTX_DIR}
                                                      COMPILE_OPTIONS)
 
 set(NUTTX_EXTRA_FLAGS "")
diff --git a/arch/arm/src/common/ameba/cmake/ameba_board.cmake 
b/arch/arm/src/common/ameba/cmake/ameba_board.cmake
index cd0f8efed6d..cb02887ae9a 100644
--- a/arch/arm/src/common/ameba/cmake/ameba_board.cmake
+++ b/arch/arm/src/common/ameba/cmake/ameba_board.cmake
@@ -247,7 +247,7 @@ target_link_options(
   -Wl,--defsym=_sdata=__sram_image2_start__
   -Wl,--defsym=_edata=__sram_image2_start__
   -Wl,--defsym=_eronly=__sram_image2_start__
-  -Wl,-Map=${CMAKE_BINARY_DIR}/nuttx.map
+  -Wl,-Map=${NUTTX_BINARY_DIR}/nuttx.map
   ${AMEBA_EXTRA_LINK_OPTIONS})
 
 # Append to NUTTX_EXTRA_LIBRARIES (not target_link_libraries): the top-level
@@ -267,19 +267,19 @@ if(EXISTS ${AMEBA_TOOLS_DIR}/ameba_package.sh)
   add_custom_target(
     nuttx_post_build
     DEPENDS nuttx
-    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+    WORKING_DIRECTORY ${NUTTX_BINARY_DIR}
     COMMENT "PACK nuttx.bin (Ameba AP + NP image2)")
   add_custom_command(
     TARGET nuttx_post_build
     POST_BUILD
     COMMAND
       ${CMAKE_COMMAND} -E env
-      "AMEBA_FLASH_HINT=AMEBA_PORT=/dev/ttyUSB0 cmake --build 
${CMAKE_BINARY_DIR} --target flash"
+      "AMEBA_FLASH_HINT=AMEBA_PORT=/dev/ttyUSB0 cmake --build 
${NUTTX_BINARY_DIR} --target flash"
       sh ${AMEBA_TOOLS_DIR}/ameba_package.sh ${AMEBA_SDK} ${AMEBA_PY_SOC}
       ${AMEBA_SOC_NAME} ${AMEBA_PREBUILT} ${AMEBA_AP_PROJECT} ${AMEBA_KM_PROJ}
-      ${AMEBA_NP_TARGET} ${AMEBA_TOOLCHAIN_DIR} ${CMAKE_BINARY_DIR}/nuttx
-      ${CMAKE_BINARY_DIR}/nuttx.bin
-    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+      ${AMEBA_NP_TARGET} ${AMEBA_TOOLCHAIN_DIR} ${NUTTX_BINARY_DIR}/nuttx
+      ${NUTTX_BINARY_DIR}/nuttx.bin
+    WORKING_DIRECTORY ${NUTTX_BINARY_DIR}
     # USES_TERMINAL -> Ninja "console" pool: stream the (long) SDK NP-build +
     # packaging output live instead of buffering it until the step finishes.
     USES_TERMINAL COMMAND_EXPAND_LISTS)
@@ -306,8 +306,8 @@ if(AMEBA_FLASH_PROFILE AND NOT TARGET flash)
     COMMAND
       ${CMAKE_COMMAND} -E env sh ${AMEBA_TOOLS_DIR}/ameba_flash.sh ${AMEBA_SDK}
       ${AMEBA_FLASH_PROFILE} ${AMEBA_AUTOCONF} ${AMEBA_PREBUILT}
-      ${CMAKE_BINARY_DIR}/nuttx.bin
-    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+      ${NUTTX_BINARY_DIR}/nuttx.bin
+    WORKING_DIRECTORY ${NUTTX_BINARY_DIR}
     USES_TERMINAL VERBATIM
     COMMENT "Flashing Ameba ${AMEBA_PY_SOC} over ${AMEBA_PORT} (AMEBA_PORT 
env)"
   )
diff --git a/arch/arm/src/nrf52/CMakeLists.txt 
b/arch/arm/src/nrf52/CMakeLists.txt
index 4fcf2e6fb81..1367365f175 100644
--- a/arch/arm/src/nrf52/CMakeLists.txt
+++ b/arch/arm/src/nrf52/CMakeLists.txt
@@ -162,7 +162,7 @@ if(CONFIG_NRF52_SOFTDEVICE_CONTROLLER)
           SOURCE_DIR
           ${CMAKE_CURRENT_LIST_DIR}/sdk-nrfxlib
           BINARY_DIR
-          ${CMAKE_BINARY_DIR}/arch/sdk-nrfxlib
+          ${NUTTX_BINARY_DIR}/arch/sdk-nrfxlib
           CONFIGURE_COMMAND
           ""
           BUILD_COMMAND
diff --git a/arch/arm/src/nrf53/CMakeLists.txt 
b/arch/arm/src/nrf53/CMakeLists.txt
index 49d99a0548f..497c7a48b36 100644
--- a/arch/arm/src/nrf53/CMakeLists.txt
+++ b/arch/arm/src/nrf53/CMakeLists.txt
@@ -129,7 +129,7 @@ if(CONFIG_NRF53_SOFTDEVICE_CONTROLLER)
           SOURCE_DIR
           ${CMAKE_CURRENT_LIST_DIR}/sdk-nrfxlib
           BINARY_DIR
-          ${CMAKE_BINARY_DIR}/arch/sdk-nrfxlib
+          ${NUTTX_BINARY_DIR}/arch/sdk-nrfxlib
           CONFIGURE_COMMAND
           ""
           BUILD_COMMAND
diff --git a/arch/arm/src/nrf91/CMakeLists.txt 
b/arch/arm/src/nrf91/CMakeLists.txt
index d765b3c6714..f3fae4d457f 100644
--- a/arch/arm/src/nrf91/CMakeLists.txt
+++ b/arch/arm/src/nrf91/CMakeLists.txt
@@ -102,7 +102,7 @@ if(CONFIG_NRF91_MODEM)
           SOURCE_DIR
           ${CMAKE_CURRENT_LIST_DIR}/sdk-nrfxlib
           BINARY_DIR
-          ${CMAKE_BINARY_DIR}/arch/sdk-nrfxlib
+          ${NUTTX_BINARY_DIR}/arch/sdk-nrfxlib
           CONFIGURE_COMMAND
           ""
           BUILD_COMMAND
diff --git a/arch/arm/src/rp2040/CMakeLists.txt 
b/arch/arm/src/rp2040/CMakeLists.txt
index 5b8b5f5102d..ff4f0e8657a 100644
--- a/arch/arm/src/rp2040/CMakeLists.txt
+++ b/arch/arm/src/rp2040/CMakeLists.txt
@@ -107,7 +107,7 @@ if(CONFIG_RP2040_FLASH_BOOT)
     set(PICO_SDK_PATH $ENV{PICO_SDK_PATH})
     include(${CMAKE_CURRENT_SOURCE_DIR}/boot2/rp2040_boot_stage2.cmake)
 
-    set(PATH_CHIP_RP2040 ${CMAKE_BINARY_DIR}/arch/${CONFIG_ARCH}/src/chip)
+    set(PATH_CHIP_RP2040 ${NUTTX_BINARY_DIR}/arch/${CONFIG_ARCH}/src/chip)
     pico_define_boot_stage2(rp2040_boot_stage2 ${PATH_CHIP_RP2040})
 
     if(EXISTS ${PATH_CHIP_RP2040}/rp2040_boot_stage2.S)
diff --git a/arch/arm64/src/cmake/platform.cmake 
b/arch/arm64/src/cmake/platform.cmake
index a4f16ffd143..ceb87f7f3c8 100644
--- a/arch/arm64/src/cmake/platform.cmake
+++ b/arch/arm64/src/cmake/platform.cmake
@@ -20,7 +20,7 @@
 #
 # 
##############################################################################
 
-get_directory_property(TOOLCHAIN_DIR_FLAGS DIRECTORY ${CMAKE_SOURCE_DIR}
+get_directory_property(TOOLCHAIN_DIR_FLAGS DIRECTORY ${NUTTX_DIR}
                                                      COMPILE_OPTIONS)
 
 set(CMAKE_C_FLAG_ARGS)
diff --git a/arch/risc-v/src/cmake/platform.cmake 
b/arch/risc-v/src/cmake/platform.cmake
index 72d28f6ef99..4ef51e5b396 100644
--- a/arch/risc-v/src/cmake/platform.cmake
+++ b/arch/risc-v/src/cmake/platform.cmake
@@ -20,7 +20,7 @@
 #
 # 
##############################################################################
 
-get_directory_property(TOOLCHAIN_DIR_FLAGS DIRECTORY ${CMAKE_SOURCE_DIR}
+get_directory_property(TOOLCHAIN_DIR_FLAGS DIRECTORY ${NUTTX_DIR}
                                                      COMPILE_OPTIONS)
 
 set(NUTTX_EXTRA_FLAGS "")
diff --git a/arch/risc-v/src/common/espressif/Bootloader.cmake 
b/arch/risc-v/src/common/espressif/Bootloader.cmake
index e9d7d397407..c129d5fb4c4 100644
--- a/arch/risc-v/src/common/espressif/Bootloader.cmake
+++ b/arch/risc-v/src/common/espressif/Bootloader.cmake
@@ -312,7 +312,7 @@ ExternalProject_Add(
 
 # Add bootloader files to clean list
 set_property(
-  DIRECTORY ${CMAKE_SOURCE_DIR}
+  DIRECTORY ${NUTTX_DIR}
   APPEND
   PROPERTY ADDITIONAL_CLEAN_FILES ${HALDIR} ${BOOTLOADER_SRCDIR}
            ${BOOTLOADER_BIN})
diff --git a/arch/risc-v/src/common/espressif/CMakeLists.txt 
b/arch/risc-v/src/common/espressif/CMakeLists.txt
index 52f1540e2ca..350a7beede9 100644
--- a/arch/risc-v/src/common/espressif/CMakeLists.txt
+++ b/arch/risc-v/src/common/espressif/CMakeLists.txt
@@ -254,7 +254,7 @@ option(
 
 get_filename_component(
   ESP_HAL_3RDPARTY_CHIP_DIR
-  
"${CMAKE_BINARY_DIR}/arch/risc-v/src/common/espressif/${ESP_HAL_3RDPARTY_REPO_NAME}"
+  
"${NUTTX_BINARY_DIR}/arch/risc-v/src/common/espressif/${ESP_HAL_3RDPARTY_REPO_NAME}"
   REALPATH)
 
 set(EXECUTE_CLONE_ESP_HAL_3RDPARTY_REPO TRUE)
@@ -321,10 +321,10 @@ if(NOT IS_DIRECTORY "${ESP_HAL_3RDPARTY_REPO}")
 
   # Copy gpio_sig_map.h and irq.h from the esp-hal-3rdparty repository to the 
NuttX directory
   file(COPY 
${ESP_HAL_3RDPARTY_REPO}/components/soc/${CHIP_SERIES}/include/soc/gpio_sig_map.h
-       DESTINATION ${CMAKE_BINARY_DIR}/include/arch/chip/)
+       DESTINATION ${NUTTX_BINARY_DIR}/include/arch/chip/)
 
   file(COPY ${ESP_HAL_3RDPARTY_REPO}/nuttx/${CHIP_SERIES}/include/irq.h
-       DESTINATION ${CMAKE_BINARY_DIR}/include/arch/chip/)
+       DESTINATION ${NUTTX_BINARY_DIR}/include/arch/chip/)
 
   if(CONFIG_ESPRESSIF_WIRELESS)
     message(
@@ -350,8 +350,8 @@ endif()
 
 # This is done previously on configure time but must be done again if a 'clean'
 # is executed.
-set(_gpio_sig_map ${CMAKE_BINARY_DIR}/include/arch/chip/gpio_sig_map.h)
-set(_irq ${CMAKE_BINARY_DIR}/include/arch/chip/irq.h)
+set(_gpio_sig_map ${NUTTX_BINARY_DIR}/include/arch/chip/gpio_sig_map.h)
+set(_irq ${NUTTX_BINARY_DIR}/include/arch/chip/irq.h)
 
 add_custom_command(
   OUTPUT ${_gpio_sig_map} ${_irq}
@@ -446,10 +446,9 @@ add_custom_command(
   TARGET nuttx_post_build
   POST_BUILD
   COMMAND
-    ${CMAKE_COMMAND} -DBINARY_DIR=${CMAKE_BINARY_DIR}
-    -DSOURCE_DIR=${CMAKE_SOURCE_DIR} -P
-    ${NUTTX_DIR}/tools/espressif/espressif_mkimage.cmake
-  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+    ${CMAKE_COMMAND} -DBINARY_DIR=${NUTTX_BINARY_DIR} -DSOURCE_DIR=${NUTTX_DIR}
+    -P ${NUTTX_DIR}/tools/espressif/espressif_mkimage.cmake
+  WORKING_DIRECTORY ${NUTTX_BINARY_DIR}
   COMMENT "Generating ESP-compatible binary"
   VERBATIM)
 
@@ -471,10 +470,10 @@ add_custom_target(
   flash
   DEPENDS nuttx_post_build
   COMMAND
-    ${CMAKE_COMMAND} -DBINARY_DIR=${CMAKE_BINARY_DIR}
-    -DSOURCE_DIR=${CMAKE_SOURCE_DIR} -DNUTTX_DIR=${NUTTX_DIR} -P
+    ${CMAKE_COMMAND} -DBINARY_DIR=${NUTTX_BINARY_DIR} -DSOURCE_DIR=${NUTTX_DIR}
+    -DNUTTX_DIR=${NUTTX_DIR} -P
     ${NUTTX_DIR}/tools/espressif/espressif_flash.cmake
-  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+  WORKING_DIRECTORY ${NUTTX_BINARY_DIR}
   COMMENT "Flashing firmware via esptool to $ENV{ESPTOOL_PORT}"
   VERBATIM)
 
@@ -497,6 +496,6 @@ if(CONFIG_ESPRESSIF_USE_LP_CORE)
 endif()
 
 set_property(
-  DIRECTORY ${CMAKE_SOURCE_DIR}
+  DIRECTORY ${NUTTX_DIR}
   APPEND
   PROPERTY ADDITIONAL_CLEAN_FILES ${ESP_CLEAN_FILES})
diff --git a/arch/risc-v/src/common/espressif/esp_ulp.cmake 
b/arch/risc-v/src/common/espressif/esp_ulp.cmake
index 9fbef1708e2..7a7ce2210c7 100644
--- a/arch/risc-v/src/common/espressif/esp_ulp.cmake
+++ b/arch/risc-v/src/common/espressif/esp_ulp.cmake
@@ -66,7 +66,7 @@ if(CONFIG_ESPRESSIF_USE_LP_CORE)
   if(NOT ESP_HAL_3RDPARTY_REPO)
     get_filename_component(
       ESP_HAL_3RDPARTY_REPO
-      
"${CMAKE_BINARY_DIR}/arch/${CONFIG_ARCH}/src/common/espressif/esp-hal-3rdparty"
+      
"${NUTTX_BINARY_DIR}/arch/${CONFIG_ARCH}/src/common/espressif/esp-hal-3rdparty"
       REALPATH)
   endif()
 
@@ -367,7 +367,7 @@ if(CONFIG_ESPRESSIF_USE_LP_CORE)
       OUTPUT ${ULP_NUTTX_CONFIG_COPY}
       COMMAND ${CMAKE_COMMAND} -E make_directory ${ULP_FOLDER}/nuttx
       COMMAND
-        ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/include/nuttx/config.h
+        ${CMAKE_COMMAND} -E copy ${NUTTX_BINARY_DIR}/include/nuttx/config.h
         ${ULP_NUTTX_CONFIG_COPY}
       DEPENDS nuttx_context ${ULP_VAR_MAP_HEADER}
       COMMENT "Copying nuttx/config.h for ULP build"
@@ -512,7 +512,7 @@ if(CONFIG_ESPRESSIF_USE_LP_CORE)
   get_property(_esp_ulp_defer GLOBAL PROPERTY ESP_ULP_LINK_DEFER_REGISTERED)
   if(NOT _esp_ulp_defer)
     set_property(GLOBAL PROPERTY ESP_ULP_LINK_DEFER_REGISTERED TRUE)
-    cmake_language(DEFER DIRECTORY ${CMAKE_SOURCE_DIR} CALL
+    cmake_language(DEFER DIRECTORY ${NUTTX_DIR} CALL
                    _esp_ulp_add_nuttx_link_deps)
   endif()
 
@@ -521,7 +521,7 @@ if(CONFIG_ESPRESSIF_USE_LP_CORE)
   # 
############################################################################
 
   set_property(
-    DIRECTORY ${CMAKE_SOURCE_DIR}
+    DIRECTORY ${NUTTX_DIR}
     APPEND
     PROPERTY ADDITIONAL_CLEAN_FILES ${ULP_FOLDER} ${ULP_ARCH_FOLDER}
              ${ULP_ALIASES_LD} ${ULP_ARCH_FOLDER}/.ulp_shared_stubs_stamp)
diff --git a/arch/risc-v/src/esp32h2/hal_esp32h2.cmake 
b/arch/risc-v/src/esp32h2/hal_esp32h2.cmake
index dd9db692347..fe1251be3af 100644
--- a/arch/risc-v/src/esp32h2/hal_esp32h2.cmake
+++ b/arch/risc-v/src/esp32h2/hal_esp32h2.cmake
@@ -591,7 +591,7 @@ function(nuttx_generate_preprocess_target)
   add_custom_command(
     OUTPUT ${TARGET_FILE}
     COMMAND
-      ${PREPROCESS} -I${CMAKE_BINARY_DIR}/include -I${NUTTX_DIR}/include
+      ${PREPROCESS} -I${NUTTX_BINARY_DIR}/include -I${NUTTX_DIR}/include
       -I${NUTTX_CHIP_ABS_DIR} ${LD_SCRIPT_HAL_INCLUDE}
       ${LD_SCRIPT_ADDITIONAL_INCLUDE} -D__NuttX__ ${SOURCE_FILE} >
       ${TARGET_FILE}
diff --git a/arch/risc-v/src/esp32p4/hal_esp32p4.cmake 
b/arch/risc-v/src/esp32p4/hal_esp32p4.cmake
index 254c684aae8..04b130a95d6 100644
--- a/arch/risc-v/src/esp32p4/hal_esp32p4.cmake
+++ b/arch/risc-v/src/esp32p4/hal_esp32p4.cmake
@@ -595,7 +595,7 @@ function(nuttx_generate_preprocess_target)
   add_custom_command(
     OUTPUT ${TARGET_FILE}
     COMMAND
-      ${PREPROCESS} -I${CMAKE_BINARY_DIR}/include -I${NUTTX_DIR}/include
+      ${PREPROCESS} -I${NUTTX_BINARY_DIR}/include -I${NUTTX_DIR}/include
       -I${NUTTX_CHIP_ABS_DIR} ${LD_SCRIPT_HAL_INCLUDE}
       ${LD_SCRIPT_ADDITIONAL_INCLUDE} -D__NuttX__ ${SOURCE_FILE} >
       ${TARGET_FILE}
diff --git a/arch/sim/src/sim/CMakeLists.txt b/arch/sim/src/sim/CMakeLists.txt
index a378448d1a3..4adcc17ba76 100644
--- a/arch/sim/src/sim/CMakeLists.txt
+++ b/arch/sim/src/sim/CMakeLists.txt
@@ -312,7 +312,7 @@ list(APPEND HOSTSRCS sim_errno.c)
 
 configure_file(${NUTTX_DIR}/include/nuttx/fs/hostfs.h
                ${CMAKE_CURRENT_BINARY_DIR}/hostfs.h COPYONLY)
-configure_file(${CMAKE_BINARY_DIR}/include/nuttx/config.h
+configure_file(${NUTTX_BINARY_DIR}/include/nuttx/config.h
                ${CMAKE_CURRENT_BINARY_DIR}/config.h COPYONLY)
 target_include_directories(nuttx PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
 
diff --git a/arch/tricore/src/cmake/platform.cmake 
b/arch/tricore/src/cmake/platform.cmake
index 42b92044853..7cc04664f24 100644
--- a/arch/tricore/src/cmake/platform.cmake
+++ b/arch/tricore/src/cmake/platform.cmake
@@ -20,7 +20,7 @@
 #
 # 
##############################################################################
 
-get_directory_property(TOOLCHAIN_DIR_FLAGS DIRECTORY ${CMAKE_SOURCE_DIR}
+get_directory_property(TOOLCHAIN_DIR_FLAGS DIRECTORY ${NUTTX_DIR}
                                                      COMPILE_OPTIONS)
 
 set(NUTTX_EXTRA_FLAGS "")
diff --git a/arch/tricore/src/common/CMakeLists.txt 
b/arch/tricore/src/common/CMakeLists.txt
index 1c51d7ef35b..91767ed2bbd 100644
--- a/arch/tricore/src/common/CMakeLists.txt
+++ b/arch/tricore/src/common/CMakeLists.txt
@@ -76,5 +76,5 @@ target_sources(nuttx PRIVATE tricore_doirq.c)
 target_compile_options(arch PRIVATE ${IFXFLAGS})
 target_compile_options(nuttx PRIVATE ${IFXFLAGS})
 target_include_directories(
-  nuttx SYSTEM PRIVATE ${CMAKE_SOURCE_DIR}/include ${CMAKE_BINARY_DIR}/include
-                       ${CMAKE_BINARY_DIR}/include_arch)
+  nuttx SYSTEM PRIVATE ${NUTTX_DIR}/include ${NUTTX_BINARY_DIR}/include
+                       ${NUTTX_BINARY_DIR}/include_arch)
diff --git a/arch/tricore/src/tc3xx/CMakeLists.txt 
b/arch/tricore/src/tc3xx/CMakeLists.txt
index ebb9ee5edb0..385ed34b156 100644
--- a/arch/tricore/src/tc3xx/CMakeLists.txt
+++ b/arch/tricore/src/tc3xx/CMakeLists.txt
@@ -29,7 +29,7 @@ if(CONFIG_TRICORE_TOOLCHAIN_TASKING)
   target_sources(c_fpu PRIVATE tc3xx_libc.c)
   target_link_options(
     nuttx PRIVATE
-    --library-directory=${CMAKE_BINARY_DIR}/arch/tricore/src/exclude_chip)
+    --library-directory=${NUTTX_BINARY_DIR}/arch/tricore/src/exclude_chip)
 endif()
 
 set(ILLD_UNPACK "${CMAKE_CURRENT_SOURCE_DIR}/../illd/tc3xx")
@@ -75,8 +75,8 @@ file(GLOB PATCH_FILES "${PATCHES_DIR}/*.patch")
 foreach(PATCH ${PATCH_FILES})
   execute_process(
     COMMAND git apply --reverse --check ${PATCH}
-    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} # Patches are applied from the repo
-                                          # root
+    WORKING_DIRECTORY ${NUTTX_DIR} # Patches are applied from the repo
+                      # root
     RESULT_VARIABLE PATCH_NEEDED
     OUTPUT_QUIET ERROR_QUIET)
 
@@ -85,8 +85,8 @@ foreach(PATCH ${PATCH_FILES})
   else()
     execute_process(
       COMMAND git apply --whitespace=nowarn ${PATCH}
-      WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} # Patches are applied from the repo
-                                            # root
+      WORKING_DIRECTORY ${NUTTX_DIR} # Patches are applied from the repo
+                        # root
       RESULT_VARIABLE APPLY_RESULT)
     if(NOT APPLY_RESULT EQUAL 0)
       message(FATAL_ERROR "Failed to apply patch ${PATCH}!")
diff --git a/arch/tricore/src/tc4xx/CMakeLists.txt 
b/arch/tricore/src/tc4xx/CMakeLists.txt
index 0735c9b48dc..2c21d86d77a 100644
--- a/arch/tricore/src/tc4xx/CMakeLists.txt
+++ b/arch/tricore/src/tc4xx/CMakeLists.txt
@@ -29,7 +29,7 @@ if(CONFIG_TRICORE_TOOLCHAIN_TASKING)
   target_sources(c_fpu PRIVATE tc4xx_libc.c)
   target_link_options(
     nuttx PRIVATE
-    --library-directory=${CMAKE_BINARY_DIR}/arch/tricore/src/exclude_chip)
+    --library-directory=${NUTTX_BINARY_DIR}/arch/tricore/src/exclude_chip)
 endif()
 
 set(ILLD_UNPACK "${CMAKE_CURRENT_SOURCE_DIR}/../illd/tc4xx")
@@ -75,8 +75,8 @@ file(GLOB PATCH_FILES "${PATCHES_DIR}/*.patch")
 foreach(PATCH ${PATCH_FILES})
   execute_process(
     COMMAND git apply --reverse --check ${PATCH}
-    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} # Patches are applied from the repo
-                                          # root
+    WORKING_DIRECTORY ${NUTTX_DIR} # Patches are applied from the repo
+                      # root
     RESULT_VARIABLE PATCH_NEEDED
     OUTPUT_QUIET ERROR_QUIET)
 
@@ -85,8 +85,8 @@ foreach(PATCH ${PATCH_FILES})
   else()
     execute_process(
       COMMAND git apply --whitespace=nowarn ${PATCH}
-      WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} # Patches are applied from the repo
-                                            # root
+      WORKING_DIRECTORY ${NUTTX_DIR} # Patches are applied from the repo
+                        # root
       RESULT_VARIABLE APPLY_RESULT)
     if(NOT APPLY_RESULT EQUAL 0)
       message(FATAL_ERROR "Failed to apply patch ${PATCH}!")
diff --git a/arch/x86_64/src/cmake/platform.cmake 
b/arch/x86_64/src/cmake/platform.cmake
index ed6d76df8c5..92005089db7 100644
--- a/arch/x86_64/src/cmake/platform.cmake
+++ b/arch/x86_64/src/cmake/platform.cmake
@@ -20,7 +20,7 @@
 #
 # 
##############################################################################
 
-get_directory_property(TOOLCHAIN_DIR_FLAGS DIRECTORY ${CMAKE_SOURCE_DIR}
+get_directory_property(TOOLCHAIN_DIR_FLAGS DIRECTORY ${NUTTX_DIR}
                                                      COMPILE_OPTIONS)
 
 set(NUTTX_EXTRA_FLAGS "")
@@ -68,11 +68,11 @@ set(PREPROCESS ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} -E 
-P -x c)
 if(CONFIG_ARCH_MULTIBOOT1)
   message(STATUS "Generating: nuttx.mb1 in ELF32/multiboot1")
   if(CONFIG_ALLSYMS)
-    set(FINAL_NUTTX_ELF "${CMAKE_BINARY_DIR}/final_nuttx")
+    set(FINAL_NUTTX_ELF "${NUTTX_BINARY_DIR}/final_nuttx")
   else()
-    set(FINAL_NUTTX_ELF "${CMAKE_BINARY_DIR}/nuttx")
+    set(FINAL_NUTTX_ELF "${NUTTX_BINARY_DIR}/nuttx")
   endif()
-  set(NUTTX_ELF "${CMAKE_BINARY_DIR}/nuttx")
+  set(NUTTX_ELF "${NUTTX_BINARY_DIR}/nuttx")
   set(NUTTX_BIN "${NUTTX_ELF}.bin")
   set(NUTTX_REALMODE_BIN "${NUTTX_ELF}_realmode.bin")
   set(NUTTX_MB1 "${NUTTX_ELF}.mb1")
@@ -89,8 +89,8 @@ if(CONFIG_ARCH_MULTIBOOT1)
     COMMAND
       ${CMAKE_C_COMPILER} -m32 -no-pie -nostdlib -DNUTTX_BIN='"${NUTTX_BIN}"'
       -DNUTTX_REALMODE_BIN='"${NUTTX_REALMODE_BIN}"'
-      ${CMAKE_SOURCE_DIR}/arch/x86_64/src/common/multiboot1.S -T
-      ${CMAKE_SOURCE_DIR}/arch/x86_64/src/common/multiboot1.ld -o ${NUTTX_MB1}
+      ${NUTTX_DIR}/arch/x86_64/src/common/multiboot1.S -T
+      ${NUTTX_DIR}/arch/x86_64/src/common/multiboot1.ld -o ${NUTTX_MB1}
     DEPENDS ${NUTTX_BIN} ${NUTTX_REALMODE_BIN}
     COMMENT "Building nuttx.mb1 multiboot1 image")
   add_custom_target(multiboot1 ALL DEPENDS ${NUTTX_MB1})
diff --git a/arch/xtensa/src/cmake/platform.cmake 
b/arch/xtensa/src/cmake/platform.cmake
index b62a5c75523..d785994715d 100644
--- a/arch/xtensa/src/cmake/platform.cmake
+++ b/arch/xtensa/src/cmake/platform.cmake
@@ -19,7 +19,7 @@
 # the License.
 #
 # 
##############################################################################
-get_directory_property(TOOLCHAIN_DIR_FLAGS DIRECTORY ${CMAKE_SOURCE_DIR}
+get_directory_property(TOOLCHAIN_DIR_FLAGS DIRECTORY ${NUTTX_DIR}
                                                      COMPILE_OPTIONS)
 
 set(NUTTX_EXTRA_FLAGS "")
diff --git a/binfmt/CMakeLists.txt b/binfmt/CMakeLists.txt
index 1af4cd3042b..9a3917c4bb7 100644
--- a/binfmt/CMakeLists.txt
+++ b/binfmt/CMakeLists.txt
@@ -69,4 +69,4 @@ endif()
 
 target_sources(binfmt PRIVATE ${SRCS})
 target_include_directories(binfmt PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
-target_include_directories(binfmt PRIVATE ${CMAKE_SOURCE_DIR}/sched)
+target_include_directories(binfmt PRIVATE ${NUTTX_DIR}/sched)
diff --git a/boards/CMakeLists.txt b/boards/CMakeLists.txt
index f1cf1f91ada..a8e85345ff0 100644
--- a/boards/CMakeLists.txt
+++ b/boards/CMakeLists.txt
@@ -32,8 +32,8 @@
 # ifeq ($(CUSTOM_KCONFIG),y) BOARD_KCONFIG = $(CUSTOM_KPATH) else BOARD_KCONFIG
 # = $(TOPDIR)$(DELIM)configs$(DELIM)dummy$(DELIM)dummy_kconfig endif
 
-file(WRITE ${CMAKE_BINARY_DIR}/dummy.c "")
-nuttx_add_kernel_library(board ${CMAKE_BINARY_DIR}/dummy.c)
+file(WRITE ${NUTTX_BINARY_DIR}/dummy.c "")
+nuttx_add_kernel_library(board ${NUTTX_BINARY_DIR}/dummy.c)
 
 # boardctl support
 
@@ -54,9 +54,9 @@ if(EXISTS ${NUTTX_BOARD_ABS_DIR}/../common/CMakeLists.txt)
 
   # Create link ARCH_SRC_BOARD_BOARD_SYMLINK
 
-  file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/arch/${CONFIG_ARCH}/src/board)
+  file(MAKE_DIRECTORY ${NUTTX_BINARY_DIR}/arch/${CONFIG_ARCH}/src/board)
   nuttx_create_symlink(${NUTTX_BOARD_ABS_DIR}/src
-                       ${CMAKE_BINARY_DIR}/arch/${CONFIG_ARCH}/src/board/board)
+                       ${NUTTX_BINARY_DIR}/arch/${CONFIG_ARCH}/src/board/board)
 endif()
 
 if(EXISTS ${NUTTX_BOARD_ABS_DIR}/../drivers/CMakeLists.txt)
diff --git a/boards/arm/cxd56xx/spresense/CMakeLists.txt 
b/boards/arm/cxd56xx/spresense/CMakeLists.txt
index cafd30dc3db..952ab7d1d6e 100644
--- a/boards/arm/cxd56xx/spresense/CMakeLists.txt
+++ b/boards/arm/cxd56xx/spresense/CMakeLists.txt
@@ -31,9 +31,9 @@ endif()
 
 ExternalProject_Add(
   nuttx_post_build
-  SOURCE_DIR ${CMAKE_SOURCE_DIR}/tools/cxd56
-  INSTALL_DIR ${CMAKE_BINARY_DIR}/tools/cxd56
-  CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}
+  SOURCE_DIR ${NUTTX_DIR}/tools/cxd56
+  INSTALL_DIR ${NUTTX_BINARY_DIR}/tools/cxd56
+  CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${NUTTX_BINARY_DIR}
   USES_TERMINAL_CONFIGURE true
   USES_TERMINAL_BUILD true
   USES_TERMINAL_INSTALL true
@@ -43,5 +43,5 @@ add_custom_command(
   TARGET nuttx_post_build
   POST_BUILD
   BYPRODUCTS nuttx.spk
-  COMMAND ${CMAKE_BINARY_DIR}/bin/mkspk -c2 nuttx nuttx nuttx.spk
-  WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
+  COMMAND ${NUTTX_BINARY_DIR}/bin/mkspk -c2 nuttx nuttx nuttx.spk
+  WORKING_DIRECTORY ${NUTTX_BINARY_DIR})
diff --git a/boards/arm/rp2040/adafruit-feather-rp2040/CMakeLists.txt 
b/boards/arm/rp2040/adafruit-feather-rp2040/CMakeLists.txt
index 45f208c4b51..e566754ea5b 100644
--- a/boards/arm/rp2040/adafruit-feather-rp2040/CMakeLists.txt
+++ b/boards/arm/rp2040/adafruit-feather-rp2040/CMakeLists.txt
@@ -25,7 +25,7 @@ add_subdirectory(src)
 add_custom_target(
   nuttx_post_build
   DEPENDS nuttx
-  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+  WORKING_DIRECTORY ${NUTTX_BINARY_DIR}
   COMMENT "Regenerate nuttx.uf2")
 
 # The uf2 command to convert ELF/BIN to UF2
@@ -35,6 +35,6 @@ add_custom_command(
   COMMAND picotool ARGS uf2 convert --quiet -t elf nuttx nuttx.uf2
   COMMAND_EXPAND_LISTS
   COMMAND ${CMAKE_COMMAND} -E echo "nuttx.uf2" >>
-          ${CMAKE_BINARY_DIR}/nuttx.manifest
-  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+          ${NUTTX_BINARY_DIR}/nuttx.manifest
+  WORKING_DIRECTORY ${NUTTX_BINARY_DIR}
   COMMENT "Regenerate nuttx.uf2")
diff --git a/boards/arm/rp2040/adafruit-kb2040/CMakeLists.txt 
b/boards/arm/rp2040/adafruit-kb2040/CMakeLists.txt
index debfaf2f9bb..3ba15d9964e 100644
--- a/boards/arm/rp2040/adafruit-kb2040/CMakeLists.txt
+++ b/boards/arm/rp2040/adafruit-kb2040/CMakeLists.txt
@@ -25,7 +25,7 @@ add_subdirectory(src)
 add_custom_target(
   nuttx_post_build
   DEPENDS nuttx
-  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+  WORKING_DIRECTORY ${NUTTX_BINARY_DIR}
   COMMENT "Regenerate nuttx.uf2")
 
 # The uf2 command to convert ELF/BIN to UF2
@@ -35,6 +35,6 @@ add_custom_command(
   COMMAND picotool ARGS uf2 convert --quiet -t elf nuttx nuttx.uf2
   COMMAND_EXPAND_LISTS
   COMMAND ${CMAKE_COMMAND} -E echo "nuttx.uf2" >>
-          ${CMAKE_BINARY_DIR}/nuttx.manifest
-  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+          ${NUTTX_BINARY_DIR}/nuttx.manifest
+  WORKING_DIRECTORY ${NUTTX_BINARY_DIR}
   COMMENT "Regenerate nuttx.uf2")
diff --git a/boards/arm/rp2040/adafruit-qt-py-rp2040/CMakeLists.txt 
b/boards/arm/rp2040/adafruit-qt-py-rp2040/CMakeLists.txt
index 520c900fc1e..fda15ba61f6 100644
--- a/boards/arm/rp2040/adafruit-qt-py-rp2040/CMakeLists.txt
+++ b/boards/arm/rp2040/adafruit-qt-py-rp2040/CMakeLists.txt
@@ -25,7 +25,7 @@ add_subdirectory(src)
 add_custom_target(
   nuttx_post_build
   DEPENDS nuttx
-  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+  WORKING_DIRECTORY ${NUTTX_BINARY_DIR}
   COMMENT "Regenerate nuttx.uf2")
 
 # The uf2 command to convert ELF/BIN to UF2
@@ -35,6 +35,6 @@ add_custom_command(
   COMMAND picotool ARGS uf2 convert --quiet -t elf nuttx nuttx.uf2
   COMMAND_EXPAND_LISTS
   COMMAND ${CMAKE_COMMAND} -E echo "nuttx.uf2" >>
-          ${CMAKE_BINARY_DIR}/nuttx.manifest
-  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+          ${NUTTX_BINARY_DIR}/nuttx.manifest
+  WORKING_DIRECTORY ${NUTTX_BINARY_DIR}
   COMMENT "Regenerate nuttx.uf2")
diff --git a/boards/arm/rp2040/pimoroni-tiny2040/CMakeLists.txt 
b/boards/arm/rp2040/pimoroni-tiny2040/CMakeLists.txt
index 2a625241968..2771a4f29fa 100644
--- a/boards/arm/rp2040/pimoroni-tiny2040/CMakeLists.txt
+++ b/boards/arm/rp2040/pimoroni-tiny2040/CMakeLists.txt
@@ -25,7 +25,7 @@ add_subdirectory(src)
 add_custom_target(
   nuttx_post_build
   DEPENDS nuttx
-  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+  WORKING_DIRECTORY ${NUTTX_BINARY_DIR}
   COMMENT "Regenerate nuttx.uf2")
 
 # The uf2 command to convert ELF/BIN to UF2
@@ -35,6 +35,6 @@ add_custom_command(
   COMMAND picotool ARGS uf2 convert --quiet -t elf nuttx nuttx.uf2
   COMMAND_EXPAND_LISTS
   COMMAND ${CMAKE_COMMAND} -E echo "nuttx.uf2" >>
-          ${CMAKE_BINARY_DIR}/nuttx.manifest
-  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+          ${NUTTX_BINARY_DIR}/nuttx.manifest
+  WORKING_DIRECTORY ${NUTTX_BINARY_DIR}
   COMMENT "Regenerate nuttx.uf2")
diff --git a/boards/arm/rp2040/raspberrypi-pico-w/CMakeLists.txt 
b/boards/arm/rp2040/raspberrypi-pico-w/CMakeLists.txt
index c5d71976c47..fc5bef953de 100644
--- a/boards/arm/rp2040/raspberrypi-pico-w/CMakeLists.txt
+++ b/boards/arm/rp2040/raspberrypi-pico-w/CMakeLists.txt
@@ -25,7 +25,7 @@ add_subdirectory(src)
 add_custom_target(
   nuttx_post_build
   DEPENDS nuttx
-  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+  WORKING_DIRECTORY ${NUTTX_BINARY_DIR}
   COMMENT "Regenerate nuttx.uf2")
 
 # The uf2 command to convert ELF/BIN to UF2
@@ -35,6 +35,6 @@ add_custom_command(
   COMMAND picotool ARGS uf2 convert --quiet -t elf nuttx nuttx.uf2
   COMMAND_EXPAND_LISTS
   COMMAND ${CMAKE_COMMAND} -E echo "nuttx.uf2" >>
-          ${CMAKE_BINARY_DIR}/nuttx.manifest
-  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+          ${NUTTX_BINARY_DIR}/nuttx.manifest
+  WORKING_DIRECTORY ${NUTTX_BINARY_DIR}
   COMMENT "Regenerate nuttx.uf2")
diff --git a/boards/arm/rp2040/raspberrypi-pico/CMakeLists.txt 
b/boards/arm/rp2040/raspberrypi-pico/CMakeLists.txt
index d44e6572fd8..22243ddab6f 100644
--- a/boards/arm/rp2040/raspberrypi-pico/CMakeLists.txt
+++ b/boards/arm/rp2040/raspberrypi-pico/CMakeLists.txt
@@ -25,7 +25,7 @@ add_subdirectory(src)
 add_custom_target(
   nuttx_post_build
   DEPENDS nuttx
-  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+  WORKING_DIRECTORY ${NUTTX_BINARY_DIR}
   COMMENT "Regenerate nuttx.uf2")
 
 # The uf2 command to convert ELF/BIN to UF2
@@ -35,6 +35,6 @@ add_custom_command(
   COMMAND picotool ARGS uf2 convert --quiet -t elf nuttx nuttx.uf2
   COMMAND_EXPAND_LISTS
   COMMAND ${CMAKE_COMMAND} -E echo "nuttx.uf2" >>
-          ${CMAKE_BINARY_DIR}/nuttx.manifest
-  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+          ${NUTTX_BINARY_DIR}/nuttx.manifest
+  WORKING_DIRECTORY ${NUTTX_BINARY_DIR}
   COMMENT "Regenerate nuttx.uf2")
diff --git a/boards/arm/rp2040/seeed-xiao-rp2040/CMakeLists.txt 
b/boards/arm/rp2040/seeed-xiao-rp2040/CMakeLists.txt
index 05ec14f6c43..a7870eee95e 100644
--- a/boards/arm/rp2040/seeed-xiao-rp2040/CMakeLists.txt
+++ b/boards/arm/rp2040/seeed-xiao-rp2040/CMakeLists.txt
@@ -25,7 +25,7 @@ add_subdirectory(src)
 add_custom_target(
   nuttx_post_build
   DEPENDS nuttx
-  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+  WORKING_DIRECTORY ${NUTTX_BINARY_DIR}
   COMMENT "Regenerate nuttx.uf2")
 
 # The uf2 command to convert ELF/BIN to UF2
@@ -35,6 +35,6 @@ add_custom_command(
   COMMAND picotool ARGS uf2 convert --quiet -t elf nuttx nuttx.uf2
   COMMAND_EXPAND_LISTS
   COMMAND ${CMAKE_COMMAND} -E echo "nuttx.uf2" >>
-          ${CMAKE_BINARY_DIR}/nuttx.manifest
-  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+          ${NUTTX_BINARY_DIR}/nuttx.manifest
+  WORKING_DIRECTORY ${NUTTX_BINARY_DIR}
   COMMENT "Regenerate nuttx.uf2")
diff --git a/boards/arm/rp2040/w5500-evb-pico/CMakeLists.txt 
b/boards/arm/rp2040/w5500-evb-pico/CMakeLists.txt
index a985c8352fe..fec13242861 100644
--- a/boards/arm/rp2040/w5500-evb-pico/CMakeLists.txt
+++ b/boards/arm/rp2040/w5500-evb-pico/CMakeLists.txt
@@ -25,7 +25,7 @@ add_subdirectory(src)
 add_custom_target(
   nuttx_post_build
   DEPENDS nuttx
-  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+  WORKING_DIRECTORY ${NUTTX_BINARY_DIR}
   COMMENT "Regenerate nuttx.uf2")
 
 # The uf2 command to convert ELF/BIN to UF2
@@ -35,6 +35,6 @@ add_custom_command(
   COMMAND picotool ARGS uf2 convert --quiet -t elf nuttx nuttx.uf2
   COMMAND_EXPAND_LISTS
   COMMAND ${CMAKE_COMMAND} -E echo "nuttx.uf2" >>
-          ${CMAKE_BINARY_DIR}/nuttx.manifest
-  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+          ${NUTTX_BINARY_DIR}/nuttx.manifest
+  WORKING_DIRECTORY ${NUTTX_BINARY_DIR}
   COMMENT "Regenerate nuttx.uf2")
diff --git a/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/CMakeLists.txt 
b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/CMakeLists.txt
index 54b1c9254b3..ce5fbb798b3 100644
--- a/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/CMakeLists.txt
+++ b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/CMakeLists.txt
@@ -25,7 +25,7 @@ add_subdirectory(src)
 add_custom_target(
   nuttx_post_build
   DEPENDS nuttx
-  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+  WORKING_DIRECTORY ${NUTTX_BINARY_DIR}
   COMMENT "Regenerate nuttx.uf2")
 
 # The uf2 command to convert ELF/BIN to UF2
@@ -35,6 +35,6 @@ add_custom_command(
   COMMAND picotool ARGS uf2 convert --quiet -t elf nuttx nuttx.uf2
   COMMAND_EXPAND_LISTS
   COMMAND ${CMAKE_COMMAND} -E echo "nuttx.uf2" >>
-          ${CMAKE_BINARY_DIR}/nuttx.manifest
-  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+          ${NUTTX_BINARY_DIR}/nuttx.manifest
+  WORKING_DIRECTORY ${NUTTX_BINARY_DIR}
   COMMENT "Regenerate nuttx.uf2")
diff --git a/boards/arm/rp2040/waveshare-rp2040-zero/CMakeLists.txt 
b/boards/arm/rp2040/waveshare-rp2040-zero/CMakeLists.txt
index cdbdccd24b6..c648e1cab7c 100644
--- a/boards/arm/rp2040/waveshare-rp2040-zero/CMakeLists.txt
+++ b/boards/arm/rp2040/waveshare-rp2040-zero/CMakeLists.txt
@@ -25,7 +25,7 @@ add_subdirectory(src)
 add_custom_target(
   nuttx_post_build
   DEPENDS nuttx
-  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+  WORKING_DIRECTORY ${NUTTX_BINARY_DIR}
   COMMENT "Regenerate nuttx.uf2")
 
 # The uf2 command to convert ELF/BIN to UF2
@@ -35,6 +35,6 @@ add_custom_command(
   COMMAND picotool ARGS uf2 convert --quiet -t elf nuttx nuttx.uf2
   COMMAND_EXPAND_LISTS
   COMMAND ${CMAKE_COMMAND} -E echo "nuttx.uf2" >>
-          ${CMAKE_BINARY_DIR}/nuttx.manifest
-  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+          ${NUTTX_BINARY_DIR}/nuttx.manifest
+  WORKING_DIRECTORY ${NUTTX_BINARY_DIR}
   COMMENT "Regenerate nuttx.uf2")
diff --git a/boards/arm/rp23xx/pimoroni-pico-2-plus/CMakeLists.txt 
b/boards/arm/rp23xx/pimoroni-pico-2-plus/CMakeLists.txt
index 1951f57cf68..565b7191233 100644
--- a/boards/arm/rp23xx/pimoroni-pico-2-plus/CMakeLists.txt
+++ b/boards/arm/rp23xx/pimoroni-pico-2-plus/CMakeLists.txt
@@ -25,7 +25,7 @@ add_subdirectory(src)
 add_custom_target(
   nuttx_post_build
   DEPENDS nuttx
-  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+  WORKING_DIRECTORY ${NUTTX_BINARY_DIR}
   COMMENT "Regenerate nuttx.uf2")
 
 # The uf2 command to convert ELF/BIN to UF2
@@ -35,6 +35,6 @@ add_custom_command(
   COMMAND picotool ARGS uf2 convert --quiet -t elf nuttx nuttx.uf2
   COMMAND_EXPAND_LISTS
   COMMAND ${CMAKE_COMMAND} -E echo "nuttx.uf2" >>
-          ${CMAKE_BINARY_DIR}/nuttx.manifest
-  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+          ${NUTTX_BINARY_DIR}/nuttx.manifest
+  WORKING_DIRECTORY ${NUTTX_BINARY_DIR}
   COMMENT "Regenerate nuttx.uf2")
diff --git a/boards/arm/rp23xx/pimoroni-pico-plus-2-w/CMakeLists.txt 
b/boards/arm/rp23xx/pimoroni-pico-plus-2-w/CMakeLists.txt
index d9f79aced51..f10d16bbca0 100644
--- a/boards/arm/rp23xx/pimoroni-pico-plus-2-w/CMakeLists.txt
+++ b/boards/arm/rp23xx/pimoroni-pico-plus-2-w/CMakeLists.txt
@@ -25,7 +25,7 @@ add_subdirectory(src)
 add_custom_target(
   nuttx_post_build
   DEPENDS nuttx
-  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+  WORKING_DIRECTORY ${NUTTX_BINARY_DIR}
   COMMENT "Regenerate nuttx.uf2")
 
 # The uf2 command to convert ELF/BIN to UF2
@@ -35,6 +35,6 @@ add_custom_command(
   COMMAND picotool ARGS uf2 convert --quiet -t elf nuttx nuttx.uf2
   COMMAND_EXPAND_LISTS
   COMMAND ${CMAKE_COMMAND} -E echo "nuttx.uf2" >>
-          ${CMAKE_BINARY_DIR}/nuttx.manifest
-  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+          ${NUTTX_BINARY_DIR}/nuttx.manifest
+  WORKING_DIRECTORY ${NUTTX_BINARY_DIR}
   COMMENT "Regenerate nuttx.uf2")
diff --git a/boards/arm/rp23xx/raspberrypi-pico-2/CMakeLists.txt 
b/boards/arm/rp23xx/raspberrypi-pico-2/CMakeLists.txt
index 3e953a497c8..2ab6340ee11 100644
--- a/boards/arm/rp23xx/raspberrypi-pico-2/CMakeLists.txt
+++ b/boards/arm/rp23xx/raspberrypi-pico-2/CMakeLists.txt
@@ -25,7 +25,7 @@ add_subdirectory(src)
 add_custom_target(
   nuttx_post_build
   DEPENDS nuttx
-  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+  WORKING_DIRECTORY ${NUTTX_BINARY_DIR}
   COMMENT "Regenerate nuttx.uf2")
 
 # The uf2 command to convert ELF/BIN to UF2
@@ -35,6 +35,6 @@ add_custom_command(
   COMMAND picotool ARGS uf2 convert --quiet -t elf nuttx nuttx.uf2
   COMMAND_EXPAND_LISTS
   COMMAND ${CMAKE_COMMAND} -E echo "nuttx.uf2" >>
-          ${CMAKE_BINARY_DIR}/nuttx.manifest
-  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+          ${NUTTX_BINARY_DIR}/nuttx.manifest
+  WORKING_DIRECTORY ${NUTTX_BINARY_DIR}
   COMMENT "Regenerate nuttx.uf2")
diff --git a/boards/arm/rp23xx/xiao-rp2350/CMakeLists.txt 
b/boards/arm/rp23xx/xiao-rp2350/CMakeLists.txt
index 7fd0eec95dd..1178fc3d1a2 100644
--- a/boards/arm/rp23xx/xiao-rp2350/CMakeLists.txt
+++ b/boards/arm/rp23xx/xiao-rp2350/CMakeLists.txt
@@ -25,7 +25,7 @@ add_subdirectory(src)
 add_custom_target(
   nuttx_post_build
   DEPENDS nuttx
-  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+  WORKING_DIRECTORY ${NUTTX_BINARY_DIR}
   COMMENT "Regenerate nuttx.uf2")
 
 # The uf2 command to convert ELF/BIN to UF2
@@ -35,6 +35,6 @@ add_custom_command(
   COMMAND picotool ARGS uf2 convert --quiet -t elf nuttx nuttx.uf2
   COMMAND_EXPAND_LISTS
   COMMAND ${CMAKE_COMMAND} -E echo "nuttx.uf2" >>
-          ${CMAKE_BINARY_DIR}/nuttx.manifest
-  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+          ${NUTTX_BINARY_DIR}/nuttx.manifest
+  WORKING_DIRECTORY ${NUTTX_BINARY_DIR}
   COMMENT "Regenerate nuttx.uf2")
diff --git a/boards/risc-v/k230/canmv230/src/CMakeLists.txt 
b/boards/risc-v/k230/canmv230/src/CMakeLists.txt
index e4b1655f641..9837be1f209 100644
--- a/boards/risc-v/k230/canmv230/src/CMakeLists.txt
+++ b/boards/risc-v/k230/canmv230/src/CMakeLists.txt
@@ -23,8 +23,8 @@
 set(SRCS canmv_init.c)
 
 if(CONFIG_BUILD_KERNEL)
-  if(EXISTS ${CMAKE_BINARY_DIR}/romfs_boot.c)
-    list(APPEND SRCS ${CMAKE_BINARY_DIR}/romfs_boot.c)
+  if(EXISTS ${NUTTX_BINARY_DIR}/romfs_boot.c)
+    list(APPEND SRCS ${NUTTX_BINARY_DIR}/romfs_boot.c)
   else()
     list(APPEND SRCS romfs_stub.c)
   endif()
diff --git a/boards/risc-v/rp23xx-rv/raspberrypi-pico-2-rv/CMakeLists.txt 
b/boards/risc-v/rp23xx-rv/raspberrypi-pico-2-rv/CMakeLists.txt
index 29240c67ff2..fdfaeb6b8b9 100644
--- a/boards/risc-v/rp23xx-rv/raspberrypi-pico-2-rv/CMakeLists.txt
+++ b/boards/risc-v/rp23xx-rv/raspberrypi-pico-2-rv/CMakeLists.txt
@@ -25,7 +25,7 @@ add_subdirectory(src)
 add_custom_target(
   nuttx_post_build
   DEPENDS nuttx
-  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+  WORKING_DIRECTORY ${NUTTX_BINARY_DIR}
   COMMENT "Regenerate nuttx.uf2")
 
 # The uf2 command to convert ELF/BIN to UF2
@@ -35,6 +35,6 @@ add_custom_command(
   COMMAND picotool ARGS uf2 convert --quiet -t elf nuttx nuttx.uf2
   COMMAND_EXPAND_LISTS
   COMMAND ${CMAKE_COMMAND} -E echo "nuttx.uf2" >>
-          ${CMAKE_BINARY_DIR}/nuttx.manifest
-  WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+          ${NUTTX_BINARY_DIR}/nuttx.manifest
+  WORKING_DIRECTORY ${NUTTX_BINARY_DIR}
   COMMENT "Regenerate nuttx.uf2")
diff --git a/boards/sim/sim/sim/CMakeLists.txt 
b/boards/sim/sim/sim/CMakeLists.txt
index 5e1c6cf2e42..ea42a44db60 100644
--- a/boards/sim/sim/sim/CMakeLists.txt
+++ b/boards/sim/sim/sim/CMakeLists.txt
@@ -26,7 +26,7 @@ if(CONFIG_HOST_LINUX)
   add_custom_target(
     nuttx_post_build
     DEPENDS nuttx
-    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+    WORKING_DIRECTORY ${NUTTX_BINARY_DIR}
     COMMAND ${CMAKE_COMMAND} -E make_directory sim-pac
     COMMAND ${CMAKE_COMMAND} -E make_directory sim-pac/libs
     COMMAND ${CMAKE_COMMAND} -E copy nuttx sim-pac/nuttx
@@ -34,8 +34,7 @@ if(CONFIG_HOST_LINUX)
             '{}' cp -v '{}' sim-pac/libs
     COMMAND readelf -l nuttx | grep "program interpreter" | awk -F':' '{print
                 $$2}' | cut -d"]" -f1 | xargs -I '{}' cp -v '{}' sim-pac
-    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/tools/simlaunch.sh
-            sim-pac
+    COMMAND ${CMAKE_COMMAND} -E copy ${NUTTX_DIR}/tools/simlaunch.sh sim-pac
     COMMAND tar -czf nuttx.tgz sim-pac
     COMMENT "Pac SIM with dynamic libs in nuttx.tgz")
 endif()
diff --git a/boards/x86_64/qemu/qemu-intel64/src/CMakeLists.txt 
b/boards/x86_64/qemu/qemu-intel64/src/CMakeLists.txt
index 16e2d421b3f..3852dd86afe 100644
--- a/boards/x86_64/qemu/qemu-intel64/src/CMakeLists.txt
+++ b/boards/x86_64/qemu/qemu-intel64/src/CMakeLists.txt
@@ -35,7 +35,7 @@ if(CONFIG_BUILD_KERNEL)
   # depend on (cycle).
   add_custom_command(
     OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/romfs_boot.c
-    COMMAND genromfs -f romfs.img -d ${CMAKE_BINARY_DIR}/bin -V NuttXBootVol
+    COMMAND genromfs -f romfs.img -d ${NUTTX_BINARY_DIR}/bin -V NuttXBootVol
     COMMAND xxd -i romfs.img romfs_boot.c
     DEPENDS $<TARGET_PROPERTY:nuttx,NUTTX_LOADABLE_APPS>
     WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
diff --git a/cmake/menuconfig.cmake b/cmake/menuconfig.cmake
index bf515c14db3..088612885b6 100644
--- a/cmake/menuconfig.cmake
+++ b/cmake/menuconfig.cmake
@@ -24,9 +24,9 @@
 # changes)
 
 set(KCONFIG_ENV
-    "KCONFIG_CONFIG=${CMAKE_BINARY_DIR}/.config" "EXTERNALDIR=dummy"
+    "KCONFIG_CONFIG=${NUTTX_BINARY_DIR}/.config" "EXTERNALDIR=dummy"
     "APPSDIR=${NUTTX_APPS_DIR}" "DRIVERS_PLATFORM_DIR=dummy"
-    "APPSBINDIR=${NUTTX_APPS_BINDIR}" "BINDIR=${CMAKE_BINARY_DIR}")
+    "APPSBINDIR=${NUTTX_APPS_BINDIR}" "BINDIR=${NUTTX_BINARY_DIR}")
 
 # Use qconfig instead of menuconfig since PowerShell not support curses
 # redirection
@@ -41,7 +41,7 @@ add_custom_target(
   menuconfig
   COMMAND ${CMAKE_COMMAND} -E env ${KCONFIG_ENV} ${MENUCONFIG}
   COMMAND ${CMAKE_COMMAND} -E remove -f
-          ${CMAKE_BINARY_DIR}/include/nuttx/config.h # invalidate existing
+          ${NUTTX_BINARY_DIR}/include/nuttx/config.h # invalidate existing
                                                      # config
   COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_PARENT_LIST_FILE}
   WORKING_DIRECTORY ${NUTTX_DIR}
@@ -53,20 +53,20 @@ add_custom_target(
   qconfig
   COMMAND ${CMAKE_COMMAND} -E env ${KCONFIG_ENV} guiconfig
   COMMAND ${CMAKE_COMMAND} -E remove -f
-          ${CMAKE_BINARY_DIR}/include/nuttx/config.h # invalidate existing
+          ${NUTTX_BINARY_DIR}/include/nuttx/config.h # invalidate existing
                                                      # config
   COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_PARENT_LIST_FILE}
   WORKING_DIRECTORY ${NUTTX_DIR}
   USES_TERMINAL)
 
-# Refresh ${CMAKE_BINARY_DIR}/.config in place (set defaults, satisfy deps),
+# Refresh ${NUTTX_BINARY_DIR}/.config in place (set defaults, satisfy deps),
 # like "make olddefconfig". Use after hand-editing .config; does not copy from
 # board defconfig (see resetconfig for that).
 add_custom_target(
   olddefconfig
   COMMAND ${CMAKE_COMMAND} -E env ${KCONFIG_ENV} olddefconfig
   COMMAND ${CMAKE_COMMAND} -E remove -f
-          ${CMAKE_BINARY_DIR}/include/nuttx/config.h
+          ${NUTTX_BINARY_DIR}/include/nuttx/config.h
   COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_PARENT_LIST_FILE}
   WORKING_DIRECTORY ${NUTTX_DIR})
 
@@ -74,10 +74,10 @@ add_custom_target(
 add_custom_target(
   resetconfig
   COMMAND ${CMAKE_COMMAND} -E copy ${NUTTX_DEFCONFIG}
-          ${CMAKE_BINARY_DIR}/.config
+          ${NUTTX_BINARY_DIR}/.config
   COMMAND ${CMAKE_COMMAND} -E env ${KCONFIG_ENV} olddefconfig
-  COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/.config
-          ${CMAKE_BINARY_DIR}/.config.orig
+  COMMAND ${CMAKE_COMMAND} -E copy ${NUTTX_BINARY_DIR}/.config
+          ${NUTTX_BINARY_DIR}/.config.orig
   COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_PARENT_LIST_FILE}
   WORKING_DIRECTORY ${NUTTX_DIR})
 
@@ -88,26 +88,26 @@ add_custom_target(
 add_custom_target(
   distcleanconfig
   COMMAND
-    ${CMAKE_COMMAND} -E remove -f ${CMAKE_BINARY_DIR}/.config
-    ${CMAKE_BINARY_DIR}/.config.orig ${CMAKE_BINARY_DIR}/.config.prev
-    ${CMAKE_BINARY_DIR}/include/nuttx/config.h
+    ${CMAKE_COMMAND} -E remove -f ${NUTTX_BINARY_DIR}/.config
+    ${NUTTX_BINARY_DIR}/.config.orig ${NUTTX_BINARY_DIR}/.config.prev
+    ${NUTTX_BINARY_DIR}/include/nuttx/config.h
   WORKING_DIRECTORY ${NUTTX_DIR})
 
 # utility target to refresh .config from board's defconfig for GITHUB
 add_custom_target(
   refreshsilent
-  COMMAND ${CMAKE_COMMAND} -E remove -f ${CMAKE_BINARY_DIR}/SAVEconfig
-  COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/.config
-          ${CMAKE_BINARY_DIR}/SAVEconfig
-  COMMAND ${CMAKE_COMMAND} -E remove -f ${CMAKE_BINARY_DIR}/.config
+  COMMAND ${CMAKE_COMMAND} -E remove -f ${NUTTX_BINARY_DIR}/SAVEconfig
+  COMMAND ${CMAKE_COMMAND} -E copy ${NUTTX_BINARY_DIR}/.config
+          ${NUTTX_BINARY_DIR}/SAVEconfig
+  COMMAND ${CMAKE_COMMAND} -E remove -f ${NUTTX_BINARY_DIR}/.config
   COMMAND ${CMAKE_COMMAND} -E copy ${NUTTX_DEFCONFIG}
-          ${CMAKE_BINARY_DIR}/.config
+          ${NUTTX_BINARY_DIR}/.config
   COMMAND ${CMAKE_COMMAND} -E env ${KCONFIG_ENV} olddefconfig
   COMMAND ${CMAKE_COMMAND} -E env ${KCONFIG_ENV} savedefconfig --out
-          ${CMAKE_BINARY_DIR}/defconfig.tmp
+          ${NUTTX_BINARY_DIR}/defconfig.tmp
   COMMAND ${CMAKE_COMMAND} -P ${NUTTX_DIR}/cmake/savedefconfig.cmake
-          ${CMAKE_BINARY_DIR}/.config ${CMAKE_BINARY_DIR}/defconfig.tmp
-  COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/defconfig
+          ${NUTTX_BINARY_DIR}/.config ${NUTTX_BINARY_DIR}/defconfig.tmp
+  COMMAND ${CMAKE_COMMAND} -E copy_if_different ${NUTTX_BINARY_DIR}/defconfig
           ${NUTTX_DEFCONFIG}
   WORKING_DIRECTORY ${NUTTX_DIR})
 
@@ -115,16 +115,15 @@ add_custom_target(
 add_custom_target(
   savedefconfig
   COMMAND ${CMAKE_COMMAND} -E env ${KCONFIG_ENV} savedefconfig --out
-          ${CMAKE_BINARY_DIR}/defconfig.tmp
+          ${NUTTX_BINARY_DIR}/defconfig.tmp
   COMMAND ${CMAKE_COMMAND} -P ${NUTTX_DIR}/cmake/savedefconfig.cmake
-          ${CMAKE_BINARY_DIR}/.config ${CMAKE_BINARY_DIR}/defconfig.tmp
+          ${NUTTX_BINARY_DIR}/.config ${NUTTX_BINARY_DIR}/defconfig.tmp
   COMMAND
-    ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/tools/process_config.py
-    postprocess ${CMAKE_BINARY_DIR}/config_tree.json
-    ${CMAKE_BINARY_DIR}/defconfig.orig ${CMAKE_BINARY_DIR}/defconfig
-    ${CMAKE_BINARY_DIR}/defconfig.post
+    ${Python3_EXECUTABLE} ${NUTTX_DIR}/tools/process_config.py postprocess
+    ${NUTTX_BINARY_DIR}/config_tree.json ${NUTTX_BINARY_DIR}/defconfig.orig
+    ${NUTTX_BINARY_DIR}/defconfig ${NUTTX_BINARY_DIR}/defconfig.post
   COMMAND ${CMAKE_COMMAND} -E copy_if_different
-          ${CMAKE_BINARY_DIR}/defconfig.post ${NUTTX_DEFCONFIG}
+          ${NUTTX_BINARY_DIR}/defconfig.post ${NUTTX_DEFCONFIG}
   COMMAND ${CMAKE_COMMAND} -E copy_if_different
-          ${CMAKE_BINARY_DIR}/defconfig.post ${NUTTX_ORIG_DEFCONFIG}
+          ${NUTTX_BINARY_DIR}/defconfig.post ${NUTTX_ORIG_DEFCONFIG}
   WORKING_DIRECTORY ${NUTTX_DIR})
diff --git a/cmake/nuttx_add_application.cmake 
b/cmake/nuttx_add_application.cmake
index 12fc54de8d7..131808739b5 100644
--- a/cmake/nuttx_add_application.cmake
+++ b/cmake/nuttx_add_application.cmake
@@ -30,12 +30,12 @@ define_property(
 
 # Create a directories for the application binaries `bin` for stripped binaries
 # `bin_debug` for debug binaries
-if(NOT EXISTS ${CMAKE_BINARY_DIR}/bin)
-  file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
+if(NOT EXISTS ${NUTTX_BINARY_DIR}/bin)
+  file(MAKE_DIRECTORY ${NUTTX_BINARY_DIR}/bin)
 endif()
 
-if(NOT EXISTS ${CMAKE_BINARY_DIR}/bin_debug)
-  file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/bin_debug)
+if(NOT EXISTS ${NUTTX_BINARY_DIR}/bin_debug)
+  file(MAKE_DIRECTORY ${NUTTX_BINARY_DIR}/bin_debug)
 endif()
 
 # ~~~
@@ -176,7 +176,7 @@ function(nuttx_add_application)
           POST_BUILD
           COMMAND
             # add default link option
-            ${CMAKE_LD} -T ${CMAKE_BINARY_DIR}/gnu-elf.ld
+            ${CMAKE_LD} -T ${NUTTX_BINARY_DIR}/gnu-elf.ld
             # add global MOD link option if dynlib link
             
$<$<BOOL:${DYNLIB_ELF_MODE}>:$<TARGET_PROPERTY:nuttx_global,NUTTX_MOD_APP_LINK_OPTIONS>>
             # add global ELF link option if m&kernel link
@@ -195,19 +195,19 @@ function(nuttx_add_application)
             $<TARGET_FILE:${TARGET}>
             $<$<NOT:$<BOOL:${USE_LINKER}>>:-Wl,>--no-whole-archive
             $<$<NOT:$<BOOL:${USE_LINKER}>>:-Wl,>--end-group -o
-            ${CMAKE_BINARY_DIR}/bin_debug/${ELF_NAME}
+            ${NUTTX_BINARY_DIR}/bin_debug/${ELF_NAME}
           COMMAND
-            ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/bin_debug/${ELF_NAME}
-            ${CMAKE_BINARY_DIR}/bin/${ELF_NAME}
+            ${CMAKE_COMMAND} -E copy ${NUTTX_BINARY_DIR}/bin_debug/${ELF_NAME}
+            ${NUTTX_BINARY_DIR}/bin/${ELF_NAME}
             # keep the application attribute symbols through strip so the 
binary
             # loader can still read them, see NX_KEEP in Application.mk
           COMMAND
             ${CMAKE_STRIP} -K nx_stacksize -K nx_priority -K nx_uid -K nx_gid 
-K
-            nx_mode ${CMAKE_BINARY_DIR}/bin/${ELF_NAME}
+            nx_mode ${NUTTX_BINARY_DIR}/bin/${ELF_NAME}
             # match the Application.mk install rule: ld -r output is not marked
             # executable, but filesystem images built from bin/ must carry the
             # execute permission
-          COMMAND chmod +x ${CMAKE_BINARY_DIR}/bin/${ELF_NAME}
+          COMMAND chmod +x ${NUTTX_BINARY_DIR}/bin/${ELF_NAME}
           COMMENT "Building ELF:${ELF_NAME}"
           COMMAND_EXPAND_LISTS)
       else()
diff --git a/cmake/nuttx_add_library.cmake b/cmake/nuttx_add_library.cmake
index c9c82b676d4..d773375fb7d 100644
--- a/cmake/nuttx_add_library.cmake
+++ b/cmake/nuttx_add_library.cmake
@@ -37,8 +37,7 @@ function(nuttx_add_library_internal target)
 
   # add main include directories
   target_include_directories(
-    ${target} SYSTEM PRIVATE ${CMAKE_SOURCE_DIR}/include
-                             ${CMAKE_BINARY_DIR}/include)
+    ${target} SYSTEM PRIVATE ${NUTTX_DIR}/include ${NUTTX_BINARY_DIR}/include)
 
   # Set global compile options & definitions We use the "nuttx" target to hold
   # these properties so that libraries added after this property is set can 
read
diff --git a/cmake/nuttx_add_romfs.cmake b/cmake/nuttx_add_romfs.cmake
index 404cbd7638e..7633872d037 100644
--- a/cmake/nuttx_add_romfs.cmake
+++ b/cmake/nuttx_add_romfs.cmake
@@ -235,7 +235,7 @@ function(nuttx_add_cromfs)
             copy_directory ${PATH} cromfs_${NAME} \; fi
     COMMAND if \[ \"${FILES}\" != \"\" \]; then ${CMAKE_COMMAND} -E copy
             ${FILES} cromfs_${NAME} \; fi
-    COMMAND ${CMAKE_BINARY_DIR}/bin_host/gencromfs cromfs_${NAME}
+    COMMAND ${NUTTX_BINARY_DIR}/bin_host/gencromfs cromfs_${NAME}
             cromfs_${NAME}.c
     DEPENDS ${DEPENDS})
 
@@ -353,12 +353,12 @@ function(process_all_directory_romfs)
     # Build mkpasswd.c as a host binary in the CMake build directory and keep
     # the source tree clean.
     set(MKPASSWD_SRC ${NUTTX_DIR}/tools/mkpasswd.c)
-    set(MKPASSWD_BIN ${CMAKE_BINARY_DIR}/tools/mkpasswd${HOST_EXE_SUFFIX})
+    set(MKPASSWD_BIN ${NUTTX_BINARY_DIR}/tools/mkpasswd${HOST_EXE_SUFFIX})
 
     if(NOT TARGET build_host_mkpasswd)
       add_custom_command(
         OUTPUT ${MKPASSWD_BIN}
-        COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/tools
+        COMMAND ${CMAKE_COMMAND} -E make_directory ${NUTTX_BINARY_DIR}/tools
         COMMAND ${HOST_CC} -o ${MKPASSWD_BIN} ${MKPASSWD_SRC}
         DEPENDS ${MKPASSWD_SRC}
         COMMENT "Building host tool: mkpasswd")
diff --git a/cmake/nuttx_add_symtab.cmake b/cmake/nuttx_add_symtab.cmake
index b3f3b79e40d..b4a23e1a76b 100644
--- a/cmake/nuttx_add_symtab.cmake
+++ b/cmake/nuttx_add_symtab.cmake
@@ -87,7 +87,7 @@ function(nuttx_add_symtab)
     DEPENDS symtab_${NAME}_dat)
 
   # generate code which instantiates the symbol table
-  configure_file(${CMAKE_SOURCE_DIR}/cmake/symtab.c.in symtab_${NAME}.c @ONLY)
+  configure_file(${NUTTX_DIR}/cmake/symtab.c.in symtab_${NAME}.c @ONLY)
 
   # define an internal library to build the symtab file on its own
   add_library(symtab_${NAME} OBJECT
diff --git a/cmake/nuttx_export_header.cmake b/cmake/nuttx_export_header.cmake
index ac1c5619d6e..8c3f0625ed7 100644
--- a/cmake/nuttx_export_header.cmake
+++ b/cmake/nuttx_export_header.cmake
@@ -111,7 +111,7 @@ function(nuttx_export_header)
     ${ARGN})
 
   # destination directory to be exported by install
-  set(EXPORT_PATH_PREFIX ${CMAKE_BINARY_DIR}/staging/include/${TARGET})
+  set(EXPORT_PATH_PREFIX ${NUTTX_BINARY_DIR}/staging/include/${TARGET})
   # destination directory origin compile
   set(INCLUDE_PATH_PREFIX ${NUTTX_APPS_BINDIR}/include/${TARGET})
 
diff --git a/cmake/nuttx_extensions.cmake b/cmake/nuttx_extensions.cmake
index 4bb8314fd88..a66e02d9636 100644
--- a/cmake/nuttx_extensions.cmake
+++ b/cmake/nuttx_extensions.cmake
@@ -464,11 +464,11 @@ add_custom_target(
   COMMAND
     ${CMAKE_COMMAND} -E echo
     "'$<TARGET_PROPERTY:nuttx_target_interface,ALL_TARGETS>'" >> target_dump
-  WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
+  WORKING_DIRECTORY ${NUTTX_BINARY_DIR})
 
 # Generate host tools CMake binary directory
-execute_process(COMMAND ${CMAKE_COMMAND} -B ${CMAKE_BINARY_DIR}/bin_host -S
-                        ${CMAKE_SOURCE_DIR}/tools)
+execute_process(COMMAND ${CMAKE_COMMAND} -B ${NUTTX_BINARY_DIR}/bin_host -S
+                        ${NUTTX_DIR}/tools)
 
 # Function: nuttx_build_host_target
 #
@@ -481,6 +481,6 @@ function(nuttx_build_host_target target)
   endif()
   add_custom_target(
     ${target}
-    COMMAND cmake --build ${CMAKE_BINARY_DIR}/bin_host --target ${target}
+    COMMAND cmake --build ${NUTTX_BINARY_DIR}/bin_host --target ${target}
     SOURCES ${ARGN})
 endfunction()
diff --git a/cmake/nuttx_generate_headers.cmake 
b/cmake/nuttx_generate_headers.cmake
index 452e33b1948..01982ca8bce 100644
--- a/cmake/nuttx_generate_headers.cmake
+++ b/cmake/nuttx_generate_headers.cmake
@@ -22,12 +22,12 @@
 
 # setup target to generate config.h and version.h from mkconfig and mkversion
 
-if(NOT EXISTS ${CMAKE_BINARY_DIR}/include)
-  file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/include)
+if(NOT EXISTS ${NUTTX_BINARY_DIR}/include)
+  file(MAKE_DIRECTORY ${NUTTX_BINARY_DIR}/include)
 endif()
 
-if(NOT EXISTS ${CMAKE_BINARY_DIR}/include/nuttx)
-  file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/include/nuttx)
+if(NOT EXISTS ${NUTTX_BINARY_DIR}/include/nuttx)
+  file(MAKE_DIRECTORY ${NUTTX_BINARY_DIR}/include/nuttx)
 endif()
 
 include(nuttx_mkconfig)
@@ -35,40 +35,40 @@ include(nuttx_mkversion)
 
 # Setup symbolic link generation
 
-if(NOT EXISTS ${CMAKE_BINARY_DIR}/include_apps)
+if(NOT EXISTS ${NUTTX_BINARY_DIR}/include_apps)
   execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory
-                          ${CMAKE_BINARY_DIR}/include_apps)
+                          ${NUTTX_BINARY_DIR}/include_apps)
 endif()
 
-if(NOT EXISTS ${CMAKE_BINARY_DIR}/include/arch)
+if(NOT EXISTS ${NUTTX_BINARY_DIR}/include/arch)
   execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory
-                          ${CMAKE_BINARY_DIR}/include/arch)
+                          ${NUTTX_BINARY_DIR}/include/arch)
   file(GLOB CONTENTS ${NUTTX_DIR}/arch/${CONFIG_ARCH}/include/*)
   foreach(ARCH_INCDIR ${CONTENTS})
     get_filename_component(SUB_ELEMENT ${ARCH_INCDIR} NAME)
     
nuttx_create_symlink(${NUTTX_DIR}/arch/${CONFIG_ARCH}/include/${SUB_ELEMENT}
-                         ${CMAKE_BINARY_DIR}/include/arch/${SUB_ELEMENT})
+                         ${NUTTX_BINARY_DIR}/include/arch/${SUB_ELEMENT})
   endforeach()
 endif()
 
-if(NOT EXISTS ${CMAKE_BINARY_DIR}/include/arch/board)
+if(NOT EXISTS ${NUTTX_BINARY_DIR}/include/arch/board)
   if(EXISTS ${NUTTX_BOARD_DIR}/include)
     nuttx_create_symlink(${NUTTX_BOARD_DIR}/include
-                         ${CMAKE_BINARY_DIR}/include/arch/board)
+                         ${NUTTX_BINARY_DIR}/include/arch/board)
   elseif(EXISTS ${NUTTX_BOARD_DIR}/../common/include)
     nuttx_create_symlink(${NUTTX_BOARD_DIR}/../common/include
-                         ${CMAKE_BINARY_DIR}/include/arch/board)
+                         ${NUTTX_BINARY_DIR}/include/arch/board)
   endif()
 endif()
 
-if(NOT EXISTS ${CMAKE_BINARY_DIR}/include/arch/chip)
+if(NOT EXISTS ${NUTTX_BINARY_DIR}/include/arch/chip)
   if(CONFIG_ARCH_CHIP_CUSTOM)
     nuttx_create_symlink(${NUTTX_CHIP_ABS_DIR}/include
-                         ${CMAKE_BINARY_DIR}/include/arch/chip)
+                         ${NUTTX_BINARY_DIR}/include/arch/chip)
   else()
     nuttx_create_symlink(
       ${NUTTX_DIR}/arch/${CONFIG_ARCH}/include/${CONFIG_ARCH_CHIP}
-      ${CMAKE_BINARY_DIR}/include/arch/chip)
+      ${NUTTX_BINARY_DIR}/include/arch/chip)
   endif()
 endif()
 
@@ -81,9 +81,9 @@ endif()
 
 if(CONFIG_ARCH_STDARG_H)
   nuttx_create_symlink(${NUTTX_DIR}/include/nuttx/lib/stdarg.h
-                       ${CMAKE_BINARY_DIR}/include/stdarg.h)
+                       ${NUTTX_BINARY_DIR}/include/stdarg.h)
 else()
-  file(REMOVE ${CMAKE_BINARY_DIR}/include/stdarg.h)
+  file(REMOVE ${NUTTX_BINARY_DIR}/include/stdarg.h)
 endif()
 
 # Target used to copy include/nuttx/lib/math.h.  If CONFIG_ARCH_MATH_H is
@@ -107,9 +107,9 @@ endif()
 
 if(NEED_MATH_H)
   nuttx_create_symlink(${NUTTX_DIR}/include/nuttx/lib/math.h
-                       ${CMAKE_BINARY_DIR}/include/math.h)
+                       ${NUTTX_BINARY_DIR}/include/math.h)
 else()
-  file(REMOVE ${CMAKE_BINARY_DIR}/include/math.h)
+  file(REMOVE ${NUTTX_BINARY_DIR}/include/math.h)
 endif()
 
 # The float.h header file defines the properties of your floating point
@@ -120,9 +120,9 @@ endif()
 
 if(CONFIG_ARCH_FLOAT_H)
   nuttx_create_symlink(${NUTTX_DIR}/include/nuttx/lib/float.h
-                       ${CMAKE_BINARY_DIR}/include/float.h)
+                       ${NUTTX_BINARY_DIR}/include/float.h)
 else()
-  file(REMOVE ${CMAKE_BINARY_DIR}/include/float.h)
+  file(REMOVE ${NUTTX_BINARY_DIR}/include/float.h)
 endif()
 
 # Target used to copy include/nuttx/lib/setjmp.h.  If CONFIG_ARCH_SETJMP_H is
@@ -132,9 +132,9 @@ endif()
 
 if(CONFIG_ARCH_SETJMP_H)
   nuttx_create_symlink(${NUTTX_DIR}/include/nuttx/lib/setjmp.h
-                       ${CMAKE_BINARY_DIR}/include/setjmp.h)
+                       ${NUTTX_BINARY_DIR}/include/setjmp.h)
 else()
-  file(REMOVE ${CMAKE_BINARY_DIR}/include/setjmp.h)
+  file(REMOVE ${NUTTX_BINARY_DIR}/include/setjmp.h)
 endif()
 
 # Target used to copy include/nuttx/lib/stdbit.h.  If CONFIG_ARCH_STDBIT_H or
@@ -143,9 +143,9 @@ endif()
 
 if(CONFIG_ARCH_STDBIT_H OR CONFIG_LIBC_STDBIT_GENERIC)
   nuttx_create_symlink(${NUTTX_DIR}/include/nuttx/lib/stdbit.h
-                       ${CMAKE_BINARY_DIR}/include/stdbit.h)
+                       ${NUTTX_BINARY_DIR}/include/stdbit.h)
 else()
-  file(REMOVE ${CMAKE_BINARY_DIR}/include/stdbit.h)
+  file(REMOVE ${NUTTX_BINARY_DIR}/include/stdbit.h)
 endif()
 
 # Add final context target that ties together all of the above The context
@@ -157,14 +157,14 @@ endif()
 add_custom_target(
   nuttx_context
   DEPENDS
-    ${CMAKE_BINARY_DIR}/include/nuttx/config.h
-    ${CMAKE_BINARY_DIR}/include/nuttx/version.h
-    $<$<BOOL:${CONFIG_ARCH_STDARG_H}>:${CMAKE_BINARY_DIR}/include/stdarg.h>
-    $<$<BOOL:${NEED_MATH_H}>:${CMAKE_BINARY_DIR}/include/math.h>
-    $<$<BOOL:${CONFIG_ARCH_FLOAT_H}>:${CMAKE_BINARY_DIR}/include/float.h>
-    $<$<BOOL:${CONFIG_ARCH_SETJMP_H}>:${CMAKE_BINARY_DIR}/include/setjmp.h>
-    $<$<BOOL:${CONFIG_ARCH_STDBIT_H}>:${CMAKE_BINARY_DIR}/include/stdbit.h>
-    
$<$<BOOL:${CONFIG_LIBC_STDBIT_GENERIC}>:${CMAKE_BINARY_DIR}/include/stdbit.h>
+    ${NUTTX_BINARY_DIR}/include/nuttx/config.h
+    ${NUTTX_BINARY_DIR}/include/nuttx/version.h
+    $<$<BOOL:${CONFIG_ARCH_STDARG_H}>:${NUTTX_BINARY_DIR}/include/stdarg.h>
+    $<$<BOOL:${NEED_MATH_H}>:${NUTTX_BINARY_DIR}/include/math.h>
+    $<$<BOOL:${CONFIG_ARCH_FLOAT_H}>:${NUTTX_BINARY_DIR}/include/float.h>
+    $<$<BOOL:${CONFIG_ARCH_SETJMP_H}>:${NUTTX_BINARY_DIR}/include/setjmp.h>
+    $<$<BOOL:${CONFIG_ARCH_STDBIT_H}>:${NUTTX_BINARY_DIR}/include/stdbit.h>
+    
$<$<BOOL:${CONFIG_LIBC_STDBIT_GENERIC}>:${NUTTX_BINARY_DIR}/include/stdbit.h>
 )
 
 # apps_context is a PHONY target used as an intermediate process to control the
diff --git a/cmake/nuttx_generate_outputs.cmake 
b/cmake/nuttx_generate_outputs.cmake
index 98b2bb12bed..beb43200c89 100644
--- a/cmake/nuttx_generate_outputs.cmake
+++ b/cmake/nuttx_generate_outputs.cmake
@@ -28,7 +28,7 @@ function(nuttx_generate_outputs target)
       DEPENDS ${target})
     add_custom_target(${target}-hex ALL DEPENDS ${target}.hex)
     add_dependencies(nuttx_post ${target}-hex)
-    file(APPEND ${CMAKE_BINARY_DIR}/nuttx.manifest "${target}.hex\n")
+    file(APPEND ${NUTTX_BINARY_DIR}/nuttx.manifest "${target}.hex\n")
   endif()
 
   if(CONFIG_MOTOROLA_SREC)
@@ -38,7 +38,7 @@ function(nuttx_generate_outputs target)
       DEPENDS ${target})
     add_custom_target(${target}-srec ALL DEPENDS ${target}.srec)
     add_dependencies(nuttx_post ${target}-srec)
-    file(APPEND ${CMAKE_BINARY_DIR}/nuttx.manifest "${target}.srec\n")
+    file(APPEND ${NUTTX_BINARY_DIR}/nuttx.manifest "${target}.srec\n")
   endif()
 
   if(CONFIG_RAW_BINARY)
@@ -48,7 +48,7 @@ function(nuttx_generate_outputs target)
       DEPENDS ${target})
     add_custom_target(${target}-bin ALL DEPENDS ${target}.bin)
     add_dependencies(nuttx_post ${target}-bin)
-    file(APPEND ${CMAKE_BINARY_DIR}/nuttx.manifest "${target}.bin\n")
+    file(APPEND ${NUTTX_BINARY_DIR}/nuttx.manifest "${target}.bin\n")
   endif()
 
   if(CONFIG_RAW_DISASSEMBLY)
@@ -64,6 +64,6 @@ function(nuttx_generate_outputs target)
         DEPENDS ${target})
     endif()
     add_custom_target(${target}-asm ALL DEPENDS ${target}.asm)
-    file(APPEND ${CMAKE_BINARY_DIR}/nuttx.manifest "${target}.asm\n")
+    file(APPEND ${NUTTX_BINARY_DIR}/nuttx.manifest "${target}.asm\n")
   endif()
 endfunction(nuttx_generate_outputs)
diff --git a/cmake/nuttx_generate_sim_ld.cmake 
b/cmake/nuttx_generate_sim_ld.cmake
index c59301dd6ce..cd3051af88a 100644
--- a/cmake/nuttx_generate_sim_ld.cmake
+++ b/cmake/nuttx_generate_sim_ld.cmake
@@ -46,11 +46,11 @@ set(PROCESS_SIM_LD_SCRIPT
 ]])
 # cmake-format: on
 
-file(WRITE ${CMAKE_BINARY_DIR}/process_sim_ld_script.sh
+file(WRITE ${NUTTX_BINARY_DIR}/process_sim_ld_script.sh
      "${PROCESS_SIM_LD_SCRIPT}")
 file(
-  COPY ${CMAKE_BINARY_DIR}/process_sim_ld_script.sh
-  DESTINATION ${CMAKE_BINARY_DIR}
+  COPY ${NUTTX_BINARY_DIR}/process_sim_ld_script.sh
+  DESTINATION ${NUTTX_BINARY_DIR}
   FILE_PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ)
 
 add_custom_command(
@@ -62,4 +62,4 @@ add_custom_command(
   COMMAND sh process_sim_ld_script.sh nuttx-orig.ld nuttx.ld
   COMMAND sed -i '/\\.data *:/i " ${CONFIG_SIM_CUSTOM_DATA_SECTION} " ' 
nuttx.ld
   COMMENT "Generating sim linker script nuttx.ld"
-  WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
+  WORKING_DIRECTORY ${NUTTX_BINARY_DIR})
diff --git a/cmake/nuttx_kconfig.cmake b/cmake/nuttx_kconfig.cmake
index eb5c6eb3268..9247dad5dfe 100644
--- a/cmake/nuttx_kconfig.cmake
+++ b/cmake/nuttx_kconfig.cmake
@@ -218,14 +218,14 @@ function(nuttx_olddefconfig)
   endif()
 
   # save the orig compressed formatted defconfig at the very beginning
-  execute_process(COMMAND savedefconfig --out ${CMAKE_BINARY_DIR}/defconfig.tmp
+  execute_process(COMMAND savedefconfig --out ${NUTTX_BINARY_DIR}/defconfig.tmp
                   WORKING_DIRECTORY ${NUTTX_DIR})
 
   execute_process(
     COMMAND
       ${CMAKE_COMMAND} -P ${NUTTX_DIR}/cmake/savedefconfig.cmake
-      ${CMAKE_BINARY_DIR}/.config.compressed ${CMAKE_BINARY_DIR}/defconfig.tmp
-      ${CMAKE_BINARY_DIR}/defconfig.orig
+      ${NUTTX_BINARY_DIR}/.config.compressed ${NUTTX_BINARY_DIR}/defconfig.tmp
+      ${NUTTX_BINARY_DIR}/defconfig.orig
     WORKING_DIRECTORY ${NUTTX_DIR})
 
 endfunction()
@@ -244,7 +244,7 @@ function(nuttx_setconfig)
   endif()
 
   if(NOT SETCONFIG_CONFIG_FILE)
-    set(SETCONFIG_CONFIG_FILE ${CMAKE_BINARY_DIR}/.config)
+    set(SETCONFIG_CONFIG_FILE ${NUTTX_BINARY_DIR}/.config)
   endif()
 
   set(ENV{KCONFIG_CONFIG} ${SETCONFIG_CONFIG_FILE})
diff --git a/cmake/nuttx_mkconfig.cmake b/cmake/nuttx_mkconfig.cmake
index 4ba00cccd02..b96c7fc539d 100644
--- a/cmake/nuttx_mkconfig.cmake
+++ b/cmake/nuttx_mkconfig.cmake
@@ -20,32 +20,32 @@
 #
 # 
##############################################################################
 
-if(NOT EXISTS ${CMAKE_BINARY_DIR}/.config)
+if(NOT EXISTS ${NUTTX_BINARY_DIR}/.config)
   return()
 endif()
 
-if(NOT EXISTS ${CMAKE_BINARY_DIR}/.config.prev)
+if(NOT EXISTS ${NUTTX_BINARY_DIR}/.config.prev)
   execute_process(
-    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/.config
-            ${CMAKE_BINARY_DIR}/.config.prev
-    WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
+    COMMAND ${CMAKE_COMMAND} -E copy ${NUTTX_BINARY_DIR}/.config
+            ${NUTTX_BINARY_DIR}/.config.prev
+    WORKING_DIRECTORY ${NUTTX_BINARY_DIR})
 endif()
 
 execute_process(
-  COMMAND ${CMAKE_COMMAND} -E compare_files ${CMAKE_BINARY_DIR}/.config
-          ${CMAKE_BINARY_DIR}/.config.prev
+  COMMAND ${CMAKE_COMMAND} -E compare_files ${NUTTX_BINARY_DIR}/.config
+          ${NUTTX_BINARY_DIR}/.config.prev
   RESULT_VARIABLE COMPARE_RESULT
-  WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
+  WORKING_DIRECTORY ${NUTTX_BINARY_DIR})
 
-set(CONFIG_H ${CMAKE_BINARY_DIR}/include/nuttx/config.h)
+set(CONFIG_H ${NUTTX_BINARY_DIR}/include/nuttx/config.h)
 if(COMPARE_RESULT EQUAL 0 AND EXISTS ${CONFIG_H})
   return()
 endif()
 
 set(BASE_DEFCONFIG "${NUTTX_BOARD}/${NUTTX_CONFIG}")
 execute_process(
-  COMMAND ${CMAKE_COMMAND} -E compare_files ${CMAKE_BINARY_DIR}/.config
-          ${CMAKE_BINARY_DIR}/.config.orig RESULT_VARIABLE COMPARE_RESULT)
+  COMMAND ${CMAKE_COMMAND} -E compare_files ${NUTTX_BINARY_DIR}/.config
+          ${NUTTX_BINARY_DIR}/.config.orig RESULT_VARIABLE COMPARE_RESULT)
 if(COMPARE_RESULT)
   string(APPEND BASE_DEFCONFIG "-dirty")
 endif()
@@ -95,7 +95,7 @@ file(APPEND ${CONFIG_H}
      "/* General Definitions ***********************************/\n")
 file(APPEND ${CONFIG_H} "#define CONFIG_BASE_DEFCONFIG 
\"${BASE_DEFCONFIG}\"\n")
 
-file(STRINGS ${CMAKE_BINARY_DIR}/.config ConfigContents)
+file(STRINGS ${NUTTX_BINARY_DIR}/.config ConfigContents)
 encode_brackets(ConfigContents)
 foreach(NameAndValue ${ConfigContents})
   decode_brackets(NameAndValue)
diff --git a/cmake/nuttx_mkversion.cmake b/cmake/nuttx_mkversion.cmake
index f882fdcc3da..a6c4d248f9d 100644
--- a/cmake/nuttx_mkversion.cmake
+++ b/cmake/nuttx_mkversion.cmake
@@ -20,7 +20,7 @@
 #
 # 
##############################################################################
 
-set(VERSION_H ${CMAKE_BINARY_DIR}/include/nuttx/version.h)
+set(VERSION_H ${NUTTX_BINARY_DIR}/include/nuttx/version.h)
 if(EXISTS ${VERSION_H})
   return()
 endif()
diff --git a/cmake/nuttx_multiple_link.cmake b/cmake/nuttx_multiple_link.cmake
index 141da198a72..61d5c07f961 100644
--- a/cmake/nuttx_multiple_link.cmake
+++ b/cmake/nuttx_multiple_link.cmake
@@ -22,35 +22,34 @@
 
 # create an empty allsyms source file for `nuttx`
 if(CONFIG_ALLSYMS)
-  set(ALLSYMS_SOURCE ${CMAKE_BINARY_DIR}/allsyms_empty.c)
+  set(ALLSYMS_SOURCE ${NUTTX_BINARY_DIR}/allsyms_empty.c)
   add_custom_command(
     OUTPUT ${ALLSYMS_SOURCE}
     COMMAND ${NUTTX_DIR}/tools/mkallsyms.py nuttx.empty ${ALLSYMS_SOURCE}
-    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+    WORKING_DIRECTORY ${NUTTX_BINARY_DIR}
     COMMENT "Generating allsyms_empty.c")
   add_custom_target(generate_empty_allsyms DEPENDS ${ALLSYMS_SOURCE})
   add_dependencies(nuttx generate_empty_allsyms)
 
   target_sources(nuttx PRIVATE ${ALLSYMS_SOURCE})
-  set(ALLSYMS_INCDIR ${CMAKE_SOURCE_DIR}/include ${CMAKE_BINARY_DIR}/include)
+  set(ALLSYMS_INCDIR ${NUTTX_DIR}/include ${NUTTX_BINARY_DIR}/include)
   set_source_files_properties(${ALLSYMS_SOURCE} PROPERTIES INCLUDE_DIRECTORIES
                                                            "${ALLSYMS_INCDIR}")
 endif()
 
 if(CONFIG_MM_KASAN_GLOBAL)
-  set(KASAN_GLOBAL_SOURCE ${CMAKE_BINARY_DIR}/kasan_global.c)
+  set(KASAN_GLOBAL_SOURCE ${NUTTX_BINARY_DIR}/kasan_global.c)
   add_custom_command(
     OUTPUT ${KASAN_GLOBAL_SOURCE}
     COMMAND ${NUTTX_DIR}/tools/kasan_global.py -e nuttx.empty -o
             ${KASAN_GLOBAL_SOURCE} -a ${CONFIG_MM_KASAN_GLOBAL_ALIGN}
-    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+    WORKING_DIRECTORY ${NUTTX_BINARY_DIR}
     COMMENT "Generating kasan_global.c")
   add_custom_target(generate_empty_kasan_global DEPENDS ${KASAN_GLOBAL_SOURCE})
   add_dependencies(nuttx generate_empty_kasan_global)
 
   target_sources(nuttx PRIVATE ${KASAN_GLOBAL_SOURCE})
-  set(KASAN_GLOBAL_INCDIR ${CMAKE_SOURCE_DIR}/include
-                          ${CMAKE_BINARY_DIR}/include)
+  set(KASAN_GLOBAL_INCDIR ${NUTTX_DIR}/include ${NUTTX_BINARY_DIR}/include)
   set_source_files_properties(
     ${KASAN_GLOBAL_SOURCE} PROPERTIES INCLUDE_DIRECTORIES
                                       "${KASAN_GLOBAL_INCDIR}")
@@ -82,10 +81,10 @@ macro(define_multiple_link_target inter_target dep_target 
linktimes)
     list(APPEND MULTIPLE_LINK_SOURCES_${linktimes} ${LINK_ALLSYMS_SOURCE})
     add_custom_command(
       OUTPUT ${LINK_ALLSYMS_SOURCE} POST_BUILD
-      COMMAND ${NUTTX_DIR}/tools/mkallsyms.py ${CMAKE_BINARY_DIR}/${dep_target}
+      COMMAND ${NUTTX_DIR}/tools/mkallsyms.py ${NUTTX_BINARY_DIR}/${dep_target}
               ${LINK_ALLSYMS_SOURCE}
       DEPENDS ${dep_target}
-      WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+      WORKING_DIRECTORY ${NUTTX_BINARY_DIR}
       COMMAND_EXPAND_LISTS)
   endif()
 
@@ -95,10 +94,10 @@ macro(define_multiple_link_target inter_target dep_target 
linktimes)
     add_custom_command(
       OUTPUT ${LINK_KASAN_GLOBAL_SOURCE} POST_BUILD
       COMMAND
-        ${NUTTX_DIR}/tools/kasan_global.py -e ${CMAKE_BINARY_DIR}/${dep_target}
+        ${NUTTX_DIR}/tools/kasan_global.py -e ${NUTTX_BINARY_DIR}/${dep_target}
         -o ${LINK_KASAN_GLOBAL_SOURCE} -a ${CONFIG_MM_KASAN_GLOBAL_ALIGN}
       DEPENDS ${dep_target}
-      WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+      WORKING_DIRECTORY ${NUTTX_BINARY_DIR}
       COMMAND_EXPAND_LISTS)
   endif()
 
@@ -111,8 +110,8 @@ macro(define_multiple_link_target inter_target dep_target 
linktimes)
 
   # relink target and nuttx have exactly the same configuration
   target_include_directories(
-    ${inter_target} SYSTEM PUBLIC ${CMAKE_SOURCE_DIR}/include
-                                  ${CMAKE_BINARY_DIR}/include)
+    ${inter_target} SYSTEM PUBLIC ${NUTTX_DIR}/include
+                                  ${NUTTX_BINARY_DIR}/include)
   target_compile_definitions(
     ${inter_target} PRIVATE $<TARGET_PROPERTY:nuttx,NUTTX_KERNEL_DEFINITIONS>)
   target_compile_options(
diff --git a/cmake/nuttx_process_config.cmake b/cmake/nuttx_process_config.cmake
index f66238b0f7e..9e7034dd2ce 100644
--- a/cmake/nuttx_process_config.cmake
+++ b/cmake/nuttx_process_config.cmake
@@ -41,8 +41,8 @@ function(process_config OUTPUT INPUT TREE_FILE)
   message(STATUS "Processing includes: ${INPUT} → ${OUTPUT}")
   execute_process(
     COMMAND
-      ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/tools/process_config.py
-      preprocess ${OUTPUT} ${INPUT} ${include_args} ${TREE_OPTION} ${TREE_FILE}
+      ${Python3_EXECUTABLE} ${NUTTX_DIR}/tools/process_config.py preprocess
+      ${OUTPUT} ${INPUT} ${include_args} ${TREE_OPTION} ${TREE_FILE}
     RESULT_VARIABLE result
     OUTPUT_VARIABLE out
     ERROR_VARIABLE err)
@@ -56,16 +56,16 @@ endfunction()
 file(READ "${NUTTX_DEFCONFIG}" FILE_CONTENTS)
 string(FIND "${FILE_CONTENTS}" "#include" INCLUDE_FOUND)
 
-if(NOT EXISTS ${CMAKE_BINARY_DIR}/.defconfig.processed)
-  set(TREE_FILE ${CMAKE_BINARY_DIR}/config_tree.json)
+if(NOT EXISTS ${NUTTX_BINARY_DIR}/.defconfig.processed)
+  set(TREE_FILE ${NUTTX_BINARY_DIR}/config_tree.json)
 else()
-  set(TREE_FILE ${CMAKE_BINARY_DIR}/config_tree_dirty.json)
+  set(TREE_FILE ${NUTTX_BINARY_DIR}/config_tree_dirty.json)
 endif()
 # Should we preprocess defconfig?
 if(INCLUDE_FOUND GREATER -1)
   get_filename_component(NUTTX_DEFCONFIG_DIR "${NUTTX_DEFCONFIG}" DIRECTORY)
   process_config(
-    ${CMAKE_BINARY_DIR}/.defconfig.processed
+    ${NUTTX_BINARY_DIR}/.defconfig.processed
     ${NUTTX_DEFCONFIG}
     ${TREE_FILE}
     INCLUDE_PATHS
@@ -74,5 +74,5 @@ if(INCLUDE_FOUND GREATER -1)
     ${NUTTX_DEFCONFIG_DIR}
     ${NUTTX_DIR}/../apps
     ${NUTTX_DIR}/../nuttx-apps)
-  set(NUTTX_DEFCONFIG ${CMAKE_BINARY_DIR}/.defconfig.processed)
+  set(NUTTX_DEFCONFIG ${NUTTX_BINARY_DIR}/.defconfig.processed)
 endif()
diff --git a/cmake/nuttx_redefine_symbols.cmake 
b/cmake/nuttx_redefine_symbols.cmake
index 7ff4012a49e..02cffca33d3 100644
--- a/cmake/nuttx_redefine_symbols.cmake
+++ b/cmake/nuttx_redefine_symbols.cmake
@@ -21,11 +21,11 @@
 # 
##############################################################################
 
 set(REDEFINE_INPUT_FILE ${NUTTX_DIR}/arch/sim/src/nuttx-names.in)
-set(REDEFINE_OUTPUT_FILE ${CMAKE_BINARY_DIR}/nuttx-names.dat)
+set(REDEFINE_OUTPUT_FILE ${NUTTX_BINARY_DIR}/nuttx-names.dat)
 
 add_custom_command(
   OUTPUT ${REDEFINE_OUTPUT_FILE}
-  COMMAND ${CMAKE_C_COMPILER} -E -P -x c -I${CMAKE_BINARY_DIR}/include
+  COMMAND ${CMAKE_C_COMPILER} -E -P -x c -I${NUTTX_BINARY_DIR}/include
           ${REDEFINE_INPUT_FILE} > ${REDEFINE_OUTPUT_FILE}
   DEPENDS nuttx_context ${REDEFINE_INPUT_FILE})
 
diff --git a/cmake/nuttx_sethost.cmake b/cmake/nuttx_sethost.cmake
index 603be508a5a..59cb537e360 100644
--- a/cmake/nuttx_sethost.cmake
+++ b/cmake/nuttx_sethost.cmake
@@ -23,7 +23,7 @@
 include(nuttx_kconfig)
 
 function(nuttx_sethost)
-  set(config_file ${CMAKE_BINARY_DIR}/.config)
+  set(config_file ${NUTTX_BINARY_DIR}/.config)
   cmake_parse_arguments(SETHOST "" "CONFIG_FILE" "" ${ARGN})
 
   if(SETHOST_UNPARSED_ARGUMENTS)
diff --git a/cmake/nuttx_toolchain.cmake b/cmake/nuttx_toolchain.cmake
index b01deda0938..3974846cc04 100644
--- a/cmake/nuttx_toolchain.cmake
+++ b/cmake/nuttx_toolchain.cmake
@@ -113,7 +113,7 @@ if(NOT NUTTX_TOOLCHAIN_PREPROCESS_DEFINED)
       OUTPUT ${TARGET_FILE}
       COMMAND
         ${PREPROCESS} ${DEFINES} ${preprocess_depflags}
-        -I${CMAKE_BINARY_DIR}/include -I${NUTTX_DIR}/include
+        -I${NUTTX_BINARY_DIR}/include -I${NUTTX_DIR}/include
         -I${NUTTX_CHIP_ABS_DIR} ${SOURCE_FILE} > ${TARGET_FILE}
       DEPENDS ${SOURCE_FILE} ${DEPENDS} ${depfile_args}
       COMMAND_EXPAND_LISTS)
diff --git a/drivers/mtd/CMakeLists.txt b/drivers/mtd/CMakeLists.txt
index aef546411ef..d4a7e03a39c 100644
--- a/drivers/mtd/CMakeLists.txt
+++ b/drivers/mtd/CMakeLists.txt
@@ -188,7 +188,7 @@ if(CONFIG_MTD)
         dhara
         URL https://github.com/dlbeer/dhara/archive/refs/heads/master.zip
             SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/dhara BINARY_DIR
-            ${CMAKE_BINARY_DIR}/drivers/mtd/dhara
+            ${NUTTX_BINARY_DIR}/drivers/mtd/dhara
         DOWNLOAD_NO_PROGRESS true)
       FetchContent_Populate(dhara)
     endif()
@@ -204,7 +204,7 @@ if(CONFIG_MTD)
         nvblk
         URL https://github.com/Laczen/nvblk/archive/refs/heads/main.zip
             SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/nvblk BINARY_DIR
-            ${CMAKE_BINARY_DIR}/drivers/mtd/nvblk
+            ${NUTTX_BINARY_DIR}/drivers/mtd/nvblk
         DOWNLOAD_NO_PROGRESS true)
       FetchContent_Populate(nvblk)
     endif()
diff --git a/drivers/segger/CMakeLists.txt b/drivers/segger/CMakeLists.txt
index d0c5bcad620..1997e7bc81f 100644
--- a/drivers/segger/CMakeLists.txt
+++ b/drivers/segger/CMakeLists.txt
@@ -31,7 +31,7 @@ if(CONFIG_SEGGER_RTT OR CONFIG_SEGGER_SYSVIEW)
           SOURCE_DIR
           ${CMAKE_CURRENT_LIST_DIR}/SystemView
           BINARY_DIR
-          ${CMAKE_BINARY_DIR}/SystemView
+          ${NUTTX_BINARY_DIR}/SystemView
       DOWNLOAD_NO_PROGRESS true
       TIMEOUT 30)
 
diff --git a/fs/littlefs/CMakeLists.txt b/fs/littlefs/CMakeLists.txt
index dc03c0433d7..5b236d96f15 100644
--- a/fs/littlefs/CMakeLists.txt
+++ b/fs/littlefs/CMakeLists.txt
@@ -29,7 +29,7 @@ if(CONFIG_FS_LITTLEFS)
             SOURCE_DIR
             ${CMAKE_CURRENT_LIST_DIR}/littlefs
             BINARY_DIR
-            ${CMAKE_BINARY_DIR}/fs/littlefs/littlefs
+            ${NUTTX_BINARY_DIR}/fs/littlefs/littlefs
         PATCH_COMMAND
           patch -p2 -d ${CMAKE_CURRENT_LIST_DIR} <
           ${CMAKE_CURRENT_LIST_DIR}/lfs_util.patch && patch -p2 -d
@@ -44,7 +44,7 @@ if(CONFIG_FS_LITTLEFS)
             SOURCE_DIR
             ${CMAKE_CURRENT_LIST_DIR}/littlefs
             BINARY_DIR
-            ${CMAKE_BINARY_DIR}/fs/littlefs/littlefs)
+            ${NUTTX_BINARY_DIR}/fs/littlefs/littlefs)
     endif()
     FetchContent_MakeAvailable(littlefs)
   endif()
diff --git a/libs/libbuiltin/compiler-rt/CMakeLists.txt 
b/libs/libbuiltin/compiler-rt/CMakeLists.txt
index 81d3e6d4e01..56fee38f82c 100644
--- a/libs/libbuiltin/compiler-rt/CMakeLists.txt
+++ b/libs/libbuiltin/compiler-rt/CMakeLists.txt
@@ -32,7 +32,7 @@ if(CONFIG_LIB_COMPILER_RT)
           SOURCE_DIR
           ${CMAKE_CURRENT_LIST_DIR}/compiler-rt
           BINARY_DIR
-          ${CMAKE_BINARY_DIR}/libs/libbuiltin/compiler-rt
+          ${NUTTX_BINARY_DIR}/libs/libbuiltin/compiler-rt
           CONFIGURE_COMMAND
           ""
           BUILD_COMMAND
diff --git a/libs/libc/elf/CMakeLists.txt b/libs/libc/elf/CMakeLists.txt
index 5a0edc78cba..b4ca4ac3d82 100644
--- a/libs/libc/elf/CMakeLists.txt
+++ b/libs/libc/elf/CMakeLists.txt
@@ -49,7 +49,7 @@ if(CONFIG_LIBC_ELF)
 
   target_sources(c PRIVATE ${SRCS})
 
-  set(ELF_LD_SCRIPT_TMP "${CMAKE_BINARY_DIR}/gnu-elf.ld")
+  set(ELF_LD_SCRIPT_TMP "${NUTTX_BINARY_DIR}/gnu-elf.ld")
 
   nuttx_generate_preprocess_target(
     SOURCE_FILE ${NUTTX_DIR}/libs/libc/elf/gnu-elf.ld.in TARGET_FILE
diff --git a/libs/libc/fdt/CMakeLists.txt b/libs/libc/fdt/CMakeLists.txt
index 1aeb614765f..4444d4f6256 100644
--- a/libs/libc/fdt/CMakeLists.txt
+++ b/libs/libc/fdt/CMakeLists.txt
@@ -29,7 +29,7 @@ if(CONFIG_LIBC_FDT)
       dtc
       URL https://github.com/dgibson/dtc/archive/v${VERSION}.zip SOURCE_DIR
           ${CMAKE_CURRENT_LIST_DIR}/dtc BINARY_DIR
-          ${CMAKE_BINARY_DIR}/libs/libc/fdt/dtc)
+          ${NUTTX_BINARY_DIR}/libs/libc/fdt/dtc)
     FetchContent_GetProperties(dtc)
     if(NOT dtc_POPULATED)
       FetchContent_Populate(dtc)
diff --git a/libs/libc/gnssutils/CMakeLists.txt 
b/libs/libc/gnssutils/CMakeLists.txt
index 36fd985882d..b2bf6a212e5 100644
--- a/libs/libc/gnssutils/CMakeLists.txt
+++ b/libs/libc/gnssutils/CMakeLists.txt
@@ -32,7 +32,7 @@ if(CONFIG_GNSSUTILS_MINMEA_LIB)
           SOURCE_DIR
           ${CMAKE_CURRENT_LIST_DIR}/minmea
           BINARY_DIR
-          ${CMAKE_BINARY_DIR}/libs/libc/gnssutils/minmea
+          ${NUTTX_BINARY_DIR}/libs/libc/gnssutils/minmea
           CONFIGURE_COMMAND
           ""
           BUILD_COMMAND
@@ -51,12 +51,12 @@ if(CONFIG_GNSSUTILS_MINMEA_LIB)
     endif()
   endif()
 
-  if(NOT EXISTS ${CMAKE_BINARY_DIR}/include/minmea)
-    file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/include/minmea)
+  if(NOT EXISTS ${NUTTX_BINARY_DIR}/include/minmea)
+    file(MAKE_DIRECTORY ${NUTTX_BINARY_DIR}/include/minmea)
   endif()
 
   configure_file(${CMAKE_CURRENT_LIST_DIR}/minmea/minmea.h
-                 ${CMAKE_BINARY_DIR}/include/minmea/minmea.h COPYONLY)
+                 ${NUTTX_BINARY_DIR}/include/minmea/minmea.h COPYONLY)
 
   target_sources(c PRIVATE minmea/minmea.c)
 
diff --git a/libs/libm/libmcs/CMakeLists.txt b/libs/libm/libmcs/CMakeLists.txt
index b983ffa837a..c672d0231d8 100644
--- a/libs/libm/libmcs/CMakeLists.txt
+++ b/libs/libm/libmcs/CMakeLists.txt
@@ -36,7 +36,7 @@ if(CONFIG_LIBM_LIBMCS)
     FetchContent_Declare(
       libmcs_fetch
       URL ${LIBMCS_URL} SOURCE_DIR ${LIBMCS_URL}/libmcs BINARY_DIR
-          ${CMAKE_BINARY_DIR}/libs/libm/libmcs/libmcs
+          ${NUTTX_BINARY_DIR}/libs/libm/libmcs/libmcs
       PATCH_COMMAND
         patch -p2 -d ${CMAKE_CURRENT_LIST_DIR} <
         
${CMAKE_CURRENT_LIST_DIR}/0001-fix-build-error-remove-unused-file-fenv.h.patch
@@ -111,6 +111,6 @@ if(CONFIG_LIBM_LIBMCS)
   target_compile_options(m PRIVATE ${CFLAGS})
 
   nuttx_create_symlink(${LIBMCS_DIR}/libm/include
-                       ${CMAKE_BINARY_DIR}/include/libmcs)
+                       ${NUTTX_BINARY_DIR}/include/libmcs)
 
 endif()
diff --git a/libs/libm/newlib/CMakeLists.txt b/libs/libm/newlib/CMakeLists.txt
index eef4566355b..67a154e7a89 100644
--- a/libs/libm/newlib/CMakeLists.txt
+++ b/libs/libm/newlib/CMakeLists.txt
@@ -37,7 +37,7 @@ if(CONFIG_LIBM_NEWLIB)
     FetchContent_Declare(
       newlib_fetch
       URL ${NEWLIB_URL} SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/newlib BINARY_DIR
-          ${CMAKE_BINARY_DIR}/libs/libm/newlib/newlib
+          ${NUTTX_BINARY_DIR}/libs/libm/newlib/newlib
       PATCH_COMMAND
         patch -p1 -d ${CMAKE_CURRENT_LIST_DIR} <
         
${CMAKE_CURRENT_LIST_DIR}/0001-newlib-libm-fix-__RCSID-build-error.patch
diff --git a/libs/libm/openlibm/CMakeLists.txt 
b/libs/libm/openlibm/CMakeLists.txt
index c0c57b8c90c..49b25b891d5 100644
--- a/libs/libm/openlibm/CMakeLists.txt
+++ b/libs/libm/openlibm/CMakeLists.txt
@@ -36,7 +36,7 @@ if(CONFIG_LIBM_OPENLIBM)
     FetchContent_Declare(
       openlibm_fetch
       URL ${OPENLIBM_URL} SOURCE_DIR ${OPENLIBM_URL}/openlibm BINARY_DIR
-          ${CMAKE_BINARY_DIR}/libs/libm/openlibm/openlibm
+          ${NUTTX_BINARY_DIR}/libs/libm/openlibm/openlibm
       PATCH_COMMAND
         patch -p1 -d ${CMAKE_CURRENT_LIST_DIR} <
         
${CMAKE_CURRENT_LIST_DIR}/0001-fix-build-float_t-error-float_t-has-not-been-declare.patch
diff --git a/libs/libxx/libcxx/CMakeLists.txt b/libs/libxx/libcxx/CMakeLists.txt
index 020c1ad05db..8f41ff67131 100644
--- a/libs/libxx/libcxx/CMakeLists.txt
+++ b/libs/libxx/libcxx/CMakeLists.txt
@@ -33,7 +33,7 @@ if(CONFIG_LIBCXX)
           SOURCE_DIR
           ${CMAKE_CURRENT_LIST_DIR}/libcxx
           BINARY_DIR
-          ${CMAKE_BINARY_DIR}/libs/libc/libcxx
+          ${NUTTX_BINARY_DIR}/libs/libc/libcxx
           CONFIGURE_COMMAND
           ""
           BUILD_COMMAND
@@ -67,17 +67,17 @@ if(CONFIG_LIBCXX)
   endif()
 
   nuttx_create_symlink(${CMAKE_CURRENT_LIST_DIR}/libcxx/include
-                       ${CMAKE_BINARY_DIR}/include/libcxx)
+                       ${NUTTX_BINARY_DIR}/include/libcxx)
 
   nuttx_create_symlink(${CMAKE_CURRENT_LIST_DIR}/../__config_site
-                       ${CMAKE_BINARY_DIR}/include/libcxx_config/__config_site)
+                       ${NUTTX_BINARY_DIR}/include/libcxx_config/__config_site)
 
   set_property(
     TARGET nuttx
     APPEND
     PROPERTY NUTTX_CXX_INCLUDE_DIRECTORIES
-             ${CMAKE_BINARY_DIR}/include/libcxx
-             ${CMAKE_BINARY_DIR}/include/libcxx_config
+             ${NUTTX_BINARY_DIR}/include/libcxx
+             ${NUTTX_BINARY_DIR}/include/libcxx_config
              ${CMAKE_CURRENT_LIST_DIR}/libcxx/test/support
              ${CMAKE_CURRENT_LIST_DIR}/libcxx/src)
 
diff --git a/libs/libxx/libcxxabi/CMakeLists.txt 
b/libs/libxx/libcxxabi/CMakeLists.txt
index ea89d5e20b7..62ae0a518c4 100644
--- a/libs/libxx/libcxxabi/CMakeLists.txt
+++ b/libs/libxx/libcxxabi/CMakeLists.txt
@@ -32,7 +32,7 @@ if(CONFIG_LIBCXXABI)
           SOURCE_DIR
           ${CMAKE_CURRENT_LIST_DIR}/libcxxabi
           BINARY_DIR
-          ${CMAKE_BINARY_DIR}/libs/libc/libcxxabi
+          ${NUTTX_BINARY_DIR}/libs/libc/libcxxabi
           CONFIGURE_COMMAND
           ""
           BUILD_COMMAND
@@ -53,13 +53,13 @@ if(CONFIG_LIBCXXABI)
   endif()
 
   nuttx_create_symlink(${CMAKE_CURRENT_LIST_DIR}/libcxxabi/include
-                       ${CMAKE_BINARY_DIR}/include/libcxxabi)
+                       ${NUTTX_BINARY_DIR}/include/libcxxabi)
 
   set_property(
     TARGET nuttx
     APPEND
     PROPERTY NUTTX_CXX_INCLUDE_DIRECTORIES
-             ${CMAKE_BINARY_DIR}/include/libcxxabi)
+             ${NUTTX_BINARY_DIR}/include/libcxxabi)
 
   nuttx_add_system_library(libcxxabi)
 
diff --git a/libs/libxx/libstdc++/CMakeLists.txt 
b/libs/libxx/libstdc++/CMakeLists.txt
index 89e7eef4bf7..5412d3fe641 100644
--- a/libs/libxx/libstdc++/CMakeLists.txt
+++ b/libs/libxx/libstdc++/CMakeLists.txt
@@ -36,7 +36,7 @@ if(CONFIG_LIBSUPCXX)
             SOURCE_DIR
             ${CMAKE_CURRENT_LIST_DIR}/libstdc++
             BINARY_DIR
-            ${CMAKE_BINARY_DIR}/libs/libxx/libstdc++
+            ${NUTTX_BINARY_DIR}/libs/libxx/libstdc++
             CONFIGURE_COMMAND
             ""
             BUILD_COMMAND
@@ -70,12 +70,12 @@ if(CONFIG_LIBSUPCXX)
   endif()
 
   # Create include directories
-  file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/include/c++)
-  file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/include/c++/bits)
+  file(MAKE_DIRECTORY ${NUTTX_BINARY_DIR}/include/c++)
+  file(MAKE_DIRECTORY ${NUTTX_BINARY_DIR}/include/c++/bits)
 
   # Copy headers to c++ include directory
-  set(CXXDIR ${CMAKE_BINARY_DIR}/include/c++)
-  set(BITSDIR ${CMAKE_BINARY_DIR}/include/c++/bits)
+  set(CXXDIR ${NUTTX_BINARY_DIR}/include/c++)
+  set(BITSDIR ${NUTTX_BINARY_DIR}/include/c++/bits)
 
   # Copy libsupc++ headers
   file(COPY ${CMAKE_CURRENT_LIST_DIR}/c++config.h DESTINATION ${INCDIR}/bits)
@@ -143,8 +143,7 @@ if(CONFIG_LIBSUPCXX)
 
   # Add system include directories
   target_include_directories(
-    libsupcxx SYSTEM PRIVATE ${CMAKE_SOURCE_DIR}/include
-                             ${CMAKE_BINARY_DIR}/include)
+    libsupcxx SYSTEM PRIVATE ${NUTTX_DIR}/include ${NUTTX_BINARY_DIR}/include)
 
   # Set global compile options & definitions from nuttx target
   target_compile_options(
diff --git a/libs/libxx/uClibc++/CMakeLists.txt 
b/libs/libxx/uClibc++/CMakeLists.txt
index 1f34afab48f..2171e06b07e 100644
--- a/libs/libxx/uClibc++/CMakeLists.txt
+++ b/libs/libxx/uClibc++/CMakeLists.txt
@@ -35,7 +35,7 @@ if(CONFIG_UCLIBCXX)
           SOURCE_DIR
           ${CMAKE_CURRENT_LIST_DIR}/uClibc++
           BINARY_DIR
-          ${CMAKE_BINARY_DIR}/libs/libc/uClibc++
+          ${NUTTX_BINARY_DIR}/libs/libc/uClibc++
           CONFIGURE_COMMAND
           ""
           BUILD_COMMAND
@@ -61,16 +61,16 @@ if(CONFIG_UCLIBCXX)
   endif()
 
   nuttx_create_symlink(${CMAKE_CURRENT_LIST_DIR}/uClibc++/include
-                       ${CMAKE_BINARY_DIR}/include/uClibc++)
+                       ${NUTTX_BINARY_DIR}/include/uClibc++)
 
   configure_file(
     ${CMAKE_CURRENT_LIST_DIR}/system_configuration.h
-    ${CMAKE_BINARY_DIR}/include/uClibc++/system_configuration.h COPYONLY)
+    ${NUTTX_BINARY_DIR}/include/uClibc++/system_configuration.h COPYONLY)
 
   set_property(
     TARGET nuttx
     APPEND
-    PROPERTY NUTTX_CXX_INCLUDE_DIRECTORIES 
${CMAKE_BINARY_DIR}/include/uClibc++)
+    PROPERTY NUTTX_CXX_INCLUDE_DIRECTORIES 
${NUTTX_BINARY_DIR}/include/uClibc++)
 
   set(SRCS
       algorithm.cpp
diff --git a/mm/tlsf/CMakeLists.txt b/mm/tlsf/CMakeLists.txt
index 0f2734d4710..48dc68ba7bc 100644
--- a/mm/tlsf/CMakeLists.txt
+++ b/mm/tlsf/CMakeLists.txt
@@ -33,7 +33,7 @@ if(CONFIG_MM_TLSF_MANAGER)
       tlsf_fetch
       GIT_REPOSITORY https://github.com/mattconte/tlsf.git
       SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/tlsf BINARY_DIR
-      ${CMAKE_BINARY_DIR}/mm/tlsf/tlsf
+      ${NUTTX_BINARY_DIR}/mm/tlsf/tlsf
       PATCH_COMMAND
         patch -p1 -d ${CMAKE_CURRENT_LIST_DIR} <
         ${CMAKE_CURRENT_LIST_DIR}/0001-Add-TLSF_API-and-tlsf_printf.patch &&
diff --git a/openamp/libmetal.cmake b/openamp/libmetal.cmake
index 26fbe9ed637..30044cef5f0 100644
--- a/openamp/libmetal.cmake
+++ b/openamp/libmetal.cmake
@@ -28,7 +28,7 @@ if(NOT EXISTS ${CMAKE_CURRENT_LIST_DIR}/libmetal)
         SOURCE_DIR
         ${CMAKE_CURRENT_LIST_DIR}/libmetal
         BINARY_DIR
-        ${CMAKE_BINARY_DIR}/openamp/libmetal
+        ${NUTTX_BINARY_DIR}/openamp/libmetal
         CONFIGURE_COMMAND
         ""
         BUILD_COMMAND
@@ -76,6 +76,6 @@ add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/libmetal
                  ${CMAKE_CURRENT_BINARY_DIR}/libmetal EXCLUDE_FROM_ALL)
 
 nuttx_create_symlink(${CMAKE_CURRENT_BINARY_DIR}/libmetal/lib/include/metal
-                     ${CMAKE_BINARY_DIR}/include/metal)
+                     ${NUTTX_BINARY_DIR}/include/metal)
 
 nuttx_add_external_library(metal-static MODE KERNEL)
diff --git a/openamp/open-amp.cmake b/openamp/open-amp.cmake
index 8b14484e03e..18907721f0d 100644
--- a/openamp/open-amp.cmake
+++ b/openamp/open-amp.cmake
@@ -28,7 +28,7 @@ if(NOT EXISTS ${CMAKE_CURRENT_LIST_DIR}/open-amp)
         SOURCE_DIR
         ${CMAKE_CURRENT_LIST_DIR}/open-amp
         BINARY_DIR
-        ${CMAKE_BINARY_DIR}/openamp/open-amp
+        ${NUTTX_BINARY_DIR}/openamp/open-amp
         CONFIGURE_COMMAND
         ""
         BUILD_COMMAND
@@ -120,7 +120,7 @@ add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/open-amp
                  ${CMAKE_CURRENT_BINARY_DIR}/open-amp EXCLUDE_FROM_ALL)
 
 # install nuttx openamp binary dir headers
-set(OPENAMP_HEADER_DIR ${CMAKE_BINARY_DIR}/include/openamp)
+set(OPENAMP_HEADER_DIR ${NUTTX_BINARY_DIR}/include/openamp)
 file(GLOB headers open-amp/lib/include/openamp/*.h open-amp/lib/remoteproc/*.h
      open-amp/lib/rpmsg/*h)
 file(MAKE_DIRECTORY ${OPENAMP_HEADER_DIR})
diff --git a/syscall/CMakeLists.txt b/syscall/CMakeLists.txt
index 4555ffd532e..83db6e37466 100644
--- a/syscall/CMakeLists.txt
+++ b/syscall/CMakeLists.txt
@@ -25,7 +25,7 @@ list(TRANSFORM SYSCALLS REPLACE "^\"([^,]+)\",.+" "\\1")
 list(TRANSFORM SYSCALLS APPEND ".c")
 
 # generate the host tool
-nuttx_build_host_target(mksyscall ${CMAKE_SOURCE_DIR}/tools/mksyscall.c)
+nuttx_build_host_target(mksyscall ${NUTTX_DIR}/tools/mksyscall.c)
 
 if(CONFIG_LIB_SYSCALL)
   add_subdirectory(proxies)
diff --git a/syscall/proxies/CMakeLists.txt b/syscall/proxies/CMakeLists.txt
index 83ff0c1d8af..bab4b69cbae 100644
--- a/syscall/proxies/CMakeLists.txt
+++ b/syscall/proxies/CMakeLists.txt
@@ -26,7 +26,7 @@ list(TRANSFORM SYSCALLS PREPEND 
"${CMAKE_CURRENT_BINARY_DIR}/PROXY_")
 # generate files
 add_custom_command(
   OUTPUT ${SYSCALLS}
-  COMMAND ${CMAKE_BINARY_DIR}/bin_host/mksyscall -p
+  COMMAND ${NUTTX_BINARY_DIR}/bin_host/mksyscall -p
           ${CMAKE_CURRENT_LIST_DIR}/../syscall.csv
   WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
   DEPENDS mksyscall)
diff --git a/syscall/stubs/CMakeLists.txt b/syscall/stubs/CMakeLists.txt
index 59e56f75117..246d9e8f41d 100644
--- a/syscall/stubs/CMakeLists.txt
+++ b/syscall/stubs/CMakeLists.txt
@@ -26,7 +26,7 @@ list(TRANSFORM SYSCALLS PREPEND 
"${CMAKE_CURRENT_BINARY_DIR}/STUB_")
 # generate files
 add_custom_command(
   OUTPUT ${SYSCALLS}
-  COMMAND ${CMAKE_BINARY_DIR}/bin_host/mksyscall -s
+  COMMAND ${NUTTX_BINARY_DIR}/bin_host/mksyscall -s
           ${CMAKE_CURRENT_LIST_DIR}/../syscall.csv
   WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
   DEPENDS mksyscall)
diff --git a/syscall/wraps/CMakeLists.txt b/syscall/wraps/CMakeLists.txt
index 6d3e218e51c..a443323ba38 100644
--- a/syscall/wraps/CMakeLists.txt
+++ b/syscall/wraps/CMakeLists.txt
@@ -26,7 +26,7 @@ list(TRANSFORM SYSCALLS PREPEND 
"${CMAKE_CURRENT_BINARY_DIR}/WRAP_")
 # generate files
 add_custom_command(
   OUTPUT ${SYSCALLS}
-  COMMAND ${CMAKE_BINARY_DIR}/bin_host/mksyscall -w
+  COMMAND ${NUTTX_BINARY_DIR}/bin_host/mksyscall -w
           ${CMAKE_CURRENT_LIST_DIR}/../syscall.csv
   WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
   DEPENDS mksyscall)
diff --git a/tools/espressif/espressif_burn_enc_key.cmake 
b/tools/espressif/espressif_burn_enc_key.cmake
index 54864d5d479..dec33025fa7 100644
--- a/tools/espressif/espressif_burn_enc_key.cmake
+++ b/tools/espressif/espressif_burn_enc_key.cmake
@@ -22,7 +22,7 @@
 #
 # Include() from the main NuttX CMake configure when
 # CONFIG_ESPRESSIF_SECURE_FLASH_ENC_ENABLED. Defines the ``burn_enc_key`` 
target
-# (no cmake -P). Expects NUTTX_DIR, CMAKE_BINARY_DIR, CMAKE_SOURCE_DIR.
+# (no cmake -P). Expects NUTTX_DIR, NUTTX_BINARY_DIR, NUTTX_DIR.
 #
 # Serial port: ESPTOOL_PORT in the environment at build time (e.g.
 # ESPTOOL_PORT=/dev/ttyUSB0). NOCHECK must also be set so the burn is explicit
@@ -40,8 +40,8 @@ if(NOT PYTHON3)
   message(FATAL_ERROR "python3 not found (required for burn_enc_key)")
 endif()
 
-set(BINARY_DIR "${CMAKE_BINARY_DIR}")
-set(SOURCE_DIR "${CMAKE_SOURCE_DIR}")
+set(BINARY_DIR "${NUTTX_BINARY_DIR}")
+set(SOURCE_DIR "${NUTTX_DIR}")
 include(${NUTTX_DIR}/tools/espressif/espressif_esptool_common.cmake)
 
 if(NOT EXISTS "${FLASH_ENC_KEY_PATH}")
@@ -88,7 +88,7 @@ else()
       ${CMAKE_COMMAND} -E env "NUTTX_ESPEFUSE=${ESPEFUSE}"
       "NUTTX_KEY=${FLASH_ENC_KEY_PATH}" -- ${PYTHON3}
       "${NUTTX_DIR}/tools/espressif/burn_flash_enc_key.py"
-    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+    WORKING_DIRECTORY ${NUTTX_BINARY_DIR}
     COMMENT "Burn flash encryption key to eFuses (espefuse.py)"
     VERBATIM)
   unset(_nuttx_burn_key_msg)
diff --git a/wireless/CMakeLists.txt b/wireless/CMakeLists.txt
index 72458cf1aef..50ec1f1e3e5 100644
--- a/wireless/CMakeLists.txt
+++ b/wireless/CMakeLists.txt
@@ -25,11 +25,11 @@ if(CONFIG_WIRELESS)
 
   nuttx_add_subdirectory()
 
-  if(NOT EXISTS ${CMAKE_BINARY_DIR}/wireless)
-    file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/wireless)
+  if(NOT EXISTS ${NUTTX_BINARY_DIR}/wireless)
+    file(MAKE_DIRECTORY ${NUTTX_BINARY_DIR}/wireless)
   endif()
-  if(NOT EXISTS ${CMAKE_BINARY_DIR}/wireless/dummy.c)
-    file(TOUCH ${CMAKE_BINARY_DIR}/wireless/dummy.c)
+  if(NOT EXISTS ${NUTTX_BINARY_DIR}/wireless/dummy.c)
+    file(TOUCH ${NUTTX_BINARY_DIR}/wireless/dummy.c)
   endif()
-  target_sources(wireless PRIVATE ${CMAKE_BINARY_DIR}/wireless/dummy.c)
+  target_sources(wireless PRIVATE ${NUTTX_BINARY_DIR}/wireless/dummy.c)
 endif()

Reply via email to