Skip to content

Commit d3567b0

Browse files
palmercTatsh
authored andcommitted
Add CMake to the project (KJCracks#220)
1 parent abdde3e commit d3567b0

File tree

8 files changed

+358
-0
lines changed

8 files changed

+358
-0
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ DerivedData/
1717
*.xccheckout
1818
*.moved-aside
1919
!Podfile.lock
20+
.idea
21+
cmake-build-debug
2022

2123
# OS junk
2224
.DS_Store

CMakeLists.txt

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
cmake_minimum_required( VERSION 3.8 )
2+
3+
project( Clutch )
4+
5+
set( PRODUCT_NAME Clutch )
6+
set( EXECUTABLE_NAME Clutch )
7+
set( PRODUCT_BUNDLE_IDENTIFIER kjc.Clutch )
8+
set( MACOSX_BUNDLE_SHORT_VERSION_STRING "2.0.4" )
9+
set( MACOSX_BUNDLE_BUNDLE_VERSION "1" )
10+
set( DEVICE_FAMILY "1,2" )
11+
set( DEPLOYMENT_TARGET 8.0 CACHE STRING "" )
12+
set( CODE_SIGN_IDENTITY "iPhone Developer" )
13+
14+
if( NOT CMAKE_BUILD_TYPE )
15+
set( CMAKE_BUILD_TYPE Release )
16+
endif( NOT CMAKE_BUILD_TYPE )
17+
18+
if( CMAKE_BUILD_TYPE STREQUAL Debug )
19+
add_definitions( -DDEBUG )
20+
endif()
21+
22+
include_directories( ${CMAKE_CURRENT_SOURCE_DIR} )
23+
24+
include( cmake/DebugUtils.cmake )
25+
include( cmake/AddFramework.cmake )
26+
add_subdirectory( Clutch )

Clutch/CMakeLists.txt

Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
1+
cmake_minimum_required( VERSION 3.8 )
2+
3+
set( SOURCE_COMMANDS
4+
ClutchCommands.h
5+
ClutchCommands.m )
6+
source_group( "Commands" FILES ${SOURCE_COMMANDS} )
7+
list( APPEND SOURCE_FILES ${SOURCE_COMMANDS} )
8+
9+
set( SOURCE_OPERATIONS
10+
ZipOperation.h
11+
ZipOperation.m
12+
BundleDumpOperation.h
13+
BundleDumpOperation.m
14+
FinalizeDumpOperation.h
15+
FinalizeDumpOperation.m )
16+
source_group( "Operations" FILES ${SOURCE_OPERATIONS} )
17+
list( APPEND SOURCE_FILES ${SOURCE_OPERATIONS} )
18+
19+
set( SOURCE_DUMPERS
20+
ASLRDisabler.h
21+
ASLRDisabler.m
22+
ARMDumper.h
23+
ARMDumper.m
24+
ARM64Dumper.h
25+
ARM64Dumper.m
26+
FrameworkDumper.h
27+
FrameworkDumper.m
28+
Framework64Dumper.h
29+
Framework64Dumper.m
30+
FrameworkLoader.h
31+
FrameworkLoader.m )
32+
source_group( "Dumpers" FILES ${SOURCE_DUMPERS} )
33+
list( APPEND SOURCE_FILES ${SOURCE_DUMPERS} )
34+
35+
set( SOURCE_PROTOCOL_PARENT_DUMPER
36+
BinaryDumpProtocol.h
37+
Dumper.h
38+
Dumper.m )
39+
source_group( "Dumpers\\Protocol + Parent Dumper" FILES ${SOURCE_PROTOCOL_PARENT_DUMPER} )
40+
list( APPEND SOURCE_FILES ${SOURCE_PROTOCOL_PARENT_DUMPER} )
41+
42+
set( SOURCE_APPLICATION
43+
Application.h
44+
Application.m
45+
Extension.h
46+
Extension.m
47+
Framework.h
48+
Framework.m )
49+
source_group( "Application" FILES ${SOURCE_APPLICATION} )
50+
list( APPEND SOURCE_FILES ${SOURCE_APPLICATION} )
51+
52+
set( SOURCE_CLUTCH_BUNDLE
53+
Binary.h
54+
Binary.m
55+
ClutchBundle.h
56+
ClutchBundle.m )
57+
source_group( "Application\\ClutchBundle" FILES ${SOURCE_CLUTCH_BUNDLE} )
58+
list( APPEND SOURCE_FILES ${SOURCE_CLUTCH_BUNDLE} )
59+
60+
set( SOURCE_MAIN
61+
KJApplicationManager.h
62+
KJApplicationManager.m
63+
Device.h
64+
Device.m
65+
main.m
66+
ClutchPrint.h
67+
ClutchPrint.m )
68+
source_group( "" FILES ${SOURCE_MAIN} )
69+
list( APPEND SOURCE_FILES ${SOURCE_MAIN} )
70+
71+
set( PRECOMPILED_HEADER ${CMAKE_CURRENT_SOURCE_DIR}/Clutch-Prefix.pch )
72+
set( SOURCE_SUPPORTING_FILES
73+
../LSApplicationProxy.h
74+
${PRECOMPILED_HEADER}
75+
SCInfoBuilder.h
76+
SCInfoBuilder.m
77+
sha1.c
78+
sha1.h
79+
Clutch.entitlements
80+
mach_vm.h
81+
NSTask.h
82+
scinfo.h
83+
scinfo.m
84+
LSApplicationWorkspace.h
85+
FBApplicationInfo.h
86+
Info.plist
87+
NSFileHandle+Private.h
88+
NSFileHandle+Private.m
89+
NSBundle+Clutch.h
90+
NSBundle+Clutch.m )
91+
source_group( "Supporting Files" FILES ${SOURCE_SUPPORTING_FILES} )
92+
list( APPEND SOURCE_FILES ${SOURCE_SUPPORTING_FILES} )
93+
94+
set( SOURCE_OPTOOL
95+
optool.h
96+
optool-defines.h
97+
optool-headers.h
98+
optool-headers.m
99+
optool-operations.h
100+
optool-operations.m
101+
NSData+Reading.h
102+
NSData+Reading.m )
103+
source_group( "Supporting Files\\optools" FILES ${SOURCE_OPTOOL} )
104+
list( APPEND SOURCE_FILES ${SOURCE_OPTOOL} )
105+
106+
set( SOURCE_ZIP
107+
ZipArchive.h
108+
ZipArchive.m )
109+
source_group( "Supporting Files\\Zip" FILES ${SOURCE_ZIP} )
110+
list( APPEND SOURCE_FILES ${SOURCE_ZIP} )
111+
112+
set( RESOURCE_SCRIPTS
113+
move_and_sign.sh )
114+
source_group( "scripts" FILES ${RESOURCE_SCRIPTS} )
115+
list( APPEND SOURCE_FILES ${RESOURCE_SCRIPTS} )
116+
117+
configure_file( Clutch.entitlements Clutch.entitlements COPYONLY )
118+
configure_file( Info.plist.in Info.plist COPYONLY )
119+
120+
add_subdirectory( MiniZip )
121+
122+
add_executable( Clutch MACOSX_BUNDLE ${SOURCE_FILES} $<TARGET_OBJECTS:MiniZip> )
123+
AddFramework( Clutch Foundation )
124+
AddFramework( Clutch UIKit )
125+
AddFramework( Clutch MobileCoreServices )
126+
target_include_directories( Clutch PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} )
127+
128+
if( CMAKE_GENERATOR STREQUAL Xcode )
129+
set_target_properties( Clutch
130+
PROPERTIES
131+
MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/Info.plist.in"
132+
XCODE_ATTRIBUTE_SDKROOT iphoneos
133+
XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "${PRODUCT_BUNDLE_IDENTIFIER}"
134+
XCODE_ATTRIBUTE_CODE_SIGN_STYLE "Manual"
135+
XCODE_ATTRIBUTE_CODE_SIGN_INJECT_BASE_ENTITLEMENTS YES
136+
XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET ${DEPLOYMENT_TARGET}
137+
XCODE_ATTRIBUTE_ARCHS "$(ARCHS_STANDARD)"
138+
XCODE_ATTRIBUTE_ENABLE_BITCODE YES
139+
XCODE_ATTRIBUTE_SKIP_INSTALL YES
140+
XCODE_ATTRIBUTE_CLANG_ENABLE_MODULES YES
141+
XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT dwarf-with-dsym
142+
XCODE_ATTRIBUTE_GCC_PREFIX_HEADER "${PRECOMPILED_HEADER}"
143+
XCODE_ATTRIBUTE_GCC_PRECOMPILE_PREFIX_HEADER YES
144+
XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY ${DEVICE_FAMILY}
145+
XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES
146+
XCODE_ATTRIBUTE_INSTALL_PATH "$(LOCAL_APPS_DIR)"
147+
XCODE_ATTRIBUTE_ENABLE_TESTABILITY YES
148+
XCODE_ATTRIBUTE_GCC_SYMBOLS_PRIVATE_EXTERN YES )
149+
else()
150+
target_compile_options( Clutch
151+
PRIVATE
152+
-include "${PRECOMPILED_HEADER}"
153+
-miphoneos-version-min=${DEPLOYMENT_TARGET}
154+
-fobjc-arc
155+
-fmodules )
156+
endif()
157+
158+
add_custom_command( TARGET Clutch POST_BUILD
159+
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/build"
160+
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:Clutch> "${CMAKE_BINARY_DIR}/build/"
161+
COMMAND codesign -fs- --entitlements "${CMAKE_CURRENT_BINARY_DIR}/Clutch.entitlements" "${CMAKE_BINARY_DIR}/build/Clutch" )

