tup: output to bin folder; toplevel config;

This commit is contained in:
bjorn 2021-02-01 23:48:15 -07:00
parent deeaff7a00
commit 8038353eac
4 changed files with 39 additions and 62 deletions

47
.gitignore vendored
View File

@ -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/*

34
Tupfile
View File

@ -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

View File

@ -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 |>