Просмотр исходного кода

Merge pull request #1554 from kilograham/rp2040_warning2

Rework CMake example warnings some more
Ha Thach 3 лет назад
Родитель
Сommit
868f2bcda0
29 измененных файлов с 101 добавлено и 133 удалено
  1. 0 3
      examples/device/audio_4_channel_mic/CMakeLists.txt
  2. 0 3
      examples/device/audio_test/CMakeLists.txt
  3. 0 3
      examples/device/board_test/CMakeLists.txt
  4. 0 3
      examples/device/cdc_dual_ports/CMakeLists.txt
  5. 0 3
      examples/device/cdc_msc/CMakeLists.txt
  6. 0 3
      examples/device/dfu/CMakeLists.txt
  7. 0 3
      examples/device/dfu_runtime/CMakeLists.txt
  8. 0 3
      examples/device/dynamic_configuration/CMakeLists.txt
  9. 0 3
      examples/device/hid_boot_interface/CMakeLists.txt
  10. 0 3
      examples/device/hid_composite/CMakeLists.txt
  11. 0 3
      examples/device/hid_generic_inout/CMakeLists.txt
  12. 0 3
      examples/device/hid_multiple_interface/CMakeLists.txt
  13. 0 3
      examples/device/midi_test/CMakeLists.txt
  14. 0 3
      examples/device/msc_dual_lun/CMakeLists.txt
  15. 0 3
      examples/device/net_lwip_webserver/CMakeLists.txt
  16. 0 3
      examples/device/uac2_headset/CMakeLists.txt
  17. 0 3
      examples/device/usbtmc/CMakeLists.txt
  18. 0 3
      examples/device/video_capture/CMakeLists.txt
  19. 0 3
      examples/device/webusb_serial/CMakeLists.txt
  20. 3 6
      examples/dual/host_hid_to_device_cdc/CMakeLists.txt
  21. 0 32
      examples/example.cmake
  22. 0 3
      examples/host/bare_api/CMakeLists.txt
  23. 0 3
      examples/host/cdc_msc_hid/CMakeLists.txt
  24. 0 3
      examples/host/hid_controller/CMakeLists.txt
  25. 42 0
      hw/bsp/family_support.cmake
  26. 43 28
      hw/bsp/rp2040/family.cmake
  27. 10 0
      src/common/tusb_compiler.h
  28. 1 1
      src/host/usbh.c
  29. 2 0
      src/portable/raspberrypi/rp2040/rp2040_usb.c

+ 0 - 3
examples/device/audio_4_channel_mic/CMakeLists.txt

@@ -23,9 +23,6 @@ target_include_directories(${PROJECT} PUBLIC
   ${CMAKE_CURRENT_SOURCE_DIR}/src
 )
 
-# Example common such as compiler warnings
-include(${CMAKE_CURRENT_SOURCE_DIR}/../../example.cmake)
-
 # Configure compilation flags and libraries for the example... see the corresponding function
 # in hw/bsp/FAMILY/family.cmake for details.
 family_configure_device_example(${PROJECT})

+ 0 - 3
examples/device/audio_test/CMakeLists.txt

@@ -23,9 +23,6 @@ target_include_directories(${PROJECT} PUBLIC
   ${CMAKE_CURRENT_SOURCE_DIR}/src
 )
 
-# Example common such as compiler warnings
-include(${CMAKE_CURRENT_SOURCE_DIR}/../../example.cmake)
-
 # Configure compilation flags and libraries for the example... see the corresponding function
 # in hw/bsp/FAMILY/family.cmake for details.
 family_configure_device_example(${PROJECT})

+ 0 - 3
examples/device/board_test/CMakeLists.txt

@@ -36,9 +36,6 @@ else()
           ${CMAKE_CURRENT_SOURCE_DIR}/src
           )
 
-  # Example common such as compiler warnings
-  include(${CMAKE_CURRENT_SOURCE_DIR}/../../example.cmake)
-
   # Configure compilation flags and libraries for the example... see the corresponding function
   # in hw/bsp/FAMILY/family.cmake for details.
   family_configure_device_example(${PROJECT})

