tup: pico rules;

This commit is contained in:
bjorn 2020-07-27 17:20:58 -06:00
parent 55f66f217e
commit 91fb120dcc
3 changed files with 43 additions and 13 deletions

View File

@ -637,6 +637,12 @@ elseif(ANDROID)
target_compile_definitions(lovr PRIVATE -DLOVR_GLES)
target_include_directories(lovr PRIVATE "${ANDROID_NDK}/sources/android/native_app_glue")
# Dynamically linked targets output libraries in lib/<ABI> for easy including in apk with aapt
set_target_properties(
lovr ${LOVR_ODE} ${LOVR_OPENAL}
PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/lib/${ANDROID_ABI}"
)
if(LOVR_BUILD_EXE)
get_filename_component(ANDROID_SDK "${ANDROID_NDK}" DIRECTORY) # SDK root is parent of NDK dir
set(ANDROID_JAR "${ANDROID_SDK}/platforms/${ANDROID_PLATFORM}/android.jar")
@ -647,12 +653,6 @@ elseif(ANDROID)
set(ANDROID_ASSETS -A ${ANDROID_ASSETS})
endif()
# Dynamically linked targets output libraries in lib/<ABI> and are copied to the apk with aapt
set_target_properties(
lovr ${LOVR_ODE} ${LOVR_OPENAL}
PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/lib/${ANDROID_ABI}"
)
# Flavor-specific config:
# - Imported targets need to have their libraries manually copied to lib/<ABI>
# - Figure out which Java class (Activity) and AndroidManifest.xml to use

13
Tupfile
View File

