mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-04 00:50:40 +00:00
Add a wrap script with env var to work around Android bug. Refs #2651
This commit is contained in:
@@ -677,7 +677,13 @@ void PatchHookedFunctions()
|
||||
|
||||
bool LibraryHooks::Detect(const char *identifier)
|
||||
{
|
||||
return dlsym(RTLD_DEFAULT, identifier) != NULL;
|
||||
const bool symbol = (dlsym(RTLD_DEFAULT, identifier) != NULL);
|
||||
const bool env = (getenv(identifier) != NULL);
|
||||
|
||||
RDCLOG("Detecting symbol %s by dlsym: %s", identifier, symbol ? "yes" : "no");
|
||||
RDCLOG("Detecting symbol %s by getenv: %s", identifier, env ? "yes" : "no");
|
||||
|
||||
return symbol || env;
|
||||
}
|
||||
|
||||
void LibraryHooks::RemoveHooks()
|
||||
|
||||
@@ -216,6 +216,8 @@ if(ANDROID)
|
||||
set(APK_FILE ${CMAKE_BINARY_DIR}/bin/${RENDERDOC_ANDROID_PACKAGE_NAME}.apk)
|
||||
add_custom_target(apk ALL
|
||||
DEPENDS ${APK_FILE})
|
||||
|
||||
option(ENABLE_CUSTOM_WRAP_SCRIPT "Enable custom wrap.sh on Android to workaround Android bug" ON)
|
||||
|
||||
# Copy in android package files, replacing the package name with the architecture-specific package name
|
||||
configure_file(android/Loader.java ${CMAKE_CURRENT_BINARY_DIR}/src/org/renderdoc/renderdoccmd/Loader.java)
|
||||
@@ -233,6 +235,18 @@ if(ANDROID)
|
||||
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:renderdoc> libs/lib/${ANDROID_ABI}/$<TARGET_FILE_NAME:renderdoc>
|
||||
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:renderdoccmd> libs/lib/${ANDROID_ABI}/$<TARGET_FILE_NAME:renderdoccmd>
|
||||
)
|
||||
|
||||
if(ENABLE_CUSTOM_WRAP_SCRIPT)
|
||||
# use configure_file to ensure unix newlines regardless of how it is in the repository (e.g. CRLF on windows)
|
||||
configure_file(android/wrap.sh ${CMAKE_CURRENT_BINARY_DIR}/libs/lib/${ANDROID_ABI}/wrap.sh @ONLY NEWLINE_STYLE UNIX)
|
||||
|
||||
message(STATUS "Using custom wrap script for Android bug workaround")
|
||||
add_custom_command(OUTPUT ${APK_FILE} APPEND
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/libs/lib/${ANDROID_ABI}/wrap.sh libs/lib/${ANDROID_ABI}/wrap.sh
|
||||
)
|
||||
else()
|
||||
message(WARNING "Without custom wrap script, some Android versions will break due to Android bug")
|
||||
endif()
|
||||
|
||||
if(ENABLE_ASAN)
|
||||
set(ASAN_ABI_TAG "")
|
||||
@@ -260,11 +274,19 @@ if(ANDROID)
|
||||
elseif(${ASAN_LIBRARY} STREQUAL "" OR NOT EXISTS ${ASAN_LIBRARY})
|
||||
message(WARNING "libasan library couldn't be found in NDK, you will need to manually copy it in and re-generate apk")
|
||||
else()
|
||||
message(STATUS "Using wrap script ${WRAP_SCRIPT} and libasan library ${ASAN_LIBRARY}")
|
||||
add_custom_command(OUTPUT ${APK_FILE} APPEND
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${WRAP_SCRIPT} libs/lib/${ANDROID_ABI}/wrap.sh
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${ASAN_LIBRARY} libs/lib/${ANDROID_ABI}/
|
||||
)
|
||||
if(ENABLE_CUSTOM_WRAP_SCRIPT)
|
||||
message(STATUS "Chaining to wrap script ${WRAP_SCRIPT} and libasan library ${ASAN_LIBRARY}")
|
||||
add_custom_command(OUTPUT ${APK_FILE} APPEND
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${WRAP_SCRIPT} libs/lib/${ANDROID_ABI}/asan.sh
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${ASAN_LIBRARY} libs/lib/${ANDROID_ABI}/
|
||||
)
|
||||
else()
|
||||
message(STATUS "Directly using wrap script ${WRAP_SCRIPT} and libasan library ${ASAN_LIBRARY}")
|
||||
add_custom_command(OUTPUT ${APK_FILE} APPEND
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${WRAP_SCRIPT} libs/lib/${ANDROID_ABI}/wrap.sh
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${ASAN_LIBRARY} libs/lib/${ANDROID_ABI}/
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
#!/system/bin/sh
|
||||
export renderdoc__replay__marker=1
|
||||
# chain to asan's wrap if needed, now that we exported the env var
|
||||
if [ -f asan.sh ]; then
|
||||
./asan.sh "$@"
|
||||
else
|
||||
exec "$@"
|
||||
fi
|
||||
Reference in New Issue
Block a user