Clutch/Info.plist.in

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+
<plist version="1.0">
4+
<dict>
5+
<key>CFBundleDevelopmentRegion</key>
6+
<string>en</string>
7+
<key>CFBundleExecutable</key>
8+
<string>$(EXECUTABLE_NAME)</string>
9+
<key>CFBundleIdentifier</key>
10+
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
11+
<key>CFBundleInfoDictionaryVersion</key>
12+
<string>6.0</string>
13+
<key>CFBundleName</key>
14+
<string>$(PRODUCT_NAME)</string>
15+
<key>CFBundlePackageType</key>
16+
<string>APPL</string>
17+
<key>CFBundleShortVersionString</key>
18+
<string>2.0.4</string>
19+
<key>CFBundleVersion</key>
20+
<string>1</string>
21+
<key>LSRequiresIPhoneOS</key>
22+
<true/>
23+
<key>UILaunchStoryboardName</key>
24+
<string>Stub</string>
25+
<key>UIRequiredDeviceCapabilities</key>
26+
<array>
27+
<string>armv7</string>
28+
</array>
29+
<key>UISupportedInterfaceOrientations</key>
30+
<array>
31+
<string>UIInterfaceOrientationPortrait</string>
32+
<string>UIInterfaceOrientationPortraitUpsideDown</string>
33+
<string>UIInterfaceOrientationLandscapeLeft</string>
34+
<string>UIInterfaceOrientationLandscapeRight</string>
35+
</array>
36+
</dict>
37+
</plist>

