fix(build): musl compilation (#759)

This commit is contained in:
C authored and GitHub committed 2026-06-30 22:23:51 -07:00
1 parent 704e7a1037
commit e54e51b363
4 files changed
+212 -236

No files matched your search

+16 -5
View File
@@ -37,7 +37,6 @@ jobs:
gmake -j1 tools gmake -j1 tools
gmake -j$(sysctl -n hw.ncpu) gmake -j$(sysctl -n hw.ncpu)
- name: Prepare upload directory - name: Prepare upload directory
run: | run: |
mkdir upload mkdir upload
@@ -107,16 +106,26 @@ jobs:
run: | run: |
curl -u ${{ secrets.ACTIONS_RESOURCES_LOGIN }} -LO https://static.palera.in/action-resources/musl-cross/${{ matrix.triple }}-cross.tar.zst curl -u ${{ secrets.ACTIONS_RESOURCES_LOGIN }} -LO https://static.palera.in/action-resources/musl-cross/${{ matrix.triple }}-cross.tar.zst
tar --zstd -xf ${{ matrix.triple }}-cross.tar.zst tar --zstd -xf ${{ matrix.triple }}-cross.tar.zst
find ./${{ matrix.triple }}-cross -name "*.la" -type f -delete
echo "$(pwd)/${{ matrix.triple }}-cross/bin" >> $GITHUB_PATH echo "$(pwd)/${{ matrix.triple }}-cross/bin" >> $GITHUB_PATH
- name: Install dependencies (apt) - name: Install dependencies (apt)
run: | run: |
sudo apt update sudo apt update
sudo apt install -y build-essential cmake autoconf automake libtool pkg-config sudo apt install -y build-essential cmake autoconf automake libtool pkg-config zstd
- name: Build - name: Build
run: | run: |
make palera1n WITH_STATIC=1 BUILD_TYPE=Release CMAKE_SYSROOT="$("$PWD/${{ matrix.triple }}-cross/bin/${{ matrix.triple }}-gcc" -print-sysroot)" SYSROOT_PATH="$("$PWD/${{ matrix.triple }}-cross/bin/${{ matrix.triple }}-gcc" -print-sysroot)"
CC="${{ matrix.triple }}-gcc" CXX="${{ matrix.triple }}-g++" \
make palera1n \
WITH_STATIC=1 \
BUILD_TYPE=Release \
CMAKE_SYSROOT="$SYSROOT_PATH" \
CROSS_HOST_TRIPLE="${{ matrix.triple }}" \
JOBS=$(nproc)
${{ matrix.triple }}-strip -s build/palera1n
- name: Upload - name: Upload
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
@@ -159,7 +168,8 @@ jobs:
- name: Build - name: Build
run: | run: |
make palera1n WITH_STATIC=1 WITH_GUI=1 BUILD_TYPE=Release make palera1n WITH_STATIC=1 WITH_GUI=1 BUILD_TYPE=Release JOBS=$(sysctl -n hw.ncpu)
strip -s build/palera1n.app/Contents/MacOS/palera1n
cd build && zip -r palera1n-macos-${{ matrix.arch }}.zip palera1n.app cd build && zip -r palera1n-macos-${{ matrix.arch }}.zip palera1n.app
- name: Upload - name: Upload
@@ -225,7 +235,8 @@ jobs:
- name: Build - name: Build
shell: msys2 {0} shell: msys2 {0}
run: | run: |
make palera1n_mingw WITH_STATIC=1 WITH_GUI=1 BUILD_TYPE=Release make palera1n_mingw WITH_STATIC=1 WITH_GUI=1 BUILD_TYPE=Release JOBS=$(nproc)
strip -s build/palera1n.exe
- name: Upload - name: Upload
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
+4 -1
View File
@@ -9,4 +9,7 @@ payloads/binpack.dmg
libusbK/ libusbK/
libusbK-tmp/ libusbK-tmp/
*.7z *.7z
*.tgz
*.tar.gz
*-cross
+170 -222
View File
@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.10) cmake_minimum_required(VERSION 3.12)
project(palera1n VERSION 3.0) project(palera1n VERSION 3.0)
include(FetchContent) include(FetchContent)
@@ -6,40 +6,64 @@ include(ExternalProject)
set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True) set(CMAKE_CXX_STANDARD_REQUIRED True)
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.13")
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CROSS_HOST_TRIPLE "" CACHE STRING "Cross-compile target triple for Autotools (e.g., x86_64-linux-musl)")
option(WITH_GUI "Build with wxWidgets GUI" OFF) option(WITH_GUI "Build with wxWidgets GUI" OFF)
option(WITH_STATIC "Build with static wxWidgets / deps" OFF) option(WITH_STATIC "Build with static wxWidgets / deps" OFF)
option(WITH_TUI "Build with TUI" OFF) option(WITH_TUI "Build with TUI" OFF)
option(WITH_ARTIFACTS "Build with embedded artifacts" OFF) option(WITH_RAMDISK "Build with ramdisk" ON)
option(WITH_BINPACK "Build with binpack" ON)
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.13") # =========================
set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # BUILD REQUIREMENTS
# =========================
if(LINUX AND WITH_STATIC)
if(NOT CROSS_HOST_TRIPLE MATCHES "musl" AND NOT CMAKE_C_COMPILER_TARGET MATCHES "musl" AND NOT CMAKE_C_COMPILER MATCHES "musl")
message(FATAL_ERROR "Static builds on Linux require a musl toolchain. Please specify a musl cross-compiler or set -DCROSS_HOST_TRIPLE=...-linux-musl")
endif()
endif()
if(MINGW AND NOT WITH_STATIC)
message(FATAL_ERROR "MinGW builds must be static. Please configure with -DWITH_STATIC=ON")
endif()
# =========================
# SETUP
# =========================
if(MINGW) if(MINGW)
set(DEPS_PREFIX /mingw64) set(DEPS_PREFIX /mingw64)
elseif(CMAKE_SYSROOT) elseif(CMAKE_SYSROOT)
set(DEPS_PREFIX "${CMAKE_SYSROOT}") set(DEPS_PREFIX "${CMAKE_SYSROOT}/usr")
else() else()
set(DEPS_PREFIX "${CMAKE_BINARY_DIR}/deps") set(DEPS_PREFIX "${CMAKE_BINARY_DIR}/sysroot/usr/local")
endif() endif()
set(SYSROOT_FLAGS "")
if(CMAKE_SYSROOT)
set(SYSROOT_FLAGS "--sysroot=${CMAKE_SYSROOT}")
endif()
set(AUTOTOOLS_BUILD_TRIPLE "x86_64-linux-gnu")
# ========================= # =========================
# CMAKE DEPENDENCIES
# =========================
# wxWidgets # wxWidgets
# =========================
if(WITH_GUI) if(WITH_GUI)
if(WITH_STATIC) if(WITH_STATIC)
set(wxBUILD_SHARED OFF CACHE BOOL "" FORCE) set(wxBUILD_SHARED OFF CACHE BOOL "" FORCE)
FetchContent_Declare( FetchContent_Declare(
wxWidgets wxWidgets
GIT_REPOSITORY https://github.com/wxWidgets/wxWidgets.git GIT_REPOSITORY https://github.com/wxWidgets/wxWidgets.git
GIT_SHALLOW ON GIT_SHALLOW ON
) )
FetchContent_MakeAvailable(wxWidgets) FetchContent_MakeAvailable(wxWidgets)
set(WX_LIBRARIES wxcore wxbase wxnet) set(WX_LIBRARIES wxcore wxbase wxnet)
else() else()
find_package(wxWidgets REQUIRED COMPONENTS core base net) find_package(wxWidgets REQUIRED COMPONENTS core base net)
include(${wxWidgets_USE_FILE}) include(${wxWidgets_USE_FILE})
@@ -47,40 +71,28 @@ if(WITH_GUI)
endif() endif()
endif() endif()
# ========================= # nlohmann_json
# JSON
# =========================
include(FetchContent)
FetchContent_Declare( FetchContent_Declare(
nlohmann_json nlohmann_json
GIT_REPOSITORY https://github.com/nlohmann/json.git GIT_REPOSITORY https://github.com/nlohmann/json.git
GIT_TAG v3.11.3 GIT_TAG v3.11.3
) )
FetchContent_MakeAvailable(nlohmann_json) FetchContent_MakeAvailable(nlohmann_json)
# =========================
# LZ4 # LZ4
# =========================
include(FetchContent)
set(LZ4_BUILD_CLI OFF CACHE BOOL "" FORCE) set(LZ4_BUILD_CLI OFF CACHE BOOL "" FORCE)
FetchContent_Declare( FetchContent_Declare(
lz4 lz4
GIT_REPOSITORY https://github.com/lz4/lz4.git GIT_REPOSITORY https://github.com/lz4/lz4.git
GIT_TAG v1.10.0 GIT_TAG v1.10.0
SOURCE_SUBDIR build/cmake SOURCE_SUBDIR build/cmake
) )
FetchContent_MakeAvailable(lz4) FetchContent_MakeAvailable(lz4)
# ========================= # =========================
# SOURCES # TARGET
# ========================= # =========================
file(GLOB_RECURSE SOURCES CONFIGURE_DEPENDS file(GLOB_RECURSE SOURCES CONFIGURE_DEPENDS
"src/*.cpp" "src/*.cpp"
"src/*.c" "src/*.c"
@@ -88,85 +100,88 @@ file(GLOB_RECURSE SOURCES CONFIGURE_DEPENDS
"src/*.hpp" "src/*.hpp"
) )
# =========================
# TARGET
# =========================
if(APPLE AND WITH_GUI) if(APPLE AND WITH_GUI)
set(APP_ICON ${CMAKE_CURRENT_SOURCE_DIR}/resources/palera1n.icns) set(APP_ICON "${CMAKE_CURRENT_SOURCE_DIR}/resources/palera1n.icns")
add_executable(palera1n MACOSX_BUNDLE ${SOURCES}) add_executable(palera1n MACOSX_BUNDLE ${SOURCES})
target_sources(palera1n PRIVATE ${APP_ICON}) target_sources(palera1n PRIVATE ${APP_ICON})
set_source_files_properties(${APP_ICON} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
set_source_files_properties(${APP_ICON} PROPERTIES
MACOSX_PACKAGE_LOCATION "Resources"
)
set_target_properties(palera1n PROPERTIES set_target_properties(palera1n PROPERTIES
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/resources/Info.plist MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/resources/Info.plist"
MACOSX_BUNDLE_ICON_FILE palera1n.icns MACOSX_BUNDLE_ICON_FILE palera1n.icns
) )
elseif(MINGW AND WITH_GUI) elseif(MINGW AND WITH_GUI)
set(APP_MANIFEST_RC ${CMAKE_SOURCE_DIR}/resources/app.rc) set(APP_MANIFEST_RC "${CMAKE_SOURCE_DIR}/resources/app.rc")
add_executable(palera1n WIN32 ${SOURCES} ${APP_MANIFEST_RC}) add_executable(palera1n WIN32 ${SOURCES} ${APP_MANIFEST_RC})
else() else()
add_executable(palera1n ${SOURCES}) add_executable(palera1n ${SOURCES})
endif() endif()
include_directories(${DEPS_PREFIX}/include) target_include_directories(palera1n PRIVATE "${DEPS_PREFIX}/include")
link_directories(${DEPS_PREFIX}/lib) target_link_directories(palera1n PRIVATE "${DEPS_PREFIX}/lib")
target_link_libraries(palera1n PRIVATE nlohmann_json::nlohmann_json lz4_static)
# ========================= if(WITH_RAMDISK)
# APPLE FRAMEWORKS target_compile_definitions(palera1n PRIVATE WITH_RAMDISK)
# ========================= endif()
if(APPLE) if(WITH_BINPACK)
find_library(IOKIT IOKit) target_compile_definitions(palera1n PRIVATE WITH_BINPACK)
find_library(COREFOUNDATION CoreFoundation)
target_link_libraries(palera1n PRIVATE
${IOKIT}
${COREFOUNDATION}
)
endif() endif()
# =========================
# wxWidgets
# =========================
if(WITH_GUI) if(WITH_GUI)
target_link_libraries(palera1n PRIVATE ${WX_LIBRARIES}) target_link_libraries(palera1n PRIVATE ${WX_LIBRARIES})
target_compile_definitions(palera1n PRIVATE WITH_GUI) target_compile_definitions(palera1n PRIVATE WITH_GUI)
endif() endif()
if(WITH_TUI) if(WITH_TUI)
target_compile_definitions(palera1n PRIVATE WITH_TUI) target_compile_definitions(palera1n PRIVATE WITH_TUI)
endif() endif()
if(WITH_ARTIFACTS) # =========================
target_compile_definitions(palera1n PRIVATE WITH_ARTIFACTS) # APPLE FRAMEWORKS
# =========================
if(APPLE)
find_library(IOKIT IOKit)
find_library(COREFOUNDATION CoreFoundation)
find_library(SECURITY Security)
target_link_libraries(palera1n PRIVATE ${IOKIT} ${COREFOUNDATION} ${SECURITY})
endif() endif()
target_link_libraries(palera1n PRIVATE nlohmann_json::nlohmann_json)
target_link_libraries(palera1n PRIVATE lz4_static)
# ========================= # =========================
# libimobiledevice # NON-CMAKE DEPENDENCIES
# ========================= # =========================
if(WITH_STATIC) if(WITH_STATIC)
include(ExternalProject)
find_program(PKG_CONFIG_EXECUTABLE NAMES pkg-config) find_program(PKG_CONFIG_EXECUTABLE NAMES pkg-config)
set(BASE_CFLAGS "-g -I${DEPS_PREFIX}/include -L${DEPS_PREFIX}/lib")
set(BASE_LDFLAGS "-g -L${DEPS_PREFIX}/lib")
if(LINUX)
set(PLATFORM_CFLAGS "-fdata-sections -ffunction-sections -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64")
set(PLATFORM_LDFLAGS "-Wl,--gc-sections -fdata-sections -ffunction-sections")
elseif(APPLE)
set(PLATFORM_CFLAGS "")
set(PLATFORM_LDFLAGS "-Wl,-dead_strip")
else()
set(PLATFORM_CFLAGS "")
set(PLATFORM_LDFLAGS "")
endif()
set(SYSROOT_ENV_FLAG "")
if(CMAKE_SYSROOT)
set(SYSROOT_ENV_FLAG "--sysroot=${CMAKE_SYSROOT}")
endif()
set(PKG_ENV set(PKG_ENV
env env
"CC=${CMAKE_C_COMPILER}"
"CXX=${CMAKE_CXX_COMPILER}"
PKG_CONFIG=${PKG_CONFIG_EXECUTABLE} PKG_CONFIG=${PKG_CONFIG_EXECUTABLE}
PKG_CONFIG_PATH=${DEPS_PREFIX}/lib/pkgconfig:${DEPS_PREFIX}/share/pkgconfig PKG_CONFIG_PATH=${DEPS_PREFIX}/lib/pkgconfig:${DEPS_PREFIX}/share/pkgconfig
PKG_CONFIG_LIBDIR=${DEPS_PREFIX}/lib/pkgconfig:${DEPS_PREFIX}/share/pkgconfig PKG_CONFIG_LIBDIR=${DEPS_PREFIX}/lib/pkgconfig:${DEPS_PREFIX}/share/pkgconfig
PKG_CONFIG_PATH_CUSTOM=${DEPS_PREFIX}/lib/pkgconfig:${DEPS_PREFIX}/share/pkgconfig
CFLAGS=${BASE_CFLAGS}\ ${PLATFORM_CFLAGS}\ ${SYSROOT_ENV_FLAG}
CPPFLAGS=-I${DEPS_PREFIX}/include CPPFLAGS=-I${DEPS_PREFIX}/include
LDFLAGS=-L${DEPS_PREFIX}/lib LDFLAGS=${BASE_LDFLAGS}\ ${PLATFORM_LDFLAGS}\ ${SYSROOT_ENV_FLAG}
C_INCLUDE_PATH=${DEPS_PREFIX}/include C_INCLUDE_PATH=${DEPS_PREFIX}/include
CPLUS_INCLUDE_PATH=${DEPS_PREFIX}/include CPLUS_INCLUDE_PATH=${DEPS_PREFIX}/include
@@ -174,36 +189,30 @@ if(WITH_STATIC)
mbedtls_INCLUDES=${DEPS_PREFIX}/include mbedtls_INCLUDES=${DEPS_PREFIX}/include
mbedtls_LIBDIR=${DEPS_PREFIX}/lib mbedtls_LIBDIR=${DEPS_PREFIX}/lib
mbedtls_LIBS=-lmbedtls\ -lmbedx509\ -lmbedcrypto mbedtls_LIBS=-lmbedtls\ -lmbedx509\ -lmbedcrypto
lt_cv_deplibs_check_method=pass_all
lt_cv_file_magic_cmd=/usr/bin/file
cross_compiling=yes
) )
if(MINGW) if(MINGW)
set(IMD_AUTOTOOLS_ARGS set(IMD_AUTOTOOLS_ARGS --disable-static --enable-shared)
--disable-static
--enable-shared
)
else() else()
set(IMD_AUTOTOOLS_ARGS set(IMD_AUTOTOOLS_ARGS --enable-static --disable-shared)
--enable-static if(CROSS_HOST_TRIPLE)
--disable-shared list(APPEND IMD_AUTOTOOLS_ARGS "--host=${CROSS_HOST_TRIPLE}" "--build=${AUTOTOOLS_BUILD_TRIPLE}")
) endif()
set(MBEDUTILS_ARGS set(MBEDUTILS_ARGS --with-mbedtls)
--with-mbedtls
)
endif() endif()
if(MINGW) if(MINGW)
#=========================
# libwdi
#=========================
ExternalProject_Add(libwdi_ep ExternalProject_Add(libwdi_ep
GIT_REPOSITORY https://github.com/pbatard/libwdi.git GIT_REPOSITORY https://github.com/pbatard/libwdi.git
GIT_TAG v1.5.1 GIT_TAG v1.5.1
UPDATE_COMMAND "" UPDATE_COMMAND ""
CONFIGURE_COMMAND CONFIGURE_COMMAND
${PKG_ENV} ${PKG_ENV}
sh -lc "./bootstrap.sh && ./configure --prefix=${DEPS_PREFIX} --build=x86_64-w64-mingw32 --host=x86_64-w64-mingw32 --disable-32bit --with-wdfver=1011 --with-libusbk=${CMAKE_SOURCE_DIR}/libusbK/bin" sh -lc "./bootstrap.sh && ./configure --prefix=${DEPS_PREFIX} --build=x86_64-w64-mingw32 --host=x86_64-w64-mingw32 --disable-32bit --with-wdfver=1011 --with-libusbk=${CMAKE_SOURCE_DIR}/libusbK/bin"
BUILD_COMMAND make -j BUILD_COMMAND make -j
INSTALL_COMMAND make install INSTALL_COMMAND make install
BUILD_IN_SOURCE 1 BUILD_IN_SOURCE 1
@@ -211,220 +220,158 @@ if(WITH_STATIC)
endif() endif()
if(NOT MINGW) if(NOT MINGW)
# ========================= # theres an issue with we cant build with amd or something
# mbedTLS set(MBEDTLS_PATCH_STEPS PATCH_COMMAND patch -p1 < ${CMAKE_SOURCE_DIR}/patches/mbedtls/0001-Allow-empty-x509-cert-issuer.patch)
# ========================= if(CROSS_HOST_TRIPLE MATCHES "i486-linux-musl")
list(APPEND MBEDTLS_PATCH_STEPS COMMAND sed -i "/define MBEDTLS_AESNI_C/d" include/mbedtls/mbedtls_config.h)
endif()
ExternalProject_Add(mbedtls_ep ExternalProject_Add(mbedtls_ep
GIT_REPOSITORY https://github.com/Mbed-TLS/mbedtls.git GIT_REPOSITORY https://github.com/Mbed-TLS/mbedtls.git
GIT_TAG mbedtls-3.5.2 GIT_TAG mbedtls-3.5.2
UPDATE_COMMAND "" UPDATE_COMMAND ""
${MBEDTLS_PATCH_STEPS}
PATCH_COMMAND patch -p1 < ${CMAKE_SOURCE_DIR}/patches/mbedtls/0001-Allow-empty-x509-cert-issuer.patch
CMAKE_ARGS CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${DEPS_PREFIX} -DCMAKE_INSTALL_PREFIX=${DEPS_PREFIX}
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-DCMAKE_SYSROOT=${CMAKE_SYSROOT}
-DENABLE_TESTING=OFF -DENABLE_TESTING=OFF
-DENABLE_PROGRAMS=OFF -DENABLE_PROGRAMS=OFF
-DBUILD_SHARED_LIBS=OFF -DBUILD_SHARED_LIBS=OFF
-DENABLE_ASSEMBLY=OFF
INSTALL_DIR ${DEPS_PREFIX} INSTALL_DIR ${DEPS_PREFIX}
) )
endif() endif()
if(LINUX OR MINGW) if(LINUX OR MINGW)
# =========================
# libusb
# =========================
ExternalProject_Add(libusb_ep ExternalProject_Add(libusb_ep
GIT_REPOSITORY https://github.com/libusb/libusb.git GIT_REPOSITORY https://github.com/libusb/libusb.git
GIT_TAG v1.0.27 GIT_TAG v1.0.27
UPDATE_COMMAND "" UPDATE_COMMAND ""
CONFIGURE_COMMAND CONFIGURE_COMMAND
${PKG_ENV} ${PKG_ENV}
sh sh -l ./autogen.sh --prefix=${DEPS_PREFIX} --disable-udev ${IMD_AUTOTOOLS_ARGS}
-l
./autogen.sh
--prefix=${DEPS_PREFIX}
--disable-udev
BUILD_COMMAND make -j BUILD_COMMAND make -j
INSTALL_COMMAND make install INSTALL_COMMAND make install
BUILD_IN_SOURCE 1 BUILD_IN_SOURCE 1
) )
endif() endif()
if(LINUX)
ExternalProject_Add(ncurses_ep
URL https://ftp.gnu.org/pub/gnu/ncurses/ncurses-6.4.tar.gz
CONFIGURE_COMMAND
${PKG_ENV}
sh -l <SOURCE_DIR>/configure --prefix=${DEPS_PREFIX} ${IMD_AUTOTOOLS_ARGS} --disable-stripping
BUILD_COMMAND make -j
BUILD_IN_SOURCE 1
INSTALL_COMMAND make install
)
endif()
if(LINUX) if(LINUX)
ExternalProject_Add(readline_ep ExternalProject_Add(readline_ep
URL https://ftp.gnu.org/gnu/readline/readline-8.2.tar.gz URL https://ftp.gnu.org/gnu/readline/readline-8.2.tar.gz
CONFIGURE_COMMAND CONFIGURE_COMMAND
${PKG_ENV} ${PKG_ENV}
sh sh -l <SOURCE_DIR>/configure --prefix=${DEPS_PREFIX} ${IMD_AUTOTOOLS_ARGS}
-l
<SOURCE_DIR>/configure
--prefix=${DEPS_PREFIX}
${IMD_AUTOTOOLS_ARGS}
BUILD_COMMAND make -j BUILD_COMMAND make -j
INSTALL_COMMAND make install INSTALL_COMMAND make install
BUILD_IN_SOURCE 1
DEPENDS ncurses_ep
) )
endif() endif()
# =========================
# libplist
# =========================
ExternalProject_Add(libplist_ep ExternalProject_Add(libplist_ep
GIT_REPOSITORY https://github.com/libimobiledevice/libplist.git GIT_REPOSITORY https://github.com/libimobiledevice/libplist.git
GIT_TAG 2117b8fdb6b4096455bd2041a63e59a028120136 GIT_TAG 2117b8fdb6b4096455bd2041a63e59a028120136
UPDATE_COMMAND "" UPDATE_COMMAND ""
CONFIGURE_COMMAND CONFIGURE_COMMAND
${PKG_ENV} ${PKG_ENV}
sh sh -l ./autogen.sh --prefix=${DEPS_PREFIX} ${IMD_AUTOTOOLS_ARGS}
-l
./autogen.sh
--prefix=${DEPS_PREFIX}
${IMD_AUTOTOOLS_ARGS}
BUILD_COMMAND make -j BUILD_COMMAND make -j
INSTALL_COMMAND make install INSTALL_COMMAND make install
BUILD_IN_SOURCE 1 BUILD_IN_SOURCE 1
) )
# =========================
# libimobiledevice-glue
# =========================
ExternalProject_Add(limd_glue_ep ExternalProject_Add(limd_glue_ep
GIT_REPOSITORY https://github.com/libimobiledevice/libimobiledevice-glue.git GIT_REPOSITORY https://github.com/libimobiledevice/libimobiledevice-glue.git
GIT_TAG 362f7848ac89b74d9dd113b38b51ecb601f76094 GIT_TAG 362f7848ac89b74d9dd113b38b51ecb601f76094
UPDATE_COMMAND "" UPDATE_COMMAND ""
CONFIGURE_COMMAND CONFIGURE_COMMAND
${PKG_ENV} ${PKG_ENV}
sh sh -l ./autogen.sh --prefix=${DEPS_PREFIX} ${IMD_AUTOTOOLS_ARGS}
-l
./autogen.sh
--prefix=${DEPS_PREFIX}
${IMD_AUTOTOOLS_ARGS}
BUILD_COMMAND make -j BUILD_COMMAND make -j
INSTALL_COMMAND make install INSTALL_COMMAND make install
BUILD_IN_SOURCE 1 BUILD_IN_SOURCE 1
DEPENDS libplist_ep DEPENDS libplist_ep
) )
# =========================
# libusbmuxd
# =========================
ExternalProject_Add(libusbmuxd_ep ExternalProject_Add(libusbmuxd_ep
GIT_REPOSITORY https://github.com/libimobiledevice/libusbmuxd.git GIT_REPOSITORY https://github.com/libimobiledevice/libusbmuxd.git
GIT_TAG a7f0543fb1ecb20ac7121c0fd77297200e0e43fc GIT_TAG a7f0543fb1ecb20ac7121c0fd77297200e0e43fc
UPDATE_COMMAND "" UPDATE_COMMAND ""
CONFIGURE_COMMAND CONFIGURE_COMMAND
${PKG_ENV} ${PKG_ENV}
sh sh -l ./autogen.sh --prefix=${DEPS_PREFIX} ${IMD_AUTOTOOLS_ARGS} --without-systemd
-l
./autogen.sh
--prefix=${DEPS_PREFIX}
${IMD_AUTOTOOLS_ARGS}
--without-systemd
BUILD_COMMAND make -j BUILD_COMMAND make -j
INSTALL_COMMAND make install INSTALL_COMMAND make install
BUILD_IN_SOURCE 1 BUILD_IN_SOURCE 1
DEPENDS libplist_ep limd_glue_ep DEPENDS libplist_ep limd_glue_ep
) )
# ========================= set(LIBIMOBILEDEVICE_DEPS libplist_ep libusbmuxd_ep limd_glue_ep)
# libimobiledevice
# =========================
set(LIBIMOBILEDEVICE_DEPS
libplist_ep
libusbmuxd_ep
limd_glue_ep
)
if(NOT MINGW) if(NOT MINGW)
list(APPEND LIBIMOBILEDEVICE_DEPS mbedtls_ep) list(APPEND LIBIMOBILEDEVICE_DEPS mbedtls_ep)
endif() endif()
if(LINUX OR MINGW) if(LINUX OR MINGW)
list(APPEND LIBIMOBILEDEVICE_DEPS libusb_ep) list(APPEND LIBIMOBILEDEVICE_DEPS libusb_ep)
endif() endif()
if(LINUX) if(LINUX)
set(READLINE_DEPS readline_ep) list(APPEND LIBIMOBILEDEVICE_DEPS readline_ep)
endif() endif()
ExternalProject_Add(libimobiledevice_ep ExternalProject_Add(libimobiledevice_ep
GIT_REPOSITORY https://github.com/libimobiledevice/libimobiledevice.git GIT_REPOSITORY https://github.com/libimobiledevice/libimobiledevice.git
GIT_TAG ed0d66d0341562731bb19928dfe48155509fa7a7 GIT_TAG ed0d66d0341562731bb19928dfe48155509fa7a7
UPDATE_COMMAND "" UPDATE_COMMAND ""
PATCH_COMMAND patch -p1 < "${CMAKE_SOURCE_DIR}/patches/libimobiledevice/0001-include-windows-header.patch"
PATCH_COMMAND patch -p1 < ${CMAKE_SOURCE_DIR}/patches/libimobiledevice/0001-include-windows-header.patch
CONFIGURE_COMMAND CONFIGURE_COMMAND
${PKG_ENV} ${PKG_ENV}
sh sh -l ./autogen.sh --prefix=${DEPS_PREFIX} ${MBEDUTILS_ARGS} ${IMD_AUTOTOOLS_ARGS} --disable-wireless-pairing
-l
./autogen.sh
--prefix=${DEPS_PREFIX}
${MBEDUTILS_ARGS}
${IMD_AUTOTOOLS_ARGS}
--disable-wireless-pairing
BUILD_COMMAND make -j BUILD_COMMAND make -j
INSTALL_COMMAND make install INSTALL_COMMAND make install
BUILD_IN_SOURCE 1 BUILD_IN_SOURCE 1
DEPENDS ${LIBIMOBILEDEVICE_DEPS}
DEPENDS ${LIBIMOBILEDEVICE_DEPS} ${READLINE_DEPS}
) )
file(WRITE # to compile libimobiledevice appropriately we patch out the automake generated makefile
${CMAKE_BINARY_DIR}/fix_tools_makefile.cmake # so tools just dont build at all... theres some issue there thats not worth fixing here
" file(WRITE "${CMAKE_BINARY_DIR}/fix_tools_makefile.cmake"
file(WRITE \"${CMAKE_BINARY_DIR}/libimobiledevice_ep-prefix/src/libimobiledevice_ep/tools/Makefile\" \"all:\\ninstall:\\n\") "file(WRITE \"${CMAKE_BINARY_DIR}/libimobiledevice_ep-prefix/src/libimobiledevice_ep/tools/Makefile\" \"all:\\ninstall:\\n\")\n"
") )
ExternalProject_Add_Step(libimobiledevice_ep fix_tools_makefile ExternalProject_Add_Step(libimobiledevice_ep fix_tools_makefile
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_BINARY_DIR}/fix_tools_makefile.cmake COMMAND ${CMAKE_COMMAND} -P "${CMAKE_BINARY_DIR}/fix_tools_makefile.cmake"
DEPENDEES configure DEPENDEES configure
DEPENDERS build DEPENDERS build
) )
# =========================
# libirecovery
# =========================
if(LINUX) if(LINUX)
set(LIBIRECOVERY_LIBS set(LIBIRECOVERY_LIBS LIBS=-lncurses)
LIBS="-lncurses"
)
endif() endif()
ExternalProject_Add(libirecovery_ep ExternalProject_Add(libirecovery_ep
GIT_REPOSITORY https://github.com/libimobiledevice/libirecovery.git GIT_REPOSITORY https://github.com/libimobiledevice/libirecovery.git
GIT_TAG 7ce02c347b7c26e59498e6af31c9da51018d0fa1 GIT_TAG 7ce02c347b7c26e59498e6af31c9da51018d0fa1
UPDATE_COMMAND "" UPDATE_COMMAND ""
CONFIGURE_COMMAND CONFIGURE_COMMAND
${PKG_ENV} ${PKG_ENV}
sh sh -l ./autogen.sh --prefix=${DEPS_PREFIX} ${IMD_AUTOTOOLS_ARGS} ${LIBIRECOVERY_LIBS}
-l BUILD_COMMAND make -j
./autogen.sh
--prefix=${DEPS_PREFIX}
${IMD_AUTOTOOLS_ARGS}
BUILD_COMMAND make -j ${LIBIRECOVERY_LIBS}
INSTALL_COMMAND make install INSTALL_COMMAND make install
BUILD_IN_SOURCE 1 BUILD_IN_SOURCE 1
DEPENDS ${LIBIMOBILEDEVICE_DEPS}
DEPENDS libplist_ep libusbmuxd_ep limd_glue_ep ${READLINE_DEPS}
) )
add_dependencies(palera1n add_dependencies(palera1n
@@ -445,22 +392,6 @@ if(WITH_STATIC)
add_dependencies(palera1n readline_ep) add_dependencies(palera1n readline_ep)
endif() endif()
target_include_directories(palera1n PRIVATE
${DEPS_PREFIX}/include
)
if(APPLE)
find_library(IOKIT IOKit)
find_library(COREFOUNDATION CoreFoundation)
find_library(SECURITY Security)
target_link_libraries(palera1n PRIVATE
${IOKIT}
${COREFOUNDATION}
${SECURITY}
)
endif()
if(MINGW) if(MINGW)
target_link_libraries(palera1n PRIVATE target_link_libraries(palera1n PRIVATE
imobiledevice-1.0 imobiledevice-1.0
@@ -493,6 +424,7 @@ if(WITH_STATIC)
OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_STRIP_TRAILING_WHITESPACE
) )
# all dlls must be in the same directory as the executable
foreach(DLL ${DLLS}) foreach(DLL ${DLLS})
add_custom_command(TARGET palera1n POST_BUILD add_custom_command(TARGET palera1n POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different COMMAND ${CMAKE_COMMAND} -E copy_if_different
@@ -502,21 +434,31 @@ if(WITH_STATIC)
endforeach() endforeach()
else() else()
target_link_libraries(palera1n PRIVATE target_link_libraries(palera1n PRIVATE
${DEPS_PREFIX}/lib/libimobiledevice-1.0.a "${DEPS_PREFIX}/lib/libimobiledevice-1.0.a"
${DEPS_PREFIX}/lib/libirecovery-1.0.a "${DEPS_PREFIX}/lib/libirecovery-1.0.a"
${DEPS_PREFIX}/lib/libusbmuxd-2.0.a "${DEPS_PREFIX}/lib/libusbmuxd-2.0.a"
${DEPS_PREFIX}/lib/libplist-2.0.a "${DEPS_PREFIX}/lib/libplist-2.0.a"
${DEPS_PREFIX}/lib/libimobiledevice-glue-1.0.a "${DEPS_PREFIX}/lib/libimobiledevice-glue-1.0.a"
${DEPS_PREFIX}/lib/libmbedtls.a "${DEPS_PREFIX}/lib/libmbedtls.a"
${DEPS_PREFIX}/lib/libmbedx509.a "${DEPS_PREFIX}/lib/libmbedx509.a"
${DEPS_PREFIX}/lib/libmbedcrypto.a "${DEPS_PREFIX}/lib/libmbedcrypto.a"
) )
if(LINUX) if(LINUX)
target_compile_options(palera1n PRIVATE "-static")
target_link_options(palera1n PRIVATE "-static")
target_link_libraries(palera1n PRIVATE target_link_libraries(palera1n PRIVATE
${DEPS_PREFIX}/lib/libusb-1.0.a "${DEPS_PREFIX}/lib/libusb-1.0.a"
${DEPS_PREFIX}/lib/libreadline.a "${DEPS_PREFIX}/lib/libreadline.a"
"${DEPS_PREFIX}/lib/libncurses.a"
) )
elseif(APPLE)
if(WITH_TUI)
find_package(Curses REQUIRED)
target_include_directories(palera1n PRIVATE ${CURSES_INCLUDE_DIRS})
target_link_libraries(palera1n PRIVATE ${CURSES_LIBRARIES})
endif()
endif() endif()
endif() endif()
else() else()
@@ -526,14 +468,12 @@ else()
pkg_check_modules(IRECOVERY REQUIRED libirecovery-1.0) pkg_check_modules(IRECOVERY REQUIRED libirecovery-1.0)
pkg_check_modules(PLIST REQUIRED libplist-2.0) pkg_check_modules(PLIST REQUIRED libplist-2.0)
pkg_check_modules(USBMUXD REQUIRED libusbmuxd-2.0) pkg_check_modules(USBMUXD REQUIRED libusbmuxd-2.0)
pkg_check_modules(LIBUSB REQUIRED libusb-1.0)
target_include_directories(palera1n PRIVATE target_include_directories(palera1n PRIVATE
${IMD_INCLUDE_DIRS} ${IMD_INCLUDE_DIRS}
${IRECOVERY_INCLUDE_DIRS} ${IRECOVERY_INCLUDE_DIRS}
${PLIST_INCLUDE_DIRS} ${PLIST_INCLUDE_DIRS}
${USBMUXD_INCLUDE_DIRS} ${USBMUXD_INCLUDE_DIRS}
${LIBUSB_INCLUDE_DIRS}
) )
target_link_libraries(palera1n PRIVATE target_link_libraries(palera1n PRIVATE
@@ -541,7 +481,6 @@ else()
${IRECOVERY_LIBRARIES} ${IRECOVERY_LIBRARIES}
${PLIST_LIBRARIES} ${PLIST_LIBRARIES}
${USBMUXD_LIBRARIES} ${USBMUXD_LIBRARIES}
${LIBUSB_LIBRARIES}
) )
target_compile_options(palera1n PRIVATE target_compile_options(palera1n PRIVATE
@@ -549,7 +488,16 @@ else()
${IRECOVERY_CFLAGS_OTHER} ${IRECOVERY_CFLAGS_OTHER}
${PLIST_CFLAGS_OTHER} ${PLIST_CFLAGS_OTHER}
${USBMUXD_CFLAGS_OTHER} ${USBMUXD_CFLAGS_OTHER}
${LIBUSB_CFLAGS_OTHER}
) )
endif()
find_package(Curses REQUIRED)
target_include_directories(palera1n PRIVATE ${CURSES_INCLUDE_DIRS})
target_link_libraries(palera1n PRIVATE ${CURSES_LIBRARIES})
if(NOT APPLE)
pkg_check_modules(LIBUSB REQUIRED libusb-1.0)
target_include_directories(palera1n PRIVATE ${LIBUSB_INCLUDE_DIRS})
target_link_libraries(palera1n PRIVATE ${LIBUSB_LIBRARIES})
target_compile_options(palera1n PRIVATE ${LIBUSB_CFLAGS_OTHER})
endif()
endif()
+22 -8
View File
@@ -1,11 +1,19 @@
.PHONY: payloads palera1n palera1n_xcode clean .PHONY: payloads palera1n palera1n_xcode palera1n_mingw clean
WITH_GUI ?= 0 WITH_GUI ?= 0
WITH_TUI ?= 0 WITH_TUI ?= 0
WITH_ARTIFACTS ?= 1 WITH_RAMDISK ?= 1
WITH_BINPACK ?= 1
WITH_STATIC ?= 0 WITH_STATIC ?= 0
BUILD_TYPE ?= Debug BUILD_TYPE ?= Debug
CMAKE_SYSROOT ?= CMAKE_SYSROOT ?=
CROSS_HOST_TRIPLE ?=
JOBS ?=
BUILD_ARGS :=
ifneq ($(strip $(JOBS)),)
BUILD_ARGS += --parallel $(JOBS)
endif
payloads: payloads:
mkdir -p src/gen/images mkdir -p src/gen/images
@@ -36,33 +44,39 @@ payloads:
palera1n: payloads palera1n: payloads
@cmake -S . -B build \ @cmake -S . -B build \
-DCMAKE_SYSROOT="$(CMAKE_SYSROOT)" \ -DCMAKE_SYSROOT="$(CMAKE_SYSROOT)" \
-DCROSS_HOST_TRIPLE="$(CROSS_HOST_TRIPLE)" \
-DCMAKE_BUILD_TYPE=$(BUILD_TYPE) \ -DCMAKE_BUILD_TYPE=$(BUILD_TYPE) \
-DWITH_GUI=$(WITH_GUI) \ -DWITH_GUI=$(WITH_GUI) \
-DWITH_TUI=$(WITH_TUI) \ -DWITH_TUI=$(WITH_TUI) \
-DWITH_ARTIFACTS=$(WITH_ARTIFACTS) \ -DWITH_RAMDISK=$(WITH_RAMDISK) \
-DWITH_BINPACK=$(WITH_BINPACK) \
-DWITH_STATIC=$(WITH_STATIC) && \ -DWITH_STATIC=$(WITH_STATIC) && \
cmake --build build cmake --build build $(BUILD_ARGS)
palera1n_xcode: payloads palera1n_xcode: payloads
@cmake -S . -B build \ @cmake -S . -B build \
-G Xcode \ -G Xcode \
-DCMAKE_SYSROOT="$(CMAKE_SYSROOT)" \ -DCMAKE_SYSROOT="$(CMAKE_SYSROOT)" \
-DCROSS_HOST_TRIPLE="$(CROSS_HOST_TRIPLE)" \
-DCMAKE_BUILD_TYPE=$(BUILD_TYPE) \ -DCMAKE_BUILD_TYPE=$(BUILD_TYPE) \
-DWITH_GUI=$(WITH_GUI) \ -DWITH_GUI=$(WITH_GUI) \
-DWITH_TUI=$(WITH_TUI) \ -DWITH_TUI=$(WITH_TUI) \
-DWITH_ARTIFACTS=$(WITH_ARTIFACTS) \ -DWITH_RAMDISK=$(WITH_RAMDISK) \
-DWITH_BINPACK=$(WITH_BINPACK) \
-DWITH_STATIC=$(WITH_STATIC) -DWITH_STATIC=$(WITH_STATIC)
palera1n_mingw: payloads palera1n_mingw: payloads
@cmake -S . -B build \ @cmake -S . -B build \
-G "MinGW Makefiles" \ -G "MinGW Makefiles" \
-DCMAKE_SYSROOT="$(CMAKE_SYSROOT)" \ -DCMAKE_SYSROOT="$(CMAKE_SYSROOT)" \
-DCROSS_HOST_TRIPLE="$(CROSS_HOST_TRIPLE)" \
-DCMAKE_BUILD_TYPE=$(BUILD_TYPE) \ -DCMAKE_BUILD_TYPE=$(BUILD_TYPE) \
-DWITH_GUI=$(WITH_GUI) \ -DWITH_GUI=$(WITH_GUI) \
-DWITH_TUI=$(WITH_TUI) \ -DWITH_TUI=$(WITH_TUI) \
-DWITH_ARTIFACTS=$(WITH_ARTIFACTS) \ -DWITH_RAMDISK=$(WITH_RAMDISK) \
-DWITH_BINPACK=$(WITH_BINPACK) \
-DWITH_STATIC=$(WITH_STATIC) && \ -DWITH_STATIC=$(WITH_STATIC) && \
cmake --build build cmake --build build $(BUILD_ARGS)
clean: clean:
@rm -rf build @rm -rf build src/gen