if("${BUILD_TARGET}" STREQUAL "atmega328p")
   include(${CMAKE_CURRENT_SOURCE_DIR}/rules/target-atmega328p.cmake)
 elseif ("${BUILD_TARGET}" STREQUAL "atmega32u4")
-  include(${CMAKE_CURRENT_SOURCE_DIR}/rules/target-atmega328p.cmake)
+  include(${CMAKE_CURRENT_SOURCE_DIR}/rules/target-atmega32u4.cmake)
 elseif ("${BUILD_TARGET}" STREQUAL "stm32g030")
   include(${CMAKE_CURRENT_SOURCE_DIR}/rules/target-stm32g030.cmake)
 else()
 
 
 #define START
 #define MT_SLA_ACK
+#if defined (__AVR_ATmega32U4__)
+#define TW_SDA_PIN PORTD1
+#define TW_SCL_PIN PORTD0
+#else
 #define TW_SDA_PIN PORTC4
 #define TW_SCL_PIN PORTC5
-
+#endif
 #define I2C_ERROR   0
 #define I2C_SUCCESS 1
 
     //TWBR = ((F_CPU/SCL_CLOCK)-16)/2; 
     // 16Mhz / (16 + 2*12*1) = 400Khz
     TWBR = 12; 
+#if defined (__AVR_ATmega32U4__)
+    PRR0  &= ~(1<<PRTWI);
+#else
     PRR   &= ~(1<<PRTWI);
+#endif
     DDRC  |= (1<<TW_SDA_PIN) | (1 <<TW_SCL_PIN);
     // Enable Pull UP
     PORTC |= (1<<TW_SDA_PIN) | (1 <<TW_SCL_PIN);
 
--- /dev/null
+##########################################################################
+# tools to beused for programming the AVR
+##########################################################################
+set(AVR_UPLOADTOOL avrdude CACHE STRING "AVR MCU Programmer ")
+set(AVR_PROGRAMMER arduino)
+set(AVR_UPLOADTOOL_PORT CACHE STRING "AVRdude upload port")
+set(AVR_UPLOADTOOL_BAUDRATE 57600)
+
+##########################################################################
+# AVR and fuses needs to be set
+##########################################################################
+set(AVR_MCU atmega32u4 CACHE STRING "AVR MCU type choose between atmega32_p or atmega32u4 atmega328p")
+set(AVR_H_FUSE 0xd9)
+set(AVR_L_FUSE 0xc3)
+
+### END TOOLCHAIN SETUP AREA #############################################
+
+include(${CMAKE_CURRENT_SOURCE_DIR}/rules/gcc-avr-generic.cmake)
+
+PROJECT(tinyapp)
+
+include(${CMAKE_CURRENT_SOURCE_DIR}/rules/gcc-avr-common.cmake)
+