Files
palera1n/src/CMakeLists.txt
T
2023-02-12 14:00:49 -05:00

345 lines
13 KiB
CMake

#execute_process(COMMAND sh -c "cd ../dep_root && sh ../download_deps.sh")
set(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY")
#set(SRC ${CMAKE_CURRENT_SOURCE_DIR})
#set(DEP ${SRC}/../dep_root)
cmake_parse_arguments(palera1n "" "" "-arch" ${ARGN})
set(CHECKRA1N_VERSION 0.1337.1)
if( ${LDID})
set(LDID ldid)
endif()
if( ${LIPO})
set(LIPO lipo)
endif()
if(APPLE)
set(CHECKRA1N_FILE_NAME checkra1n-macos)
else()
set(CHECKRA1N_FILE_NAME checkra1n-linux-${CMAKE_SYSTEM_PROCESSOR})
endif()
add_executable(palera1n
binpack.dmg.c
checkra1n-kpf-pongo.c
checkra1n.c
devhelper.c
dfuhelper.c
exec_checkra1n.c
lock_vars.c
lockdown_helper.c
log.c
main.c
optparse.c
override_file.c
pongo_helper.c
credits.c
ramdisk.dmg.c
../include/kerninfo.h
../include/palerain.h
../include/ANSI-color-codes.h
../include/tui.h
../include/xxd-embedded.h
)
add_compile_options(-Wall -Wextra -Wno-unused-parameter -pedantic-errors -g)
# adds dev mode files
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
get_property(MY_TARGET_SOURCES TARGET palera1n PROPERTY SOURCES)
list(APPEND MY_TARGET_SOURCES tui_main.c
tui_screen_enter_dfu.c
tui_screen_enter_recovery.c
tui_screen_jailbreak.c
tui_screen_main.c
tui_screen_options.c)
set_property(TARGET palera1n PROPERTY SOURCES ${MY_TARGET_SOURCES})
elseif(CMAKE_BUILD_TYPE STREQUAL "ASAN")
get_property(MY_TARGET_SOURCES TARGET palera1n PROPERTY SOURCES)
list(APPEND MY_TARGET_SOURCES tui_main.c
tui_screen_enter_dfu.c
tui_screen_enter_recovery.c
tui_screen_jailbreak.c
tui_screen_main.c
tui_screen_options.c)
set_property(TARGET palera1n PROPERTY SOURCES ${MY_TARGET_SOURCES})
add_compile_options(-fsanitize=address,undefined -fsanitize-address-use-after-return=runtime)
elseif(CMAKE_BUILD_TYPE STREQUAL "TSAN")
get_property(MY_TARGET_SOURCES TARGET palera1n PROPERTY SOURCES)
list(APPEND MY_TARGET_SOURCES tui_main.c
tui_screen_enter_dfu.c
tui_screen_enter_recovery.c
tui_screen_jailbreak.c
tui_screen_main.c
tui_screen_options.c)
set_property(TARGET palera1n PROPERTY SOURCES ${MY_TARGET_SOURCES})
add_compile_options(-fsanitize=thread,undefined)
else()
set(CMAKE_BUILD_TYPE "Release")
endif()
#message("Testing for Clang/LLVM")
#string(TOLOWER CMAKE_C_COMPILER_ID COMPILER)
#if(CMAKE_C_COMPILER_ID MATCHES "AppleClang" OR CMAKE_C_COMPILER_ID MATCHES "Clang")
# message("Using clang/llvm! Enabling -flto=full! Please make sure clang is up to date, or else compile will fail")
# add_compile_options(-flto=full)
#else()
# message("Not using clang/llvm! Using normal lto/no lto!")
# add_compile_options(-flto)
#endif()
#add_custom_command(TARGET palera1n
# COMMAND sh -c "curl -LO https://assets.checkra.in/downloads/preview/${CHECKRA1N_VERSION}/${CHECKRA1N_FILE_NAME} && chmod 755 ${CHECKRA1N_FILE_NAME}"
# )
#
#if(APPLE)
# add_custom_command(TARGET palera1n
# COMMAND sh -c "ldid -Scheckra1n.plist checkra1n"
# )
# add_custom_command(TARGET palera1n
# COMMAND lipo -thin ${CMAKE_SYSTEM_PROCESSOR} -output checkra1n checkra1n-macos
# )
# if(CFLAGS MATCHES "version-min=")
# add_custom_command(TARGET palera1n
# COMMAND sh -c "vtool -remove-build-version 1 -replace -output checkra1n checkra1n && vtool -set-build-version $(FAKE_PLATFORM) $(FAKE_MINOS) $(FAKE_SDK) -replace -output checkra1n checkra1n && install_name_tool -change /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit /System/Library/Frameworks/IOKit.framework/IOKit checkra1n && install_name_tool -change /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation checkra1n && ${LDID} -Susb.xml checkra1n"
# )
# endif()
#else()
# execute_process(
# COMMAND cp ${CHECKRA1N_FILE_NAME} ../src/checkra1n
# )
#endif()
#ifneq (,$(findstring arm64, $(CFLAGS)))
#$(LIPO) -thin arm64 -output checkra1n checkra1n-macos
#else ifneq (,$(findstring x86_64, $(CFLAGS)))
#$(LIPO) -thin x86_64 -output checkra1n checkra1n-macos
#else ifeq ($(shell arch),i386)
#$(LIPO) -thin x86_64 -output checkra1n checkra1n-macos
#else
#$(LIPO) -thin $(shell arch) -output checkra1n checkra1n-
if(APPLE)
if(${LIBUSB})
target_compile_definitions(palera1n PRIVATE -DUSE_LIBUSB)
get_property(MY_TARGET_SOURCES TARGET palera1n PROPERTY SOURCES)
list(APPEND MY_TARGET_SOURCES
usb_libusb.c)
set_property(TARGET palera1n PROPERTY SOURCES ${MY_TARGET_SOURCES})
target_link_libraries(palera1n
${DEP}/lib/libusb-1.0.a
)
else()
get_property(MY_TARGET_SOURCES TARGET palera1n PROPERTY SOURCES)
list(APPEND MY_TARGET_SOURCES
usb_iokit.c)
set_property(TARGET palera1n PROPERTY SOURCES ${MY_TARGET_SOURCES})
endif()
if(IOS AND CMAKE_C_FLAGS MATCHES "arm64")
add_custom_command(
COMMAND sh -c "curl -Lo checkra1n-macos https://assets.checkra.in/downloads/preview/0.1337.1/${CHECKRA1N_FILE_NAME} "
COMMAND lipo -thin arm64 -output checkra1n checkra1n-macos
COMMAND sh -c "vtool -remove-build-version 1 -replace -output checkra1n checkra1n && vtool -set-build-version $(FAKE_PLATFORM) $(FAKE_MINOS) $(FAKE_SDK) -replace -output checkra1n checkra1n && install_name_tool -change /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit /System/Library/Frameworks/IOKit.framework/IOKit checkra1n && install_name_tool -change /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation checkra1n && ${LDID} -Susb.xml checkra1n"
COMMAND sh -c "curl -Lo binpack.dmg https://cdn.nickchan.lol/palera1n/c-rewrite/deps/binpack.dmg"
COMMAND sh -c "curl -Lo ramdisk.dmg https://cdn.nickchan.lol/palera1n/c-rewrite/deps/ramdisk.dmg"
COMMAND sh -c "curl -Lo checkra1n-kpf-pongo https://cdn.nickchan.lol/palera1n/artifacts/kpf/checkra1n-kpf-pongo"
COMMAND pwd
COMMAND xxd -iC checkra1n checkra1n.c
COMMAND xxd -iC binpack.dmg binpack.dmg.c
COMMAND xxd -iC ramdisk.dmg ramdisk.dmg.c
COMMAND xxd -iC checkra1n-kpf-pongo checkra1n-kpf-pongo.c
OUTPUT checkra1n.c checkra1n-kpf-pongo.c ramdisk.dmg.c binpack.dmg.c binpack.dmg ramdisk.dmg checkra1n-kpf-pongo
)
elseif(CMAKE_C_FLAGS MATCHES "arm64")
add_custom_command(
COMMAND sh -c "curl -Lo checkra1n-macos https://assets.checkra.in/downloads/preview/0.1337.1/${CHECKRA1N_FILE_NAME} "
COMMAND lipo -thin arm64 -output checkra1n checkra1n-macos
COMMAND sh -c "curl -Lo binpack.dmg https://cdn.nickchan.lol/palera1n/c-rewrite/deps/binpack.dmg"
COMMAND sh -c "curl -Lo ramdisk.dmg https://cdn.nickchan.lol/palera1n/c-rewrite/deps/ramdisk.dmg"
COMMAND sh -c "curl -Lo checkra1n-kpf-pongo https://cdn.nickchan.lol/palera1n/artifacts/kpf/checkra1n-kpf-pongo"
COMMAND pwd
COMMAND xxd -iC checkra1n checkra1n.c
COMMAND xxd -iC binpack.dmg binpack.dmg.c
COMMAND xxd -iC ramdisk.dmg ramdisk.dmg.c
COMMAND xxd -iC checkra1n-kpf-pongo checkra1n-kpf-pongo.c
OUTPUT checkra1n.c checkra1n-kpf-pongo.c ramdisk.dmg.c binpack.dmg.c binpack.dmg ramdisk.dmg checkra1n-kpf-pongo
)
else()
add_custom_command(
COMMAND sh -c "curl -Lo checkra1n-macos https://assets.checkra.in/downloads/preview/0.1337.1/${CHECKRA1N_FILE_NAME} "
COMMAND lipo -thin x86_64 -output checkra1n checkra1n-macos
COMMAND sh -c "curl -Lo binpack.dmg https://cdn.nickchan.lol/palera1n/c-rewrite/deps/binpack.dmg"
COMMAND sh -c "curl -Lo ramdisk.dmg https://cdn.nickchan.lol/palera1n/c-rewrite/deps/ramdisk.dmg"
COMMAND sh -c "curl -Lo checkra1n-kpf-pongo https://cdn.nickchan.lol/palera1n/artifacts/kpf/checkra1n-kpf-pongo"
COMMAND pwd
COMMAND xxd -iC checkra1n checkra1n.c
COMMAND xxd -iC binpack.dmg binpack.dmg.c
COMMAND xxd -iC ramdisk.dmg ramdisk.dmg.c
COMMAND xxd -iC checkra1n-kpf-pongo checkra1n-kpf-pongo.c
OUTPUT checkra1n.c checkra1n-kpf-pongo.c ramdisk.dmg.c binpack.dmg.c binpack.dmg ramdisk.dmg checkra1n-kpf-pongo
)
endif()
else()
add_custom_command(
COMMAND sh -c "curl -Lo checkra1n https://assets.checkra.in/downloads/preview/0.1337.1/${CHECKRA1N_FILE_NAME} "
COMMAND sh -c "curl -Lo binpack.dmg https://cdn.nickchan.lol/palera1n/c-rewrite/deps/binpack.dmg"
COMMAND sh -c "curl -Lo ramdisk.dmg https://cdn.nickchan.lol/palera1n/c-rewrite/deps/ramdisk.dmg"
COMMAND sh -c "curl -Lo checkra1n-kpf-pongo https://cdn.nickchan.lol/palera1n/artifacts/kpf/checkra1n-kpf-pongo"
COMMAND pwd
COMMAND xxd -iC checkra1n checkra1n.c
COMMAND xxd -iC binpack.dmg binpack.dmg.c
COMMAND xxd -iC ramdisk.dmg ramdisk.dmg.c
COMMAND xxd -iC checkra1n-kpf-pongo checkra1n-kpf-pongo.c
OUTPUT checkra1n.c checkra1n-kpf-pongo.c ramdisk.dmg.c binpack.dmg.c binpack.dmg ramdisk.dmg checkra1n-kpf-pongo
)
target_compile_definitions(palera1n PRIVATE -DUSE_LIBUSB)
get_property(MY_TARGET_SOURCES TARGET palera1n PROPERTY SOURCES)
list(APPEND MY_TARGET_SOURCES
usb_libusb.c)
set_property(TARGET palera1n PROPERTY SOURCES ${MY_TARGET_SOURCES})
target_link_libraries(palera1n
${DEP}/lib/libusb-1.0.a
)
target_compile_definitions(palera1n PRIVATE -DUSE_LIBUSB)
endif()
include_directories(
../include
${SRC}
)
target_compile_definitions(palera1n PRIVATE -DPALERAIN_VERSION=\"2.0.0\")
target_include_directories(palera1n PRIVATE
${SRC}/include
${SRC}
${DEP}/include
)
#if(${STATIC})
target_link_libraries(palera1n
${DEP}/lib/libimobiledevice-1.0.a
${DEP}/lib/libirecovery-1.0.a
${DEP}/lib/libusbmuxd-2.0.a
${DEP}/lib/libimobiledevice-glue-1.0.a
${DEP}/lib/libplist-2.0.a
${DEP}/lib/libmbedtls.a
${DEP}/lib/libmbedcrypto.a
${DEP}/lib/libmbedx509.a
${DEP}/lib/libreadline.a
)
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
set(BUILD_SHARED_LIBS OFF)
if(NOT APPLE)
set(CMAKE_EXE_LINKER_FLAGS "-static")
endif()
#else()
# find_library(LIBIMOBILEDEVICE libimobiledevice)
# if (NOT CORE_FOUNDATION)
# message(FATAL_ERROR "libimobiledevice not found")
# endif()
# target_link_libraries(palera1n ${LIBIMOBILEDEVICE})
#
# find_library(LIR libirecovery)
# if (NOT SYSCONF)
# message(FATAL_ERROR "libirecovery not found")
# endif()
# target_link_libraries(palera1n ${LIR})
#
# find_library(USBMUXD usbmuxd)
# if (NOT SEC)
# message(FATAL_ERROR "usbmuxd not found")
# endif()
# target_link_libraries(palera1n ${USBMUXD})
#
# find_library(GLUE libimobiledevice-glue)
# if (NOT IOKIT)
# message(FATAL_ERROR "libimobiledevice-glue not found")
# endif()
# target_link_libraries(palera1n ${GLUE})
#
## target_link_libraries(palera1n
## imobiledevice-1.0
## irecovery-1.0
## usbmuxd-2.0
## imobiledevice-glue-1.0
## plist-2.0
## mbedtls
## mbedcrypto
## mbedx509
## readline
## usb-1.0
## )
#endif()
#if(APPLE)
# add_compile_options(palera1n
# -framework CoreFoundation
# -framework SystemConfiguration
# -framework IOKit
# -framework Security
# )
#endif()
if(APPLE)
find_library(CORE_FOUNDATION CoreFoundation)
if (NOT CORE_FOUNDATION)
message(FATAL_ERROR "CoreFoundation not found")
endif()
target_link_libraries(palera1n ${CORE_FOUNDATION})
find_library(SYSCONF SystemConfiguration)
if (NOT SYSCONF)
message(FATAL_ERROR "SystemConfiguration not found")
endif()
target_link_libraries(palera1n ${SYSCONF})
find_library(SEC Security)
if (NOT SEC)
message(FATAL_ERROR "Security not found")
endif()
target_link_libraries(palera1n ${SEC})
find_library(IOKIT IOKit)
if (NOT IOKIT)
message(FATAL_ERROR "IOKit not found")
endif()
target_link_libraries(palera1n ${IOKIT})
endif()
add_compile_options(palera1n
-static -no-pie -Wl,--gc-sections
)
if(!BUILD_DATE)
execute_process(COMMAND date OUTPUT_VARIABLE BUILD_DATE)
endif()
if(!BUILD_TAG)
execute_process(COMMAND git describe --dirty --tags --abbrev=7 OUTPUT_VARIABLE BUILD_TAG)
endif()
if(!BUILD_WHOAMI)
execute_process(COMMAND whoami OUTPUT_VARIABLE BUILD_WHOAMI)
endif ()
set(INCLUDE_DIR /usr/local/include)
include_directories (${INCLUDE_DIR})
add_compile_definitions(
BUILD_DATE="${BUILD_DATE}"
BUILD_TAG="${BUILD_TAG}"
BUILD_WHOAMI="${BUILD_WHOAMI}"
BUILD_STYLE="${CMAKE_BUILD_TYPE}"
)