From e23c120c8b8ea16ffd39c7fe485b884d002b8327 Mon Sep 17 00:00:00 2001 From: RDR8 Date: Fri, 24 Mar 2017 03:28:12 -0500 Subject: [PATCH] Automate compiler flags selection. --- examples/Makefile | 46 ++++++++++++++++++++----------------- examples/audio_standalone.c | 2 +- src/Makefile | 38 ++++++++++++++++++++++-------- 3 files changed, 55 insertions(+), 31 deletions(-) diff --git a/examples/Makefile b/examples/Makefile index e271355db..84a8398ba 100644 --- a/examples/Makefile +++ b/examples/Makefile @@ -40,7 +40,7 @@ ifeq ($(PLATFORM),PLATFORM_DESKTOP) else UNAMEOS:=$(shell uname) ifeq ($(UNAMEOS),Linux) - PLATFORM_OS=linux + PLATFORM_OS=LINUX LIBPATH=linux else ifeq ($(UNAMEOS),Darwin) @@ -66,15 +66,24 @@ endif endif # define compiler flags: -# -O2 defines optimization level -# -s strip unnecessary data from build -# -Wall turns on most, but not all, compiler warnings -# -std=c99 use standard C from 1999 revision -ifeq ($(PLATFORM),PLATFORM_RPI) - CFLAGS = -O2 -s -Wall -std=gnu99 -fgnu89-inline -else +# -O2 defines optimization level +# -Og enable debugging +# -s strip unnecessary data from build +# -Wall turns on most, but not all, compiler warnings +# -std=c99 defines C language mode (standard C from 1999 revision) +# -std=gnu99 defines C language mode (GNU C from 1999 revision) +# -fgnu89-inline declaring inline functions support (GCC optimized) +# -Wno-missing-braces ignore invalid warning (GCC bug 53119) +# -D_DEFAULT_SOURCE use with -std=c99 on Linux to enable timespec and drflac +ifeq ($(PLATFORM),PLATFORM_DESKTOP) + ifeq ($(PLATFORM_OS),WINDOWS) + CFLAGS = -O2 -s -Wall -std=c99 + endif ifeq ($(PLATFORM_OS),LINUX) - CFLAGS = -O2 -s -Wall -std=c99 --D_DEFAULT_SOURCE + CFLAGS = -O2 -s -Wall -std=c99 -D_DEFAULT_SOURCE + endif + ifeq ($(PLATFORM_OS),OSX) + CFLAGS = -O2 -s -Wall -std=c99 endif endif ifeq ($(PLATFORM),PLATFORM_WEB) @@ -82,7 +91,9 @@ ifeq ($(PLATFORM),PLATFORM_WEB) #-s ALLOW_MEMORY_GROWTH=1 # to allow memory resizing #-s TOTAL_MEMORY=16777216 # to specify heap memory size (default = 16MB) endif - +ifeq ($(PLATFORM),PLATFORM_RPI) + CFLAGS = -O2 -s -Wall -std=gnu99 -fgnu89-inline +endif #CFLAGSEXTRA = -Wextra -Wmissing-prototypes -Wstrict-prototypes # define raylib release directory for compiled library @@ -90,7 +101,7 @@ ifeq ($(PLATFORM),PLATFORM_DESKTOP) ifeq ($(PLATFORM_OS),WINDOWS) RAYLIB_PATH = ../release/win32/mingw32 endif - ifeq ($(PLATFORM_OS),linux) + ifeq ($(PLATFORM_OS),LINUX) RAYLIB_PATH = ../release/linux endif ifeq ($(PLATFORM_OS),OSX) @@ -112,9 +123,7 @@ ifeq ($(PLATFORM),PLATFORM_RPI) endif ifeq ($(PLATFORM),PLATFORM_DESKTOP) # add standard directories for GNU/Linux - ifeq ($(PLATFORM_OS),linux) - INCLUDES += -I/usr/local/include/raylib/ - else ifeq ($(PLATFORM_OS),WINDOWS) + ifeq ($(PLATFORM_OS),WINDOWS) # external libraries headers # GLFW3 INCLUDES += -I../src/external/glfw3/include @@ -143,7 +152,7 @@ endif # define any libraries to link into executable # if you want to link libraries (libname.so or libname.a), use the -lname ifeq ($(PLATFORM),PLATFORM_DESKTOP) - ifeq ($(PLATFORM_OS),linux) + ifeq ($(PLATFORM_OS),LINUX) # libraries for Debian GNU/Linux desktop compiling # requires the following packages: # libglfw3-dev libopenal-dev libegl1-mesa-dev @@ -187,11 +196,6 @@ ifeq ($(PLATFORM_OS),WINDOWS) WINFLAGS = ../src/resources -Wl,--subsystem,windows endif -# Linux Fix to timespect from -ifeq ($(PLATFORM_OS),linux) - CFLAGS += -D_DEFAULT_SOURCE - endif - ifeq ($(PLATFORM),PLATFORM_WEB) EXT = .html endif @@ -536,7 +540,7 @@ ifeq ($(PLATFORM),PLATFORM_DESKTOP) find . -type f -perm +ugo+x -delete rm -f *.o else - ifeq ($(PLATFORM_OS),linux) + ifeq ($(PLATFORM_OS),LINUX) find -type f -executable | xargs file -i | grep -E 'x-object|x-archive|x-sharedlib|x-executable' | rev | cut -d ':' -f 2- | rev | xargs rm -f else del *.o *.exe diff --git a/examples/audio_standalone.c b/examples/audio_standalone.c index d090bb836..3edf88956 100644 --- a/examples/audio_standalone.c +++ b/examples/audio_standalone.c @@ -29,7 +29,7 @@ #endif #include "audio.h" -#if defined(__linux) +#if defined(__linux__) #include #include diff --git a/src/Makefile b/src/Makefile index eeb0ce35e..80b10c90c 100644 --- a/src/Makefile +++ b/src/Makefile @@ -60,7 +60,7 @@ ifeq ($(PLATFORM),PLATFORM_DESKTOP) else UNAMEOS:=$(shell uname) ifeq ($(UNAMEOS),Linux) - PLATFORM_OS=linux + PLATFORM_OS=LINUX else ifeq ($(UNAMEOS),Darwin) PLATFORM_OS=OSX @@ -152,16 +152,36 @@ ifeq ($(PLATFORM),PLATFORM_ANDROID) endif # define compiler flags: -# -O1 defines optimization level +# -O2 defines optimization level # -Og enable debugging # -Wall turns on most, but not all, compiler warnings # -std=c99 defines C language mode (standard C from 1999 revision) # -std=gnu99 defines C language mode (GNU C from 1999 revision) # -fgnu89-inline declaring inline functions support (GCC optimized) # -Wno-missing-braces ignore invalid warning (GCC bug 53119) -# -D_DEFAULT_SOURCE use with -std=c99 on Linux to enable timespec and audio -#CFLAGS = -O1 -Wall -std=gnu99 -fgnu89-inline -Wno-missing-braces -CFLAGS = -O1 -Wall -std=c99 -D_DEFAULT_SOURCE +# -D_DEFAULT_SOURCE use with -std=c99 on Linux to enable timespec and drflac +ifeq ($(PLATFORM),PLATFORM_DESKTOP) + ifeq ($(PLATFORM_OS),WINDOWS) + CFLAGS = -O1 -Wall -std=gnu99 -fgnu89-inline -Wno-missing-braces + endif + ifeq ($(PLATFORM_OS),LINUX) + CFLAGS = -O1 -Wall -std=c99 -D_DEFAULT_SOURCE + endif + ifeq ($(PLATFORM_OS),OSX) + CFLAGS = -O1 -Wall -std=gnu99 -fgnu89-inline -Wno-missing-braces + endif +endif +ifeq ($(PLATFORM),PLATFORM_WEB) + CFLAGS = -O1 -Wall -std=c99 -s USE_GLFW=3 -s ASSERTIONS=1 --preload-file resources + #-s ALLOW_MEMORY_GROWTH=1 # to allow memory resizing + #-s TOTAL_MEMORY=16777216 # to specify heap memory size (default = 16MB) +endif +ifeq ($(PLATFORM),PLATFORM_RPI) + CFLAGS = -O1 -Wall -std=gnu99 -fgnu89-inline -Wno-missing-braces +endif +#CFLAGSEXTRA = -Wextra -Wmissing-prototypes -Wstrict-prototypes + +########### # if shared library required, make sure code is compiled as position independent @@ -217,7 +237,7 @@ ifeq ($(PLATFORM),PLATFORM_DESKTOP) ifeq ($(PLATFORM_OS),WINDOWS) OUTPUT_PATH = ../release/win32/mingw32 endif - ifeq ($(PLATFORM_OS),linux) + ifeq ($(PLATFORM_OS),LINUX) OUTPUT_PATH = ../release/linux endif ifeq ($(PLATFORM_OS),OSX) @@ -268,7 +288,7 @@ ifeq ($(PLATFORM),PLATFORM_WEB) @echo "libraylib.bc generated (web version)!" else ifeq ($(SHARED),YES) - ifeq ($(PLATFORM_OS),linux) + ifeq ($(PLATFORM_OS),LINUX) # compile raylib to shared library version for GNU/Linux. # WARNING: you should type "make clean" before doing this target $(CC) -shared -o $(OUTPUT_PATH)/libraylib.so $(OBJS) @@ -337,7 +357,7 @@ utils.o : utils.c utils.h # TODO: add other platforms. install : ifeq ($(ROOT),root) - ifeq ($(PLATFORM_OS),linux) + ifeq ($(PLATFORM_OS),LINUX) # On GNU/Linux there are some standard directories that contain # libraries and header files. These directory (/usr/local/lib and # /usr/local/include/) are for libraries that are installed @@ -360,7 +380,7 @@ endif # TODO: see 'install' target. unistall : ifeq ($(ROOT),root) - ifeq ($(PLATFORM_OS),linux) + ifeq ($(PLATFORM_OS),LINUX) rm --force /usr/local/include/raylib.h ifeq ($(SHARED),YES) rm --force /usr/local/lib/libraylib.so