SUBDIR = tess NAME = tess CFLAGS = -std=c++17 --sysroot="$(SYSROOT)" -Wall LDFLAGS = -lvulkan -lpng TRACE = False ifeq ($(target),$(filter $(target), cheza cheza-trace)) CXX = /usr/bin/armv7a-cros-linux-gnueabihf-clang++ CC = /usr/bin/armv7a-cros-linux-gnueabihf-clang SYSROOT = /build/cheza SSH_DUT = cheza TARGET = cheza ifeq ($(target), cheza-trace) TRACE = True endif else ifeq ($(target), atlas) CXX = /usr/bin/x86_64-cros-linux-gnu-clang++ CC = /usr/bin/x86_64-cros-linux-gnu-clang SYSROOT = /build/atlas SSH_DUT = atlas TARGET = atlas else ifeq ($(target), android) ANDROID_ROOT = ~/android SSH_DUT = android TARGET = android else ifeq ($(target), android-trace) ANDROID_ROOT = ~/android SSH_DUT = android TRACE = True TARGET = android else ifeq ($(target), local) CXX = clang++ CC = clang TARGET = local else CXX = INVALID CC = INVALID TARGET = INVALID endif all: shaders build deploy run build: check @echo Building... ifeq ($(TARGET), android) @NDK_PROJECT_PATH=. \ NDK_ROOT=${ANDROID_ROOT}/ndk/ \ TARGET_NAME=${NAME} \ COMPILE_ROOT=${ANDROID_ROOT}/compile \ ${ANDROID_ROOT}/ndk/ndk-build NDK_APPLICATION_MK=./Application.mk else @$(CXX) $(CFLAGS) -o ${NAME} ${NAME}.cc $(LDFLAGS) endif deploy: check @echo Deploying to $(SSH_DUT)... ifeq ($(TARGET), android) @adb push ${NAME}.vert.spv /data/vulkan/${SUBDIR}/${NAME}.vert.spv @adb push ${NAME}.tesc.spv /data/vulkan/${SUBDIR}/${NAME}.tesc.spv @adb push ${NAME}.tese.spv /data/vulkan/${SUBDIR}/${NAME}.tese.spv @adb push ${NAME}.frag.spv /data/vulkan/${SUBDIR}/${NAME}.frag.spv @adb push libs/arm64-v8a/${NAME} /data/vulkan/${SUBDIR}/ else ifneq ($(TARGET), local) @scp ${NAME}.vert.spv $(SSH_DUT):~/${SUBDIR}/${NAME}.vert.spv @scp ${NAME}.tesc.spv $(SSH_DUT):~/${SUBDIR}/${NAME}.tesc.spv @scp ${NAME}.tese.spv $(SSH_DUT):~/${SUBDIR}/${NAME}.tese.spv @scp ${NAME}.frag.spv $(SSH_DUT):~/${SUBDIR}/${NAME}.frag.spv @scp ${NAME} $(SSH_DUT):~/${SUBDIR}/ endif run: check ifeq ($(TARGET), android) @echo Running on $(SSH_DUT)... ifeq ($(TRACE), True) @adb shell "cd /data/vulkan/${SUBDIR} && LD_PRELOAD=/data/vulkan/libwrap.so ./${NAME}" @echo Copying artifacts back to local device... @adb pull /data/vulkan/${SUBDIR}/${NAME}.png . @adb pull /sdcard/trace.rd . else @adb shell "cd /data/vulkan/${SUBDIR} && ./${NAME}" @echo Copying artifacts back to local device... @adb pull /data/vulkan/${SUBDIR}/${NAME}.png . endif else ifneq ($(TARGET), local) @echo Running on $(SSH_DUT)... ifeq ($(TRACE), True) @ssh -tt $(SSH_DUT) "~/trace.sh 'cd ~/${SUBDIR} && ./${NAME}'" @echo Copying artifacts back to local device... @scp $(SSH_DUT):~/${SUBDIR}/${NAME}.png . @scp $(SSH_DUT):/tmp/trace.rd . else @ssh -tt $(SSH_DUT) 'cd ~/${SUBDIR} && ./${NAME}' @echo Copying artifacts back to local device... @scp $(SSH_DUT):~/${SUBDIR}/${NAME}.png . endif else @echo Running locally... @./$(NAME) endif shaders: @glslc -c ${NAME}.vert @glslc -c ${NAME}.tesc @glslc -c ${NAME}.tese @glslc -c ${NAME}.frag clean: check @rm -f ${NAME} @rm -f ${NAME}.png @rm -f ${NAME}.vert.spv @rm -f ${NAME}.tesc.spv @rm -f ${NAME}.tese.spv @rm -f ${NAME}.frag.spv @rm -f trace.rd @rm -rf libs @rm -rf obj ifneq ($(TARGET), local) ifeq ($(TARGET), android) @adb shell rm /data/vulkan/${SUBDIR}/* else @ssh $(SSH_DUT) 'rm -f ~/${SUBDIR}/${NAME} ~/${SUBDIR}/${NAME}.vert.spv \ ~/${SUBDIR}/${NAME}.tesc.spv ~/${SUBDIR}/${NAME}.tese.spv \ ~/${SUBDIR}/${NAME}.frag.spv ~/${SUBDIR}/${NAME}.png' endif endif check: ifeq ($(TARGET), INVALID) $(error $$target must be one of [atlas, cheza, cheza-trace, android, android-trace, local]) endif