diff options
| author | raysan5 <[email protected]> | 2017-10-14 00:13:23 +0200 |
|---|---|---|
| committer | raysan5 <[email protected]> | 2017-10-14 00:13:23 +0200 |
| commit | 5430d5d52e61ce5cd7e02d99b5d98f8fc56ddb28 (patch) | |
| tree | 9e76b9af02ecb98679635139bffd6166ea580a13 /src/Makefile | |
| parent | 975e611bb8454d35ebcae680d33eb031a953c71d (diff) | |
| download | raylib-5430d5d52e61ce5cd7e02d99b5d98f8fc56ddb28.tar.gz raylib-5430d5d52e61ce5cd7e02d99b5d98f8fc56ddb28.zip | |
Review Makefiles
Diffstat (limited to 'src/Makefile')
| -rw-r--r-- | src/Makefile | 203 |
1 files changed, 88 insertions, 115 deletions
diff --git a/src/Makefile b/src/Makefile index f577ebae..2545fd59 100644 --- a/src/Makefile +++ b/src/Makefile @@ -40,35 +40,33 @@ .PHONY: all clean install uninstall -# define raylib platform to compile for -# possible platforms: PLATFORM_DESKTOP PLATFORM_ANDROID PLATFORM_RPI PLATFORM_WEB +# Define required raylib variables PLATFORM ?= PLATFORM_DESKTOP +RAYLIB_PATH ?= .. -# define raylib library type: STATIC (.a) or SHARED (.so/.dll) -RAYLIB_LIBTYPE ?= SHARED - -# define OpenAL Soft library type: STATIC (.a) or SHARED (.so/.dll) +# Library type used for raylib and OpenAL Soft: STATIC (.a) or SHARED (.so/.dll) # NOTE: OpenAL Soft library should be provided in the selected form -OPENAL_LIBTYPE ?= SHARED +RAYLIB_LIBTYPE ?= STATIC +OPENAL_LIBTYPE ?= STATIC -# on PLATFORM_WEB force OpenAL Soft shared library +# On PLATFORM_WEB force OpenAL Soft shared library ifeq ($(PLATFORM),PLATFORM_WEB) OPENAL_LIBTYPE = SHARED endif -# determine if the file has root access (only for installing raylib) +# Determine if the file has root access (only for installing raylib) # "whoami" prints the name of the user that calls him (so, if it is the root # user, "whoami" prints "root"). ROOT = $(shell whoami) -# determine PLATFORM_OS in case PLATFORM_DESKTOP selected +# Determine PLATFORM_OS in case PLATFORM_DESKTOP selected ifeq ($(PLATFORM),PLATFORM_DESKTOP) # No uname.exe on MinGW!, but OS=Windows_NT on Windows! # ifeq ($(UNAME),Msys) -> Windows ifeq ($(OS),Windows_NT) PLATFORM_OS=WINDOWS else - UNAMEOS:=$(shell uname) + UNAMEOS=$(shell uname) ifeq ($(UNAMEOS),Linux) PLATFORM_OS=LINUX else @@ -95,6 +93,33 @@ ifeq ($(PLATFORM),PLATFORM_WEB) EMSCRIPTEN=$(EMSDK_PATH)\emscripten\$(EMSCRIPTEN_VERSION) endif +# Define output directory for compiled library +ifeq ($(PLATFORM),PLATFORM_DESKTOP) + ifeq ($(PLATFORM_OS),WINDOWS) + RAYLIB_RELEASE_PATH = $(RAYLIB_PATH)/release/libs/win32/mingw32 + endif + ifeq ($(PLATFORM_OS),LINUX) + RAYLIB_RELEASE_PATH = $(RAYLIB_PATH)/release/libs/linux + endif + ifeq ($(PLATFORM_OS),OSX) + RAYLIB_RELEASE_PATH = $(RAYLIB_PATH)/release/libs/osx + endif +endif +ifeq ($(PLATFORM),PLATFORM_RPI) + RAYLIB_RELEASE_PATH = $(RAYLIB_PATH)/release/libs/rpi +endif +ifeq ($(PLATFORM),PLATFORM_WEB) + RAYLIB_RELEASE_PATH = $(RAYLIB_PATH)/release/libs/html5 +endif +ifeq ($(PLATFORM),PLATFORM_ANDROID) + ifeq ($(ANDROID_ARCH),ARM) + RAYLIB_RELEASE_PATH = $(RAYLIB_PATH)/release/libs/android/armeabi-v7a + endif + ifeq ($(ANDROID_ARCH),ARM64) + RAYLIB_RELEASE_PATH = $(RAYLIB_PATH)/release/libs/android/arm64-v8a + endif +endif + ifeq ($(PLATFORM),PLATFORM_ANDROID) # Android required path variables ANDROID_NDK = C:/android-ndk @@ -104,33 +129,31 @@ ifeq ($(PLATFORM),PLATFORM_ANDROID) ANDROID_ARCH ?= ARM endif -# define raylib graphics api depending on selected platform +# Define raylib graphics api depending on selected platform ifeq ($(PLATFORM),PLATFORM_DESKTOP) - # by default use OpenGL 3.3 on desktop platforms + # By default use OpenGL 3.3 on desktop platforms GRAPHICS ?= GRAPHICS_API_OPENGL_33 #GRAPHICS = GRAPHICS_API_OPENGL_11 # Uncomment to use OpenGL 1.1 #GRAPHICS = GRAPHICS_API_OPENGL_21 # Uncomment to use OpenGL 2.1 endif ifeq ($(PLATFORM),PLATFORM_RPI) - # on RPI OpenGL ES 2.0 must be used + # On RPI OpenGL ES 2.0 must be used GRAPHICS = GRAPHICS_API_OPENGL_ES2 endif ifeq ($(PLATFORM),PLATFORM_WEB) - # on HTML5 OpenGL ES 2.0 is used, emscripten translates it to WebGL 1.0 + # On HTML5 OpenGL ES 2.0 is used, emscripten translates it to WebGL 1.0 GRAPHICS = GRAPHICS_API_OPENGL_ES2 endif ifeq ($(PLATFORM),PLATFORM_ANDROID) - # by default use OpenGL ES 2.0 on Android + # By default use OpenGL ES 2.0 on Android GRAPHICS = GRAPHICS_API_OPENGL_ES2 endif -# NOTE: makefiles targets require tab indentation -# NOTE: define compiler: gcc for C program, define as g++ for C++ - -# default C compiler: gcc +# Default C compiler: gcc +# NOTE: define g++ compiler if using C++ CC = gcc ifeq ($(PLATFORM),PLATFORM_DESKTOP) @@ -151,7 +174,7 @@ ifeq ($(PLATFORM),PLATFORM_WEB) endif ifeq ($(PLATFORM),PLATFORM_ANDROID) # Android toolchain (must be provided for desired architecture and compiler) - # NOTE: gcc compiler is being deprecated at Android NDK r16 + # NOTE: gcc compiler is being deprecated in Android NDK r16 ifeq ($(ANDROID_ARCH),ARM) CC = $(ANDROID_TOOLCHAIN)/bin/arm-linux-androideabi-gcc endif @@ -160,8 +183,7 @@ ifeq ($(PLATFORM),PLATFORM_ANDROID) endif endif - -# default archiver program to pack libraries +# Default archiver program to pack libraries AR = ar # Android archiver (also depends on desired architecture) @@ -174,7 +196,7 @@ ifeq ($(PLATFORM),PLATFORM_ANDROID) endif endif -# define compiler flags: +# Define compiler flags: # -O1 defines optimization level # -Og enable debugging # -s strip unnecessary data from build @@ -186,7 +208,7 @@ endif # -D_DEFAULT_SOURCE use with -std=c99 CFLAGS += -O1 -Wall -std=c99 -D_DEFAULT_SOURCE -fgnu89-inline -Wno-missing-braces -# additional flags for compiler (if desired) +# Additional flags for compiler (if desired) #CFLAGS += -Wextra -Wmissing-prototypes -Wstrict-prototypes ifeq ($(PLATFORM),PLATFORM_WEB) # -O2 # if used, also set --memory-init-file 0 @@ -207,7 +229,7 @@ ifeq ($(PLATFORM),PLATFORM_ANDROID) CFLAGS += -DANDROID -DPLATFORM_ANDROID -D__ANDROID_API__=16 endif -# define raylib libtype required compilation flags +# Define required compilation flags for raylib SHARED lib ifeq ($(RAYLIB_LIBTYPE),SHARED) # make sure code is compiled as position independent # BE CAREFUL: It seems that for gcc -fpic si not the same as -fPIC @@ -215,37 +237,17 @@ ifeq ($(RAYLIB_LIBTYPE),SHARED) CFLAGS += -fPIC -DBUILD_LIBTYPE_SHARED endif -# if static OpenAL Soft required, define the corresponding flags -# NOTE: ALLIBS flag only required for raylib Win32 SHARED library building -ifeq ($(OPENAL_LIBTYPE),STATIC) - ALLIBS = -lopenal32 -lwinmm - ALFLAGS = -DAL_LIBTYPE_STATIC -else - ALLIBS = -lopenal32dll -endif - -# define include paths for required headers -# external required libraries (stb and others) -INCLUDE_PATHS = -I. -Iexternal +# Define include paths for required headers +# NOTE: Several external required libraries (stb and others) +INCLUDE_PATHS = -I. -Iexternal -Iexternal/include -# OpenAL Soft library -INCLUDE_PATHS += -Iexternal/openal_soft/include - -# define any directories containing required header files -ifeq ($(PLATFORM),PLATFORM_DESKTOP) - # GLFW3 library - INCLUDE_PATHS += -Iexternal/glfw3/include -endif +# Define additional directories containing required header files ifeq ($(PLATFORM),PLATFORM_RPI) # RPI requried libraries INCLUDE_PATHS += -I/opt/vc/include INCLUDE_PATHS += -I/opt/vc/include/interface/vmcs_host/linux INCLUDE_PATHS += -I/opt/vc/include/interface/vcos/pthreads endif -ifeq ($(PLATFORM),PLATFORM_WEB) - # GLFW3 library - INCLUDE_PATHS += -Iexternal/glfw3/include -endif ifeq ($(PLATFORM),PLATFORM_ANDROID) # Android required libraries INCLUDE_PATHS += -I$(ANDROID_TOOLCHAIN)/sysroot/usr/include @@ -254,58 +256,30 @@ ifeq ($(PLATFORM),PLATFORM_ANDROID) #INCLUDE_PATHS += -I$(ANDROID_NDK)/sources/android/native_app_glue endif -# Linker options +# Define linker options ifeq ($(PLATFORM),PLATFORM_ANDROID) LDFLAGS = -Wl,-soname,libraylib.so -Wl,--exclude-libs,libatomic.a LDFLAGS += -Wl,--build-id -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--warn-shared-textrel -Wl,--fatal-warnings # Force linking of library module to define symbol LDFLAGS += -u ANativeActivity_onCreate # Library paths containing required libs - LDFLAGS += -L. -Lsrc -L$(OUTPUT_PATH) -Lexternal/openal_soft/lib/android + LDFLAGS += -L. -Lsrc -L$(RAYLIB_RELEASE_PATH) -Lexternal/openal_soft/lib/android LDLIBS = -lopenal -llog -landroid -lEGL -lGLESv2 -lOpenSLES -latomic -lc -lm endif -# define output directory for compiled library -ifeq ($(PLATFORM),PLATFORM_DESKTOP) - ifeq ($(PLATFORM_OS),WINDOWS) - OUTPUT_PATH = ../release/libs/win32/mingw32 - endif - ifeq ($(PLATFORM_OS),LINUX) - OUTPUT_PATH = ../release/libs/linux - endif - ifeq ($(PLATFORM_OS),OSX) - OUTPUT_PATH = ../release/libs/osx - endif -endif -ifeq ($(PLATFORM),PLATFORM_RPI) - OUTPUT_PATH = ../release/libs/rpi -endif -ifeq ($(PLATFORM),PLATFORM_WEB) - OUTPUT_PATH = ../release/libs/html5 -endif -ifeq ($(PLATFORM),PLATFORM_ANDROID) - ifeq ($(ANDROID_ARCH),ARM) - OUTPUT_PATH = ../release/libs/android/armeabi-v7a - endif - ifeq ($(ANDROID_ARCH),ARM64) - OUTPUT_PATH = ../release/libs/android/arm64-v8a - endif -endif - -# define all object files required with a wildcard -# The wildcard takes all files that finish with ".c", then it replaces the -# extentions with ".o", that are the object files. +# Define all object files required with a wildcard +# The wildcard takes all files that finish with ".c", +# and replaces extentions with ".o", that are the object files OBJS = $(patsubst %.c, %.o, $(wildcard *.c)) OBJS += stb_vorbis.o -# typing 'make' will invoke the default target entry called 'all', -# in this case, the 'default' target entry is raylib +# Default target entry all: raylib -# generate standalone Android toolchain +# Generate standalone Android toolchain # NOTE: Android toolchain could already be provided -toolchain: +generate_android_toolchain: ifeq ($(PLATFORM),PLATFORM_ANDROID) ifeq ($(ANDROID_ARCH),ARM) $(ANDROID_NDK)/build/tools/make-standalone-toolchain.sh --platform=android-9 --toolchain=arm-linux-androideabi-4.9 --use-llvm --install-dir=$(ANDROID_TOOLCHAIN) @@ -315,37 +289,37 @@ ifeq ($(PLATFORM),PLATFORM_ANDROID) endif endif -# compile raylib library +# Compile raylib library raylib: $(OBJS) ifeq ($(PLATFORM),PLATFORM_WEB) - # compile raylib for web. - emcc -O1 $(OBJS) -o $(OUTPUT_PATH)/libraylib.bc + # Compile raylib for web. + emcc -O1 $(OBJS) -o $(RAYLIB_RELEASE_PATH)/libraylib.bc @echo "raylib library generated (libraylib.bc)!" else ifeq ($(RAYLIB_LIBTYPE),SHARED) # NOTE: If using OpenAL Soft as static library, all its dependencies must be also linked in the shared library ifeq ($(PLATFORM_OS),WINDOWS) - $(CC) -shared -o $(OUTPUT_PATH)/raylib.dll $(OBJS) $(ALLIBS) -Lexternal/glfw3/lib/win32 -Lexternal/openal_soft/lib/win32 -lglfw3 -lgdi32 -Wl,--out-implib,$(OUTPUT_PATH)/libraylibdll.a + $(CC) -shared -o $(RAYLIB_RELEASE_PATH)/raylib.dll $(OBJS) $(ALLIBS) -Lexternal/glfw3/lib/win32 -Lexternal/openal_soft/lib/win32 -lglfw3 -lgdi32 -Wl,--out-implib,$(RAYLIB_RELEASE_PATH)/libraylibdll.a @echo "raylib dynamic library (raylib.dll) and import library (libraylibdll.a) generated!" endif ifeq ($(PLATFORM_OS),LINUX) - # compile raylib to shared library version for GNU/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) -lglfw -lGL -lopenal -lm -lpthread -ldl + $(CC) -shared -o $(RAYLIB_RELEASE_PATH)/libraylib.so $(OBJS) -lglfw -lGL -lopenal -lm -lpthread -ldl @echo "raylib shared library generated (libraylib.so)!" endif ifeq ($(PLATFORM_OS),OSX) - $(CC) -dynamiclib -o $(OUTPUT_PATH)/libraylib.dylib $(OBJS) -L/usr/local/Cellar/glfw/3.2.1/lib -lglfw -framework OpenGL -framework OpenAL -framework Cocoa - install_name_tool -id "libraylib.dylib" $(OUTPUT_PATH)/libraylib.dylib + $(CC) -dynamiclib -o $(RAYLIB_RELEASE_PATH)/libraylib.dylib $(OBJS) -L/usr/local/Cellar/glfw/3.2.1/lib -lglfw -framework OpenGL -framework OpenAL -framework Cocoa + install_name_tool -id "libraylib.dylib" $(RAYLIB_RELEASE_PATH)/libraylib.dylib @echo "raylib shared library generated (libraylib.dylib)!" endif ifeq ($(PLATFORM),PLATFORM_ANDROID) - $(CC) -shared -o $(OUTPUT_PATH)/libraylib.so $(OBJS) $(LDFLAGS) $(LDLIBS) + $(CC) -shared -o $(RAYLIB_RELEASE_PATH)/libraylib.so $(OBJS) $(LDFLAGS) $(LDLIBS) @echo "raylib shared library generated (libraylib.so)!" endif else - # compile raylib static library. - $(AR) rcs $(OUTPUT_PATH)/libraylib.a $(OBJS) + # Compile raylib static library. + $(AR) rcs $(RAYLIB_RELEASE_PATH)/libraylib.a $(OBJS) @echo "raylib static library generated (libraylib.a)!" ifeq ($(OPENAL_LIBTYPE),STATIC) @echo "expected OpenAL Soft static library linking" @@ -355,46 +329,45 @@ else endif endif -# compile all modules with their prerequisites +# Compile all modules with their prerequisites -# compile core module +# Compile core module core.o : core.c raylib.h rlgl.h utils.h raymath.h gestures.h $(CC) -c $< $(CFLAGS) $(INCLUDE_PATHS) -D$(PLATFORM) -D$(GRAPHICS) -# compile rlgl module +# Compile rlgl module rlgl.o : rlgl.c rlgl.h raymath.h $(CC) -c $< $(CFLAGS) $(INCLUDE_PATHS) -D$(PLATFORM) -D$(GRAPHICS) -# compile shapes module +# Compile shapes module shapes.o : shapes.c raylib.h rlgl.h $(CC) -c $< $(CFLAGS) $(INCLUDE_PATHS) -D$(PLATFORM) -D$(GRAPHICS) -# compile textures module +# Compile textures module textures.o : textures.c rlgl.h utils.h $(CC) -c $< $(CFLAGS) $(INCLUDE_PATHS) -D$(PLATFORM) -D$(GRAPHICS) -# compile text module +# Compile text module text.o : text.c raylib.h utils.h $(CC) -c $< $(CFLAGS) $(INCLUDE_PATHS) -D$(PLATFORM) -D$(GRAPHICS) -# compile models module +# Compile models module models.o : models.c raylib.h rlgl.h raymath.h $(CC) -c $< $(CFLAGS) $(INCLUDE_PATHS) -D$(PLATFORM) -D$(GRAPHICS) -# compile audio module +# Compile audio module audio.o : audio.c raylib.h $(CC) -c $< $(CFLAGS) $(INCLUDE_PATHS) -D$(PLATFORM) $(ALFLAGS) -# compile stb_vorbis library +# Compile stb_vorbis library stb_vorbis.o: external/stb_vorbis.c external/stb_vorbis.h $(CC) -c $< $(CFLAGS) $(INCLUDE_PATHS) -D$(PLATFORM) -# compile utils module +# Compile utils module utils.o : utils.c utils.h $(CC) -c $< $(CFLAGS) $(INCLUDE_PATHS) -D$(PLATFORM) -# It installs generated and needed files to compile projects using raylib. -# The installation works manually. +# Install generated and needed files to required directories # TODO: add other platforms. install : ifeq ($(ROOT),root) @@ -404,10 +377,10 @@ ifeq ($(ROOT),root) # /usr/local/include/) are for libraries that are installed # manually (without a package manager). ifeq ($(RAYLIB_LIBTYPE),SHARED) - cp --update $(OUTPUT_PATH)/libraylib.so /usr/local/lib/libraylib.so + cp --update $(RAYLIB_RELEASE_PATH)/libraylib.so /usr/local/lib/libraylib.so else cp --update raylib.h /usr/local/include/raylib.h - cp --update $(OUTPUT_PATH)/libraylib.a /usr/local/lib/libraylib.a + cp --update $(RAYLIB_RELEASE_PATH)/libraylib.a /usr/local/lib/libraylib.a endif @echo "raylib dev files installed/updated!" else @@ -417,7 +390,7 @@ else @echo "Error: no root permissions" endif -# it removes raylib dev files installed on the system. +# Remove raylib dev files installed on the system # TODO: see 'install' target. uninstall : ifeq ($(ROOT),root) @@ -436,12 +409,12 @@ else @echo "Error: no root permissions" endif -# clean everything +# Clean everything clean: ifeq ($(PLATFORM_OS),WINDOWS) - del *.o $(OUTPUT_PATH)/libraylib.a $(OUTPUT_PATH)/libraylib.bc $(OUTPUT_PATH)/libraylib.so external/stb_vorbis.o + del *.o $(RAYLIB_RELEASE_PATH)/libraylib.a $(RAYLIB_RELEASE_PATH)/libraylib.bc $(RAYLIB_RELEASE_PATH)/libraylib.so external/stb_vorbis.o else - rm -f *.o $(OUTPUT_PATH)/libraylib.a $(OUTPUT_PATH)/libraylib.bc $(OUTPUT_PATH)/libraylib.so external/stb_vorbis.o + rm -f *.o $(RAYLIB_RELEASE_PATH)/libraylib.a $(RAYLIB_RELEASE_PATH)/libraylib.bc $(RAYLIB_RELEASE_PATH)/libraylib.so external/stb_vorbis.o endif ifeq ($(PLATFORM),PLATFORM_ANDROID) rm -rf $(ANDROID_TOOLCHAIN) |