+ 0 - 3
examples/device/cdc_dual_ports/CMakeLists.txt

@@ -23,9 +23,6 @@ target_include_directories(${PROJECT} PUBLIC
         ${CMAKE_CURRENT_SOURCE_DIR}/src
         )
 
-# Example common such as compiler warnings
-include(${CMAKE_CURRENT_SOURCE_DIR}/../../example.cmake)
-
 # Configure compilation flags and libraries for the example... see the corresponding function
 # in hw/bsp/FAMILY/family.cmake for details.
 family_configure_device_example(${PROJECT})

+ 0 - 3
examples/device/cdc_msc/CMakeLists.txt

@@ -24,9 +24,6 @@ target_include_directories(${PROJECT} PUBLIC
         ${CMAKE_CURRENT_SOURCE_DIR}/src
         )
 
-# Example common such as compiler warnings
-include(${CMAKE_CURRENT_SOURCE_DIR}/../../example.cmake)
-
 # Configure compilation flags and libraries for the example... see the corresponding function
 # in hw/bsp/FAMILY/family.cmake for details.
 family_configure_device_example(${PROJECT})

+ 0 - 3
examples/device/dfu/CMakeLists.txt

@@ -23,9 +23,6 @@ target_include_directories(${PROJECT} PUBLIC
         ${CMAKE_CURRENT_SOURCE_DIR}/src
         )
 
-# Example common such as compiler warnings
-include(${CMAKE_CURRENT_SOURCE_DIR}/../../example.cmake)
-
 # Configure compilation flags and libraries for the example... see the corresponding function
 # in hw/bsp/FAMILY/family.cmake for details.
 family_configure_device_example(${PROJECT})

+ 0 - 3
examples/device/dfu_runtime/CMakeLists.txt

@@ -23,9 +23,6 @@ target_include_directories(${PROJECT} PUBLIC
         ${CMAKE_CURRENT_SOURCE_DIR}/src
         )
 
-# Example common such as compiler warnings
-include(${CMAKE_CURRENT_SOURCE_DIR}/../../example.cmake)
-
 # Configure compilation flags and libraries for the example... see the corresponding function
 # in hw/bsp/FAMILY/family.cmake for details.
 family_configure_device_example(${PROJECT})

+ 0 - 3
examples/device/dynamic_configuration/CMakeLists.txt

@@ -24,9 +24,6 @@ target_include_directories(${PROJECT} PUBLIC
         ${CMAKE_CURRENT_SOURCE_DIR}/src
         )
 
-# Example common such as compiler warnings
-include(${CMAKE_CURRENT_SOURCE_DIR}/../../example.cmake)
-
 # Configure compilation flags and libraries for the example... see the corresponding function
 # in hw/bsp/FAMILY/family.cmake for details.
 family_configure_device_example(${PROJECT})

+ 0 - 3
examples/device/hid_boot_interface/CMakeLists.txt

@@ -23,9 +23,6 @@ target_include_directories(${PROJECT} PUBLIC
         ${CMAKE_CURRENT_SOURCE_DIR}/src
         )
 
-# Example common such as compiler warnings
-include(${CMAKE_CURRENT_SOURCE_DIR}/../../example.cmake)
-
 # Configure compilation flags and libraries for the example... see the corresponding function
 # in hw/bsp/FAMILY/family.cmake for details.
 family_configure_device_example(${PROJECT})

+ 0 - 3
examples/device/hid_composite/CMakeLists.txt

@@ -23,9 +23,6 @@ target_include_directories(${PROJECT} PUBLIC
         ${CMAKE_CURRENT_SOURCE_DIR}/src
         )
 
-# Example common such as compiler warnings
-include(${CMAKE_CURRENT_SOURCE_DIR}/../../example.cmake)
-
 # Configure compilation flags and libraries for the example... see the corresponding function
 # in hw/bsp/FAMILY/family.cmake for details.
 family_configure_device_example(${PROJECT})

