Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
163 changes: 163 additions & 0 deletions .github/workflows/root-device-test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,163 @@
# Root Device Test Workflow for Adreno GPU Driver Module
# This workflow validates the Magisk module structure and prepares test artifacts
# test.so files will be added later for actual driver testing

name: Root Device Test

on:
workflow_dispatch:
inputs:
test_device:
description: 'Target device model (e.g., SM-S918B)'
required: false
default: 'generic'
android_version:
description: 'Android version (e.g., 14)'
required: false
default: '14'
push:
paths:
- 'Magisk Template/**'
- '.github/workflows/root-device-test.yml'
pull_request:
paths:
- 'Magisk Template/**'

# Minimal permissions required for this workflow
permissions:
contents: read

jobs:
validate-module:
name: Validate Magisk Module Structure
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Validate module.prop
run: |
echo "Validating module.prop..."
if [ ! -f "Magisk Template/module.prop" ]; then
echo "❌ module.prop not found"
exit 1
fi

# Check required fields
required_fields=("id" "name" "version" "versionCode" "author" "description")
for field in "${required_fields[@]}"; do
if ! grep -q "^${field}=" "Magisk Template/module.prop"; then
echo "❌ Missing required field: $field"
exit 1
fi
done
echo "✅ module.prop is valid"

- name: Validate customize.sh syntax
run: |
echo "Validating customize.sh syntax..."
if [ ! -f "Magisk Template/customize.sh" ]; then
echo "❌ customize.sh not found"
exit 1
fi
bash -n "Magisk Template/customize.sh"
echo "✅ customize.sh syntax is valid"

- name: Validate update-binary syntax
run: |
echo "Validating update-binary syntax..."
if [ ! -f "Magisk Template/META-INF/com/google/android/update-binary" ]; then
echo "❌ update-binary not found"
exit 1
fi
bash -n "Magisk Template/META-INF/com/google/android/update-binary"
echo "✅ update-binary syntax is valid"

- name: Check directory structure
run: |
echo "Checking directory structure..."

# Required directories
dirs=(
"Magisk Template/META-INF/com/google/android"
"Magisk Template/system/vendor"
)

for dir in "${dirs[@]}"; do
if [ ! -d "$dir" ]; then
echo "❌ Missing directory: $dir"
exit 1
fi
done
echo "✅ Directory structure is valid"

- name: Display module info
run: |
echo "=== Module Information ==="
cat "Magisk Template/module.prop"
echo ""
echo "=== System Properties ==="
if [ -f "Magisk Template/system.prop" ]; then
cat "Magisk Template/system.prop"
else
echo "(No system.prop file)"
fi

build-test-module:
name: Build Test Module
runs-on: ubuntu-latest
needs: validate-module

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Create test module zip
run: |
echo "Creating test module..."
cd "Magisk Template"

# Create module zip (excluding placeholder files)
zip -r ../adreno-gpu-driver-test.zip . \
-x "*/readme and delete" \
-x "*.md"

cd ..
echo "✅ Test module created"
ls -la adreno-gpu-driver-test.zip

- name: Upload test module artifact
uses: actions/upload-artifact@v4
with:
name: adreno-gpu-driver-test-module
path: adreno-gpu-driver-test.zip
retention-days: 7

# Placeholder for future root device testing
# test.so files will be added later for actual driver validation
root-device-test:
name: Root Device Test (Placeholder)
runs-on: ubuntu-latest
needs: build-test-module
if: github.event_name == 'workflow_dispatch'

steps:
- name: Download test module
uses: actions/download-artifact@v4
with:
name: adreno-gpu-driver-test-module

- name: Test preparation info
run: |
echo "=== Root Device Test Preparation ==="
echo "Target Device: ${{ github.event.inputs.test_device }}"
echo "Android Version: ${{ github.event.inputs.android_version }}"
echo ""
echo "Test module is ready for deployment."
echo "test.so files will be added in future updates for:"
echo " - OpenGL driver validation"
echo " - Vulkan driver validation"
echo " - OpenCL driver validation"
echo ""
ls -la adreno-gpu-driver-test.zip
123 changes: 53 additions & 70 deletions Magisk Template/customize.sh
Original file line number Diff line number Diff line change
Expand Up @@ -15,88 +15,68 @@ ui_print " - Rom Check..."

