diff --git a/.gitignore b/.gitignore index eb5bc850..e7fc102c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,42 +1,15 @@ -.tup -.obj -tup.config -config/* -*.ttf.h -*.json.h -*.lua.h -Activity*.java -AndroidManifest*.xml -/build.sh -/watch.sh -/debug.sh -/db -/lovr -/lovr.apk -/lovr.exe -/lovr.exp -/lovr.lib -/lovr.pdb -/lovr.ilk -/lovr.js -/lovr.worker.js -/lovr.html -/lovr.wasm -/classes.dex -build -build-* -/lib -/libs -/org -/tmp -bin -/data -/*.lua .DS_Store .vs -/test +.tup +.obj +bin +build* +plugins +*.*.h +*.lua +*.config +Activity*.java +AndroidManifest*.xml deps/VrApi deps/pico -deps/openxr deps/OpenXR-Oculus -/plugins/* diff --git a/Tupfile b/Tupfile index a95582ac..f4b78fa4 100644 --- a/Tupfile +++ b/Tupfile @@ -68,25 +68,29 @@ SRC_@(GRAPHICS) += src/resources/shaders.c # 4 [CP] copy external libs -> libs folder : foreach $(RES) $(RES_y) |> !xd |> %f.h : foreach $(SRC) $(SRC_y) $(SRC_yy) | src/resources/*.h |> !cc |> .obj/%B.o -: .obj/*.o |> !ld |> $(PREFIX)lovr$(SUFFIX) | $(EXTRAS) $(EXTRAS_y) +: .obj/*.o |> !ld |> bin/$(PREFIX)lovr$(SUFFIX) | $(EXTRAS) $(EXTRAS_y) : foreach $(LIBS) |> !cp |> $(LIB)/%b -# Android +# APK 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 + JAVA = src/resources/Activity.java CLASS = org/lovr/app/Activity.class - : 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 + JAR = bin/lovr.jar + DEX = bin/apk/classes.dex + MANIFEST = src/resources/AndroidManifest.xml - # 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_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 + : src/resources/$(ACTIVITY_y).java |> !cp |> $(JAVA) + : $(ANDROID_MANIFEST_y) |> !cp |> $(MANIFEST) - # 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. - : tmp/lovr.unaligned.apk |> !zipalign |> tmp/lovr.unsigned.apk - : tmp/lovr.unsigned.apk |> !apksigner |> lovr.apk + # java -> class -> jar -> dex + : $(JAVA) |> ^ JAVAC %b^ javac -classpath $(CLASSPATH) -d bin %f |> bin/$(CLASS) + : bin/$(CLASS) |> ^ JAR %b^ jar -cf %o -C bin $(CLASS) |> $(JAR) + : $(JAR) $(EXTRA_JARS) |> !dx |> $(DEX) + + # aapt + : $(MANIFEST) | $(LIB)/*.so $(DEX) |> ^ AAPT %b^ aapt package -F %o -M %f -I $(ANDROID_JAR) bin/apk $(ANDROID_ASSETS) |> bin/lovr.unaligned.apk + + # align n sign + : bin/lovr.unaligned.apk |> !zipalign |> bin/lovr.unsigned.apk + : bin/lovr.unsigned.apk |> !apksigner |> bin/lovr.apk endif diff --git a/Tuprules.tup b/Tuprules.tup index 4b1d177c..43b81479 100644 --- a/Tuprules.tup +++ b/Tuprules.tup @@ -23,19 +23,19 @@ CFLAGS_win32 += -DLOVR_GL CFLAGS_win32 += -D_CRT_SECURE_NO_WARNINGS CFLAGS_win32 += -Wno-language-extension-token LDFLAGS_win32 += -lShell32 -lOle32 -EXTRAS_win32 += lovr.lib lovr.exp +EXTRAS_win32 += bin/lovr.lib bin/lovr.exp ifeq (@(DEBUG),y) -EXTRAS_win32 += lovr.pdb lovr.ilk +EXTRAS_win32 += bin/lovr.pdb bin/lovr.ilk endif ## Linux CFLAGS_linux += -DLOVR_GL LDFLAGS_linux += -lm -lpthread -ldl -LDFLAGS_linux += -Wl,-rpath,\$ORIGIN/libs +LDFLAGS_linux += -Wl,-rpath,\$ORIGIN ## macOS CFLAGS_macos += -DLOVR_GL -LDFLAGS_macos += -Wl,-rpath,@executable_path/libs +LDFLAGS_macos += -Wl,-rpath,@executable_path LDFLAGS_macos += -lobjc ## Android @@ -45,7 +45,6 @@ CFLAGS_android += --target=aarch64-linux-android@(ANDROID_VERSION) LDFLAGS_android += --target=aarch64-linux-android@(ANDROID_VERSION) LDFLAGS_android += -landroid -lEGL -lGLESv3 LDFLAGS_android += -shared -PREFIX_android = lib/arm64-v8a/lib ## emscripten CFLAGS_web += -DLOVR_WEBGL @@ -56,8 +55,8 @@ LDFLAGS_@(WEBXR)_web += --js-library $(ROOT)/src/resources/webxr.js LDFLAGS_web += --shell-file $(ROOT)/src/resources/lovr.html CFLAGS_@(THREAD)_web += -s USE_PTHREADS=1 LDFLAGS_@(THREAD)_web += -s USE_PTHREADS=1 -EXTRAS_web = lovr.js lovr.wasm -EXTRAS_@(THREAD)_web += lovr.worker.js +EXTRAS_web = bin/lovr.js bin/lovr.wasm +EXTRAS_@(THREAD)_web += bin/lovr.worker.js ## Modules CFLAGS_@(AUDIO) += -DLOVR_ENABLE_AUDIO @@ -231,9 +230,9 @@ PLATFORM = @(PLATFORM) endif ifeq ($(PLATFORM),android) -LIB = lib/arm64-v8a +LIB = bin/apk/lib/arm64-v8a else -LIB = libs +LIB = bin endif ifeq ($(PLATFORM),win32) @@ -261,6 +260,7 @@ ifeq ($(PLATFORM),android) CFLAGS += $(CFLAGS_android) $(CFLAGS_y_android) LDFLAGS += $(LDFLAGS_android) $(LDFLAGS_y_android) LIBS += $(LIBS_y_android) +PREFIX = apk/lib/arm64-v8a/lib SUFFIX = .so endif @@ -277,7 +277,7 @@ CFLAGS += @(EXTRA_CFLAGS) LDFLAGS += @(EXTRA_LDFLAGS) ## Macros -!cc = |> ^ CC %b^ $(CC) $(CFLAGS_y) $(CFLAGS) -o %o -c %f |> +!cc = |> ^o CC %b^ $(CC) $(CFLAGS_y) $(CFLAGS) -o %o -c %f |> !ld = |> ^ LD %o^ $(CC) -o %o %f $(LDFLAGS_y) $(LDFLAGS) |> !xd = |> ^ XD %f^ xxd -i %f > %o |> !cp = |> ^ CP %b^ cp %f %o |> diff --git a/config/default b/tup.config.default similarity index 100% rename from config/default rename to tup.config.default