+ 0 - 3
examples/device/hid_generic_inout/CMakeLists.txt

@@ -23,9 +23,6 @@ target_include_directories(${PROJECT} PUBLIC
         ${CMAKE_CURRENT_SOURCE_DIR}/src
         )
 
-# Example common such as compiler warnings
-include(${CMAKE_CURRENT_SOURCE_DIR}/../../example.cmake)
-
 # Configure compilation flags and libraries for the example... see the corresponding function
 # in hw/bsp/FAMILY/family.cmake for details.
 family_configure_device_example(${PROJECT})

+ 0 - 3
examples/device/hid_multiple_interface/CMakeLists.txt

@@ -23,9 +23,6 @@ target_include_directories(${PROJECT} PUBLIC
         ${CMAKE_CURRENT_SOURCE_DIR}/src
         )
 
-# Example common such as compiler warnings
-include(${CMAKE_CURRENT_SOURCE_DIR}/../../example.cmake)
-
 # Configure compilation flags and libraries for the example... see the corresponding function
 # in hw/bsp/FAMILY/family.cmake for details.
 family_configure_device_example(${PROJECT})

+ 0 - 3
examples/device/midi_test/CMakeLists.txt

@@ -23,9 +23,6 @@ target_include_directories(${PROJECT} PUBLIC
         ${CMAKE_CURRENT_SOURCE_DIR}/src
         )
 
-# Example common such as compiler warnings
-include(${CMAKE_CURRENT_SOURCE_DIR}/../../example.cmake)
-
 # Configure compilation flags and libraries for the example... see the corresponding function
 # in hw/bsp/FAMILY/family.cmake for details.
 family_configure_device_example(${PROJECT})

+ 0 - 3
examples/device/msc_dual_lun/CMakeLists.txt

@@ -24,9 +24,6 @@ target_include_directories(${PROJECT} PUBLIC
         ${CMAKE_CURRENT_SOURCE_DIR}/src
         )
 
-# Example common such as compiler warnings
-include(${CMAKE_CURRENT_SOURCE_DIR}/../../example.cmake)
-
 # Configure compilation flags and libraries for the example... see the corresponding function
 # in hw/bsp/FAMILY/family.cmake for details.
 family_configure_device_example(${PROJECT})

+ 0 - 3
examples/device/net_lwip_webserver/CMakeLists.txt

@@ -69,9 +69,6 @@ if (EXISTS ${TOP}/lib/lwip/src)
             ${TOP}/lib/networking/rndis_reports.c
             )
 