# Rom Check
if [ "$(getprop ro.build.host)" != "xiaomi.eu" ]; then
echo " - Success Variant 1 🌍"
ui_print " - Success Variant 1 🌍"
else
echo " "
echo "❗Very bad ROM (risky)"
echo " "
ui_print " "
ui_print "❗Very bad ROM (risky)"
ui_print " "
fi

# First Use Check
if [ "$(getprop pm.dexopt.first-use)" != "false" ]; then
echo " - Success Variant 2 🌍"
ui_print " - Success Variant 2 🌍"
else
echo " "
echo "! Bad ROM"
echo " "
ui_print " "
ui_print "! Bad ROM"
ui_print " "
fi

ui_print " - Android Version Check..."
if [ $(getprop ro.system.build.version.sdk) -lt 31 ]; then
echo "! Unsupported Android version detected, please upgrade."
ui_print "! Unsupported Android version detected, please upgrade."
abort
else
echo " - Success 🌍"
ui_print " - Success 🌍"
fi
echo " "
ui_print " "

# Pause before setting permissions
sleep 1

ui_print " - Setting permissions..."

# Apply permissions
set_perm_recursive $MODPATH/system/vendor 0 0 0755 0644 u:object_r:same_process_hal_file:s0
set_perm_recursive $MODPATH/system/vendor/etc/sphal_libraries.txt 0 0 0755 0644 u:object_r:same_process_hal_file:s0
set_perm_recursive $MODPATH/system/lib* 0 0 0644 u:object_r:system_lib_file:s0
set_perm_recursive $MODPATH 0 0 0755 0644
set_perm_recursive $MODPATH/system/vendor/lib/ 0 0 0755 0644 u:object_r:same_process_hal_file:s0
set_perm_recursive $MODPATH/system/vendor/lib/libEGL_adreno.so 0 0 0755 0644 u:object_r:same_process_hal_file:s0
set_perm_recursive $MODPATH/system/vendor/lib/libGLESv2_adreno.so 0 0 0755 0644 u:object_r:same_process_hal_file:s0
set_perm_recursive $MODPATH/system/vendor/lib/libadreno_app_profiles.so 0 0 0755 0644 u:object_r:same_process_hal_file:s0
set_perm_recursive $MODPATH/system/vendor/lib/libq3dtools_adreno.so 0 0 0755 0644 u:object_r:same_process_hal_file:s0
set_perm_recursive $MODPATH/system/vendor/lib/libllvm-qgl.so 0 0 0755 0644 u:object_r:same_process_hal_file:s0
set_perm_recursive $MODPATH/system/vendor/lib/libllvm-qgl.so 0 0 0755 0644 u:object_r:same_process_hal_file:s0
set_perm_recursive $MODPATH/system/vendor/lib/libllvm-glnext.so 0 0 0755 0644 u:object_r:same_process_hal_file:s0
set_perm_recursive $MODPATH/system/vendor/lib/libllvm-qcom.so 0 0 0755 0644 u:object_r:same_process_hal_file:s0
set_perm_recursive $MODPATH/system/vendor/lib/libadreno_utils.so 0 0 0755 0644 u:object_r:same_process_hal_file:s0
set_perm_recursive $MODPATH/system/vendor/lib64/libadreno_utils.so 0 0 0755 0644 u:object_r:same_process_hal_file:s0
set_perm_recursive $MODPATH/system/vendor/lib/hw/vulkan.adreno.so 0 0 0755 0644 u:object_r:same_process_hal_file:s0
set_perm_recursive $MODPATH/system/vendor/lib/egl/ 0 0 0755 0644 u:object_r:same_process_hal_file:s0
set_perm_recursive $MODPATH/system/vendor/lib64/ 0 0 0755 0644 u:object_r:same_process_hal_file:s0
set_perm_recursive $MODPATH/system/vendor/lib/libVkLayer_ADRENO_qprofiler.so 0 0 0755 0644 u:object_r:same_process_hal_file:s0
set_perm_recursive $MODPATH/system/vendor/lib64/libVkLayer_ADRENO_qprofiler.so 0 0 0755 0644 u:object_r:same_process_hal_file:s0
set_perm_recursive $MODPATH/system/vendor/lib64/libEGL_adreno.so 0 0 0755 0644 u:object_r:same_process_hal_file:s0
set_perm_recursive $MODPATH/system/vendor/lib64/libGLESv2_adreno.so 0 0 0755 0644 u:object_r:same_process_hal_file:s0
set_perm_recursive $MODPATH/system/vendor/lib64/libadreno_app_profiles.so 0 0 0755 0644 u:object_r:same_process_hal_file:s0
set_perm_recursive $MODPATH/system/vendor/lib64/libq3dtools_adreno.so 0 0 0755 0644 u:object_r:same_process_hal_file:s0
set_perm_recursive $MODPATH/system/vendor/lib64/hw/vulkan.adreno.so 0 0 0755 0644 u:object_r:same_process_hal_file:s0
set_perm_recursive $MODPATH/system/vendor/lib64/libllvm-qgl.so 0 0 0755 0644 u:object_r:same_process_hal_file:s0
set_perm_recursive $MODPATH/system/vendor/lib64/libllvm-glnext.so 0 0 0755 0644 u:object_r:same_process_hal_file:s0
set_perm_recursive $MODPATH/system/vendor/lib64/libllvm-qcom.so 0 0 0755 0644 u:object_r:same_process_hal_file:s0
set_perm_recursive $MODPATH/system/vendor/lib64/egl/ 0 0 0755 0644 u:object_r:same_process_hal_file:s0
set_perm_recursive $MODPATH/system/lib/egl/libEGL_adreno.so 0 0 0755 0644 u:object_r:system_lib_file:s0
set_perm_recursive $MODPATH/system/lib64/egl/libEGL_adreno.so 0 0 0755 0644 u:object_r:system_lib_file:s0
set_perm_recursive $MODPATH/system/lib/egl/libVkLayer_ADRENO_qprofiler.so 0 0 0755 0644 u:object_r:system_lib_file:s0
set_perm_recursive $MODPATH/system/lib64/egl/libVkLayer_ADRENO_qprofiler.so 0 0 0755 0644 u:object_r:system_lib_file:s0
set_perm_recursive $MODPATH/system/lib64/libEGL.so 0 0 0755 0644 u:object_r:system_lib_file:s0
set_perm_recursive $MODPATH/system/lib64/libGLESv1_CM.so 0 0 0755 0644 u:object_r:system_lib_file:s0
set_perm_recursive $MODPATH/system/lib64/libGLESv2.so 0 0 0755 0644 u:object_r:system_lib_file:s0
set_perm_recursive $MODPATH/system/lib64/libGLESv3.so 0 0 0755 0644 u:object_r:system_lib_file:s0
set_perm_recursive $MODPATH/system/lib64/libvulkan.so 0 0 0755 0644 u:object_r:system_lib_file:s0
set_perm_recursive $MODPATH/system/lib/libEGL.so 0 0 0755 0644 u:object_r:system_lib_file:s0
set_perm_recursive $MODPATH/system/lib/libGLESv1_CM.so 0 0 0755 0644 u:object_r:system_lib_file:s0
set_perm_recursive $MODPATH/system/lib/libGLESv2.so 0 0 0755 0644 u:object_r:system_lib_file:s0
set_perm_recursive $MODPATH/system/lib/libGLESv3.so 0 0 0755 0644 u:object_r:system_lib_file:s0
set_perm_recursive $MODPATH/system/lib/libvulkan.so 0 0 0755 0644 u:object_r:system_lib_file:s0
set_perm_recursive $MODPATH/system/vendor/lib64/libdmabufheap.so 0 0 0755 0644 u:object_r:same_process_hal_file:s0
set_perm_recursive $MODPATH/system/vendor/lib/libdmabufheap.so 0 0 0755 0644 u:object_r:same_process_hal_file:s0
set_perm_recursive $MODPATH/system/vendor/lib64/libCB.so 0 0 0755 0644 u:object_r:same_process_hal_file:s0
set_perm_recursive $MODPATH/system/vendor/lib64/libgsl.so 0 0 0755 0644 u:object_r:same_process_hal_file:s0
set_perm_recursive $MODPATH/system/vendor/lib64/libadreno_utils.so 0 0 0755 0644 u:object_r:same_process_hal_file:s0

