kernel_collection_builder.h [plain text]
#ifndef kernel_collection_builder_h
#define kernel_collection_builder_h
#include <Availability.h>
#include <CoreFoundation/CFArray.h>
#include <CoreFoundation/CFData.h>
#include <CoreFoundation/CFDictionary.h>
#include <CoreFoundation/CFString.h>
#include <stdint.h>
#include <sys/types.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef CF_ENUM(uint32_t, CollectionKind) {
unknownKC = 0,
baseKC = 1,
auxKC = 2,
pageableKC = 3,
};
typedef CF_ENUM(uint32_t, FileResultKind) {
unknownFileResult = 0,
kernelCollection = 1,
};
typedef CF_ENUM(uint32_t, StripMode) {
unknownStripMode = 0,
stripNone = 1, stripAll = 2, stripAllKexts = 3, };
typedef CF_ENUM(uint32_t, BinaryStripMode) {
binaryUnknownStripMode = 0,
binaryStripNone = 1, binaryStripExports = 2, binaryStripLocals = 3, binaryStripAll = 4, };
typedef CF_ENUM(uint32_t, ProgressKind) {
unknownProgress = 0,
layout = 1,
generateHeader = 2,
copyInputs = 3,
applySplitSeg = 4,
generatePrelinkInfo = 5,
processFixups = 6,
optimizeStubs = 7,
optimizeLinkedit = 8,
writeFixups = 9,
emitFile = 10
};
struct BuildOptions_v1
{
uint64_t version; CollectionKind collectionKind;
StripMode stripMode;
const CFStringRef arch;
bool verboseDiagnostics;
};
struct CollectionFileResult_v1
{
uint64_t version; FileResultKind fileKind;
const CFDataRef data; const CFArrayRef warnings; };
struct KextFileData_v1
{
uint64_t version; const CFStringRef kextpath;
const CFDataRef kextdata;
const CFArrayRef dependencies;
const CFStringRef bundleID;
const CFStringRef bundlePath;
CFDictionaryRef plist;
BinaryStripMode stripMode;
};
typedef void (*ProgressCallback)(const char* message, ProgressKind kind);
struct KernelCollectionBuilder;
__API_AVAILABLE(macos(10.14))
void getVersion(uint32_t *major, uint32_t *minor);
__API_AVAILABLE(macos(10.14))
struct KernelCollectionBuilder* createKernelCollectionBuilder(const struct BuildOptions_v1* options);
__API_AVAILABLE(macos(10.14))
bool addKernelFile(struct KernelCollectionBuilder* builder, const CFStringRef path, const CFDataRef data);
__API_AVAILABLE(macos(10.14))
bool addKextDataFile(struct KernelCollectionBuilder* builder, const struct KextFileData_v1* fileData);
__API_AVAILABLE(macos(10.14))
bool addInterfaceFile(struct KernelCollectionBuilder* builder, const CFStringRef path, const CFDataRef data);
__API_AVAILABLE(macos(10.14))
bool addCollectionFile(struct KernelCollectionBuilder* builder, const CFStringRef path, const CFDataRef data, CollectionKind kind);
__API_AVAILABLE(macos(10.14))
bool addSegmentData(struct KernelCollectionBuilder* builder, const CFStringRef segmentName, const CFStringRef sectionName, const CFDataRef data);
__API_AVAILABLE(macos(10.14))
bool addPrelinkInfo(struct KernelCollectionBuilder* builder, const CFDictionaryRef extraData);
__API_AVAILABLE(macos(10.14))
void setProgressCallback(const ProgressCallback callback);
__API_AVAILABLE(macos(10.14))
bool runKernelCollectionBuilder(struct KernelCollectionBuilder* builder);
__API_AVAILABLE(macos(10.14))
const char* const* getErrors(const struct KernelCollectionBuilder* builder, uint64_t* errorCount);
__API_AVAILABLE(macos(10.14))
CFDictionaryRef getKextErrors(const struct KernelCollectionBuilder* builder);
__API_AVAILABLE(macos(10.14))
const struct CollectionFileResult_v1* const* getCollectionFileResults(struct KernelCollectionBuilder* builder, uint64_t* resultCount);
__API_AVAILABLE(macos(10.14))
void destroyKernelCollectionBuilder(struct KernelCollectionBuilder* builder);
#ifdef __cplusplus
}
#endif
#endif