添加自定义macosx.internal SDK

时间:2018-08-02 09:14:16

标签: xcode xcodebuild darwin xnu

主要目标:我想要一个设置,可以通过将正确的SDK传递到xcodebuild中来使用标准SDK和经过修改的SDK进行内核开发。

构建MacOS X内核时,必须修改默认SDK。这些修改会干扰正常的应用开发。

Apple显然有一个macosx.internal SDK用于该目的(可能还有其他目的)。我可以以某种方式劫持SDKROOT = macosx.internal设置吗?

仅将macosx.internalmacosx.internal.sdk文件夹放入$(xcode-select -p)Platforms/MacOSX.platform/Developer/SDKs似乎并不成功。

我想念什么吗?

1 个答案:

答案 0 :(得分:0)

您可以尝试使用xnu-make(一个用于构建xnu的项目)。它充当独立的构建环境,并自动创建SDK的本地副本,而不用修改默认的SDK。请参见其Makefile中的以下行,这些行用于复制SDK并在Xcode中创建符号链接,以便可以使用它:

MACOSX_SDK = MacOSX10.11
...
#make a copy of the current sdk to the build directory and create a symlink in the Xcode SDKs directory
XCODE_SDKS_DIR := $(shell xcrun -sdk macosx --show-sdk-platform-path)/Developer/SDKs
MACOSX_SDK_SRC := $(XCODE_SDKS_DIR)/$(MACOSX_SDK).sdk
MACOSX_SDK_DST := $(CURDIR)/build/sdk/$(MACOSX_SDK)-xnu.sdk
MACOSX_SDK_LNK := $(XCODE_SDKS_DIR)/$(shell basename $(MACOSX_SDK_DST))
MACOSX_SDK_XNU := $(shell echo $(MACOSX_SDK) | tr A-Z a-z)-xnu

sdk:
ifeq ($(shell test -d $(MACOSX_SDK_SRC); echo $$?), 1)
    $(error "The SDK $(MACOSX_SDK) cannot be found, make sure that the latest Xcode version is installed")
endif
    mkdir -p $(MACOSX_SDK_DST)
    cd $(MACOSX_SDK_SRC) && rsync -rtpl . $(MACOSX_SDK_DST)
    plutil -replace CanonicalName -string $(MACOSX_SDK_XNU) $(MACOSX_SDK_DST)/SDKSettings.plist
    rm -f $(MACOSX_SDK_LNK)
    ln -sf $(MACOSX_SDK_DST) $(MACOSX_SDK_LNK)

我稍稍更新了Makefile以构建MacOSX10.13,并用较新的xnu代码源和支持库替换了.gitmodules,但是一旦完成这些操作,就无需修改本地SDK即可构建内核。

如果您不想使用xnu-make项目,也可以简单地将以上几行改编为脚本以复制SDK。