Sfoglia il codice sorgente

Support android cross-compilation and tracing

master
Brian Ho 6 anni fa
parent
commit
5672dc864e
4 ha cambiato i file con 121 aggiunte e 18 eliminazioni
  1. 50
    0
      Android.mk
  2. 7
    0
      Application.mk
  3. 63
    16
      Makefile
  4. 1
    2
      README.md

+ 50
- 0
Android.mk Vedi File

@@ -0,0 +1,50 @@
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
PNG_DIR = $(COMPILE_ROOT)/external/libpng/src
PNG_SRC_FILES = $(PNG_DIR)/png.c \
$(PNG_DIR)/pngerror.c \
$(PNG_DIR)/pngget.c \
$(PNG_DIR)/pngmem.c \
$(PNG_DIR)/pngpread.c \
$(PNG_DIR)/pngread.c \
$(PNG_DIR)/pngrio.c \
$(PNG_DIR)/pngrtran.c \
$(PNG_DIR)/pngrutil.c \
$(PNG_DIR)/pngset.c \
$(PNG_DIR)/pngtrans.c \
$(PNG_DIR)/pngwio.c \
$(PNG_DIR)/pngwrite.c \
$(PNG_DIR)/pngwtran.c \
$(PNG_DIR)/pngwutil.c \
$(PNG_DIR)/arm/arm_init.c \
$(PNG_DIR)/arm/filter_neon_intrinsics.c

ZLIB_DIR = $(COMPILE_ROOT)/external/zlib/src
ZLIB_SRC_FILES = \
$(ZLIB_DIR)/adler32.c \
$(ZLIB_DIR)/compress.c \
$(ZLIB_DIR)/crc32.c \
$(ZLIB_DIR)/deflate.c \
$(ZLIB_DIR)/gzclose.c \
$(ZLIB_DIR)/gzlib.c \
$(ZLIB_DIR)/gzread.c \
$(ZLIB_DIR)/gzwrite.c \
$(ZLIB_DIR)/infback.c \
$(ZLIB_DIR)/inflate.c \
$(ZLIB_DIR)/inftrees.c \
$(ZLIB_DIR)/inffast.c \
$(ZLIB_DIR)/trees.c \
$(ZLIB_DIR)/uncompr.c \
$(ZLIB_DIR)/zutil.c

NAME := $(TARGET_NAME)
LOCAL_MODULE := $(NAME)
LOCAL_SRC_FILES := $(PNG_SRC_FILES) $(ZLIB_SRC_FILES) $(NAME).cc
LOCAL_C_INCLUDES := $(COMPILE_ROOT)/include

LOCAL_CPP_INCLUDES := $(COMPILE_ROOT)/include $(COMPILE_ROOT)/external
LOCAL_CFLAGS := -Wall
LOCAL_CPPFLAGS = -Wall -stdlib=libc++
LOCAL_LDLIBS := -lvulkan
include $(BUILD_EXECUTABLE)

+ 7
- 0
Application.mk Vedi File

@@ -0,0 +1,7 @@
APP_OPTIM := debug
APP_ABI := arm64-v8a
APP_STL := c++_static
APP_CPPFLAGS := -frtti -fexceptions -std=c++14
APP_PLATFORM := android-24
APP_BUILD_SCRIPT := Android.mk
NDK_TOOLCHAIN_VERSION := clang

+ 63
- 16
Makefile Vedi File

@@ -1,45 +1,84 @@
SUBDIR = triangle
NAME = triangle
CFLAGS = -std=c++17 --sysroot="$(SYSROOT)" -Wall
LDFLAGS = -lvulkan -lpng

ifeq ($(target), cheza)
CXX = /usr/bin/armv7a-cros-linux-gnueabihf-clang++
CC = /usr/bin/armv7a-cros-linux-gnueabihf-clang
SYSROOT = /build/cheza
SSH_DUT = cheza
TARGET = cheza
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
TRACE = False
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

NAME = triangle
CFLAGS = -std=c++17 --sysroot="$(SYSROOT)" -Wall
LDFLAGS = -lvulkan -lpng

all: build deploy run
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
ifneq ($(target), local)
@echo Deploying to $(SSH_DUT)...
@scp ${NAME}.vert.spv $(SSH_DUT):~/${NAME}.vert.spv
@scp ${NAME}.frag.spv $(SSH_DUT):~/${NAME}.frag.spv
@scp ${NAME} $(SSH_DUT):~/
ifeq ($(TARGET), android)
@adb push ${NAME}.vert.spv /data/vulkan/${SUBDIR}/${NAME}.vert.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}.frag.spv $(SSH_DUT):~/${SUBDIR}/${NAME}.frag.spv
@scp ${NAME} $(SSH_DUT):~/${SUBDIR}/
endif

run: check
ifneq ($(target), local)
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)...
@ssh $(SSH_DUT) '~/${NAME}'
@ssh $(SSH_DUT) 'cd ~/${SUBDIR} && ./${NAME}'
@echo Copying artifacts back to local device...
@scp $(SSH_DUT):~/${NAME}.png .
@scp $(SSH_DUT):~/${SUBDIR}/${NAME}.png .
else
@echo Running locally...
@./$(NAME)
@@ -54,11 +93,19 @@ clean: check
@rm -f ${NAME}.png
@rm -f ${NAME}.vert.spv
@rm -f ${NAME}.frag.spv
ifneq ($(target), local)
@ssh $(SSH_DUT) 'rm -f ~/${NAME} ~/${NAME}.png'
@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}.frag.spv ~/${SUBDIR}/${NAME}.png'
endif
endif

check:
ifeq ($(CXX), INVALID)
$(error $$target must be one of [atlas, cheza, local] )
ifeq ($(TARGET), INVALID)
$(error $$target must be one of [atlas, cheza, android, android-trace, local])
endif

+ 1
- 2
README.md Vedi File

@@ -6,5 +6,4 @@ This repo contains the source for an applicaiton that renders a triangle using V
## Instructions
- Enter the CrOS chroot and set up the boards you want to test against (`setup_board --board=${BOARD}`).
- Emerge Vulkan, mesa, and libpng to the device under test (`emerge vulkan-loader media-libs/mesa libpng && cros deploy ${IP_ADDR} ${PACKAGES}`).
- `make shaders`
- `target={local, atlas (i915), cheza (adreno)} make`
- `target={local, atlas (i915), cheza (adreno), android, android-trace (libwrap.so)} make`

Loading…
Annulla
Salva