From bc5efc9ee553ba8f5ff594ac1ba3fd8f10663700 Mon Sep 17 00:00:00 2001 From: mio Date: Sat, 16 Oct 2021 20:35:23 +0200 Subject: [PATCH] Fix Android x86_64 build Note: At this time, both arm32 and arm64 emulation doesn't work on either macOS and Ubuntu so we could only have x86_64 --- .github/workflows/build-uc2.yml | 29 ++++++++++++++++++++++-- CMakeLists.txt | 39 ++++++++++++++++++++------------- 2 files changed, 51 insertions(+), 17 deletions(-) diff --git a/.github/workflows/build-uc2.yml b/.github/workflows/build-uc2.yml index 8cff3884..8953c7bf 100644 --- a/.github/workflows/build-uc2.yml +++ b/.github/workflows/build-uc2.yml @@ -223,7 +223,7 @@ jobs: cmake --build . --config ${{ matrix.config.build_type }} cmake --install . --strip ctest -C ${{ matrix.config.build_type }} - + - name: '🚧 Android x86_64 build' if: contains(matrix.config.name, 'android') shell: bash @@ -245,16 +245,41 @@ jobs: cmake --build . --config ${{ matrix.config.build_type }} cmake --install . --strip + - name: '🚧 AVD Cache' + if: contains(matrix.config.name, 'android') + uses: actions/cache@v2 + id: avd-cache + with: + path: | + ~/.android/avd/* + ~/.android/adb* + key: avd-28 + + - name: '🚧 Create x86_64 tests environment' + if: contains(matrix.config.name, 'android') && steps.avd-cache.outputs.cache-hit != 'true' + uses: reactivecircus/android-emulator-runner@v2 + with: + api-level: 28 + arch: ${{ matrix.config.arch }} + force-avd-creation: false + disable-animations: false + target: default + profile: Nexus 6 + emulator-options: -no-window -gpu swiftshader_indirect -no-snapshot -noaudio -no-boot-anim -verbose -show-kernel + script: echo "Generated AVD snapshot for caching." + - name: '🚧 Android x86_64 tests' if: contains(matrix.config.name, 'android') uses: reactivecircus/android-emulator-runner@v2 with: api-level: 28 + force-avd-creation: false + disable-animations: true arch: ${{ matrix.config.arch }} target: default profile: Nexus 6 emulator-options: -no-window -gpu swiftshader_indirect -no-snapshot -noaudio -no-boot-anim -verbose -show-kernel - script: ctest -C ${{ matrix.config.build_type }} + script: bash ./adb.sh - name: '📦 Pack artifact' shell: bash diff --git a/CMakeLists.txt b/CMakeLists.txt index b561cf5c..e8f23054 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -90,6 +90,7 @@ else() endif() elseif(ANDROID_ABI) string(FIND "${ANDROID_ABI}" "arm64" UC_RET) + file(WRITE ${CMAKE_BINARY_DIR}/adb.sh "#!/bin/bash\n\nadb shell mkdir -p /data/local/tmp/build\n") if (${UC_RET} GREATER_EQUAL "0") set(UNICORN_TARGET_ARCH "aarch64") @@ -1023,6 +1024,9 @@ if (UNICORN_BUILD_SHARED) add_library(unicorn SHARED ${UNICORN_SRCS} ) + if (ANDROID_ABI) + file(APPEND ${CMAKE_BINARY_DIR}/adb.sh "adb push ./libunicorn.so /data/local/tmp/build/\n") + endif() else() add_library(unicorn STATIC ${UNICORN_SRCS} @@ -1159,22 +1163,27 @@ if(UNICORN_FUZZ) endforeach() else() foreach(SAMPLE_FILE ${UNICORN_SAMPLE_FILE}) - add_executable(${SAMPLE_FILE} - ${CMAKE_CURRENT_SOURCE_DIR}/samples/${SAMPLE_FILE}.c - ) - target_link_libraries(${SAMPLE_FILE} - ${SAMPLES_LIB} - ) - endforeach(SAMPLE_FILE) + add_executable(${SAMPLE_FILE} + ${CMAKE_CURRENT_SOURCE_DIR}/samples/${SAMPLE_FILE}.c + ) + target_link_libraries(${SAMPLE_FILE} + ${SAMPLES_LIB} + ) + endforeach(SAMPLE_FILE) - foreach(TEST_FILE ${UNICORN_TEST_FILE}) - add_executable(${TEST_FILE} - ${CMAKE_CURRENT_SOURCE_DIR}/tests/unit/${TEST_FILE}.c - ) - target_link_libraries(${TEST_FILE} - ${SAMPLES_LIB} - ) - add_test(${TEST_FILE} ${TEST_FILE}) + foreach(TEST_FILE ${UNICORN_TEST_FILE}) + add_executable(${TEST_FILE} + ${CMAKE_CURRENT_SOURCE_DIR}/tests/unit/${TEST_FILE}.c + ) + target_link_libraries(${TEST_FILE} + ${SAMPLES_LIB} + ) + add_test(${TEST_FILE} ${TEST_FILE}) + if (ANDROID_ABI) + file(APPEND ${CMAKE_BINARY_DIR}/adb.sh "adb push ${TEST_FILE} /data/local/tmp/build/\n") + file(APPEND ${CMAKE_BINARY_DIR}/adb.sh "adb shell \"chmod +x /data/local/tmp/build/${TEST_FILE}\"\n") + file(APPEND ${CMAKE_BINARY_DIR}/adb.sh "adb shell \'LD_LIBRARY_PATH=/data/local/tmp/build:$LD_LIBRARY_PATH /data/local/tmp/build/${TEST_FILE}\' || exit -1\n") + endif() endforeach(TEST_FILE) endif()