Blame view

RIOT/makefiles/cflags.inc.mk 2.9 KB
a752c7ab   elopes   add first test an...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
  # Test if the input language was specified externally.
  # Otherwise test if the compiler unterstands the "-std=c99" flag, and use it if so.
  ifeq ($(filter -std=%,$(CFLAGS)),)
    ifeq ($(shell $(CC) -std=c99 -E - 2>/dev/null >/dev/null </dev/null ; echo $$?),0)
      CFLAGS += -std=c99
    endif
  endif
  
  # Add `-fno-delete-null-pointer-checks` flag iff the compiler supports it.
  # GCC removes moves tests whether `x == NULL`, if previously `x` or even `x->y` was accessed.
  # 0x0 might be a sane memory location for embedded systems, so the test must not be removed.
  # Right now clang does not use the *delete-null-pointer* optimization, and does not understand the parameter.
  # Related issues: #628, #664.
  ifeq ($(shell $(CC) -fno-delete-null-pointer-checks -E - 2>/dev/null >/dev/null </dev/null ; echo $$?),0)
    ifeq ($(shell LANG=C $(CC) -fno-delete-null-pointer-checks -E - 2>&1 1>/dev/null </dev/null | grep warning: | grep -- -fno-delete-null-pointer-checks),)
      CFLAGS += -fno-delete-null-pointer-checks
  
      ifneq ($(shell $(CXX) -fno-delete-null-pointer-checks -E - 2>/dev/null >/dev/null </dev/null ; echo $$?),0)
        CXXUWFLAGS += -fno-delete-null-pointer-checks
      else
        ifneq ($(shell LANG=C $(CXX) -fno-delete-null-pointer-checks -E - 2>&1 1>/dev/null </dev/null | grep warning: | grep -- -fno-delete-null-pointer-checks),)
          CXXUWFLAGS += -fno-delete-null-pointer-checks
        endif
      endif
    endif
  endif
  
  # Use colored compiler output if the compiler supports this and if this is not
  # disabled by the user
  CC_NOCOLOR ?= 0
  ifeq ($(CC_NOCOLOR),0)
    ifeq ($(shell $(CC) -fdiagnostics-color -E - 2>/dev/null >/dev/null </dev/null ; echo $$?),0)
      CFLAGS += -fdiagnostics-color
    endif
  endif
  
  # Fast-out on old style function definitions.
  # They cause unreadable error compiler errors on missing semicolons.
  # Worse yet they hide errors by accepting wildcard argument types.
  ifeq ($(shell $(CC) -Wstrict-prototypes -Werror=strict-prototypes -Wold-style-definition -Werror=old-style-definition -E - 2>/dev/null >/dev/null </dev/null ; echo $$?),0)
    # duplicated parameters don't hurt
    CFLAGS += -Wstrict-prototypes -Wold-style-definition
    CXXUWFLAGS += -Wstrict-prototypes -Wold-style-definition
    ifeq ($(WERROR),1)
      CFLAGS += -Werror=strict-prototypes -Werror=old-style-definition
    endif
  endif
  
  # Unwanted flags for c++
  CXXUWFLAGS += -std=%
  
  ifeq ($(LTO),1)
    $(warning Building with Link-Time-Optimizations is currently an experimental feature. Expect broken binaries.)
    LTOFLAGS = -flto
    LINKFLAGS += ${LTOFLAGS}
  endif
  
  # Forbid common symbols to prevent accidental aliasing.
  CFLAGS += -fno-common
  
  # Enable all default warnings
  CFLAGS += -Wall
  
  ifeq (,$(filter -DDEVELHELP,$(CFLAGS)))
    ifneq (1,$(FORCE_ASSERTS))
      CFLAGS += -DNDEBUG
    endif
  endif
  
  # Default ARFLAGS for platforms which do not specify it.
  # Note: make by default provides ARFLAGS=rv which we want to override
  ifeq ($(origin ARFLAGS),default)
    ARFLAGS = rcs
  endif