# Set specific permissions
chmod 644 /system/vendor/firmware/a650_sqe.fw
sleep 1
# Apply base module permissions
set_perm_recursive $MODPATH 0 0 0755 0644

# Apply permissions for system lib directories (recursive)
# SELinux context: u:object_r:system_lib_file:s0 for system libraries
if [ -d "$MODPATH/system/lib" ]; then
set_perm_recursive $MODPATH/system/lib 0 0 0755 0644 u:object_r:system_lib_file:s0
fi

if [ -d "$MODPATH/system/lib64" ]; then
set_perm_recursive $MODPATH/system/lib64 0 0 0755 0644 u:object_r:system_lib_file:s0
fi

# Apply permissions for vendor firmware (specific context first)
if [ -d "$MODPATH/system/vendor/firmware" ]; then
set_perm_recursive $MODPATH/system/vendor/firmware 0 0 0755 0644 u:object_r:vendor_firmware_file:s0
fi

# Apply permissions for vendor etc files (specific context)
if [ -d "$MODPATH/system/vendor/etc" ]; then
set_perm_recursive $MODPATH/system/vendor/etc 0 0 0755 0644 u:object_r:vendor_configs_file:s0
fi

# Apply permissions for vendor lib directories (GPU libraries)
# SELinux context: u:object_r:same_process_hal_file:s0 for vendor GPU libraries
if [ -d "$MODPATH/system/vendor/lib" ]; then
set_perm_recursive $MODPATH/system/vendor/lib 0 0 0755 0644 u:object_r:same_process_hal_file:s0
fi

