@ -99,38 +99,41 @@ endif
# user, "whoami" prints "root").
ROOT = $( shell whoami)
# By default we suppose we are working on Windows
HOST_PLATFORM_OS ?= WINDOWS
# Determine PLATFORM_OS in case PLATFORM_DESKTOP selected
i f e q ( $( PLATFORM ) , P L A T F O R M _ D E S K T O P )
# No uname.exe on MinGW!, but OS=Windows_NT on Windows!
# ifeq ($(UNAME),Msys) -> Windows
ifeq ( $( OS) ,Windows_NT)
PLATFORM_OS = WINDOWS
PLATFORM_OS = WINDOWS
else
UNAMEOS = $( shell uname)
UNAMEOS = $( shell uname)
ifeq ( $( UNAMEOS) ,Linux)
PLATFORM_OS = LINUX
PLATFORM_OS = LINUX
endif
ifeq ( $( UNAMEOS) ,FreeBSD)
PLATFORM_OS = BSD
PLATFORM_OS = BSD
endif
ifeq ( $( UNAMEOS) ,OpenBSD)
PLATFORM_OS = BSD
PLATFORM_OS = BSD
endif
ifeq ( $( UNAMEOS) ,NetBSD)
PLATFORM_OS = BSD
PLATFORM_OS = BSD
endif
ifeq ( $( UNAMEOS) ,DragonFly)
PLATFORM_OS = BSD
PLATFORM_OS = BSD
endif
ifeq ( $( UNAMEOS) ,Darwin)
PLATFORM_OS = OSX
PLATFORM_OS = OSX
endif
endif
e n d i f
i f e q ( $( PLATFORM ) , P L A T F O R M _ R P I )
UNAMEOS = $( shell uname)
UNAMEOS = $( shell uname)
ifeq ( $( UNAMEOS) ,Linux)
PLATFORM_OS = LINUX
PLATFORM_OS = LINUX
endif
e n d i f
@ -160,19 +163,20 @@ endif
i f e q ( $( PLATFORM ) , P L A T F O R M _ W E B )
# Emscripten required variables
EMSDK_PATH = C:/emsdk
EMSCRIPTEN_VERSION = 1.37.2 8
CLANG_VERSION = e1.37.2 8_64bit
PYTHON_VERSION = 2.7.5.3_64bit
NODE_VERSION = 4.1 .1_64bit
export PATH = $( EMSDK_PATH) ; $( EMSDK_PATH) \c lang\$ ( CLANG_VERSION) ; $( EMSDK_PATH) \n ode\$ ( NODE_VERSION) \b in; $( EMSDK_PATH) \p ython\$ ( PYTHON_VERSION) ; $( EMSDK_PATH) \e mscripten\$ ( EMSCRIPTEN_VERSION) ; C:\r aylib\M inGW\b in:$$ ( PATH)
EMSCRIPTEN = $( EMSDK_PATH) \e mscripten\$ ( EMSCRIPTEN_VERSION)
EMSDK_PATH = C:/emsdk
EMSCRIPTEN_VERSION = 1.38. 8
CLANG_VERSION = e1.38. 8_64bit
PYTHON_VERSION = 2.7.13.1_64bit\p ython-2.7.13.amd64
NODE_VERSION = 8.9 .1_64bit
export PATH = $( EMSDK_PATH) ; $( EMSDK_PATH) \c lang\$ ( CLANG_VERSION) ; $( EMSDK_PATH) \n ode\$ ( NODE_VERSION) \b in; $( EMSDK_PATH) \p ython\$ ( PYTHON_VERSION) ; $( EMSDK_PATH) \e mscripten\$ ( EMSCRIPTEN_VERSION) ; C:\r aylib\M inGW\b in:$$ ( PATH)
EMSCRIPTEN = $( EMSDK_PATH) \e mscripten\$ ( EMSCRIPTEN_VERSION)
e n d i f
i f e q ( $( PLATFORM ) , P L A T F O R M _ A N D R O I D )
# Android architecture: ARM64
# Starting at 2019 using ARM64 is mandatory for published apps
ANDROID_ARCH ?= ARM64
ANDROID_ARCH ?= ARM
ANDROID_API_VERSION = 21
# Android required path variables
# NOTE: Android NDK is just required to generate the standalone toolchain,
@ -180,11 +184,13 @@ ifeq ($(PLATFORM),PLATFORM_ANDROID)
ANDROID_NDK = C:/android-ndk
# Android standalone toolchain path
ifeq ( $( ANDROID_ARCH) ,ARM64)
ANDROID_TOOLCHAIN = C:/android_toolchain_arm64_api21
endif
ANDROID_TOOLCHAIN = C:/android_toolchain_$( ANDROID_ARCH) _API$( ANDROID_API_VERSION)
ifeq ( $( ANDROID_ARCH) ,ARM)
ANDROID_TOOLCHAIN = C:/android_toolchain_arm_api21
ANDROID_ARCH_NAME = armeabi-v7a
endif
ifeq ( $( ANDROID_ARCH) ,ARM64)
ANDROID_ARCH_NAME = arm64-v8a
endif
e n d i f
@ -214,12 +220,7 @@ ifeq ($(PLATFORM),PLATFORM_WEB)
RAYLIB_RELEASE_PATH = $( RAYLIB_PATH) /release/libs/html5
e n d i f
i f e q ( $( PLATFORM ) , P L A T F O R M _ A N D R O I D )
ifeq ( $( ANDROID_ARCH) ,ARM64)
RAYLIB_RELEASE_PATH = $( RAYLIB_PATH) /release/libs/android/arm64-v8a
endif
ifeq ( $( ANDROID_ARCH) ,ARM)
RAYLIB_RELEASE_PATH = $( RAYLIB_PATH) /release/libs/android/armeabi-v7a
endif
RAYLIB_RELEASE_PATH = $( RAYLIB_PATH) /release/libs/android/$( ANDROID_ARCH_NAME)
e n d i f
# Define raylib graphics api depending on selected platform
@ -272,14 +273,14 @@ ifeq ($(PLATFORM),PLATFORM_WEB)
e n d i f
i f e q ( $( PLATFORM ) , P L A T F O R M _ A N D R O I D )
# Android toolchain (must be provided for desired architecture and compiler)
ifeq ( $( ANDROID_ARCH) ,ARM64)
CC = $( ANDROID_TOOLCHAIN) /bin/aarch64-linux-android-clang
AR = $( ANDROID_TOOLCHAIN) /bin/aarch64-linux-android-ar
endif
ifeq ( $( ANDROID_ARCH) ,ARM)
CC = $( ANDROID_TOOLCHAIN) /bin/arm-linux-androideabi-clang
AR = $( ANDROID_TOOLCHAIN) /bin/arm-linux-androideabi-ar
endif
ifeq ( $( ANDROID_ARCH) ,ARM64)
CC = $( ANDROID_TOOLCHAIN) /bin/aarch64-linux-android-clang
AR = $( ANDROID_TOOLCHAIN) /bin/aarch64-linux-android-ar
endif
e n d i f
@ -318,20 +319,20 @@ ifeq ($(PLATFORM),PLATFORM_WEB)
CFLAGS += -s USE_GLFW = 3 -s ASSERTIONS = 1 --profiling
e n d i f
i f e q ( $( PLATFORM ) , P L A T F O R M _ A N D R O I D )
# Compiler flags for arquitecture (only ARM, not ARM64)
ifeq ( $( ANDROID_ARCH) ,ARM64)
CFLAGS += -target aarch64 -mfix-cortex-a53-835769
endif
# Compiler flags for arquitecture
ifeq ( $( ANDROID_ARCH) ,ARM)
CFLAGS += -march= armv7-a -mfloat-abi= softfp -mfpu= vfpv3-d16
endif
ifeq ( $( ANDROID_ARCH) ,ARM64)
CFLAGS += -target aarch64 -mfix-cortex-a53-835769
endif
# Compilation functions attributes options
CFLAGS += -ffunction-sections -funwind-tables -fstack-protector-strong -fPIE -fPIC
# Compiler options for the linker
# -Werror=format-security
CFLAGS += -Wa,--noexecstack -Wformat -no-canonical-prefixes
# Preprocessor macro definitions
CFLAGS += -DANDROID -DPLATFORM_ANDROID -D__ANDROID_API__= m">21 -DMAL_NO_OSS
CFLAGS += -DANDROID -DPLATFORM_ANDROID -D__ANDROID_API__= k">$( ANDROID_API_VERSION) -DMAL_NO_OSS
e n d i f
# Define required compilation flags for raylib SHARED lib
@ -399,7 +400,7 @@ ifeq ($(PLATFORM),PLATFORM_ANDROID)
# Avoid unresolved symbol pointing to external main()
LDFLAGS += -Wl,-undefined,dynamic_lookup
LDLIBS = -llog -landroid -lEGL -lGLESv2 -lOpenSLES -latomic -l c -lm
LDLIBS = -llog -landroid -lEGL -lGLESv2 -lOpenSLES -lc -lm
e n d i f
# Define all object files required with a wildcard
@ -439,14 +440,23 @@ endif
all : raylib
# Generate standalone Android toolchain
# NOTE: Android toolchain could already be provided
# NOTE: If the host system is Windows or Linux, generation is different
generate_android_toolchain :
i f e q ( $( PLATFORM ) , P L A T F O R M _ A N D R O I D )
i f e q ( $( PLATFORM_OS ) , W I N D O W S )
# NOTE: python should be available in the path
ifeq ( $( ANDROID_ARCH) ,ARM)
$( ANDROID_NDK) /build/tools/python make_standalone_toolchain.py --arch arm --api $( ANDROID_API_VERSION) --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)
$( ANDROID_NDK) /build/tools/python make_standalone_toolchain.py --arch arm64 --api $( ANDROID_API_VERSION) --install-dir $( ANDROID_TOOLCHAIN)
endif
e n d i f
i f e q ( $( PLATFORM_OS ) , L I N U X )
ifeq ( $( ANDROID_ARCH) ,ARM)
$( ANDROID_NDK) /build/tools/make-standalone-toolchain.sh --platform= android-21 --toolchain= arm-linux-androideabi-4.9 --use-llvm --install-dir= $( ANDROID_TOOLCHAIN)
$( ANDROID_NDK) /build/tools/make-standalone-toolchain.sh --platform= android-$( ANDROID_API_VERSION) --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-$( ANDROID_API_VERSION) --toolchain= aarch64-linux-androideabi-4.9 --use-llvm --install-dir= $( ANDROID_TOOLCHAIN)
endif
e n d i f
@ -487,9 +497,11 @@ else
ifeq ( $( PLATFORM) ,PLATFORM_ANDROID)
$( CC) -shared -o $( RAYLIB_RELEASE_PATH) /libraylib.$( RAYLIB_VERSION) .so $( OBJS) $( LDFLAGS) $( LDLIBS)
@echo " raylib shared library generated (libraylib. $( RAYLIB_VERSION) .so)! "
# WARNING: symbolic links creation on Windows should be done using mklink command, no ln available
cd $( RAYLIB_RELEASE_PATH) && ln -fs libraylib.$( RAYLIB_VERSION) .so libraylib.$( RAYLIB_API_VERSION) .so
cd $( RAYLIB_RELEASE_PATH) && ln -fs libraylib.$( RAYLIB_VERSION) .so libraylib.so
# WARNING: symbolic links creation on Windows should be done using mklink command, no ln available
ifeq ( $( HOST_PLATFORM_OS) ,LINUX)
cd $( RAYLIB_RELEASE_PATH) && ln -fs libraylib.$( RAYLIB_VERSION) .so libraylib.$( RAYLIB_API_VERSION) .so
cd $( RAYLIB_RELEASE_PATH) && ln -fs libraylib.$( RAYLIB_VERSION) .so libraylib.so
endif
endif
else
# Compile raylib static library version $(RAYLIB_VERSION)