-    # Example common such as compiler warnings
-    include(${CMAKE_CURRENT_SOURCE_DIR}/../../example.cmake)
-
     # due to warnings from other net source, we need to prevent error from some of the warnings options
     target_compile_options(${PROJECT} PUBLIC
         -Wno-error=null-dereference

+ 0 - 3
examples/device/uac2_headset/CMakeLists.txt

@@ -23,9 +23,6 @@ target_include_directories(${PROJECT} PUBLIC
         ${CMAKE_CURRENT_SOURCE_DIR}/src
         )
 
-# Example common such as compiler warnings
-include(${CMAKE_CURRENT_SOURCE_DIR}/../../example.cmake)
-
 # Configure compilation flags and libraries for the example... see the corresponding function
 # in hw/bsp/FAMILY/family.cmake for details.
 family_configure_device_example(${PROJECT})

+ 0 - 3
examples/device/usbtmc/CMakeLists.txt

@@ -24,9 +24,6 @@ target_include_directories(${PROJECT} PUBLIC
         ${CMAKE_CURRENT_SOURCE_DIR}/src
         )
 
-# Example common such as compiler warnings
-include(${CMAKE_CURRENT_SOURCE_DIR}/../../example.cmake)
-
 # Configure compilation flags and libraries for the example... see the corresponding function
 # in hw/bsp/FAMILY/family.cmake for details.
 family_configure_device_example(${PROJECT})

+ 0 - 3
examples/device/video_capture/CMakeLists.txt

@@ -23,9 +23,6 @@ target_include_directories(${PROJECT} PUBLIC
   ${CMAKE_CURRENT_SOURCE_DIR}/src
 )
 
-# Example common such as compiler warnings
-include(${CMAKE_CURRENT_SOURCE_DIR}/../../example.cmake)
-
 # Configure compilation flags and libraries for the example... see the corresponding function
 # in hw/bsp/FAMILY/family.cmake for details.
 family_configure_device_example(${PROJECT})

+ 0 - 3
examples/device/webusb_serial/CMakeLists.txt

@@ -23,9 +23,6 @@ target_include_directories(${PROJECT} PUBLIC
         ${CMAKE_CURRENT_SOURCE_DIR}/src
         )
 
-# Example common such as compiler warnings
-include(${CMAKE_CURRENT_SOURCE_DIR}/../../example.cmake)
-
 # Configure compilation flags and libraries for the example... see the corresponding function
 # in hw/bsp/FAMILY/family.cmake for details.
 family_configure_device_example(${PROJECT})

+ 3 - 6
examples/dual/host_hid_to_device_cdc/CMakeLists.txt

@@ -23,8 +23,9 @@ target_include_directories(${PROJECT} PUBLIC
         ${CMAKE_CURRENT_SOURCE_DIR}/src
         )
 
-# Example common such as compiler warnings
-include(${CMAKE_CURRENT_SOURCE_DIR}/../../example.cmake)
+# Configure compilation flags and libraries for the example... see the corresponding function
+# in hw/bsp/FAMILY/family.cmake for details.
+family_configure_dual_usb_example(${PROJECT})
 
 # due to warnings from other net source, we need to prevent error from some of the warnings options
 target_compile_options(${PROJECT} PUBLIC
@@ -37,7 +38,3 @@ target_compile_options(${PROJECT} PUBLIC
         -Wno-error=sign-compare
         -Wno-error=unused-function
         )
-
-# Configure compilation flags and libraries for the example... see the corresponding function
-# in hw/bsp/FAMILY/family.cmake for details.
-family_configure_dual_usb_example(${PROJECT})

+ 0 - 32
examples/example.cmake

@@ -1,32 +0,0 @@
-target_compile_options(${PROJECT} PUBLIC
-        -Wall
-        -Wextra
-        -Werror
-        -Wfatal-errors
-        -Wdouble-promotion
-        -Wfloat-equal
-        -Wshadow
-        -Wwrite-strings
-        -Wsign-compare
-        -Wmissing-format-attribute
-        -Wunreachable-code
-        -Wcast-align
-        -Wcast-qual
-        -Wnull-dereference
-        -Wuninitialized
-        -Wunused
-        -Wredundant-decls
-        #-Wstrict-prototypes
-        #-Werror-implicit-function-declaration
-        #-Wundef
-        )
-
-# GCC 10
-if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 10.0)
-  target_compile_options(${PROJECT} PUBLIC -Wconversion)
-endif()
-
-# GCC 8
-if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 8.0)
-  target_compile_options(${PROJECT} PUBLIC -Wcast-function-type -Wstrict-overflow)
-endif()

+ 0 - 3
examples/host/bare_api/CMakeLists.txt

@@ -22,9 +22,6 @@ target_include_directories(${PROJECT} PUBLIC
         ${CMAKE_CURRENT_SOURCE_DIR}/src
         )
 
-# Example common such as compiler warnings
-include(${CMAKE_CURRENT_SOURCE_DIR}/../../example.cmake)
-
 # Configure compilation flags and libraries for the example... see the corresponding function
 # in hw/bsp/FAMILY/family.cmake for details.
 family_configure_host_example(${PROJECT})

+ 0 - 3
examples/host/cdc_msc_hid/CMakeLists.txt

@@ -24,9 +24,6 @@ target_include_directories(${PROJECT} PUBLIC
         ${CMAKE_CURRENT_SOURCE_DIR}/src
         )
 