Clutch/MiniZip/CMakeLists.txt

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
cmake_minimum_required( VERSION 3.8 )
2+
3+
project( MiniZip LANGUAGES C )
4+
5+
set( HEADERS_FILES
6+
crypt.h
7+
ioapi.h
8+
unzip.h
9+
zip.h )
10+
11+
set( SOURCE_FILES
12+
ioapi.c
13+
unzip.c
14+
zip.c )
15+
source_group( "" FILES ${HEADERS_FILES} ${SOURCE_FILES} )
16+
17+
add_library( MiniZip OBJECT ${HEADERS_FILES} ${SOURCE_FILES} )
18+
target_include_directories( MiniZip PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} )
19+
20+
if( CMAKE_GENERATOR STREQUAL Xcode )
21+
set_target_properties( MiniZip
22+
PROPERTIES
23+
XCODE_ATTRIBUTE_SDKROOT iphoneos
24+
XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET ${DEPLOYMENT_TARGET}
25+
XCODE_ATTIRBUTE_ENABLE_BITCODE YES
26+
XCODE_ATTIRBUTE_SKIP_INSTALL YES
27+
XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT dwarf-with-dsym
28+
XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY ${DEVICE_FAMILY}
29+
XCODE_ATTRIBUTE_INSTALL_PATH "$(LOCAL_APPS_DIR)"
30+
XCODE_ATTRIBUTE_ENABLE_TESTABILITY YES
31+
XCODE_ATTRIBUTE_GCC_SYMBOLS_PRIVATE_EXTERN YES )
32+
else()
33+
target_compile_options( MiniZip
34+
PRIVATE
35+
-miphoneos-version-min=${DEPLOYMENT_TARGET} )
36+
endif()

cmake/AddFramework.cmake

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
macro( AddFramework TARGET NAME )
2+
find_library( FRAMEWORK_${NAME}
3+
NAMES ${NAME}
4+
PATHS ${CMAKE_OSX_SYSROOT}/System/Library
5+
PATH_SUFFIXES Frameworks
6+
CMAKE_FIND_FRAMEWORK only
7+
NO_DEFAULT_PATH )
8+
if( ${FRAMEWORK_${NAME}} STREQUAL FRAMEWORK_${NAME}-NOTFOUND )
9+
message( ERROR ": Framework ${NAME} not found" )
10+
else()
11+
target_link_libraries( ${TARGET} ${FRAMEWORK_${NAME}} )
12+
message( STATUS "Framework ${NAME} found at ${FRAMEWORK_${NAME}}" )
13+
endif()
14+
endmacro( AddFramework )

