aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRay <raysan5@gmail.com>2017-01-26 22:25:41 +0100
committerGitHub <noreply@github.com>2017-01-26 22:25:41 +0100
commit7b5f61ddf782f53348184e3d6ecc9cfbb889f018 (patch)
treea8c2e59fbe7758ec6216f789cb93555820ff4a78 /src
parentd8edcafe5a28a1b480acfa07714726ffe5b1a2bb (diff)
parenta1527f56202c4967da80770c7f7609b7906f3977 (diff)
downloadraylib-7b5f61ddf782f53348184e3d6ecc9cfbb889f018.tar.gz
raylib-7b5f61ddf782f53348184e3d6ecc9cfbb889f018.zip
Merge pull request #218 from gen2brain/develop
Integrate Android build into Makefile
Diffstat (limited to 'src')
-rw-r--r--src/Makefile119
1 files changed, 108 insertions, 11 deletions
diff --git a/src/Makefile b/src/Makefile
index 2e263189..4c2278f5 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -32,7 +32,7 @@
.PHONY: all clean install unistall
# define raylib platform to compile for
-# possible platforms: PLATFORM_DESKTOP PLATFORM_RPI PLATFORM_WEB
+# possible platforms: PLATFORM_DESKTOP PLATFORM_ANDROID PLATFORM_RPI PLATFORM_WEB
PLATFORM ?= PLATFORM_DESKTOP
# define YES if you want shared/dynamic version of library instead of static (default)
@@ -69,7 +69,28 @@ ifeq ($(PLATFORM),PLATFORM_DESKTOP)
endif
endif
+ifeq ($(PLATFORM),PLATFORM_ANDROID)
+ # path to Android NDK
+ ANDROID_NDK = $(ANDROID_NDK_HOME)
+
+ # possible Android architectures: ARM ARM64
+ ANDROID_ARCH ?= ARM
+
+ # define YES to use clang instead of gcc
+ ANDROID_LLVM ?= NO
+
+ # standalone Android toolchain install dir
+ ANDROID_TOOLCHAIN = $(CURDIR)/toolchain
+endif
+
+ifeq ($(PLATFORM),PLATFORM_RPI)
+ CROSS_COMPILE ?= NO
+endif
+
# define raylib graphics api depending on selected platform
+ifeq ($(PLATFORM),PLATFORM_ANDROID)
+ GRAPHICS = GRAPHICS_API_OPENGL_ES2
+endif
ifeq ($(PLATFORM),PLATFORM_RPI)
# define raylib graphics api to use (on RPI, OpenGL ES 2.0 must be used)
GRAPHICS = GRAPHICS_API_OPENGL_ES2
@@ -86,12 +107,48 @@ endif
# NOTE: makefiles targets require tab indentation
# define compiler: gcc for C program, define as g++ for C++
+
+# default gcc compiler
+CC = gcc
+
+ifeq ($(PLATFORM),PLATFORM_ANDROID)
+ ifeq ($(ANDROID_ARCH),ARM)
+ ifeq ($(ANDROID_LLVM),YES)
+ CC = $(ANDROID_TOOLCHAIN)/bin/arm-linux-androideabi-clang
+ else
+ CC = $(ANDROID_TOOLCHAIN)/bin/arm-linux-androideabi-gcc
+ endif
+ endif
+ ifeq ($(ANDROID_ARCH),ARM64)
+ ifeq ($(ANDROID_LLVM),YES)
+ CC = $(ANDROID_TOOLCHAIN)/bin/aarch64-linux-android-clang
+ else
+ CC = $(ANDROID_TOOLCHAIN)/bin/aarch64-linux-android-gcc
+ endif
+ endif
+endif
+
+ifeq ($(PLATFORM),PLATFORM_RPI)
+ ifeq ($(CROSS_COMPILE),YES)
+ # rpi compiler
+ CC = armv6j-hardfloat-linux-gnueabi-gcc
+ endif
+endif
+
ifeq ($(PLATFORM),PLATFORM_WEB)
# emscripten compiler
CC = emcc
-else
- # default gcc compiler
- CC = gcc
+endif
+
+AR = ar
+
+ifeq ($(PLATFORM),PLATFORM_ANDROID)
+ ifeq ($(ANDROID_ARCH),ARM)
+ AR = $(ANDROID_TOOLCHAIN)/bin/arm-linux-androideabi-ar
+ endif
+ ifeq ($(ANDROID_ARCH),ARM64)
+ AR = $(ANDROID_TOOLCHAIN)/bin/aarch64-linux-android-ar
+ endif
endif
# define compiler flags:
@@ -124,10 +181,14 @@ endif
#CFLAGSEXTRA = -Wextra -Wmissing-prototypes -Wstrict-prototypes
# define any directories containing required header files
-ifeq ($(PLATFORM),PLATFORM_RPI)
- INCLUDES = -I. -Iexternal -I/opt/vc/include \
- -I/opt/vc/include/interface/vmcs_host/linux \
- -I/opt/vc/include/interface/vcos/pthreads
+ifeq ($(PLATFORM),PLATFORM_ANDROID)
+# STB libraries and others
+ INCLUDES = -I. -Iexternal
+# OpenAL Soft library
+ INCLUDES += -Iexternal/openal_soft/include
+# Android includes
+ INCLUDES += -I$(ANDROID_TOOLCHAIN)/sysroot/usr/include
+ INCLUDES += -I$(ANDROID_NDK)/sources/android/native_app_glue
else
# STB libraries and others
INCLUDES = -I. -Iexternal
@@ -136,6 +197,16 @@ else
# OpenAL Soft library
INCLUDES += -Iexternal/openal_soft/include
endif
+ifeq ($(PLATFORM),PLATFORM_RPI)
+# STB libraries and others
+ INCLUDES = -I. -Iexternal
+# RPi libraries
+ INCLUDES += -I/opt/vc/include
+ INCLUDES += -I/opt/vc/include/interface/vmcs_host/linux
+ INCLUDES += -I/opt/vc/include/interface/vcos/pthreads
+# OpenAL Soft library
+ INCLUDES += -Iexternal/openal_soft/include
+endif
# define output directory for compiled library
ifeq ($(PLATFORM),PLATFORM_DESKTOP)
@@ -149,6 +220,14 @@ ifeq ($(PLATFORM),PLATFORM_DESKTOP)
OUTPUT_PATH = ../release/osx
endif
endif
+ifeq ($(PLATFORM),PLATFORM_ANDROID)
+ ifeq ($(ANDROID_ARCH),ARM)
+ OUTPUT_PATH = ../release/android/armeabi-v7a
+ endif
+ ifeq ($(ANDROID_ARCH),ARM64)
+ OUTPUT_PATH = ../release/android/arm64-v8a
+ endif
+endif
ifeq ($(PLATFORM),PLATFORM_WEB)
OUTPUT_PATH = ../release/html5
endif
@@ -164,7 +243,18 @@ OBJS += external/stb_vorbis.o
# typing 'make' will invoke the default target entry called 'all',
# in this case, the 'default' target entry is raylib
-all: raylib
+all: toolchain raylib
+
+# make standalone Android toolchain
+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)
+ endif
+ ifeq ($(ANDROID_ARCH),ARM64)
+ $(ANDROID_NDK)/build/tools/make-standalone-toolchain.sh --platform=android-21 --toolchain=aarch64-linux-androideabi-4.9 --use-llvm --install-dir=$(ANDROID_TOOLCHAIN)
+ endif
+endif
# compile raylib library
raylib: $(OBJS)
@@ -184,9 +274,13 @@ else
$(CC) -shared -o $(OUTPUT_PATH)/raylib.dll $(OBJS) $(SHAREDLIBS) -Wl,--out-implib,$(OUTPUT_PATH)/libraylibdll.a
@echo "raylib dynamic library (raylib.dll) and import library (libraylibdll.a) generated!"
endif
+ ifeq ($(PLATFORM),PLATFORM_ANDROID)
+ $(CC) -shared -o $(OUTPUT_PATH)/libraylib.so $(OBJS)
+ @echo "raylib shared library (libraylib.so) generated!"
+ endif
else
- # compile raylib static library for desktop platforms.
- ar rcs $(OUTPUT_PATH)/libraylib.a $(OBJS)
+ # compile raylib static library.
+ $(AR) rcs $(OUTPUT_PATH)/libraylib.a $(OBJS)
@echo "libraylib.a generated (static library)!"
ifeq ($(SHARED_OPENAL),NO)
@echo "expected OpenAL Soft static library linking"
@@ -284,4 +378,7 @@ ifeq ($(PLATFORM_OS),WINDOWS)
else
rm -f *.o $(OUTPUT_PATH)/libraylib.a $(OUTPUT_PATH)/libraylib.bc $(OUTPUT_PATH)/libraylib.so external/stb_vorbis.o
endif
+ifeq ($(PLATFORM),PLATFORM_ANDROID)
+ rm -rf $(ANDROID_TOOLCHAIN)
+endif
@echo "removed all generated files!"