-# Example common such as compiler warnings
-include(${CMAKE_CURRENT_SOURCE_DIR}/../../example.cmake)
-
 # Configure compilation flags and libraries for the example... see the corresponding function
 # in hw/bsp/FAMILY/family.cmake for details.
 family_configure_host_example(${PROJECT})

+ 0 - 3
examples/host/hid_controller/CMakeLists.txt

@@ -23,9 +23,6 @@ target_include_directories(${PROJECT} PUBLIC
         ${CMAKE_CURRENT_SOURCE_DIR}/src
         )
 
-# Example common such as compiler warnings
-include(${CMAKE_CURRENT_SOURCE_DIR}/../../example.cmake)
-
 # Configure compilation flags and libraries for the example... see the corresponding function
 # in hw/bsp/FAMILY/family.cmake for details.
 family_configure_host_example(${PROJECT})

+ 42 - 0
hw/bsp/family_support.cmake

@@ -79,6 +79,48 @@ if (NOT TARGET _family_support_marker)
         endif()
     endfunction()
 
+    function(family_add_default_example_warnings TARGET)
+        target_compile_options(${TARGET} PUBLIC
+                -Wall
+                -Wextra
+                -Werror
+                -Wfatal-errors
+                -Wdouble-promotion
+                -Wfloat-equal
+                -Wshadow
+                -Wwrite-strings
+                -Wsign-compare
+                -Wmissing-format-attribute
+                -Wunreachable-code
+                -Wcast-align
+                -Wcast-qual
+                -Wnull-dereference
+                -Wuninitialized
+                -Wunused
+                -Wredundant-decls
+                #-Wstrict-prototypes
+                #-Werror-implicit-function-declaration
+                #-Wundef
+                )
+
+        if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
+            # GCC 10
+            if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 10.0)
+                target_compile_options(${TARGET} PUBLIC -Wconversion)
+            endif()
+
+            # GCC 8
+            if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 8.0)
+                target_compile_options(${TARGET} PUBLIC -Wcast-function-type -Wstrict-overflow)
+            endif()
+
+            # GCC 6
+            if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 6.0)
+                target_compile_options(${TARGET} PUBLIC -Wno-strict-aliasing)
+            endif()
+        endif()
+    endfunction()
+
     # configure an executable target to link to tinyusb in device mode, and add the board implementation
     function(family_configure_device_example TARGET)
         # default implentation is empty, the function should be redefined in the FAMILY/family.cmake

+ 43 - 28
hw/bsp/rp2040/family.cmake

@@ -147,16 +147,23 @@ if (NOT TARGET _rp2040_family_inclusion_marker)
 		target_link_libraries(${TARGET} PUBLIC pico_stdlib pico_bootsel_via_double_reset tinyusb_board tinyusb_additions)
 	endfunction()
 
+	function(rp2040_family_configure_example_warnings TARGET)
+		if (NOT PICO_TINYUSB_NO_EXAMPLE_WARNINGS)
+			family_add_default_example_warnings(${TARGET})
+		endif()
+		suppress_tinyusb_warnings()
+	endfunction()
+
 	function(family_configure_device_example TARGET)
 		family_configure_target(${TARGET})
 		target_link_libraries(${TARGET} PUBLIC pico_stdlib tinyusb_device)
-		suppress_tinyusb_warnings()
+		rp2040_family_configure_example_warnings(${TARGET})
 	endfunction()
 
 	function(family_configure_host_example TARGET)
 		family_configure_target(${TARGET})
 		target_link_libraries(${TARGET} PUBLIC pico_stdlib tinyusb_host)
-		suppress_tinyusb_warnings()
+		rp2040_family_configure_example_warnings(${TARGET})
 	endfunction()
 
 	function(family_add_pico_pio_usb TARGET)
@@ -167,7 +174,7 @@ if (NOT TARGET _rp2040_family_inclusion_marker)
 		family_configure_target(${TARGET})
 		# require tinyusb_pico_pio_usb
 		target_link_libraries(${TARGET} PUBLIC pico_stdlib tinyusb_device tinyusb_host tinyusb_pico_pio_usb )
-		suppress_tinyusb_warnings()
+		rp2040_family_configure_example_warnings(${TARGET})
 	endfunction()
 
 	function(check_and_add_pico_pio_usb_support)
@@ -236,30 +243,38 @@ if (NOT TARGET _rp2040_family_inclusion_marker)
 	# This method must be called from the project scope to suppress known warnings in TinyUSB source files
 	function(suppress_tinyusb_warnings)
 		# some of these are pretty silly warnings only occurring in some older GCC versions 9 or prior
-		if (CMAKE_C_COMPILER_VERSION VERSION_LESS 10.0)
-  		set(CONVERSION_WARNING_FILES
-  				${PICO_TINYUSB_PATH}/src/tusb.c
-  				${PICO_TINYUSB_PATH}/src/common/tusb_fifo.c
-  				${PICO_TINYUSB_PATH}/src/device/usbd.c
-  				${PICO_TINYUSB_PATH}/src/device/usbd_control.c
-  				${PICO_TINYUSB_PATH}/src/host/usbh.c
-  				${PICO_TINYUSB_PATH}/src/class/cdc/cdc_device.c
-  				${PICO_TINYUSB_PATH}/src/class/cdc/cdc_host.c
-  				${PICO_TINYUSB_PATH}/src/class/hid/hid_device.c
-  				${PICO_TINYUSB_PATH}/src/class/hid/hid_host.c
-  				${PICO_TINYUSB_PATH}/src/class/audio/audio_device.c
-  				${PICO_TINYUSB_PATH}/src/class/dfu/dfu_device.c
-  				${PICO_TINYUSB_PATH}/src/class/dfu/dfu_rt_device.c
-  				${PICO_TINYUSB_PATH}/src/class/midi/midi_device.c
-  				${PICO_TINYUSB_PATH}/src/class/usbtmc/usbtmc_device.c
-  				${PICO_TINYUSB_PATH}/src/portable/raspberrypi/rp2040/hcd_rp2040.c
-  				)
-  		foreach(SOURCE_FILE IN LISTS CONVERSION_WARNING_FILES)
-  			set_source_files_properties(
-  					${SOURCE_FILE}
-  					PROPERTIES
-  					COMPILE_FLAGS "-Wno-conversion")
-  		endforeach()
-  	endif()
+		if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
+			if (CMAKE_C_COMPILER_VERSION VERSION_LESS 10.0)
+				set(CONVERSION_WARNING_FILES
+					${PICO_TINYUSB_PATH}/src/tusb.c
+					${PICO_TINYUSB_PATH}/src/common/tusb_fifo.c
+					${PICO_TINYUSB_PATH}/src/device/usbd.c
+					${PICO_TINYUSB_PATH}/src/device/usbd_control.c
+					${PICO_TINYUSB_PATH}/src/host/usbh.c
+					${PICO_TINYUSB_PATH}/src/class/cdc/cdc_device.c
+					${PICO_TINYUSB_PATH}/src/class/cdc/cdc_host.c
+					${PICO_TINYUSB_PATH}/src/class/hid/hid_device.c
+					${PICO_TINYUSB_PATH}/src/class/hid/hid_host.c
+					${PICO_TINYUSB_PATH}/src/class/audio/audio_device.c
+					${PICO_TINYUSB_PATH}/src/class/dfu/dfu_device.c
+					${PICO_TINYUSB_PATH}/src/class/dfu/dfu_rt_device.c
+					${PICO_TINYUSB_PATH}/src/class/midi/midi_device.c
+					${PICO_TINYUSB_PATH}/src/class/usbtmc/usbtmc_device.c
+					${PICO_TINYUSB_PATH}/src/portable/raspberrypi/rp2040/hcd_rp2040.c
+					)
+				foreach(SOURCE_FILE IN LISTS CONVERSION_WARNING_FILES)
+					set_source_files_properties(
+							${SOURCE_FILE}
+							PROPERTIES
+							COMPILE_FLAGS "-Wno-conversion")
+				endforeach()
+			endif()
+			if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 11.0)
+				set_source_files_properties(
+						${PICO_TINYUSB_PATH}/src/portable/raspberrypi/rp2040/rp2040_usb.c
+						PROPERTIES
+						COMPILE_FLAGS "-Wno-stringop-overflow -Wno-array-bounds")
+			endif()
+		endif()
 	endfunction()
 endif()