cmake/DebugUtils.cmake

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
function( DumpVariables )
2+
set( options MARK HCF )
3+
set( oneValueArgs )
4+
set( multiValueArgs VARS )
5+
cmake_parse_arguments( DumpVariables "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
6+
7+
get_cmake_property( _CMAKE_VARIABLES VARIABLES )
8+
set( MARK ${DumpVariables_MARK} )
9+
set( HCF ${DumpVariables_HCF} )
10+
if( DumpVariables_VARS )
11+
set( VARS "${DumpVariables_VARS}" )
12+
else()
13+
set( VARS ${_CMAKE_VARIABLES} )
14+
endif()
15+
16+
if( MARK )
17+
message( "" )
18+
message( "#####################" )
19+
message( "DumpVariables - BEGIN" )
20+
endif()
21+
22+
foreach( _CMAKE_VARIABLE ${_CMAKE_VARIABLES} )
23+
if( _CMAKE_VARIABLE IN_LIST VARS )
24+
message( STATUS "${_CMAKE_VARIABLE}=${${_CMAKE_VARIABLE}}" )
25+
endif()
26+
endforeach( _CMAKE_VARIABLE )
27+
28+
if( MARK )
29+
message( "DumpVariables - END" )
30+
message( "#####################" )
31+
message( "" )
32+
endif()
33+
34+
if( HCF )
35+
message( FATAL_ERROR "HCF - DumpVariables" )
36+
endif()
37+
endfunction( DumpVariables )
38+

cmake/iphoneos.toolchain.cmake

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
set( CMAKE_SYSTEM_NAME Darwin )
2+
set( SDK iphoneos CACHE STRING "" )
3+
set( CMAKE_OSX_ARCHITECTURES armv7 armv7s arm64 CACHE STRING "" )
4+
5+
execute_process( COMMAND xcrun --sdk ${SDK} --find clang
6+
OUTPUT_VARIABLE CMAKE_C_COMPILER
7+
OUTPUT_STRIP_TRAILING_WHITESPACE )
8+
set( CMAKE_C_COMPILER ${CMAKE_C_COMPILER} CACHE PATH "clang executable" )
9+
10+
execute_process( COMMAND xcrun --sdk ${SDK} --find clang++
11+
OUTPUT_VARIABLE CMAKE_CXX_COMPILER
12+
OUTPUT_STRIP_TRAILING_WHITESPACE )
13+
set( CMAKE_CXX_COMPILER ${CMAKE_CXX_COMPILER} CACHE PATH "clang++ executable" )
14+
15+
execute_process( COMMAND xcrun --sdk ${SDK} --find swiftc
16+
OUTPUT_VARIABLE CMAKE_Swift_COMPILER
17+
OUTPUT_STRIP_TRAILING_WHITESPACE )
18+
set( CMAKE_Swift_COMPILER ${CMAKE_Swift_COMPILER} CACHE PATH "swiftc executable" )
19+
20+
execute_process( COMMAND xcrun --sdk ${SDK} --find libtool
21+
OUTPUT_VARIABLE CMAKE_LIBTOOL
22+
OUTPUT_STRIP_TRAILING_WHITESPACE )
23+
set( CMAKE_LIBTOOL ${CMAKE_LIBTOOL} CACHE PATH "libtool executable" )
24+
25+
execute_process( COMMAND xcrun --sdk ${SDK} --find strip
26+
OUTPUT_VARIABLE CMAKE_STRIP
27+
OUTPUT_STRIP_TRAILING_WHITESPACE )
28+
set( CMAKE_STRIP ${CMAKE_STRIP} CACHE PATH "strip executable" )
29+
30+
execute_process( COMMAND xcrun --sdk ${SDK} --show-sdk-path
31+
OUTPUT_VARIABLE CMAKE_OSX_SYSROOT
32+
OUTPUT_STRIP_TRAILING_WHITESPACE )
33+
set( CMAKE_OSX_SYSROOT ${CMAKE_OSX_SYSROOT} CACHE PATH "sysroot" )
34+
35+
set( CMAKE_CXX_COMPILER_WORKS TRUE )
36+
set( CMAKE_C_COMPILER_WORKS TRUE )
37+
set( CMAKE_Swift_COMPILER_WORKS TRUE )
38+
39+
set( CMAKE_FIND_FRAMEWORK FIRST )
40+
set( CMAKE_SYSTEM_FRAMEWORK_PATH ${CMAKE_OSX_SYSROOT}/System/Library/Frameworks )
41+
42+
set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )
43+
set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
44+
set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )

0 commit comments

Comments
 (0)