Files
palera1n/CMakeLists.txt
T

380 lines
11 KiB
CMake
Raw Normal View History

2026-02-05 00:42:57 -08:00
cmake_minimum_required(VERSION 3.10)
project(palera1n VERSION 3.0)
2026-06-19 17:51:51 -07:00
2026-02-05 00:42:57 -08:00
include(FetchContent)
2026-06-19 17:51:51 -07:00
include(ExternalProject)
2026-02-05 00:42:57 -08:00
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)
option(WITH_GUI "Build with wxWidgets GUI" OFF)
2026-06-19 17:51:51 -07:00
option(WITH_STATIC "Build with static wxWidgets / deps" OFF)
2026-02-05 00:42:57 -08:00
set(CMAKE_OSX_ARCHITECTURES "arm64")
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.13")
2026-06-19 17:51:51 -07:00
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
2026-02-05 00:42:57 -08:00
2026-06-19 17:51:51 -07:00
set(DEPS_PREFIX ${CMAKE_BINARY_DIR}/deps)
# =========================
# wxWidgets
# =========================
2026-02-05 00:42:57 -08:00
if(WITH_GUI)
2026-06-19 17:51:51 -07:00
if(WITH_STATIC)
set(wxBUILD_SHARED OFF CACHE BOOL "" FORCE)
FetchContent_Declare(
wxWidgets
GIT_REPOSITORY https://github.com/wxWidgets/wxWidgets.git
GIT_SHALLOW ON
)
FetchContent_MakeAvailable(wxWidgets)
set(WX_LIBRARIES wxcore wxbase wxnet)
else()
find_package(wxWidgets REQUIRED COMPONENTS core base net)
include(${wxWidgets_USE_FILE})
set(WX_LIBRARIES ${wxWidgets_LIBRARIES})
endif()
2026-02-05 00:42:57 -08:00
endif()
2026-06-19 17:51:51 -07:00
# =========================
# JSON
# =========================
2026-02-05 00:42:57 -08:00
2026-06-19 17:51:51 -07:00
include(FetchContent)
FetchContent_Declare(
nlohmann_json
GIT_REPOSITORY https://github.com/nlohmann/json.git
GIT_TAG v3.11.3
)
FetchContent_MakeAvailable(nlohmann_json)
# =========================
# SOURCES
# =========================
file(GLOB_RECURSE SOURCES CONFIGURE_DEPENDS
"src/*.cpp"
"src/*.c"
"src/*.h"
"src/*.hpp"
)
# =========================
# TARGET
# =========================
2026-02-05 00:42:57 -08:00
if(APPLE AND WITH_GUI)
2026-06-19 17:51:51 -07:00
set(APP_ICON ${CMAKE_CURRENT_SOURCE_DIR}/resources/palera1n.icns)
2026-02-05 00:42:57 -08:00
add_executable(palera1n MACOSX_BUNDLE ${SOURCES})
2026-06-19 17:51:51 -07:00
target_sources(palera1n PRIVATE ${APP_ICON})
set_source_files_properties(${APP_ICON} PROPERTIES
MACOSX_PACKAGE_LOCATION "Resources"
)
set_target_properties(palera1n PROPERTIES
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/resources/Info.plist
MACOSX_BUNDLE_ICON_FILE palera1n.icns
)
2026-02-05 00:42:57 -08:00
else()
2026-06-19 17:51:51 -07:00
add_executable(palera1n ${SOURCES})
2026-02-05 00:42:57 -08:00
endif()
2026-06-19 17:51:51 -07:00
include_directories(${DEPS_PREFIX}/include)
link_directories(${DEPS_PREFIX}/lib)
# =========================
# APPLE FRAMEWORKS
# =========================
2026-02-05 00:42:57 -08:00
if(APPLE)
find_library(IOKIT IOKit)
find_library(COREFOUNDATION CoreFoundation)
2026-06-19 17:51:51 -07:00
target_link_libraries(palera1n PRIVATE
${IOKIT}
${COREFOUNDATION}
)
2026-02-05 00:42:57 -08:00
endif()
2026-06-19 17:51:51 -07:00
# =========================
# wxWidgets
# =========================
2026-02-05 00:42:57 -08:00
if(WITH_GUI)
2026-06-19 17:51:51 -07:00
target_link_libraries(palera1n PRIVATE ${WX_LIBRARIES})
target_compile_definitions(palera1n PRIVATE WITH_GUI)
2026-02-05 00:42:57 -08:00
endif()
2026-06-19 17:51:51 -07:00
target_link_libraries(palera1n PRIVATE nlohmann_json::nlohmann_json)
# =========================
# libimobiledevice
# =========================
if(WITH_GUI)
if(WITH_STATIC)
include(ExternalProject)
find_program(PKG_CONFIG_EXECUTABLE NAMES pkg-config REQUIRED)
set(PKG_ENV
env
PKG_CONFIG=${PKG_CONFIG_EXECUTABLE}
PKG_CONFIG_PATH=${DEPS_PREFIX}/lib/pkgconfig:${DEPS_PREFIX}/share/pkgconfig
PKG_CONFIG_LIBDIR=${DEPS_PREFIX}/lib/pkgconfig:${DEPS_PREFIX}/share/pkgconfig
CPPFLAGS=-I${DEPS_PREFIX}/include
LDFLAGS=-L${DEPS_PREFIX}/lib
C_INCLUDE_PATH=${DEPS_PREFIX}/include
CPLUS_INCLUDE_PATH=${DEPS_PREFIX}/include
mbedtls_INCLUDES=${DEPS_PREFIX}/include
mbedtls_LIBDIR=${DEPS_PREFIX}/lib
mbedtls_LIBS=-lmbedtls\ -lmbedx509\ -lmbedcrypto
)
# =========================
# mbedTLS
# =========================
ExternalProject_Add(mbedtls_ep
GIT_REPOSITORY https://github.com/Mbed-TLS/mbedtls.git
GIT_TAG mbedtls-3.5.2
UPDATE_COMMAND ""
2026-06-19 21:36:39 -07:00
PATCH_COMMAND patch -p1 < ${CMAKE_SOURCE_DIR}/patches/mbedtls/0001-Allow-empty-x509-cert-issuer.patch
2026-06-19 17:51:51 -07:00
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${DEPS_PREFIX}
-DENABLE_TESTING=OFF
-DENABLE_PROGRAMS=OFF
-DBUILD_SHARED_LIBS=OFF
INSTALL_DIR ${DEPS_PREFIX}
)
2026-06-19 21:36:39 -07:00
if(LINUX)
# =========================
# libusb
# =========================
ExternalProject_Add(libusb_ep
GIT_REPOSITORY https://github.com/libusb/libusb.git
GIT_TAG v1.0.27
UPDATE_COMMAND ""
CONFIGURE_COMMAND
${PKG_ENV}
./autogen.sh
--prefix=${DEPS_PREFIX}
--disable-udev
BUILD_COMMAND make -j
INSTALL_COMMAND make install
BUILD_IN_SOURCE 1
)
endif()
2026-06-19 17:51:51 -07:00
# =========================
# libplist
# =========================
ExternalProject_Add(libplist_ep
GIT_REPOSITORY https://github.com/libimobiledevice/libplist.git
GIT_TAG 2117b8fdb6b4096455bd2041a63e59a028120136
UPDATE_COMMAND ""
CONFIGURE_COMMAND
${PKG_ENV}
./autogen.sh
--prefix=${DEPS_PREFIX}
--enable-static
--disable-shared
BUILD_COMMAND make -j
INSTALL_COMMAND make install
BUILD_IN_SOURCE 1
)
# =========================
# libimobiledevice-glue
# =========================
ExternalProject_Add(limd_glue_ep
GIT_REPOSITORY https://github.com/libimobiledevice/libimobiledevice-glue.git
GIT_TAG 362f7848ac89b74d9dd113b38b51ecb601f76094
UPDATE_COMMAND ""
CONFIGURE_COMMAND
${PKG_ENV}
./autogen.sh
--prefix=${DEPS_PREFIX}
--enable-static
--disable-shared
BUILD_COMMAND make -j
INSTALL_COMMAND make install
BUILD_IN_SOURCE 1
DEPENDS libplist_ep
)
# =========================
# libusbmuxd
# =========================
ExternalProject_Add(libusbmuxd_ep
GIT_REPOSITORY https://github.com/libimobiledevice/libusbmuxd.git
GIT_TAG a7f0543fb1ecb20ac7121c0fd77297200e0e43fc
UPDATE_COMMAND ""
CONFIGURE_COMMAND
${PKG_ENV}
./autogen.sh
--prefix=${DEPS_PREFIX}
--enable-static
--disable-shared
2026-06-19 21:36:39 -07:00
--without-systemd
2026-06-19 17:51:51 -07:00
BUILD_COMMAND make -j
INSTALL_COMMAND make install
BUILD_IN_SOURCE 1
DEPENDS libplist_ep limd_glue_ep
)
# =========================
# libimobiledevice
# =========================
2026-06-19 21:45:34 -07:00
set(LIBIMOBILEDEVICE_DEPS
mbedtls_ep
libplist_ep
libusbmuxd_ep
limd_glue_ep
)
if(LINUX)
list(APPEND LIBIMOBILEDEVICE_DEPS libusb_ep)
endif()
2026-06-19 17:51:51 -07:00
ExternalProject_Add(libimobiledevice_ep
GIT_REPOSITORY https://github.com/libimobiledevice/libimobiledevice.git
GIT_TAG ed0d66d0341562731bb19928dfe48155509fa7a7
UPDATE_COMMAND ""
CONFIGURE_COMMAND
${PKG_ENV}
./autogen.sh
--prefix=${DEPS_PREFIX}
--with-mbedtls
--enable-static
--disable-shared
2026-06-19 21:36:39 -07:00
--disable-wireless-pairing
2026-06-19 17:51:51 -07:00
BUILD_COMMAND make -j
INSTALL_COMMAND make install
BUILD_IN_SOURCE 1
2026-06-19 21:45:34 -07:00
DEPENDS ${LIBIMOBILEDEVICE_DEPS}
2026-06-19 21:36:39 -07:00
)
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\")
")
ExternalProject_Add_Step(libimobiledevice_ep fix_tools_makefile
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_BINARY_DIR}/fix_tools_makefile.cmake
DEPENDEES configure
DEPENDERS build
2026-06-19 17:51:51 -07:00
)
# =========================
# libirecovery
# =========================
ExternalProject_Add(libirecovery_ep
GIT_REPOSITORY https://github.com/libimobiledevice/libirecovery.git
GIT_TAG 7ce02c347b7c26e59498e6af31c9da51018d0fa1
UPDATE_COMMAND ""
CONFIGURE_COMMAND
${PKG_ENV}
./autogen.sh
--prefix=${DEPS_PREFIX}
--enable-static
--disable-shared
BUILD_COMMAND make -j
INSTALL_COMMAND make install
BUILD_IN_SOURCE 1
2026-06-19 21:36:39 -07:00
DEPENDS libplist_ep libusbmuxd_ep limd_glue_ep
2026-06-19 17:51:51 -07:00
)
set(CMAKE_OSX_DEPLOYMENT_TARGET "11.0")
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()
target_link_libraries(palera1n PRIVATE
${DEPS_PREFIX}/lib/libimobiledevice-1.0.a
${DEPS_PREFIX}/lib/libirecovery-1.0.a
${DEPS_PREFIX}/lib/libusbmuxd-2.0.a
${DEPS_PREFIX}/lib/libplist-2.0.a
${DEPS_PREFIX}/lib/libimobiledevice-glue-1.0.a
${DEPS_PREFIX}/lib/libmbedtls.a
${DEPS_PREFIX}/lib/libmbedx509.a
${DEPS_PREFIX}/lib/libmbedcrypto.a
)
2026-06-19 21:36:39 -07:00
if(LINUX)
target_link_libraries(palera1n PRIVATE
${DEPS_PREFIX}/lib/libusb-1.0.a
)
endif()
2026-06-19 17:51:51 -07:00
else()
find_package(PkgConfig REQUIRED)
pkg_check_modules(IMD REQUIRED libimobiledevice-1.0)
pkg_check_modules(IRECOVERY REQUIRED libirecovery-1.0)
pkg_check_modules(PLIST REQUIRED libplist-2.0)
pkg_check_modules(USBMUXD REQUIRED libusbmuxd-2.0)
target_include_directories(palera1n PRIVATE
${IMD_INCLUDE_DIRS}
${IRECOVERY_INCLUDE_DIRS}
${PLIST_INCLUDE_DIRS}
${USBMUXD_INCLUDE_DIRS}
)
target_link_libraries(palera1n PRIVATE
${IMD_LIBRARIES}
${IRECOVERY_LIBRARIES}
${PLIST_LIBRARIES}
${USBMUXD_LIBRARIES}
)
target_compile_options(palera1n PRIVATE
${IMD_CFLAGS_OTHER}
${IRECOVERY_INCLUDE_DIRS}
${PLIST_CFLAGS_OTHER}
${USBMUXD_CFLAGS_OTHER}
)
endif()
2026-02-05 00:42:57 -08:00
endif()