diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 006c4013..7bd06a80 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,34 +23,27 @@ jobs: /Users/runner/work/futurerestore/futurerestore/.github/workflows/mac-bootstrap.sh /Users/runner/work/futurerestore/futurerestore/.github/workflows/mac-build.sh /Users/runner/work/futurerestore/futurerestore/.github/workflows/mac-post.sh - - name: macOS x86_64 RELEASE Archive - id: macOS-x86_64-RELEASE-Archive + - name: macOS RELEASE Archive + id: macOS-RELEASE-Archive uses: actions/upload-artifact@v2 with: - name: futurerestore-macOS-x86_64-RELEASE + name: futurerestore-macOS-RELEASE path: | - /Users/runner/work/futurerestore/futurerestore/futurerestore-macOS-x86_64-*-RELEASE.tar.xz - - name: macOS x86_64 DEBUG Archive - id: macOS-x86_64-DEBUG-Archive + /Users/runner/work/futurerestore/futurerestore/futurerestore-macOS-*-RELEASE.tar.xz + - name: macOS DEBUG Archive + id: macOS-DEBUG-Archive uses: actions/upload-artifact@v2 with: - name: futurerestore-macOS-x86_64-DEBUG + name: futurerestore-macOS-DEBUG path: | - /Users/runner/work/futurerestore/futurerestore/futurerestore-macOS-x86_64-*-DEBUG.tar.xz - - name: macOS arm64 RELEASE Archive - id: macOS-arm64-RELEASE-Archive + /Users/runner/work/futurerestore/futurerestore/futurerestore-macOS-*-DEBUG.tar.xz + - name: macOS ASAN Archive + id: macOS-ASAN-Archive uses: actions/upload-artifact@v2 with: - name: futurerestore-macOS-arm64-RELEASE + name: futurerestore-macOS-ASAN path: | - /Users/runner/work/futurerestore/futurerestore/futurerestore-macOS-arm64-*-RELEASE.tar.xz - - name: macOS arm64 DEBUG Archive - id: macOS-arm64-DEBUG-Archive - uses: actions/upload-artifact@v2 - with: - name: futurerestore-macOS-arm64-DEBUG - path: | - /Users/runner/work/futurerestore/futurerestore/futurerestore-macOS-arm64-*-DEBUG.tar.xz + /Users/runner/work/futurerestore/futurerestore/futurerestore-macOS-*-ASAN.tar.xz Linux: runs-on: ubuntu-latest steps: @@ -81,6 +74,12 @@ jobs: docker cp $(docker ps -ql):/tmp/Builder/repos/futurerestore/.github/workflows/name2.txt /home/runner/work/futurerestore/futurerestore/.github/workflows/ docker cp $(docker ps -ql):/tmp/Builder/repos/futurerestore/.github/workflows/futurerestore2.tar.xz /home/runner/work/futurerestore/futurerestore/.github/workflows/ mv /home/runner/work/futurerestore/futurerestore/.github/workflows/futurerestore2.tar.xz /home/runner/work/futurerestore/futurerestore/.github/workflows/$(cat /home/runner/work/futurerestore/futurerestore/.github/workflows/name2.txt) + - name: Linux x86_64 ASAN Build + run: | + mkdir -p /home/runner/work/futurerestore/futurerestore/.github/workflows/ + docker cp $(docker ps -ql):/tmp/Builder/repos/futurerestore/.github/workflows/name3.txt /home/runner/work/futurerestore/futurerestore/.github/workflows/ + docker cp $(docker ps -ql):/tmp/Builder/repos/futurerestore/.github/workflows/futurerestore3.tar.xz /home/runner/work/futurerestore/futurerestore/.github/workflows/ + mv /home/runner/work/futurerestore/futurerestore/.github/workflows/futurerestore3.tar.xz /home/runner/work/futurerestore/futurerestore/.github/workflows/$(cat /home/runner/work/futurerestore/futurerestore/.github/workflows/name3.txt) - name: futurerestore Linux x86_64 RELEASE Archive id: futurerestore-Linux-x86_64-RELEASE-Archive uses: actions/upload-artifact@v2 @@ -95,3 +94,10 @@ jobs: name: futurerestore-Linux-x86_64-DEBUG path: | /home/runner/work/futurerestore/futurerestore/.github/workflows/futurerestore-Linux-x86_64*-DEBUG.tar.xz + - name: futurerestore Linux x86_64 ASAN Archive + id: futurerestore-Linux-x86_64-ASAN-Archive + uses: actions/upload-artifact@v2 + with: + name: futurerestore-Linux-x86_64-ASAN + path: | + /home/runner/work/futurerestore/futurerestore/.github/workflows/futurerestore-Linux-x86_64*-ASAN.tar.xz diff --git a/.github/workflows/linux-build.sh b/.github/workflows/linux-build.sh index 97852a6b..bd28410d 100755 --- a/.github/workflows/linux-build.sh +++ b/.github/workflows/linux-build.sh @@ -15,4 +15,10 @@ cd ${BASE} ln -sf ${DEP_ROOT}/Linux_x86_64_Debug/{lib/,include/} ${DEP_ROOT}/ cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_MAKE_PROGRAM=$(which make) -DCMAKE_C_COMPILER=$(which clang) -DCMAKE_CXX_COMPILER=$(which clang++) -DCMAKE_MESSAGE_LOG_LEVEL="WARNING" -G "CodeBlocks - Unix Makefiles" -S ./ -B cmake-build-debug-x86_64 -DARCH=x86_64 -DCMAKE_C_COMPILER=clang-13 -DCMAKE_CXX_COMPILER=clang++-13 -DCMAKE_LINKER=ld.lld-13 -DNO_PKGCFG=1 make -j4 -l4 -C cmake-build-debug-x86_64 + +cd ${BASE} +ln -sf ${DEP_ROOT}/Linux_x86_64_Debug/{lib/,include/} ${DEP_ROOT}/ +cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_MAKE_PROGRAM=$(which make) -DCMAKE_C_COMPILER=$(which clang) -DCMAKE_CXX_COMPILER=$(which clang++) -DCMAKE_MESSAGE_LOG_LEVEL="WARNING" -G "CodeBlocks - Unix Makefiles" -S ./ -B cmake-build-asan-x86_64 -DARCH=x86_64 -DCMAKE_C_COMPILER=clang-13 -DCMAKE_CXX_COMPILER=clang++-13 -DCMAKE_LINKER=ld.lld-13 -DNO_PKGCFG=1 -DASAN=1 +make -j4 -l4 -C cmake-build-asan-x86_64 + llvm-strip-13 -s cmake-build-release-x86_64/src/futurerestore diff --git a/.github/workflows/linux-post.sh b/.github/workflows/linux-post.sh index ca9109c2..cd1f04a3 100755 --- a/.github/workflows/linux-post.sh +++ b/.github/workflows/linux-post.sh @@ -12,8 +12,11 @@ export FUTURERESTORE_VERSION_RELEASE=$(cat version.txt | tr -d '\n') cd ${WORKFLOW_ROOT} echo "futurerestore-Linux-x86_64-${FUTURERESTORE_VERSION_RELEASE}-Build_${FUTURERESTORE_VERSION}-RELEASE.tar.xz" > name1.txt echo "futurerestore-Linux-x86_64-${FUTURERESTORE_VERSION_RELEASE}-Build_${FUTURERESTORE_VERSION}-DEBUG.tar.xz" > name2.txt +echo "futurerestore-Linux-x86_64-${FUTURERESTORE_VERSION_RELEASE}-Build_${FUTURERESTORE_VERSION}-ASAN.tar.xz" > name3.txt cp -RpP "${TMPDIR}/Builder/linux_fix.sh" linux_fix.sh cp -RpP "${BASE}/cmake-build-release-x86_64/src/futurerestore" futurerestore tar cpPJvf "futurerestore1.tar.xz" futurerestore linux_fix.sh cp -RpP "${BASE}/cmake-build-debug-x86_64/src/futurerestore" futurerestore tar cpPJvf "futurerestore2.tar.xz" futurerestore linux_fix.sh +cp -RpP "${BASE}/cmake-build-asan-x86_64/src/futurerestore" futurerestore +tar cpPJvf "futurerestore3.tar.xz" futurerestore linux_fix.sh diff --git a/.github/workflows/mac-build.sh b/.github/workflows/mac-build.sh index 315ea9cb..6bf6fa75 100755 --- a/.github/workflows/mac-build.sh +++ b/.github/workflows/mac-build.sh @@ -21,5 +21,15 @@ make -j4 -l4 -C cmake-build-release-arm64 ln -sf ${DEP_ROOT}/macOS_arm64_Debug/{lib/,include/} ${DEP_ROOT}/ cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_MAKE_PROGRAM=$(which make) -DCMAKE_C_COMPILER=$(which clang) -DCMAKE_CXX_COMPILER=$(which clang++) -DCMAKE_MESSAGE_LOG_LEVEL="WARNING" -G "CodeBlocks - Unix Makefiles" -S ./ -B cmake-build-debug-arm64 -DARCH=arm64 -DNO_PKGCFG=1 make -j4 -l4 -C cmake-build-debug-arm64 + +ln -sf ${DEP_ROOT}/macOS_x86_64_Debug/{lib/,include/} ${DEP_ROOT}/ +cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_MAKE_PROGRAM=$(which make) -DCMAKE_C_COMPILER=$(which clang) -DCMAKE_CXX_COMPILER=$(which clang++) -DCMAKE_MESSAGE_LOG_LEVEL="WARNING" -G "CodeBlocks - Unix Makefiles" -S ./ -B cmake-build-asan-x86_64 -DARCH=x86_64 -DNO_PKGCFG=1 -DASAN=1 +make -j4 -l4 -C cmake-build-asan-x86_64 + +ln -sf ${DEP_ROOT}/macOS_arm64_Debug/{lib/,include/} ${DEP_ROOT}/ +cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_MAKE_PROGRAM=$(which make) -DCMAKE_C_COMPILER=$(which clang) -DCMAKE_CXX_COMPILER=$(which clang++) -DCMAKE_MESSAGE_LOG_LEVEL="WARNING" -G "CodeBlocks - Unix Makefiles" -S ./ -B cmake-build-asan-arm64 -DARCH=arm64 -DNO_PKGCFG=1 -DASAN=1 +make -j4 -l4 -C cmake-build-asan-arm64 + + llvm-strip -s cmake-build-release-x86_64/src/futurerestore llvm-strip -s cmake-build-release-arm64/src/futurerestore diff --git a/.github/workflows/mac-post.sh b/.github/workflows/mac-post.sh index 7341b025..16a8e908 100755 --- a/.github/workflows/mac-post.sh +++ b/.github/workflows/mac-post.sh @@ -8,7 +8,11 @@ export BASE=/Users/runner/work/futurerestore/futurerestore/ cd ${BASE} export FUTURERESTORE_VERSION=$(git rev-list --count HEAD | tr -d '\n') export FUTURERESTORE_VERSION_RELEASE=$(cat version.txt | tr -d '\n') -tar cpPJf "futurerestore-macOS-x86_64-${FUTURERESTORE_VERSION_RELEASE}-Build_${FUTURERESTORE_VERSION}-RELEASE.tar.xz" -C cmake-build-release-x86_64/src futurerestore -tar cpPJf "futurerestore-macOS-x86_64-${FUTURERESTORE_VERSION_RELEASE}-Build_${FUTURERESTORE_VERSION}-DEBUG.tar.xz" -C cmake-build-debug-x86_64/src futurerestore -tar cpPJf "futurerestore-macOS-arm64-${FUTURERESTORE_VERSION_RELEASE}-Build_${FUTURERESTORE_VERSION}-RELEASE.tar.xz" -C cmake-build-release-arm64/src futurerestore -tar cpPJf "futurerestore-macOS-arm64-${FUTURERESTORE_VERSION_RELEASE}-Build_${FUTURERESTORE_VERSION}-DEBUG.tar.xz" -C cmake-build-debug-arm64/src futurerestore +lipo -create -arch x86_64 cmake-build-release-x86_64/src/futurerestore -arch arm64 cmake-build-release-arm64/src/futurerestore -output futurerestore +tar cpPJf "futurerestore-macOS-${FUTURERESTORE_VERSION_RELEASE}-Build_${FUTURERESTORE_VERSION}-RELEASE.tar.xz" futurerestore +rm -rf futurerestore +lipo -create -arch x86_64 cmake-build-debug-x86_64/src/futurerestore -arch arm64 cmake-build-debug-arm64/src/futurerestore -output futurerestore +tar cpPJf "futurerestore-macOS-${FUTURERESTORE_VERSION_RELEASE}-Build_${FUTURERESTORE_VERSION}-DEBUG.tar.xz" futurerestore +rm -rf futurerestore +lipo -create -arch x86_64 cmake-build-asan-x86_64/src/futurerestore -arch arm64 cmake-build-asan-arm64/src/futurerestore -output futurerestore +tar cpPJf "futurerestore-macOS-${FUTURERESTORE_VERSION_RELEASE}-Build_${FUTURERESTORE_VERSION}-ASAN.tar.xz" futurerestore diff --git a/CMakeLists.txt b/CMakeLists.txt index 6ba1b389..5d97cdf1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,15 @@ cmake_minimum_required(VERSION 3.22) find_package(PkgConfig REQUIRED) set(ignoreMe "${NO_PKGCFG}") +set(ignoreMe "${ASAN}") +set(ignoreMe "${ARCH}") set(SUBPROJECT_BUILD 1) +set(ASAN_FLAG "") +if(DEFINED ASAN OR "$ENV{ASAN}" MATCHES "1") + set(ASAN 1) + set(ASAN_FLAG -fsanitize=address) + set(CMAKE_C_LINK_LIBRARY_FLAG "${ASAN_FLAG}") +endif() if("${CMAKE_HOST_SYSTEM_NAME}" MATCHES "Darwin") if(NOT DEFINED NO_XCODE AND NOT DEFINED ENV{NO_XCODE}) execute_process(COMMAND xcrun --find clang WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" OUTPUT_VARIABLE CC OUTPUT_STRIP_TRAILING_WHITESPACE) @@ -27,12 +35,11 @@ if("${CMAKE_HOST_SYSTEM_NAME}" MATCHES "Darwin") set(CMAKE_OSX_DEPLOYMENT_TARGET 11.0) endif() endif() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -arch ${ARCH} -isysroot ${SYSROOT} ${MINVER} -fembed-bitcode=off -flto=thin -pthread -mrelax-all -std=gnu++20") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -arch ${ARCH} -isysroot ${SYSROOT} ${MINVER} -fembed-bitcode=off -flto=thin -pthread -mrelax-all -std=gnu17") -# set(CMAKE_C_LINK_LIBRARY_FLAG "-fsanitize=address") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -arch ${ARCH} -isysroot ${SYSROOT} ${MINVER} -fembed-bitcode=off -flto=thin -pthread -mrelax-all -std=gnu++20 ${ASAN_FLAG}") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -arch ${ARCH} -isysroot ${SYSROOT} ${MINVER} -fembed-bitcode=off -flto=thin -pthread -mrelax-all -std=gnu17 ${ASAN_FLAG}") elseif("${CMAKE_HOST_SYSTEM_NAME}" MATCHES "Linux") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wl,--allow-multiple-definition -pthread") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,--allow-multiple-definition -pthread") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,--allow-multiple-definition -pthread -mrelax-all -std=gnu++20 ${ASAN_FLAG}") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wl,--allow-multiple-definition -pthread -mrelax-all -std=gnu17 ${ASAN_FLAG}") endif() set(CMAKE_C_FLAGS_RELEASE "-Os -DNDEBUG") set(CMAKE_CXX_FLAGS_RELEASE "-Os -DNDEBUG") diff --git a/build.sh b/build.sh index 30768619..49af3dc8 100755 --- a/build.sh +++ b/build.sh @@ -1,14 +1,18 @@ #!/usr/bin/env bash which cmake >/dev/null -# if [[ "$?" -gt 0 ]]; then echo "[!] cmake not installed or not found, refusing to build!"; exit 1; fi + if [[ "$?" -gt 0 ]]; then echo "[!] cmake not installed or not found, refusing to build!"; exit 1; fi which make >/dev/null if [[ "$?" -gt 0 ]]; then echo "[!] make not installed or not found, refusing to build!"; exit 1; fi +export CC="$(which clang)" +export CXX="$(which clang++)" +which xcrun >/dev/null + if [[ "$?" -lt 1 ]]; then export CC="$(xcrun --find clang)"; export CXX="$(xcrun --find clang++)"; fi echo "[*] Building futurerestore" export FR_INSTALL_DIR="/usr/local/bin" if [[ -z "$NO_CLEAN" ]]; then rm -rf cmake-build-release cmake-build-debug; fi if [[ "$RELEASE" == "1" ]] then - if [[ ! "$NO_CLEAN" == "1" ]]; then cmake -DCMAKE_INSTALL_PREFIX="${FR_INSTALL_DIR}" -DCMAKE_BUILD_TYPE=Release -DCMAKE_MAKE_PROGRAM=$(which make) -DCMAKE_C_COMPILER=$(which clang) -DCMAKE_CXX_COMPILER=$(which clang++) -DCMAKE_MESSAGE_LOG_LEVEL="WARNING" -G "CodeBlocks - Unix Makefiles" -S ./ -B cmake-build-release $@; fi + if [[ ! "$NO_CLEAN" == "1" ]]; then cmake -DCMAKE_INSTALL_PREFIX="${FR_INSTALL_DIR}" -DCMAKE_BUILD_TYPE=Release -DCMAKE_MAKE_PROGRAM=$(which make) -DCMAKE_C_COMPILER="${CC}" -DCMAKE_CXX_COMPILER="${CXX}" -DCMAKE_MESSAGE_LOG_LEVEL="WARNING" -G "CodeBlocks - Unix Makefiles" -S ./ -B cmake-build-release $@; fi make -s -C cmake-build-release clean make -s -C cmake-build-release if [[ "$?" -gt 0 ]]; then echo "[!] Failed to build futurerestore!"; exit 1; fi @@ -17,7 +21,7 @@ then echo "[*] Run make -C cmake-build-release install, to install futurerestore or obtain the binary at cmake-build-release/src/futurerestore" echo "[*] Successfully built futurerestore." else - if [[ ! "$NO_CLEAN" == "1" ]]; then cmake -DCMAKE_INSTALL_PREFIX="${FR_INSTALL_DIR}" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_MAKE_PROGRAM=$(which make) -DCMAKE_C_COMPILER=$(which clang) -DCMAKE_CXX_COMPILER=$(which clang++) -DCMAKE_MESSAGE_LOG_LEVEL="WARNING" -G "CodeBlocks - Unix Makefiles" -S ./ -B cmake-build-debug $@ ; fi + if [[ ! "$NO_CLEAN" == "1" ]]; then cmake -DCMAKE_INSTALL_PREFIX="${FR_INSTALL_DIR}" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_MAKE_PROGRAM=$(which make) -DCMAKE_C_COMPILER="${CC}" -DCMAKE_CXX_COMPILER="${CXX}" -DCMAKE_MESSAGE_LOG_LEVEL="WARNING" -G "CodeBlocks - Unix Makefiles" -S ./ -B cmake-build-debug $@ ; fi make -s -C cmake-build-debug clean make -s -C cmake-build-debug if [[ "$?" -gt 0 ]]; then echo "[!] Failed to build futurerestore!"; exit 1; fi diff --git a/external/idevicerestore b/external/idevicerestore index fde2c33c..9dc32373 160000 --- a/external/idevicerestore +++ b/external/idevicerestore @@ -1 +1 @@ -Subproject commit fde2c33c9199d8e520e5889e3562630acfa4c03f +Subproject commit 9dc323733e296283a58df4a27d00c4108793742d diff --git a/external/tsschecker b/external/tsschecker index 9f141b33..a17dbfca 160000 --- a/external/tsschecker +++ b/external/tsschecker @@ -1 +1 @@ -Subproject commit 9f141b333befed9b45203a4f45e49707ec08ff24 +Subproject commit a17dbfcac2d6760b6581b1e595d051fda76a559d