@ -1,12 +1,16 @@
include_rules
# core
ifneq (@(PICO),y)
SRC += src/main.c
endif
SRC += src/core/arr.c
SRC += src/core/fs.c
SRC += src/core/maf.c
SRC += src/core/map.c
ifneq (@(PICO),y)
SRC += src/core/os_$(PLATFORM).c
endif
SRC += src/core/png.c
SRC += src/core/ref.c
SRC += src/core/utf.c
@ -25,6 +29,7 @@ SRC_@(HEADSET)@(OPENVR) += src/modules/headset/headset_openvr.c
SRC_@(HEADSET)@(OPENXR) += src/modules/headset/headset_openxr.c
SRC_@(HEADSET)@(OCULUS) += src/modules/headset/headset_oculus.c
SRC_@(HEADSET)@(VRAPI) += src/modules/headset/headset_vrapi.c
SRC_@(HEADSET)@(PICO) += src/modules/headset/headset_pico.c
SRC_@(HEADSET)@(WEBVR) += src/modules/headset/headset_webvr.c
SRC_@(HEADSET)@(WEBXR) += src/modules/headset/headset_webxr.c
SRC_@(HEADSET)@(LEAP) += src/modules/headset/headset_leap.c
@ -77,12 +82,14 @@ ifeq ($(PLATFORM),android)
# There needs to be a Java class for the activity with 2 lines of code to load native libraries.
# It gets compiled to a class file with javac and then into bytecode using dx
CLASS = org/lovr/app/Activity.class
: src/resources/Activity.java |> ^ JAVAC %b^ javac -classpath $(ANDROID_JAR) -d . %f |> $(CLASS)
: $(CLASS) |> !dx |> classes.dex
: src/resources/$(ACTIVITY_y).java |> !cp |> src/resources/Activity.java
: src/resources/Activity.java |> ^ JAVAC %b^ javac -classpath $(CLASSPATH) -d . %f |> $(CLASS)
: $(CLASS) $(EXTRA_JARS) |> !dx |> classes.dex
# Create an apk from the Android manifest. The zip command is used afterwards to add raw files
# because it is way faster than calling aapt again and apks are just zips (TODO windows).
: @(ANDROID_MANIFEST) | $(LIB)/*.so classes.dex |> ^ AAPT %b^ aapt package -F %o -M %f -I $(ANDROID_JAR) $(ANDROID_ASSETS) && zip -qu0 %o $(LIB)/*.so classes.dex |> tmp/lovr.unaligned.apk
: $(ANDROID_MANIFEST_y) |> !cp |> src/resources/AndroidManifest.xml
: src/resources/AndroidManifest.xml | $(LIB)/*.so classes.dex |> ^ AAPT %b^ aapt package -F %o -M %f -I $(ANDROID_JAR) $(ANDROID_ASSETS) && zip -qu0 %o $(LIB)/*.so classes.dex |> tmp/lovr.unaligned.apk
# Even though we have an apk, it isn't actually valid yet. It has to be aligned using the special
# zipalign tool, and then signed using apksigner.

View File

@ -37,6 +37,7 @@ CFLAGS_@(OPENXR) += -DLOVR_USE_OPENXR
CFLAGS_@(OCULUS) += -DLOVR_USE_OCULUS
CFLAGS_@(OCULUS) += -I@(OCULUS_PATH)/LibOVR/Include
CFLAGS_@(VRAPI) += -DLOVR_USE_VRAPI
CFLAGS_@(PICO) += -DLOVR_USE_PICO
CFLAGS_@(WEBXR) += -DLOVR_USE_WEBXR
CFLAGS_@(LEAP) += -DLOVR_USE_LEAP
@ -182,6 +183,7 @@ ifeq ($(PLATFORM),android)
ANDROID_JAR = @(ANDROID_SDK)/sdk/platforms/android-@(ANDROID_VERSION)/android.jar
GLUE = @(ANDROID_SDK)/sdk/ndk-bundle/sources/android/native_app_glue
VRAPI_LIB_PATH = $(DEPS)/VrApi/Libs/Android/arm64-v8a/Release
PICO_LIB_PATH = $(DEPS)/pico/jni/arm64-v8a
CFLAGS += --target=aarch64-linux-android@(ANDROID_VERSION)
CFLAGS += -I$(GLUE)
LDFLAGS += --target=aarch64-linux-android@(ANDROID_VERSION)
@ -193,11 +195,30 @@ ifeq ($(PLATFORM),android)
PREFIX = $(LIB)/lib
SUFFIX = .so
CFLAGS_@(GRAPHICS) += -DLOVR_GLES
ACTIVITY_@(VRAPI) = Activity_vrapi
ACTIVITY_@(PICO) = Activity_pico
ifeq (@(ANDROID_MANIFEST),)
ANDROID_MANIFEST_@(VRAPI) = src/resources/AndroidManifest_vrapi.xml
ANDROID_MANIFEST_@(PICO) = src/resources/AndroidManifest_pico.xml
else
ANDROID_MANIFEST_y = @(ANDROID_MANIFEST)
endif
ifneq (@(ANDROID_ASSETS),)
ANDROID_ASSETS = -A @(ANDROID_ASSETS)
endif
CLASSPATH = $(ANDROID_JAR)
ifeq (@(PICO),y)
EXTRA_JARS = $(DEPS)/pico/classes.jar
ifeq (@(TUP_PLATFORM),win32)
CLASSPATH = "$(CLASSPATH);$(EXTRA_JARS)"
else
CLASSPATH = "$(CLASSPATH):$(EXTRA_JARS)"
endif
endif
# Macros
!dx = |> ^ DX %b^ dx --dex --output=%o %f |>
!zipalign = |> ^ ZIPALIGN %f^ $(TOOLS)/zipalign -f 4 %f %o |>
@ -219,15 +240,17 @@ ifeq ($(PLATFORM),android)
CFLAGS_@(ENET) += -I$(DEPS)/enet/include
CFLAGS_@(VRAPI) += -I$(DEPS)/VrApi/Include
LDFLAGS_@(AUDIO) += -L$(BUILD)/openal -lopenal
LDFLAGS_@(AUDIO) += -L$(BUILD)/$(LIB) -lopenal
LDFLAGS_@(DATA) += -L$(BUILD)/lib_msdfgen -lmsdfgen
LDFLAGS_@(PHYSICS) += -L$(BUILD)/ode -lode
LDFLAGS_@(PHYSICS) += -L$(BUILD)/$(LIB) -lode
LDFLAGS_@(ENET) += -L$(BUILD)/enet -lenet
LDFLAGS_@(VRAPI) += -L$(VRAPI_LIB_PATH) -lvrapi
LDFLAGS_@(PICO) += -L$(PICO_LIB_PATH) -lPvr_NativeSDK
LIBS_@(AUDIO) += $(BUILD)/openal/libopenal.*so*
LIBS_@(PHYSICS) += $(BUILD)/ode/libode.so
LIBS_@(AUDIO) += $(BUILD)/$(LIB)/libopenal.*so*
LIBS_@(PHYSICS) += $(BUILD)/$(LIB)/libode.so
LIBS_@(VRAPI) += $(VRAPI_LIB_PATH)/libvrapi.so
LIBS_@(PICO) += $(PICO_LIB_PATH)/libPvr_NativeSDK.so
endif
endif