if [ -d "$MODPATH/system/vendor/lib64" ]; then
set_perm_recursive $MODPATH/system/vendor/lib64 0 0 0755 0644 u:object_r:same_process_hal_file:s0
fi

ui_print " - Success 🌍"
ui_print " "
Expand All @@ -105,15 +85,18 @@ ui_print " - Please wait..."

# GPU Cache Cleaner @tryigitx
gpu_cache_cleaner() {
find "$1" -type f -name '*shader*' -exec rm -f {} \;
if [ -e "$1" ]; then
else
echo " - $1 cleared 🧭"
local target_path="$1"
if [ -d "$target_path" ]; then
# Remove shader cache directories and GPU cache files
find "$target_path" \( -type d -name '*shader_cache*' -prune -exec rm -rf {} \; \) -o \
\( -type f \( -name '*shader*' -o -name '*gpu_cache*' \) -exec rm -f {} \; \) 2>/dev/null
ui_print " - $target_path cleared 🧭"
fi
}

gpu_cache_cleaner "/data"
gpu_cache_cleaner "/data/user_de/*shader_cache*/code_cache"
gpu_cache_cleaner "/data/data"
gpu_cache_cleaner "/data/user_de"
gpu_cache_cleaner "/data/user"

ui_print " "
ui_print " - Please reboot 🎉"
Expand Down
12 changes: 10 additions & 2 deletions Magisk Template/system.prop
Original file line number Diff line number Diff line change
@@ -1,2 +1,10 @@
# Fix Magiskhide map conflict. It causes some additional problems. If you find a different solution, send pull req. @tryigitx
ro.zygote.disable_gl_preload=1
# Magisk GPU driver compatibility properties @tryigitx
# Note: These properties help prevent conflicts with Magisk hide/denylist

# Disable GL preload to avoid Magisk hide EGL mapping issues
# This is a workaround for the zygote GL preload conflict
ro.zygote.disable_gl_preload=true

# Disable ANGLE driver loading by clearing the rules
# This ensures native Adreno drivers are used instead of ANGLE
debug.angle.rules=""
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,6 @@ You will need to learn how to use the **Adreno Profile Tools**. You can also dow

## Known Issues
- [x] Kernelsu compatibility
- [ ] Magiskhide map conflict
> [!IMPORTANT]
> Temporarily added this prop code `ro.zygote.disable_gl_preload=1` this fixes the magiskhide egl issue but causes other problems* @topjohnwu
- [x] Magiskhide map conflict (improved with better permission structure and properties)
> [!NOTE]
> The prop code `ro.zygote.disable_gl_preload=true` helps fix the magiskhide EGL issue. Additional compatibility properties have been added to `system.prop`.