tibia/templates/android-make/Makefile

139 lines
4.6 KiB
Makefile
Raw Normal View History

2024-02-22 11:31:35 +00:00
#
# Tibia
#
# Copyright (C) 2023, 2024 Orastron Srl unipersonale
#
# Tibia is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, version 3 of the License.
#
# Tibia is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Tibia. If not, see <http://www.gnu.org/licenses/>.
#
# File author: Stefano D'Angelo
#
2024-01-23 08:22:00 +00:00
include vars.mk
2024-06-16 10:04:02 +00:00
ifeq ($(HAS_MIDI_IN), yes)
2024-01-23 14:18:39 +00:00
MIN_API := 29
else
MIN_API := 26
endif
2024-06-16 10:04:02 +00:00
CC := $(ANDROID_NDK_DIR)/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi$(MIN_API)-clang
CXX := $(ANDROID_NDK_DIR)/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi$(MIN_API)-clang++
JC := javac
2024-01-23 08:22:00 +00:00
2024-06-16 10:04:02 +00:00
APKSIGNER := $(BUILD_TOOLS_DIR)/apksigner
ZIPALIGN := $(BUILD_TOOLS_DIR)/zipalign
AAPT := $(BUILD_TOOLS_DIR)/aapt
D8 := $(BUILD_TOOLS_DIR)/d8
ADB := $(ANDROID_SDK_DIR)/platform-tools/adb
2024-01-23 08:22:00 +00:00
JARS := \
2024-06-16 10:04:02 +00:00
$(ANDROID_JAR_FILE) \
$(ANDROIDX_CORE_FILE) \
$(ANDROIDX_LIFECYCLE_COMMON_FILE) \
$(ANDROIDX_VERSIONEDPARCELABLE_FILE) \
$(KOTLIN_STDLIB_FILE) \
$(KOTLINX_COROUTINES_CORE_FILE) \
$(KOTLINX_COROUTINES_CORE_JVM_FILE)
2024-01-23 08:22:00 +00:00
2024-01-23 09:39:30 +00:00
CLASSES_PATH := $(subst .,/,$(JAVA_PACKAGE_NAME))
2024-01-23 08:22:00 +00:00
2024-01-23 14:18:39 +00:00
CLASSES := \
MainActivity \
MainActivity$$WebAppInterface
2024-06-16 10:04:02 +00:00
ifeq ($(HAS_MIDI_IN), yes)
2024-01-28 10:54:30 +00:00
CLASSES += MainActivity$$WebAppInterface$$MidiDeviceCallback MainActivity$$WebAppInterface$$1
endif
2024-02-01 08:55:06 +00:00
COMMON_DIR := $(or $(COMMON_DIR),.)
DATA_DIR := $(or $(DATA_DIR),.)
PLUGIN_DIR := $(or $(PLUGIN_DIR),src)
2024-06-16 10:04:02 +00:00
CFLAGS := -O3 -Wall -Wpedantic -Wextra
CFLAGS_ALL := -I$(DATA_DIR)/src -I$(PLUGIN_DIR) -fPIC $(CFLAGS) $(CFLAGS_EXTRA)
2024-06-16 10:04:02 +00:00
CXXFLAGS := $(CFLAGS)
CXXFLAGS_ALL := -I$(DATA_DIR)/src -I$(PLUGIN_DIR) -fPIC -std=c++11 $(CXXFLAGS) $(CXXFLAGS_EXTRA)
2024-01-23 08:22:00 +00:00
2024-06-16 10:04:02 +00:00
LDFLAGS :=
LDFLAGS_ALL := -shared -static-libstdc++ -landroid
ifeq ($(HAS_MIDI_IN), yes)
2024-01-28 10:54:30 +00:00
LDFLAGS += -lamidi
endif
2024-06-16 10:04:02 +00:00
LDFLAGS_ALL += $(LDFLAGS) $(LDFLAGS_EXTRA)
2024-01-28 10:54:30 +00:00
2024-06-16 10:04:02 +00:00
JFLAGS :=
JFLAGS_ALL := $(JFLAGS) $(JFLAGS_EXTRA)
2024-06-16 10:04:02 +00:00
C_SRCS := $(C_SRCS_EXTRA)
C_OBJS := $(addprefix build/obj/, $(notdir $(C_SRCS:.c=.o)))
2024-06-16 10:04:02 +00:00
CXX_SRCS := $(COMMON_DIR)/src/jni.cpp $(CXX_SRCS_EXTRA)
CXX_OBJS := $(addprefix build/obj/, $(notdir $(CXX_SRCS:.cpp=.o)))
2024-06-16 10:04:02 +00:00
ALL := build/$(BUNDLE_NAME).apk
2024-01-23 08:22:00 +00:00
2024-06-16 10:04:02 +00:00
-include $(COMMON_DIR)/vars-extra.mk
2024-01-23 08:22:00 +00:00
2024-06-16 10:04:02 +00:00
all: $(ALL)
2024-01-23 08:22:00 +00:00
2024-06-16 10:04:02 +00:00
build/$(BUNDLE_NAME).apk: build/gen/$(BUNDLE_NAME).aligned.apk $(KEY_STORE)
$(APKSIGNER) sign --ks $(KEY_STORE) --ks-key-alias $(KEY_ALIAS) --ks-pass pass:$(STORE_PASS) --key-pass pass:$(KEY_PASS) --out $@ build/gen/$(BUNDLE_NAME).aligned.apk
build/gen/$(BUNDLE_NAME).aligned.apk: build/gen/$(BUNDLE_NAME).unsigned.apk
$(ZIPALIGN) -f -p 4 $^ $@
build/gen/$(BUNDLE_NAME).unsigned.apk: build/apk/classes.dex build/apk/lib/armeabi-v7a/lib$(BUNDLE_NAME).so $(DATA_DIR)/data/AndroidManifest.xml build/assets/index.html | build/gen
$(AAPT) package -f -M $(DATA_DIR)/data/AndroidManifest.xml -A build/assets $(foreach jar,$(JARS),-I $(jar)) -F $@ build/apk
2024-01-23 08:22:00 +00:00
build/apk/classes.dex: build/apk/my_classes.jar
2024-06-16 10:04:02 +00:00
cd build/apk && $(D8) --min-api $(MIN_API) ../../$^ $(JARS) && cd ../..
2024-01-23 08:22:00 +00:00
build/apk/my_classes.jar: $(foreach class,$(CLASSES),build/obj/$(CLASSES_PATH)/$(class).class) | build/apk
2024-06-16 10:04:02 +00:00
@echo $(CLASSES_PATH)
$(D8) $(foreach class,$(CLASSES),'build/obj/$(CLASSES_PATH)/$(class).class') --min-api $(MIN_API) --output $@ --no-desugaring
2024-01-23 08:22:00 +00:00
2024-06-16 10:04:02 +00:00
build/obj/$(CLASSES_PATH)/MainActivity.class: $(DATA_DIR)/src/MainActivity.java | build/obj
$(JC) $(JFLAGS_ALL) -classpath "$(subst $() $(),:,$(JARS))" -d build/obj $^
2024-01-23 08:22:00 +00:00
2024-06-16 10:04:02 +00:00
build/apk/lib/armeabi-v7a/lib$(BUNDLE_NAME).so: $(C_OBJS) $(CXX_OBJS) | build/apk/lib/armeabi-v7a
$(CXX) $^ -o $@ $(CFLAGS_ALL) $(CXXFLAGS_ALL) $(LDFLAGS_ALL)
2024-01-23 14:18:39 +00:00
2024-06-16 10:04:02 +00:00
build/assets/index.html: $(DATA_DIR)/src/index.html | build/assets
2024-01-23 09:39:30 +00:00
cp $^ $@
2024-01-23 14:18:39 +00:00
build/gen build/apk build/obj build/apk/lib/armeabi-v7a build/assets:
2024-01-23 08:22:00 +00:00
mkdir -p $@
clean:
rm -fr build
2024-06-16 10:04:02 +00:00
install: build/$(BUNDLE_NAME).apk
[ -n "`$(ADB) shell pm list packages | grep ^package:$(JAVA_PACKAGE_NAME)`" ] && $(ADB) uninstall $(JAVA_PACKAGE_NAME); exit 0
$(ADB) install $^
-include $(COMMON_DIR)/rules-extra.mk
2024-01-23 08:22:00 +00:00
.PHONY: all clean install
.SECONDEXPANSION:
PERCENT := %
$(C_OBJS): build/obj/%.o: $$(filter $$(PERCENT)/$$(basename $$(notdir $$@)).c,$$(C_SRCS)) | build/obj
2024-06-16 10:04:02 +00:00
$(CC) $^ -o $@ -c $(CFLAGS_ALL)
$(CXX_OBJS): build/obj/%.o: $$(filter $$(PERCENT)/$$(basename $$(notdir $$@)).cpp,$$(CXX_SRCS)) | build/obj
2024-06-16 10:04:02 +00:00
$(CXX) $^ -o $@ -c $(CXXFLAGS_ALL)
-include $(COMMON_DIR)/rules-secondexp-extra.mk