Skip to content

Commit

Permalink
spi_master: compile as C11 due to use of stdatomic.h
Browse files Browse the repository at this point in the history
stdatomic.h is available both in newlib and GCC include directories.
Normally (if you invoke the compiler without any flags) GCC include
directories are first on the list, so GCC’s stdatomic.h is used. In
IDF, we used to pass newlib include path as an extra include
directory, so newlib’s stdint.h got included instead.

Newlib 2.2.0 stdatomic implementation is compatible with -std=gnu99
but incompatible with -std=gnu11. And GCC doesn’t support atomic_load
with -std=gnu99 (it’s a C11 feature). So when we used atomic_load
with -std=gnu99, it worked due to newlib’s header.

Since we are no longer going to be including newlib headers into IDF,
GCC stdatomic will be used instead. Hence, add -std=gnu11 for source
files which use atomic features.
  • Loading branch information
igrr committed Apr 10, 2019
1 parent c064e00 commit 7027d2d
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 0 deletions.
6 changes: 6 additions & 0 deletions components/driver/CMakeLists.txt
Expand Up @@ -25,3 +25,9 @@ set(COMPONENT_PRIV_INCLUDEDIRS "include/driver")
set(COMPONENT_REQUIRES esp_ringbuf)

register_component()


if(GCC_NOT_5_2_0)
# uses C11 atomic feature
set_source_files_properties(spi_master.c PROPERTIES COMPILE_FLAGS -std=gnu11)
endif()
4 changes: 4 additions & 0 deletions components/driver/component.mk
Expand Up @@ -6,3 +6,7 @@ COMPONENT_ADD_INCLUDEDIRS := include

COMPONENT_PRIV_INCLUDEDIRS := include/driver

ifeq ($(GCC_NOT_5_2_0), 1)
# uses C11 atomic feature
spi_master.o: CFLAGS += -std=gnu11
endif

0 comments on commit 7027d2d

Please sign in to comment.