darwin.mk raw
1 OSX_MIN_VERSION=14.0
2 OSX_SDK_VERSION=14.0
3 XCODE_VERSION=26.1.1
4 XCODE_BUILD_ID=17B100
5 LLD_VERSION=711
6
7 OSX_SDK=$(SDK_PATH)/Xcode-$(XCODE_VERSION)-$(XCODE_BUILD_ID)-extracted-SDK-with-libcxx-headers
8
9 clang_prog=$(shell command -v clang)
10 clangxx_prog=$(shell command -v clang++)
11
12 darwin_AR=$(shell command -v llvm-ar)
13 darwin_NM=$(shell command -v llvm-nm)
14 darwin_OBJCOPY=$(shell command -v llvm-objcopy)
15 darwin_OBJDUMP=$(shell command -v llvm-objdump)
16 darwin_RANLIB=$(shell command -v llvm-ranlib)
17 darwin_STRIP=$(shell command -v llvm-strip)
18
19 # Flag explanations:
20 #
21 # -mlinker-version
22 #
23 # Ensures that modern linker features are enabled. See here for more
24 # details: https://github.com/bitcoin/bitcoin/pull/19407.
25 #
26 # -isysroot$(OSX_SDK) -nostdlibinc
27 #
28 # Disable default include paths built into the compiler as well as
29 # those normally included for libc and libc++. The only path that
30 # remains implicitly is the clang resource dir.
31 #
32 # -iwithsysroot / -iframeworkwithsysroot
33 #
34 # Adds the desired paths from the SDK
35 #
36 # -platform_version
37 #
38 # Indicate to the linker the platform, the oldest supported version,
39 # and the SDK used.
40 #
41 # -no_adhoc_codesign
42 #
43 # Disable adhoc codesigning (for now) when using LLVM tooling, to avoid
44 # non-determinism issues with the Identifier field.
45 #
46 # -Xclang -fno-cxx-modules
47 #
48 # Disable C++ modules. We don't use these, and modules cause definition issues
49 # in the SDK, where __has_feature(modules) is used to define USE_CLANG_TYPES,
50 # which is in turn used as an include guard.
51
52 darwin_CC=$(clang_prog) --target=$(host) \
53 -isysroot$(OSX_SDK) -nostdlibinc \
54 -iwithsysroot/usr/include -iframeworkwithsysroot/System/Library/Frameworks
55
56 darwin_CXX=$(clangxx_prog) --target=$(host) \
57 -isysroot$(OSX_SDK) -nostdlibinc \
58 -iwithsysroot/usr/include/c++/v1 \
59 -iwithsysroot/usr/include -iframeworkwithsysroot/System/Library/Frameworks
60
61 darwin_CFLAGS=-mmacos-version-min=$(OSX_MIN_VERSION)
62 darwin_CXXFLAGS=-mmacos-version-min=$(OSX_MIN_VERSION) -Xclang -fno-cxx-modules
63 darwin_LDFLAGS=-Wl,-platform_version,macos,$(OSX_MIN_VERSION),$(OSX_SDK_VERSION)
64
65 ifneq ($(build_os),darwin)
66 darwin_CFLAGS += -mlinker-version=$(LLD_VERSION)
67 darwin_CXXFLAGS += -mlinker-version=$(LLD_VERSION)
68 darwin_LDFLAGS += -Wl,-no_adhoc_codesign -fuse-ld=lld
69 endif
70
71 darwin_release_CFLAGS=-O2
72 darwin_release_CXXFLAGS=$(darwin_release_CFLAGS)
73
74 darwin_debug_CFLAGS=-O1 -g
75 darwin_debug_CXXFLAGS=$(darwin_debug_CFLAGS)
76
77 darwin_cmake_system_name=Darwin
78 # Darwin version, which corresponds to OSX_MIN_VERSION.
79 # See https://en.wikipedia.org/wiki/Darwin_(operating_system)
80 darwin_cmake_system_version=20.1
81