Line 43: | Line 43: | ||
<source lang="yaml">--- | <source lang="yaml">--- | ||
name: | # This represents the overall project name. | ||
# Everything in here will be built into a .deb package for installation | |||
# Replace TweakName with the name of your project, of course | |||
name: TweakName | |||
icmd: killall -9 SpringBoard | icmd: killall -9 SpringBoard | ||
id: com.mycompany.tweakname | |||
version: 1.3 | |||
author: kritanta | |||
depends: mobilesubstrate, preferenceloader | |||
TweakName: | |||
type: tweak | type: tweak | ||
files: | files: | ||
- "*. | - "*.xm" | ||
# Now for preferences! | |||
TweakNamePrefs: | |||
dir: nameprefs | dir: nameprefs | ||
type: prefs | |||
type: | |||
files: | files: | ||
- | - BlahRootListController.m | ||
- | - ACellYouUse.m | ||
- SomeFileFromYourMainTweak.m | - ../SomeFileFromYourMainTweak.m | ||
# Subproject example | |||
ASubTweakName: | |||
# | |||
dir: othertweak | dir: othertweak | ||
type: tweak | type: tweak | ||
files: | |||
- | - Tweak.xm | ||
</source> | </source> | ||
Revision as of 03:36, 13 April 2021
Overview
DragonBuild consists of 2 main components:
- A packaging system
- A ninja buildfile generator
It uses Theos components for logos processing, but does not require an existing theos installation.
Setup
Prerequisites
Requires ninja
, perl
, and python3
python3 requires modules pyyaml
.
Installation
bash <(curl -sL dr.krit.me)
Usage
Dragon projects are configured via a single DragonMake file, regardless of how many subprojects you have.
You can specify subprojects and their information here. This allows for compiling slices in parallel easily, along with keeping things much more organized.
DragonMake Syntax
DragonMake follows fairly standard YAML syntax, with a singular escape character, $
.
For single line variables, you can use bash syntax to evaluate a command with $$(command args)
A single $
denotes a ninja variable. For using bash syntax in variables, one can use $$
to represent a $
. For example, one could use $$PWD
to get the value of an environment variable in a command.
Using the below items will parse output through xargs and add entries to the list the item is in: $wildcard("directory", "*.extension")
will find all files in a specific directory.
$eval("bash command")
is also provided, in the event more complex manipulation is needed.
Example Project
This should serve as a guideline for how a project should be laid out. You can declare as many projects as you want, it's all going to be crammed into the same deb.
---
# This represents the overall project name.
# Everything in here will be built into a .deb package for installation
# Replace TweakName with the name of your project, of course
name: TweakName
icmd: killall -9 SpringBoard
id: com.mycompany.tweakname
version: 1.3
author: kritanta
depends: mobilesubstrate, preferenceloader
TweakName:
type: tweak
files:
- "*.xm"
# Now for preferences!
TweakNamePrefs:
dir: nameprefs
type: prefs
files:
- BlahRootListController.m
- ACellYouUse.m
- ../SomeFileFromYourMainTweak.m
# Subproject example
ASubTweakName:
dir: othertweak
type: tweak
files:
- Tweak.xm
DragonMake Variables
Please pay attention to the provided example to understand how these should be laid out in a file.
Name | Type | Description | Default |
---|---|---|---|
name
|
str | Name of the whole project | N/A |
icmd
|
str | Command to run on device after install | sbreload
|
name
|
str | Name of the item being build. Specified as yourNameHere: with the rest of the item specific variables below
|
N/A |
type
|
str | Type of project being built. One of "tweak"/"bundle"/"library". | N/A |
logos_files
|
list | List of files that require the logos preprocessor | [] |
files
|
list | List of files to be compiled, excluding logos files. | [] |
targetios
|
str | Minimum iOS Version Required | [] |
archs
|
list | Architechtures to compile for | [] |
sysroot
|
str | Root of the Patched SDK to build with | $DRAGONBUILD/sdks/iPhoneOS.sdk |
cc
|
str | c/c++ compiler to use | clang+ |
ld
|
str | linker to use | clang+ |
ldid
|
str | ldid binary to sign with | ldid |
dsym
|
str | dsymutil binary to symbolicate with | dsymutil |
logos
|
str | logos.pl file to use for preprocessing | $DRAGONBUILD/bin/logos.pl
|
stage
|
str/list | Console command(s) to run before after build and before packaging | |
arc
|
str | -fobjc-arc, if enabling so is desired | -fobjc-arc
|
targ
|
str | build target | -DTARGET_IPHONE=1 |
warnings
|
str | Warnings flag | -Wall |
optim
|
str | Optimzation level. Higher levels can break obfuscators. | 0 |
debug
|
str | debug flags | -fcolor-diagnostics |
libs
|
list | List of libraries to link the binary against | |
frameworks
|
list | List of Frameworks to compile with | ['CoreFoundation', 'Foundation', 'UIKit', 'CoreGraphics', 'QuartzCore', 'CoreImage', 'AudioToolbox'] |
cflags
|
str | additional flags to pass to clang and the linker | |
ldflags
|
str | additional flags to pass to the linker | |
ldidflags
|
str | custom option for ldid | '-S' |
install_location
|
str | override variable for bundles/libraries to allow specifying install location | |
framework_search_dirs
|
list | Framework Search Dirs. Changing this variable overrides defaults. | ['$sysroot/System/Library/Frameworks', '$sysroot/System/Library/PrivateFrameworks', '$dragondir/frameworks'] |
additional_framework_search_dirs
|
list | Allows adding framework search dirs without overwriting old ones. | [] |
library_search_dirs
|
list | Library search dirs. Just like the framework search | ['$dragondir/lib', '.'] |
additional_library_search_dirs
|
list | Add to lib search without overwriting | [] |
Yaml parsing is done via python3.
DragonBuild Command Line Arguments
All of these can be combined and ran at the same time, if needed.
Building and Installing your Tweak
All of these arguments can be specified using only the first character (dragon c b i
for example)
dragon build
to build (dragon make
also works)
dragon install
to install.
dragon do
combines both of these.
dragon release
loads DragonRelease
after loading DragonMake
, allows for setting variables specific to release builds.
dragon clean
performs a clean rebuild of the entire project and subprojects.
Generating compile commands for clangd or other tools
dragon export