From 966e8adcf9639c8f524fa99d2edfd348306f45f1 Mon Sep 17 00:00:00 2001 From: Ray Date: Thu, 5 Mar 2020 12:25:39 +0100 Subject: [PATCH] Reviewed and Updated Android compilation scripts --- examples/Makefile.Android | 19 ++++++++-------- src/Makefile | 29 ++++++++++++------------ templates/advance_game/Makefile.Android | 17 +++++++------- templates/simple_game/Makefile.Android | 19 ++++++++-------- templates/standard_game/Makefile.Android | 19 ++++++++-------- 5 files changed, 53 insertions(+), 50 deletions(-) diff --git a/examples/Makefile.Android b/examples/Makefile.Android index 29d437b1b..28847d299 100644 --- a/examples/Makefile.Android +++ b/examples/Makefile.Android @@ -26,8 +26,10 @@ PLATFORM ?= PLATFORM_ANDROID RAYLIB_PATH ?= ..\.. # Define Android architecture (armeabi-v7a, arm64-v8a, x86, x86-64) and API version +# Starting in 2019 using ARM64 is mandatory for published apps, +# and minimum required target API is Android 9 (API level 28) ANDROID_ARCH ?= ARM -ANDROID_API_VERSION = 21 +ANDROID_API_VERSION = 28 ifeq ($(ANDROID_ARCH),ARM) ANDROID_ARCH_NAME = armeabi-v7a endif @@ -36,11 +38,11 @@ ifeq ($(ANDROID_ARCH),ARM64) endif # Required path variables -# NOTE: JAVA_HOME must be set to JDK -JAVA_HOME ?= C:/JavaJDK +# NOTE: JAVA_HOME must be set to JDK (using OpenJDK 13) +JAVA_HOME ?= C:/open-jdk ANDROID_HOME = C:/android-sdk -ANDROID_TOOLCHAIN = C:/android_toolchain_$(ANDROID_ARCH)_API$(ANDROID_API_VERSION) -ANDROID_BUILD_TOOLS = $(ANDROID_HOME)/build-tools/28.0.1 +ANDROID_TOOLCHAIN = C:/android-ndk-r21/toolchains/llvm/prebuilt/windows-x86_64 +ANDROID_BUILD_TOOLS = $(ANDROID_HOME)/build-tools/29.0.3 ANDROID_PLATFORM_TOOLS = $(ANDROID_HOME)/platform-tools # Android project configuration variables @@ -81,13 +83,12 @@ ifeq ($(RAYLIB_LIBTYPE),SHARED) endif # Compiler and archiver -# NOTE: GCC is being deprecated in Android NDK r16 ifeq ($(ANDROID_ARCH),ARM) - CC = $(ANDROID_TOOLCHAIN)/bin/arm-linux-androideabi-clang + CC = $(ANDROID_TOOLCHAIN)/bin/armv7a-linux-androideabi$(ANDROID_API_VERSION)-clang AR = $(ANDROID_TOOLCHAIN)/bin/arm-linux-androideabi-ar endif ifeq ($(ANDROID_ARCH),ARM64) - CC = $(ANDROID_TOOLCHAIN)/bin/aarch64-linux-android-clang + CC = $(ANDROID_TOOLCHAIN)/bin/aarch64-linux-android$(ANDROID_API_VERSION)-clang AR = $(ANDROID_TOOLCHAIN)/bin/aarch64-linux-android-ar endif @@ -274,7 +275,7 @@ zipalign_project_apk_package: # Install $(PROJECT_NAME).apk to default emulator/device # NOTE: Use -e (emulator) or -d (device) parameters if required install: - $(ANDROID_PLATFORM_TOOLS)/adb install --abi $(ANDROID_ARCH_NAME) -rds $(PROJECT_NAME).apk + $(ANDROID_PLATFORM_TOOLS)/adb install $(PROJECT_NAME).apk # Check supported ABI for the device (armeabi-v7a, arm64-v8a, x86, x86_64) check_device_abi: diff --git a/src/Makefile b/src/Makefile index 1d5bbb83c..8e598e5b7 100644 --- a/src/Makefile +++ b/src/Makefile @@ -157,24 +157,19 @@ endif ifeq ($(PLATFORM),PLATFORM_ANDROID) # Android architecture: ARM64 - # Starting at 2019 using ARM64 is mandatory for published apps + # Starting at 2019 using ARM64 is mandatory for published apps, + # and minimum required target API is Android 9 (API level 28) ANDROID_ARCH ?= ARM - ANDROID_API_VERSION = 26 + ANDROID_API_VERSION = 28 # Android required path variables - # NOTE: Android NDK is just required to generate the standalone toolchain, - # in case is not already provided + # NOTE: Starting with Android NDK r21, no more toolchain generation is required, NDK is the toolchain on itself ifeq ($(OS),Windows_NT) - ANDROID_NDK = C:/android-ndk + ANDROID_NDK = C:/android-ndk-r21 + ANDROID_TOOLCHAIN = $(ANDROID_NDK)/toolchains/llvm/prebuilt/windows-x86_64 else ANDROID_NDK = /usr/lib/android/ndk - endif - - # Android standalone toolchain path - ifeq ($(OS),Windows_NT) - ANDROID_TOOLCHAIN = C:/android_toolchain_$(ANDROID_ARCH)_API$(ANDROID_API_VERSION) - else - ANDROID_TOOLCHAIN = /usr/lib/android/toolchain_$(ANDROID_ARCH)_API$(ANDROID_API_VERSION) + ANDROID_TOOLCHAIN = $(ANDROID_NDK)/toolchains/llvm/prebuilt/linux endif ifeq ($(ANDROID_ARCH),ARM) @@ -248,11 +243,11 @@ endif ifeq ($(PLATFORM),PLATFORM_ANDROID) # Android toolchain (must be provided for desired architecture and compiler) ifeq ($(ANDROID_ARCH),ARM) - CC = $(ANDROID_TOOLCHAIN)/bin/arm-linux-androideabi-clang + CC = $(ANDROID_TOOLCHAIN)/bin/armv7a-linux-androideabi$(ANDROID_API_VERSION)-clang AR = $(ANDROID_TOOLCHAIN)/bin/arm-linux-androideabi-ar endif ifeq ($(ANDROID_ARCH),ARM64) - CC = $(ANDROID_TOOLCHAIN)/bin/aarch64-linux-android-clang + CC = $(ANDROID_TOOLCHAIN)/bin/aarch64-linux-android$(ANDROID_API_VERSION)-clang AR = $(ANDROID_TOOLCHAIN)/bin/aarch64-linux-android-ar endif ifeq ($(ANDROID_ARCH),x86) @@ -298,9 +293,13 @@ endif ifeq ($(RAYLIB_BUILD_MODE),RELEASE) ifeq ($(PLATFORM),PLATFORM_WEB) CFLAGS += -Os - else + endif + ifeq ($(PLATFORM),PLATFORM_DESKTOP) CFLAGS += -s -O1 endif + ifeq ($(PLATFORM),PLATFORM_ANDROID) + CFLAGS += -O2 + endif endif # Additional flags for compiler (if desired) diff --git a/templates/advance_game/Makefile.Android b/templates/advance_game/Makefile.Android index 29d437b1b..3768c8d53 100644 --- a/templates/advance_game/Makefile.Android +++ b/templates/advance_game/Makefile.Android @@ -26,6 +26,8 @@ PLATFORM ?= PLATFORM_ANDROID RAYLIB_PATH ?= ..\.. # Define Android architecture (armeabi-v7a, arm64-v8a, x86, x86-64) and API version +# Starting in 2019 using ARM64 is mandatory for published apps, +# and minimum required target API is Android 9 (API level 28) ANDROID_ARCH ?= ARM ANDROID_API_VERSION = 21 ifeq ($(ANDROID_ARCH),ARM) @@ -36,11 +38,11 @@ ifeq ($(ANDROID_ARCH),ARM64) endif # Required path variables -# NOTE: JAVA_HOME must be set to JDK -JAVA_HOME ?= C:/JavaJDK +# NOTE: JAVA_HOME must be set to JDK (using OpenJDK 13) +JAVA_HOME ?= C:/open-jdk ANDROID_HOME = C:/android-sdk -ANDROID_TOOLCHAIN = C:/android_toolchain_$(ANDROID_ARCH)_API$(ANDROID_API_VERSION) -ANDROID_BUILD_TOOLS = $(ANDROID_HOME)/build-tools/28.0.1 +ANDROID_TOOLCHAIN = C:/android-ndk-r21/toolchains/llvm/prebuilt/windows-x86_64 +ANDROID_BUILD_TOOLS = $(ANDROID_HOME)/build-tools/29.0.3 ANDROID_PLATFORM_TOOLS = $(ANDROID_HOME)/platform-tools # Android project configuration variables @@ -81,13 +83,12 @@ ifeq ($(RAYLIB_LIBTYPE),SHARED) endif # Compiler and archiver -# NOTE: GCC is being deprecated in Android NDK r16 ifeq ($(ANDROID_ARCH),ARM) - CC = $(ANDROID_TOOLCHAIN)/bin/arm-linux-androideabi-clang + CC = $(ANDROID_TOOLCHAIN)/bin/armv7a-linux-androideabi$(ANDROID_API_VERSION)-clang AR = $(ANDROID_TOOLCHAIN)/bin/arm-linux-androideabi-ar endif ifeq ($(ANDROID_ARCH),ARM64) - CC = $(ANDROID_TOOLCHAIN)/bin/aarch64-linux-android-clang + CC = $(ANDROID_TOOLCHAIN)/bin/aarch64-linux-android$(ANDROID_API_VERSION)-clang AR = $(ANDROID_TOOLCHAIN)/bin/aarch64-linux-android-ar endif @@ -274,7 +275,7 @@ zipalign_project_apk_package: # Install $(PROJECT_NAME).apk to default emulator/device # NOTE: Use -e (emulator) or -d (device) parameters if required install: - $(ANDROID_PLATFORM_TOOLS)/adb install --abi $(ANDROID_ARCH_NAME) -rds $(PROJECT_NAME).apk + $(ANDROID_PLATFORM_TOOLS)/adb install $(PROJECT_NAME).apk # Check supported ABI for the device (armeabi-v7a, arm64-v8a, x86, x86_64) check_device_abi: diff --git a/templates/simple_game/Makefile.Android b/templates/simple_game/Makefile.Android index 29d437b1b..28847d299 100644 --- a/templates/simple_game/Makefile.Android +++ b/templates/simple_game/Makefile.Android @@ -26,8 +26,10 @@ PLATFORM ?= PLATFORM_ANDROID RAYLIB_PATH ?= ..\.. # Define Android architecture (armeabi-v7a, arm64-v8a, x86, x86-64) and API version +# Starting in 2019 using ARM64 is mandatory for published apps, +# and minimum required target API is Android 9 (API level 28) ANDROID_ARCH ?= ARM -ANDROID_API_VERSION = 21 +ANDROID_API_VERSION = 28 ifeq ($(ANDROID_ARCH),ARM) ANDROID_ARCH_NAME = armeabi-v7a endif @@ -36,11 +38,11 @@ ifeq ($(ANDROID_ARCH),ARM64) endif # Required path variables -# NOTE: JAVA_HOME must be set to JDK -JAVA_HOME ?= C:/JavaJDK +# NOTE: JAVA_HOME must be set to JDK (using OpenJDK 13) +JAVA_HOME ?= C:/open-jdk ANDROID_HOME = C:/android-sdk -ANDROID_TOOLCHAIN = C:/android_toolchain_$(ANDROID_ARCH)_API$(ANDROID_API_VERSION) -ANDROID_BUILD_TOOLS = $(ANDROID_HOME)/build-tools/28.0.1 +ANDROID_TOOLCHAIN = C:/android-ndk-r21/toolchains/llvm/prebuilt/windows-x86_64 +ANDROID_BUILD_TOOLS = $(ANDROID_HOME)/build-tools/29.0.3 ANDROID_PLATFORM_TOOLS = $(ANDROID_HOME)/platform-tools # Android project configuration variables @@ -81,13 +83,12 @@ ifeq ($(RAYLIB_LIBTYPE),SHARED) endif # Compiler and archiver -# NOTE: GCC is being deprecated in Android NDK r16 ifeq ($(ANDROID_ARCH),ARM) - CC = $(ANDROID_TOOLCHAIN)/bin/arm-linux-androideabi-clang + CC = $(ANDROID_TOOLCHAIN)/bin/armv7a-linux-androideabi$(ANDROID_API_VERSION)-clang AR = $(ANDROID_TOOLCHAIN)/bin/arm-linux-androideabi-ar endif ifeq ($(ANDROID_ARCH),ARM64) - CC = $(ANDROID_TOOLCHAIN)/bin/aarch64-linux-android-clang + CC = $(ANDROID_TOOLCHAIN)/bin/aarch64-linux-android$(ANDROID_API_VERSION)-clang AR = $(ANDROID_TOOLCHAIN)/bin/aarch64-linux-android-ar endif @@ -274,7 +275,7 @@ zipalign_project_apk_package: # Install $(PROJECT_NAME).apk to default emulator/device # NOTE: Use -e (emulator) or -d (device) parameters if required install: - $(ANDROID_PLATFORM_TOOLS)/adb install --abi $(ANDROID_ARCH_NAME) -rds $(PROJECT_NAME).apk + $(ANDROID_PLATFORM_TOOLS)/adb install $(PROJECT_NAME).apk # Check supported ABI for the device (armeabi-v7a, arm64-v8a, x86, x86_64) check_device_abi: diff --git a/templates/standard_game/Makefile.Android b/templates/standard_game/Makefile.Android index 29d437b1b..28847d299 100644 --- a/templates/standard_game/Makefile.Android +++ b/templates/standard_game/Makefile.Android @@ -26,8 +26,10 @@ PLATFORM ?= PLATFORM_ANDROID RAYLIB_PATH ?= ..\.. # Define Android architecture (armeabi-v7a, arm64-v8a, x86, x86-64) and API version +# Starting in 2019 using ARM64 is mandatory for published apps, +# and minimum required target API is Android 9 (API level 28) ANDROID_ARCH ?= ARM -ANDROID_API_VERSION = 21 +ANDROID_API_VERSION = 28 ifeq ($(ANDROID_ARCH),ARM) ANDROID_ARCH_NAME = armeabi-v7a endif @@ -36,11 +38,11 @@ ifeq ($(ANDROID_ARCH),ARM64) endif # Required path variables -# NOTE: JAVA_HOME must be set to JDK -JAVA_HOME ?= C:/JavaJDK +# NOTE: JAVA_HOME must be set to JDK (using OpenJDK 13) +JAVA_HOME ?= C:/open-jdk ANDROID_HOME = C:/android-sdk -ANDROID_TOOLCHAIN = C:/android_toolchain_$(ANDROID_ARCH)_API$(ANDROID_API_VERSION) -ANDROID_BUILD_TOOLS = $(ANDROID_HOME)/build-tools/28.0.1 +ANDROID_TOOLCHAIN = C:/android-ndk-r21/toolchains/llvm/prebuilt/windows-x86_64 +ANDROID_BUILD_TOOLS = $(ANDROID_HOME)/build-tools/29.0.3 ANDROID_PLATFORM_TOOLS = $(ANDROID_HOME)/platform-tools # Android project configuration variables @@ -81,13 +83,12 @@ ifeq ($(RAYLIB_LIBTYPE),SHARED) endif # Compiler and archiver -# NOTE: GCC is being deprecated in Android NDK r16 ifeq ($(ANDROID_ARCH),ARM) - CC = $(ANDROID_TOOLCHAIN)/bin/arm-linux-androideabi-clang + CC = $(ANDROID_TOOLCHAIN)/bin/armv7a-linux-androideabi$(ANDROID_API_VERSION)-clang AR = $(ANDROID_TOOLCHAIN)/bin/arm-linux-androideabi-ar endif ifeq ($(ANDROID_ARCH),ARM64) - CC = $(ANDROID_TOOLCHAIN)/bin/aarch64-linux-android-clang + CC = $(ANDROID_TOOLCHAIN)/bin/aarch64-linux-android$(ANDROID_API_VERSION)-clang AR = $(ANDROID_TOOLCHAIN)/bin/aarch64-linux-android-ar endif @@ -274,7 +275,7 @@ zipalign_project_apk_package: # Install $(PROJECT_NAME).apk to default emulator/device # NOTE: Use -e (emulator) or -d (device) parameters if required install: - $(ANDROID_PLATFORM_TOOLS)/adb install --abi $(ANDROID_ARCH_NAME) -rds $(PROJECT_NAME).apk + $(ANDROID_PLATFORM_TOOLS)/adb install $(PROJECT_NAME).apk # Check supported ABI for the device (armeabi-v7a, arm64-v8a, x86, x86_64) check_device_abi: