aboutsummaryrefslogtreecommitdiff
path: root/utils/cmake/toolchains
diff options
context:
space:
mode:
authorJakob Stendahl <jakobste@uio.no>2021-01-11 13:41:18 +0100
committerJakob Stendahl <jakobste@uio.no>2021-01-11 13:41:18 +0100
commitd17bc0fc4bb057378fadf3f9feb0de1df60d611a (patch)
treeca3069eeacb0b7379cb289d87be932956e449d9c /utils/cmake/toolchains
parent19d65c7b2e287223113ab916e103638c5c5003f5 (diff)
downloadhoverbit-ble-d17bc0fc4bb057378fadf3f9feb0de1df60d611a.tar.gz
hoverbit-ble-d17bc0fc4bb057378fadf3f9feb0de1df60d611a.zip
:sparkles: Add working bluetooth receiver
Diffstat (limited to 'utils/cmake/toolchains')
-rw-r--r--utils/cmake/toolchains/ARM_GCC/bin-generator.cmake9
-rw-r--r--utils/cmake/toolchains/ARM_GCC/compiler-flags.cmake49
-rw-r--r--utils/cmake/toolchains/ARM_GCC/hex-generator.cmake9
-rw-r--r--utils/cmake/toolchains/ARM_GCC/platform_includes.h10
-rw-r--r--utils/cmake/toolchains/ARM_GCC/toolchain.cmake26
-rw-r--r--utils/cmake/toolchains/AVR_GCC/bin-generator.cmake9
-rw-r--r--utils/cmake/toolchains/AVR_GCC/compiler-flags.cmake43
-rw-r--r--utils/cmake/toolchains/AVR_GCC/hex-generator.cmake9
-rw-r--r--utils/cmake/toolchains/AVR_GCC/platform_includes.h14
-rw-r--r--utils/cmake/toolchains/AVR_GCC/toolchain.cmake29
-rw-r--r--utils/cmake/toolchains/XTENSA_GCC/bin-generator.cmake9
-rw-r--r--utils/cmake/toolchains/XTENSA_GCC/compiler-flags.cmake43
-rw-r--r--utils/cmake/toolchains/XTENSA_GCC/hex-generator.cmake9
-rw-r--r--utils/cmake/toolchains/XTENSA_GCC/platform_includes.h10
-rw-r--r--utils/cmake/toolchains/XTENSA_GCC/toolchain.cmake26
15 files changed, 304 insertions, 0 deletions
diff --git a/utils/cmake/toolchains/ARM_GCC/bin-generator.cmake b/utils/cmake/toolchains/ARM_GCC/bin-generator.cmake
new file mode 100644
index 0000000..d18d098
--- /dev/null
+++ b/utils/cmake/toolchains/ARM_GCC/bin-generator.cmake
@@ -0,0 +1,9 @@
+add_custom_command(
+ OUTPUT "${PROJECT_SOURCE_DIR}/${codal.output_folder}/${device.device}.bin"
+ COMMAND "${ARM_NONE_EABI_OBJCOPY}" -O binary "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${device.device}" "${PROJECT_SOURCE_DIR}/${codal.output_folder}/${device.device}.bin"
+ DEPENDS ${device.device}
+ COMMENT "converting to bin file."
+)
+
+#specify a dependency on the elf file so that bin is automatically rebuilt when elf is changed.
+add_custom_target(${device.device}_bin ALL DEPENDS "${PROJECT_SOURCE_DIR}/${codal.output_folder}/${device.device}.bin")
diff --git a/utils/cmake/toolchains/ARM_GCC/compiler-flags.cmake b/utils/cmake/toolchains/ARM_GCC/compiler-flags.cmake
new file mode 100644
index 0000000..16aacaa
--- /dev/null
+++ b/utils/cmake/toolchains/ARM_GCC/compiler-flags.cmake
@@ -0,0 +1,49 @@
+set(EXPLICIT_INCLUDES "")
+if((CMAKE_VERSION VERSION_GREATER "3.4.0") OR (CMAKE_VERSION VERSION_EQUAL "3.4.0"))
+ # from CMake 3.4 <INCLUDES> are separate to <FLAGS> in the
+ # CMAKE_<LANG>_COMPILE_OBJECT, CMAKE_<LANG>_CREATE_ASSEMBLY_SOURCE, and
+ # CMAKE_<LANG>_CREATE_PREPROCESSED_SOURCE commands
+ set(EXPLICIT_INCLUDES "<INCLUDES> ")
+endif()
+
+# Override the link rules:
+set(CMAKE_C_CREATE_SHARED_LIBRARY "echo 'shared libraries not supported' && 1")
+set(CMAKE_C_CREATE_SHARED_MODULE "echo 'shared modules not supported' && 1")
+set(CMAKE_C_CREATE_STATIC_LIBRARY "<CMAKE_AR> -cr <LINK_FLAGS> <TARGET> <OBJECTS>")
+set(CMAKE_C_COMPILE_OBJECT "<CMAKE_C_COMPILER> <DEFINES> ${EXPLICIT_INCLUDES}<FLAGS> -o <OBJECT> -c <SOURCE>")
+
+set(CMAKE_C_LINK_EXECUTABLE "<CMAKE_C_COMPILER> <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> -Wl,-Map,<TARGET>.map -Wl,--start-group <OBJECTS> <LINK_LIBRARIES> -lm -lc -lgcc -lm -lc -lgcc -Wl,--end-group --specs=nano.specs -o <TARGET>")
+
+set(CMAKE_CXX_OUTPUT_EXTENSION ".o")
+set(CMAKE_DEPFILE_FLAGS_CXX "-MMD -MT <OBJECT> -MF <DEPFILE>")
+set(CMAKE_C_OUTPUT_EXTENSION ".o")
+set(CMAKE_DEPFILE_FLAGS_C "-MMD -MT <OBJECT> -MF <DEPFILE>")
+
+set(CMAKE_C_FLAGS_DEBUG_INIT "-g -gdwarf-3")
+set(CMAKE_C_FLAGS_MINSIZEREL_INIT "-Os -DNDEBUG")
+set(CMAKE_C_FLAGS_RELEASE_INIT "-Os -DNDEBUG")
+set(CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "-Os -g -gdwarf-3 -DNDEBUG")
+set(CMAKE_INCLUDE_SYSTEM_FLAG_C "-isystem ")
+
+
+set(CMAKE_ASM_FLAGS_DEBUG_INIT "-g -gdwarf-3")
+set(CMAKE_ASM_FLAGS_MINSIZEREL_INIT "-Os -DNDEBUG")
+set(CMAKE_ASM_FLAGS_RELEASE_INIT "-Os -DNDEBUG")
+set(CMAKE_ASM_FLAGS_RELWITHDEBINFO_INIT "-Os -g -gdwarf-3 -DNDEBUG")
+set(CMAKE_INCLUDE_SYSTEM_FLAG_ASM "-isystem ")
+
+set(CMAKE_CXX_CREATE_STATIC_LIBRARY "<CMAKE_AR> -cr <LINK_FLAGS> <TARGET> <OBJECTS>")
+
+set(CMAKE_CXX_LINK_EXECUTABLE "<CMAKE_CXX_COMPILER> <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> -Wl,-Map,<TARGET>.map -Wl,--start-group <OBJECTS> <LINK_LIBRARIES> -lnosys -lstdc++ -lsupc++ -lm -lc -lgcc -lstdc++ -lsupc++ -lm -lc -lgcc -Wl,--end-group --specs=nano.specs -o <TARGET>")
+
+set(CMAKE_CXX_FLAGS_DEBUG_INIT "-g -gdwarf-3")
+set(CMAKE_CXX_FLAGS_MINSIZEREL_INIT "-Os -DNDEBUG")
+set(CMAKE_CXX_FLAGS_RELEASE_INIT "-Os -DNDEBUG")
+set(CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "-Os -g -gdwarf-3 -DNDEBUG")
+set(CMAKE_INCLUDE_SYSTEM_FLAG_CXX "-isystem ")
+
+if (CMAKE_C_COMPILER_VERSION VERSION_GREATER "7.1.0" OR CMAKE_C_COMPILER_VERSION VERSION_EQUAL "7.1.0")
+ message("${BoldRed}Supressing -Wexpansion-to-defined.${ColourReset}")
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-expansion-to-defined")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-expansion-to-defined")
+endif () \ No newline at end of file
diff --git a/utils/cmake/toolchains/ARM_GCC/hex-generator.cmake b/utils/cmake/toolchains/ARM_GCC/hex-generator.cmake
new file mode 100644
index 0000000..4948935
--- /dev/null
+++ b/utils/cmake/toolchains/ARM_GCC/hex-generator.cmake
@@ -0,0 +1,9 @@
+add_custom_command(
+ OUTPUT "${PROJECT_SOURCE_DIR}/${codal.output_folder}/${device.device}.hex"
+ COMMAND "${ARM_NONE_EABI_OBJCOPY}" -O ihex "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${device.device}" "${PROJECT_SOURCE_DIR}/${codal.output_folder}/${device.device}.hex"
+ DEPENDS ${device.device}
+ COMMENT "converting to hex file."
+)
+
+#specify a dependency on the elf file so that hex is automatically rebuilt when elf is changed.
+add_custom_target(${device.device}_hex ALL DEPENDS "${PROJECT_SOURCE_DIR}/${codal.output_folder}/${device.device}.hex")
diff --git a/utils/cmake/toolchains/ARM_GCC/platform_includes.h b/utils/cmake/toolchains/ARM_GCC/platform_includes.h
new file mode 100644
index 0000000..3417ef3
--- /dev/null
+++ b/utils/cmake/toolchains/ARM_GCC/platform_includes.h
@@ -0,0 +1,10 @@
+#ifndef PLATFORM_INCLUDES
+#define PLATFORM_INCLUDES
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdarg.h>
+#include <math.h>
+
+#endif
diff --git a/utils/cmake/toolchains/ARM_GCC/toolchain.cmake b/utils/cmake/toolchains/ARM_GCC/toolchain.cmake
new file mode 100644
index 0000000..eafdfbc
--- /dev/null
+++ b/utils/cmake/toolchains/ARM_GCC/toolchain.cmake
@@ -0,0 +1,26 @@
+find_program(ARM_NONE_EABI_RANLIB arm-none-eabi-ranlib)
+find_program(ARM_NONE_EABI_AR arm-none-eabi-ar)
+find_program(ARM_NONE_EABI_GCC arm-none-eabi-gcc)
+find_program(ARM_NONE_EABI_GPP arm-none-eabi-g++)
+find_program(ARM_NONE_EABI_OBJCOPY arm-none-eabi-objcopy)
+
+set(CMAKE_OSX_SYSROOT "/")
+set(CMAKE_OSX_DEPLOYMENT_TARGET "")
+
+set(CODAL_TOOLCHAIN "ARM_GCC")
+
+if(CMAKE_VERSION VERSION_LESS "3.5.0")
+ include(CMakeForceCompiler)
+ cmake_force_c_compiler("${ARM_NONE_EABI_GCC}" GNU)
+ cmake_force_cxx_compiler("${ARM_NONE_EABI_GPP}" GNU)
+else()
+ # from 3.5 the force_compiler macro is deprecated: CMake can detect
+ # arm-none-eabi-gcc as being a GNU compiler automatically
+ set(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY")
+ set(CMAKE_C_COMPILER "${ARM_NONE_EABI_GCC}")
+ set(CMAKE_CXX_COMPILER "${ARM_NONE_EABI_GPP}")
+endif()
+
+SET(CMAKE_AR "${ARM_NONE_EABI_AR}" CACHE FILEPATH "Archiver")
+SET(CMAKE_RANLIB "${ARM_NONE_EABI_RANLIB}" CACHE FILEPATH "rlib")
+set(CMAKE_CXX_OUTPUT_EXTENSION ".o")
diff --git a/utils/cmake/toolchains/AVR_GCC/bin-generator.cmake b/utils/cmake/toolchains/AVR_GCC/bin-generator.cmake
new file mode 100644
index 0000000..a3a1c01
--- /dev/null
+++ b/utils/cmake/toolchains/AVR_GCC/bin-generator.cmake
@@ -0,0 +1,9 @@
+add_custom_command(
+ OUTPUT "${PROJECT_SOURCE_DIR}/${codal.output_folder}/${device.device}.bin"
+ COMMAND "${AVR_OBJCOPY}" -O binary "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${device.device}" "${PROJECT_SOURCE_DIR}/${codal.output_folder}/${device.device}.bin"
+ DEPENDS ${device.device}
+ COMMENT "converting to bin file."
+)
+
+#specify a dependency on the elf file so that bin is automatically rebuilt when elf is changed.
+add_custom_target(${device.device}_bin ALL DEPENDS "${PROJECT_SOURCE_DIR}/${codal.output_folder}/${device.device}.bin")
diff --git a/utils/cmake/toolchains/AVR_GCC/compiler-flags.cmake b/utils/cmake/toolchains/AVR_GCC/compiler-flags.cmake
new file mode 100644
index 0000000..c6dcfc7
--- /dev/null
+++ b/utils/cmake/toolchains/AVR_GCC/compiler-flags.cmake
@@ -0,0 +1,43 @@
+set(EXPLICIT_INCLUDES "")
+if((CMAKE_VERSION VERSION_GREATER "3.4.0") OR (CMAKE_VERSION VERSION_EQUAL "3.4.0"))
+ # from CMake 3.4 <INCLUDES> are separate to <FLAGS> in the
+ # CMAKE_<LANG>_COMPILE_OBJECT, CMAKE_<LANG>_CREATE_ASSEMBLY_SOURCE, and
+ # CMAKE_<LANG>_CREATE_PREPROCESSED_SOURCE commands
+ set(EXPLICIT_INCLUDES "<INCLUDES> ")
+endif()
+
+# Override the link rules:
+set(CMAKE_C_CREATE_SHARED_LIBRARY "echo 'shared libraries not supported' && 1")
+set(CMAKE_C_CREATE_SHARED_MODULE "echo 'shared modules not supported' && 1")
+set(CMAKE_C_CREATE_STATIC_LIBRARY "<CMAKE_AR> rcs <LINK_FLAGS> <TARGET> <OBJECTS>")
+set(CMAKE_C_COMPILE_OBJECT "<CMAKE_C_COMPILER> <DEFINES> ${EXPLICIT_INCLUDES}<FLAGS> -o <OBJECT> -c <SOURCE>")
+
+set(CMAKE_C_LINK_EXECUTABLE "<CMAKE_C_COMPILER> <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> -Wl,-Map,<TARGET>.map -Wl,--start-group <OBJECTS> <LINK_LIBRARIES> -lm -lc -lgcc -lm -lc -lgcc -Wl,--end-group --specs=nano.specs -o <TARGET>")
+
+set(CMAKE_CXX_OUTPUT_EXTENSION ".o")
+set(CMAKE_DEPFILE_FLAGS_CXX "-MMD -MT <OBJECT> -MF <DEPFILE>")
+set(CMAKE_C_OUTPUT_EXTENSION ".o")
+set(CMAKE_DEPFILE_FLAGS_C "-MMD -MT <OBJECT> -MF <DEPFILE>")
+
+set(CMAKE_C_FLAGS_DEBUG_INIT "-g -gdwarf-3")
+set(CMAKE_C_FLAGS_MINSIZEREL_INIT "-Os -DNDEBUG")
+set(CMAKE_C_FLAGS_RELEASE_INIT "-Os -DNDEBUG")
+set(CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "-Os -g -gdwarf-3 -DNDEBUG")
+set(CMAKE_INCLUDE_SYSTEM_FLAG_C "-isystem ")
+
+
+set(CMAKE_ASM_FLAGS_DEBUG_INIT "-g -gdwarf-3")
+set(CMAKE_ASM_FLAGS_MINSIZEREL_INIT "-Os -DNDEBUG")
+set(CMAKE_ASM_FLAGS_RELEASE_INIT "-Os -DNDEBUG")
+set(CMAKE_ASM_FLAGS_RELWITHDEBINFO_INIT "-Os -g -gdwarf-3 -DNDEBUG")
+set(CMAKE_INCLUDE_SYSTEM_FLAG_ASM "-isystem ")
+
+set(CMAKE_CXX_CREATE_STATIC_LIBRARY "<CMAKE_AR> rcs <LINK_FLAGS> <TARGET> <OBJECTS>")
+
+set(CMAKE_CXX_LINK_EXECUTABLE "<CMAKE_CXX_COMPILER> <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> -Wl,-Map,<TARGET>.map -Wl,--start-group <OBJECTS> <LINK_LIBRARIES> -lm -lc -lgcc -Wl,--end-group -o <TARGET>")
+
+set(CMAKE_CXX_FLAGS_DEBUG_INIT "-g -gdwarf-3")
+set(CMAKE_CXX_FLAGS_MINSIZEREL_INIT "-Os -DNDEBUG")
+set(CMAKE_CXX_FLAGS_RELEASE_INIT "-Os -DNDEBUG")
+set(CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "-Os -g -gdwarf-3 -DNDEBUG")
+set(CMAKE_INCLUDE_SYSTEM_FLAG_CXX "-isystem ")
diff --git a/utils/cmake/toolchains/AVR_GCC/hex-generator.cmake b/utils/cmake/toolchains/AVR_GCC/hex-generator.cmake
new file mode 100644
index 0000000..5be3c67
--- /dev/null
+++ b/utils/cmake/toolchains/AVR_GCC/hex-generator.cmake
@@ -0,0 +1,9 @@
+add_custom_command(
+ OUTPUT "${PROJECT_SOURCE_DIR}/${codal.output_folder}/${device.device}.hex"
+ COMMAND "${AVR_OBJCOPY}" -O ihex "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${device.device}" "${PROJECT_SOURCE_DIR}/${codal.output_folder}/${device.device}.hex"
+ DEPENDS ${device.device}
+ COMMENT "converting to hex file."
+)
+
+#specify a dependency on the elf file so that hex is automatically rebuilt when elf is changed.
+add_custom_target(${device.device}_hex ALL DEPENDS "${PROJECT_SOURCE_DIR}/${codal.output_folder}/${device.device}.hex")
diff --git a/utils/cmake/toolchains/AVR_GCC/platform_includes.h b/utils/cmake/toolchains/AVR_GCC/platform_includes.h
new file mode 100644
index 0000000..ac788a5
--- /dev/null
+++ b/utils/cmake/toolchains/AVR_GCC/platform_includes.h
@@ -0,0 +1,14 @@
+#ifndef PLATFORM_INCLUDES
+#define PLATFORM_INCLUDES
+
+#include <stdint.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include <math.h>
+#include <avr/interrupt.h>
+#include <avr/io.h>
+
+#endif
diff --git a/utils/cmake/toolchains/AVR_GCC/toolchain.cmake b/utils/cmake/toolchains/AVR_GCC/toolchain.cmake
new file mode 100644
index 0000000..891aff2
--- /dev/null
+++ b/utils/cmake/toolchains/AVR_GCC/toolchain.cmake
@@ -0,0 +1,29 @@
+find_program(AVR_GCC_RANLIB avr-gcc-ranlib)
+find_program(AVR_AR avr-ar)
+find_program(AVR_AS avr-as)
+find_program(AVR_GCC avr-gcc)
+find_program(AVR_GPP avr-g++)
+find_program(AVR_OBJCOPY avr-objcopy)
+
+set(CMAKE_OSX_SYSROOT "/")
+set(CMAKE_OSX_DEPLOYMENT_TARGET "")
+
+set(CODAL_TOOLCHAIN "AVR_GCC")
+
+if(CMAKE_VERSION VERSION_LESS "3.5.0")
+ include(CMakeForceCompiler)
+ cmake_force_c_compiler("${AVR_GCC}" GNU)
+ cmake_force_cxx_compiler("${AVR_GPP}" GNU)
+else()
+ #-Wl,-flto -flto -fno-fat-lto-objects
+ # from 3.5 the force_compiler macro is deprecated: CMake can detect
+ # arm-none-eabi-gcc as being a GNU compiler automatically
+ set(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY")
+ set(CMAKE_C_COMPILER "${AVR_GCC}")
+ set(CMAKE_CXX_COMPILER "${AVR_GPP}")
+endif()
+
+SET(CMAKE_ASM_COMPILER "${AVR_GCC}")
+SET(CMAKE_AR "${AVR_AR}" CACHE FILEPATH "Archiver")
+SET(CMAKE_RANLIB "${AVR_GCC_RANLIB}" CACHE FILEPATH "rlib")
+set(CMAKE_CXX_OUTPUT_EXTENSION ".o")
diff --git a/utils/cmake/toolchains/XTENSA_GCC/bin-generator.cmake b/utils/cmake/toolchains/XTENSA_GCC/bin-generator.cmake
new file mode 100644
index 0000000..74fdb35
--- /dev/null
+++ b/utils/cmake/toolchains/XTENSA_GCC/bin-generator.cmake
@@ -0,0 +1,9 @@
+add_custom_command(
+ OUTPUT "${PROJECT_SOURCE_DIR}/${codal.output_folder}/${device.device}.bin"
+ COMMAND "${XTENSA_OBJCOPY}" -O binary "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${device.device}" "${PROJECT_SOURCE_DIR}/${codal.output_folder}/${device.device}.bin"
+ DEPENDS ${device.device}
+ COMMENT "converting to bin file."
+)
+
+#specify a dependency on the elf file so that bin is automatically rebuilt when elf is changed.
+add_custom_target(${device.device}_bin ALL DEPENDS "${PROJECT_SOURCE_DIR}/${codal.output_folder}/${device.device}.bin")
diff --git a/utils/cmake/toolchains/XTENSA_GCC/compiler-flags.cmake b/utils/cmake/toolchains/XTENSA_GCC/compiler-flags.cmake
new file mode 100644
index 0000000..e0f7e2d
--- /dev/null
+++ b/utils/cmake/toolchains/XTENSA_GCC/compiler-flags.cmake
@@ -0,0 +1,43 @@
+set(EXPLICIT_INCLUDES "")
+if((CMAKE_VERSION VERSION_GREATER "3.4.0") OR (CMAKE_VERSION VERSION_EQUAL "3.4.0"))
+ # from CMake 3.4 <INCLUDES> are separate to <FLAGS> in the
+ # CMAKE_<LANG>_COMPILE_OBJECT, CMAKE_<LANG>_CREATE_ASSEMBLY_SOURCE, and
+ # CMAKE_<LANG>_CREATE_PREPROCESSED_SOURCE commands
+ set(EXPLICIT_INCLUDES "<INCLUDES> ")
+endif()
+
+# Override the link rules:
+set(CMAKE_C_CREATE_SHARED_LIBRARY "echo 'shared libraries not supported' && 1")
+set(CMAKE_C_CREATE_SHARED_MODULE "echo 'shared modules not supported' && 1")
+set(CMAKE_C_CREATE_STATIC_LIBRARY "<CMAKE_AR> -cr <LINK_FLAGS> <TARGET> <OBJECTS>")
+set(CMAKE_C_COMPILE_OBJECT "<CMAKE_C_COMPILER> <DEFINES> ${EXPLICIT_INCLUDES}<FLAGS> -o <OBJECT> -c <SOURCE>")
+
+set(CMAKE_C_LINK_EXECUTABLE "<CMAKE_C_COMPILER> <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> -nostdlib -Wl,-Map,<TARGET>.map -Wl,--start-group <OBJECTS> <LINK_LIBRARIES> -lupgrade -lssl -lmesh -lwpa2 -lsmartconfig -lespnow -lpp -lmain -lwpa -llwip -lnet80211 -lwps -lcrypto -lphy -lhal -lgcc -ldriver -lm -lat -lc -lstdc++ -Wl,--end-group -lgcc -o <TARGET>")
+
+set(CMAKE_CXX_OUTPUT_EXTENSION ".o")
+set(CMAKE_DEPFILE_FLAGS_CXX "-MMD -MT <OBJECT> -MF <DEPFILE>")
+set(CMAKE_C_OUTPUT_EXTENSION ".o")
+set(CMAKE_DEPFILE_FLAGS_C "-MMD -MT <OBJECT> -MF <DEPFILE>")
+
+set(CMAKE_C_FLAGS_DEBUG_INIT "-g -gdwarf-3")
+set(CMAKE_C_FLAGS_MINSIZEREL_INIT "-Os -DNDEBUG")
+set(CMAKE_C_FLAGS_RELEASE_INIT "-Os -DNDEBUG")
+set(CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "-Os -g -gdwarf-3 -DNDEBUG")
+set(CMAKE_INCLUDE_SYSTEM_FLAG_C "-isystem ")
+
+
+set(CMAKE_ASM_FLAGS_DEBUG_INIT "-g -gdwarf-3")
+set(CMAKE_ASM_FLAGS_MINSIZEREL_INIT "-Os -DNDEBUG")
+set(CMAKE_ASM_FLAGS_RELEASE_INIT "-Os -DNDEBUG")
+set(CMAKE_ASM_FLAGS_RELWITHDEBINFO_INIT "-Os -g -gdwarf-3 -DNDEBUG")
+set(CMAKE_INCLUDE_SYSTEM_FLAG_ASM "-isystem ")
+
+set(CMAKE_CXX_CREATE_STATIC_LIBRARY "<CMAKE_AR> -cr <LINK_FLAGS> <TARGET> <OBJECTS>")
+set(CMAKE_CXX_LINK_EXECUTABLE "<CMAKE_CXX_COMPILER> <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> -nostdlib -Wl,-Map,<TARGET>.map -Wl,--start-group <OBJECTS> <LINK_LIBRARIES> -lupgrade -lssl -lmesh -lwpa2 -lsmartconfig -lespnow -lpp -lmain -lwpa -llwip -lnet80211 -lwps -lcrypto -ldriver -lat -lphy -lhal -lgcc -lm -lc -lstdc++ -o <TARGET>")
+#set(CMAKE_CXX_LINK_EXECUTABLE "<CMAKE_CXX_COMPILER> <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> -nostdlib -Wl,-Map,<TARGET>.map -Wl,--start-group <OBJECTS> <LINK_LIBRARIES> -lpwm -lupgrade -lssl -lgcc -lhal -lphy -lpp -lnet80211 -lwpa -lmain -llwip -lcrypto -lm -lc -o <TARGET>")
+
+set(CMAKE_CXX_FLAGS_DEBUG_INIT "-g -gdwarf-3")
+set(CMAKE_CXX_FLAGS_MINSIZEREL_INIT "-Os -DNDEBUG")
+set(CMAKE_CXX_FLAGS_RELEASE_INIT "-Os -DNDEBUG")
+set(CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "-Os -g -gdwarf-3 -DNDEBUG")
+set(CMAKE_INCLUDE_SYSTEM_FLAG_CXX "-isystem ")
diff --git a/utils/cmake/toolchains/XTENSA_GCC/hex-generator.cmake b/utils/cmake/toolchains/XTENSA_GCC/hex-generator.cmake
new file mode 100644
index 0000000..4948935
--- /dev/null
+++ b/utils/cmake/toolchains/XTENSA_GCC/hex-generator.cmake
@@ -0,0 +1,9 @@
+add_custom_command(
+ OUTPUT "${PROJECT_SOURCE_DIR}/${codal.output_folder}/${device.device}.hex"
+ COMMAND "${ARM_NONE_EABI_OBJCOPY}" -O ihex "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${device.device}" "${PROJECT_SOURCE_DIR}/${codal.output_folder}/${device.device}.hex"
+ DEPENDS ${device.device}
+ COMMENT "converting to hex file."
+)
+
+#specify a dependency on the elf file so that hex is automatically rebuilt when elf is changed.
+add_custom_target(${device.device}_hex ALL DEPENDS "${PROJECT_SOURCE_DIR}/${codal.output_folder}/${device.device}.hex")
diff --git a/utils/cmake/toolchains/XTENSA_GCC/platform_includes.h b/utils/cmake/toolchains/XTENSA_GCC/platform_includes.h
new file mode 100644
index 0000000..3417ef3
--- /dev/null
+++ b/utils/cmake/toolchains/XTENSA_GCC/platform_includes.h
@@ -0,0 +1,10 @@
+#ifndef PLATFORM_INCLUDES
+#define PLATFORM_INCLUDES
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdarg.h>
+#include <math.h>
+
+#endif
diff --git a/utils/cmake/toolchains/XTENSA_GCC/toolchain.cmake b/utils/cmake/toolchains/XTENSA_GCC/toolchain.cmake
new file mode 100644
index 0000000..6789edd
--- /dev/null
+++ b/utils/cmake/toolchains/XTENSA_GCC/toolchain.cmake
@@ -0,0 +1,26 @@
+find_program(XTENSA_RANLIB xtensa-lx106-elf-gcc-ranlib)
+find_program(XTENSA_AR xtensa-lx106-elf-gcc-ar)
+find_program(XTENSA_GCC xtensa-lx106-elf-gcc)
+find_program(XTENSA_GPP xtensa-lx106-elf-g++)
+find_program(XTENSA_OBJCOPY xtensa-lx106-elf-objcopy)
+
+set(CMAKE_OSX_SYSROOT "/")
+set(CMAKE_OSX_DEPLOYMENT_TARGET "")
+
+set(CODAL_TOOLCHAIN "XTENSA_GCC")
+
+if(CMAKE_VERSION VERSION_LESS "3.5.0")
+ include(CMakeForceCompiler)
+ cmake_force_c_compiler("${XTENSA_GCC}" GNU)
+ cmake_force_cxx_compiler("${XTENSA_GPP}" GNU)
+else()
+ # from 3.5 the force_compiler macro is deprecated: CMake can detect
+ # arm-none-eabi-gcc as being a GNU compiler automatically
+ set(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY")
+ set(CMAKE_C_COMPILER "${XTENSA_GCC}")
+ set(CMAKE_CXX_COMPILER "${XTENSA_GPP}")
+endif()
+
+SET(CMAKE_AR "${XTENSA_AR}" CACHE FILEPATH "Archiver")
+SET(CMAKE_RANLIB "${XTENSA_RANLIB}" CACHE FILEPATH "rlib")
+set(CMAKE_CXX_OUTPUT_EXTENSION ".o")