The DragonMake Format#
Intead of splitting up build instructions among a ton of ‘Makefile’s, dragon build variables are all declared in a single DragonMake file at the root of the project.
DragonMake files use YAML syntax.
name: DemoTweak
id: me.cynder.dragondemo
depends: mobilesubstrate
architecture: iphoneos-arm
description: Demo Tweak
author: cynder
section: Tweaks
DemoTweak:
type: tweak
filter:
executables:
- SpringBoard
files:
- DemoTweak.x
The Project#
The full DragonMake represents the “Project”, which contains one or more “Modules” (tweaks, prefs, etc).
name: DemoTweak
id: me.cynder.dragondemo
depends: mobilesubstrate
architecture: iphoneos-arm
description: Demo Tweak
author: cynder
section: Tweaks
Variables#
Variable |
Type |
Description |
name |
String |
Name of the project |
icmd |
String |
(Optional) Command to run after installation on the target device |
control Variables#
If your project already has a control file you don’t need to worry about these.
Variable |
Type |
Description |
id |
String |
Bundle ID (e.g. me.cynder.demotweak) for the Project |
author |
String |
Author of the project. Current account’s username will be used if none is provided |
description |
String |
Description of the package |
version |
String |
Version of the project |
section |
String |
Section to place this tweak in. (e.g. ‘Tweaks’) |
depends |
String |
Comma separated list of bundle ids this package depends on |
maintainer |
String |
(Optional) Maintainer of the project. Will use the value of ‘author’ if none is provided |
provides |
String |
(Optional) Comma separated list of bundle ids this package provides |
Debian Package Script Variables#
Lists of commands can be specified with preinst:, postinst:, prerm: and/or postrm: to create packaging scripts included in the binary.
name: DemoTweak
id: me.cynder.dragondemo
depends: mobilesubstrate
architecture: iphoneos-arm
description: Demo Tweak
author: cynder
section: Tweaks
# This will run on the device after installation
postinst:
- echo "Hello from dragon!"
Modules#
Modules in the DragonMake represent individual components of your package.
These include things like a Tweak, Preferences, etc.
DemoTweak:
type: tweak
filter:
executables:
- SpringBoard
files:
- DemoTweak.x
The “Important” Variables#
Variable |
Type |
Description |
type |
String |
Project type – see next section |
dir |
String |
(Optional) Subdirectory the files are located in, if they’re in one |
files |
List |
List of files in the project to be compiled |
Types#
Type |
Description |
app |
Build an application for jailbroken devices |
tweak |
Build a tweak for jailbroken devices |
prefs |
Build a preference bundle |
bundle |
Build some other type of bundle |
resource-bundle |
Build a bundle containing only resources |
framework |
Build a framework |
library |
Build a library |
cli |
Build a CLI tool/binary |
static |
Build a static library |
stage |
Module containing only a stage variable |
Tweak bundle filters#
Bundle filters tell MobileSubstrate (or whatever injection system your jailbreak uses) what processes to inject your tweak into.
dragon supports the standard Theos format, but allows specifying the values in the DragonMake, if you want.
DemoTweak:
type: tweak
# This bit
filter:
executables:
- SpringBoard
files:
- DemoTweak.x
Common Module variables#
None of these are required by default, but you may need some of them for various projects.
Variable |
Type |
Description |
archs |
List |
List of archs to compile for |
cflags |
String/List |
List (or a space seperated string) with cflags used at compilation time |
releaseflags |
String/List |
List (or a space seperated string) with cflags used on release (dragon b r) builds |
dbgflags |
String/List |
List (or a space seperated string) with cflags used on debug builds (without r/release command) |
frameworks |
List |
List of frameworks to link against |
libs |
List |
List of libraries to link against |
entfile |
String |
File containing entitlements to codesign the module with |
include |
List |
List of directories to search for headers in |
additional_fw_dirs |
List |
List of additional directories to search for frameworks in |
additional_lib_dirs |
List |
List of additional directories to search for libraries in |
prefix |
List |
List of headers to be imported into ALL files at compilation time |
for |
String |
Sets the target OS to build for [ios, watchos, host(macos)] |
arc |
Boolean |
Enable ARC (Default: YES) |
sysroot |
String |
Specify Directory the SDK is located in |
targetvers |
String |
Version of the OS to target |
macros |
List |
List of declaration flags (-D<value>) to add to the compilation flags |
Setting Module Defaults#
A special module can be specified with the name all:; its variables will be set as the “default” value for all Modules in the project.
If a Module specifies a different value than all:, it’ll override the one declared in all:.