+ 10 - 0
src/common/tusb_compiler.h

@@ -131,6 +131,12 @@
   #define TU_ATTR_BIT_FIELD_ORDER_BEGIN
   #define TU_ATTR_BIT_FIELD_ORDER_END
 
+  #if __has_attribute(__fallthrough__)
+    #define TU_ATTR_FALLTHROUGH         __attribute__((fallthrough))
+  #else
+    #define TU_ATTR_FALLTHROUGH         do {} while (0)  /* fallthrough */
+  #endif
+
   // Endian conversion use well-known host to network (big endian) naming
   #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
     #define TU_BYTE_ORDER TU_LITTLE_ENDIAN
@@ -156,6 +162,7 @@
   #define TU_ATTR_DEPRECATED(mess)      __attribute__ ((deprecated(mess))) // warn if function with this attribute is used
   #define TU_ATTR_UNUSED                __attribute__ ((unused))           // Function/Variable is meant to be possibly unused
   #define TU_ATTR_USED                  __attribute__ ((used))
+  #define TU_ATTR_FALLTHROUGH           __attribute__((fallthrough))
 
   #define TU_ATTR_PACKED_BEGIN
   #define TU_ATTR_PACKED_END
@@ -182,6 +189,7 @@
   #define TU_ATTR_DEPRECATED(mess)      __attribute__ ((deprecated(mess))) // warn if function with this attribute is used
   #define TU_ATTR_UNUSED                __attribute__ ((unused))           // Function/Variable is meant to be possibly unused
   #define TU_ATTR_USED                  __attribute__ ((used))             // Function/Variable is meant to be used
+  #define TU_ATTR_FALLTHROUGH           __attribute__((fallthrough))
 
   #define TU_ATTR_PACKED_BEGIN
   #define TU_ATTR_PACKED_END
@@ -207,6 +215,7 @@
   #define TU_ATTR_DEPRECATED(mess)
   #define TU_ATTR_UNUSED
   #define TU_ATTR_USED
+  #define TU_ATTR_FALLTHROUGH           do {} while (0)  /* fallthrough */
 
   #define TU_ATTR_PACKED_BEGIN          _Pragma("pack")
   #define TU_ATTR_PACKED_END            _Pragma("packoption")
@@ -227,6 +236,7 @@
   #error "Compiler attribute porting is required"
 #endif
 
+
 #if (TU_BYTE_ORDER == TU_LITTLE_ENDIAN)
 
   #define tu_htons(u16)  (TU_BSWAP16(u16))

+ 1 - 1
src/host/usbh.c

@@ -655,7 +655,7 @@ static bool usbh_control_xfer_cb (uint8_t dev_addr, uint8_t ep_addr, xfer_result
           TU_ASSERT( hcd_edpt_xfer(rhport, dev_addr, tu_edpt_addr(0, request->bmRequestType_bit.direction), _ctrl_xfer.buffer, request->wLength) );
           return true;
         }
-        __attribute__((fallthrough));
+        TU_ATTR_FALLTHROUGH;
 
       case CONTROL_STAGE_DATA:
         if (request->wLength)

+ 2 - 0
src/portable/raspberrypi/rp2040/rp2040_usb.c

@@ -60,7 +60,9 @@ void rp2040_usb_init(void)
   // Clear any previous state just in case
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Warray-bounds"
+#if __GNUC__ > 6
 #pragma GCC diagnostic ignored "-Wstringop-overflow"
+#endif
   memset(usb_hw, 0, sizeof(*usb_hw));
   memset(usb_dpram, 0, sizeof(*usb_dpram));
 #pragma GCC diagnostic pop