this repo has no description
1project(darling-src)
2
3unset(CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES)
4unset(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES)
5
6cmake_policy(SET CMP0005 NEW)
7
8set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
9include(mig)
10include(pyc)
11
12# Force linker settings to match 3.30.5 behavior
13# Apple's ld64 in cctools does not support the `--dependency-file` flag
14set(CMAKE_CXX_LINKER_DEPFILE_SUPPORTED FALSE)
15set(CMAKE_C_LINKER_DEPFILE_SUPPORTED FALSE)
16set(CMAKE_CXX_LINK_DEPENDS_USE_LINKER FALSE)
17set(CMAKE_C_LINK_DEPENDS_USE_LINKER FALSE)
18
19set(CMAKE_CXX_LINK_LIBRARY_USING_WHOLE_ARCHIVE_SUPPORTED FALSE)
20set(CMAKE_C_LINK_LIBRARY_USING_WHOLE_ARCHIVE_SUPPORTED FALSE)
21
22set(CMAKE_CXX_LINKER_INFORMATION_LOADED FALSE)
23set(CMAKE_C_LINKER_INFORMATION_LOADED FALSE)
24set(CMAKE_CXX_USE_LINKER_INFORMATION FALSE)
25set(CMAKE_C_USE_LINKER_INFORMATION FALSE)
26
27#
28# start core components
29#
30# projects included here are strictly necessary for basic executables to function at all.
31# it should be very clear which projects belong here. a project should only be here if it
32# is one of the following or is necessary for one of the following:
33# * darlingserver
34# * dyld
35# * mldr
36# * libSystem
37# * the host-side `darling` executable
38# this includes any build tools that are necessary to build any of those projects.
39#
40# these projects are always built
41#
42
43set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME "core")
44
45#add_subdirectory(external/xcbuild)
46add_subdirectory(bsdln)
47
48add_definitions(
49 -DDARLING
50)
51
52set(DARLING TRUE)
53
54execute_process(
55 COMMAND git rev-parse --abbrev-ref HEAD
56 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
57 OUTPUT_VARIABLE GIT_BRANCH
58 OUTPUT_STRIP_TRAILING_WHITESPACE
59)
60execute_process(
61 COMMAND git log -1 --format=%h
62 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
63 OUTPUT_VARIABLE GIT_COMMIT_HASH
64 OUTPUT_STRIP_TRAILING_WHITESPACE
65)
66
67configure_file(include/darling-config.h.in include/darling-config.h)
68include_directories("${CMAKE_CURRENT_BINARY_DIR}/include")
69include_directories("${CMAKE_CURRENT_SOURCE_DIR}/include")
70
71include(compiler_include)
72GetCompilerInclude(COMPILER_INC_PATH)
73message(STATUS "Compiler include path detected as ${COMPILER_INC_PATH}")
74include_directories(SYSTEM ${COMPILER_INC_PATH})
75
76find_package(BISON)
77find_package(FLEX)
78
79set(DARLING_SDK_RELATIVE_PATH "Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk")
80set(DARLING_ROOT_RELATIVE_TO_SDK "../../../../../..")
81
82add_subdirectory(external/cctools-port/cctools/ld64/src)
83add_subdirectory(external/cctools-port/cctools/ar)
84#add_subdirectory(external/cctools-port/cctools/as)
85add_subdirectory(external/cctools-port/cctools/misc)
86
87#add_subdirectory(util)
88#add_subdirectory(libmach-o)
89#add_subdirectory(libdyld)
90add_subdirectory(buildtools)
91add_subdirectory(hosttools)
92add_subdirectory(libelfloader/wrapgen)
93# add the Linux build of libsimple now
94add_subdirectory(libsimple "${CMAKE_CURRENT_BINARY_DIR}/libsimple-linux")
95add_subdirectory(external/darlingserver)
96add_subdirectory(startup)
97
98include_directories(${CMAKE_SOURCE_DIR}/basic-headers)
99
100add_subdirectory(external/bootstrap_cmds)
101
102add_definitions(
103 -D__APPLE__
104 -D__DYNAMIC__
105 -D__MACH__
106 -D_DARWIN_C_SOURCE
107 -D_POSIX_C_SOURCE
108 -DDARWIN
109 -DTARGET_OS_MAC=1
110 -DPLATFORM_MacOSX
111)
112
113set(CMAKE_AR "${CMAKE_BINARY_DIR}/src/external/cctools-port/cctools/ar/${APPLE_TARGET_TRIPLET_PRIMARY}-ar")
114set(CMAKE_RANLIB "${CMAKE_BINARY_DIR}/src/external/cctools-port/cctools/ar/${APPLE_TARGET_TRIPLET_PRIMARY}-ranlib")
115#set(CMAKE_ASM_COMPILER "${CMAKE_BINARY_DIR}/src/external/cctools-port/cctools/as/${APPLE_TARGET_TRIPLET_PRIMARY}-as")
116
117# set macOS deployment version
118SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}")
119SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}")
120set(CMAKE_OBJC_FLAGS "${CMAKE_OBJC_FLAGS} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}")
121
122add_definitions(-target ${APPLE_TARGET_TRIPLET_PRIMARY})
123include(darling_lib)
124include(darling_static_lib)
125include(darling_bundle)
126
127file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/${DARLING_SDK_RELATIVE_PATH}/usr/include)
128
129include_directories(
130 ${CMAKE_SOURCE_DIR}/${DARLING_SDK_RELATIVE_PATH}/usr/include
131 ${CMAKE_BINARY_DIR}/${DARLING_SDK_RELATIVE_PATH}/usr/include
132 ${CMAKE_SOURCE_DIR}/framework-include
133 ${CMAKE_SOURCE_DIR}/framework-private-include
134)
135
136include_directories(AFTER
137 ${CMAKE_CURRENT_SOURCE_DIR}/external/lkm/include
138 ${CMAKE_CURRENT_SOURCE_DIR}/libDiagnosticMessagesClient/include
139 ${CMAKE_CURRENT_SOURCE_DIR}/libMobileGestalt/include
140 ${CMAKE_CURRENT_SOURCE_DIR}/lib/include
141
142 # necessary because this is the expected behavior when using `xml2-config --cflags`
143 # it adds `$sdk_dir/libxml2` to the include path
144 ${CMAKE_SOURCE_DIR}/${DARLING_SDK_RELATIVE_PATH}/usr/include/libxml2
145 ${CMAKE_BINARY_DIR}/${DARLING_SDK_RELATIVE_PATH}/usr/include/libxml2
146)
147
148# add the Mach-O build of libsimple now
149add_subdirectory(libsimple "${CMAKE_CURRENT_BINARY_DIR}/libsimple-darling")
150
151add_subdirectory(external/libkqueue)
152
153# needs to come before libplatform because it generates mig headers that libplatform needs
154add_subdirectory(external/xnu/darling/src/libsystem_kernel)
155
156add_subdirectory(external/libplatform)
157add_subdirectory(external/libpthread)
158add_subdirectory(external/libtrace)
159add_subdirectory(external/libc)
160add_subdirectory(vchroot)
161
162add_subdirectory(lib)
163
164# libstdc++ doesn't use the libc++ headers included below
165add_subdirectory(external/libstdcxx)
166
167include_directories(BEFORE
168 ${CMAKE_SOURCE_DIR}/src/external/libcxx/include
169)
170
171add_definitions(-D_LIBC_NO_FEATURE_VERIFICATION)
172
173add_subdirectory(launchd)
174add_subdirectory(libm)
175add_subdirectory(external/dyld)
176add_subdirectory(external/libxpc)
177add_subdirectory(libgcc)
178add_subdirectory(external/copyfile)
179add_subdirectory(external/Libinfo)
180add_subdirectory(external/compiler-rt/lib/builtins)
181add_subdirectory(external/libnotify)
182add_subdirectory(duct/src)
183add_subdirectory(external/syslog)
184add_subdirectory(external/libclosure)
185add_subdirectory(external/keymgr)
186add_subdirectory(external/libunwind)
187add_subdirectory(external/libmalloc)
188add_subdirectory(external/coretls)
189add_subdirectory(libsystem_coreservices)
190add_subdirectory(external/removefile)
191add_subdirectory(quarantine)
192add_subdirectory(sandbox)
193add_subdirectory(external/corecrypto)
194add_subdirectory(external/commoncrypto)
195add_subdirectory(networkextension)
196add_subdirectory(libcache)
197add_subdirectory(external/configd)
198add_subdirectory(external/libsystem)
199add_subdirectory(external/objc4/runtime)
200add_subdirectory(external/corefoundation)
201add_subdirectory(external/icu/icuSources)
202add_subdirectory(external/csu)
203add_subdirectory(external/libresolv)
204add_subdirectory(external/usertemplate)
205add_subdirectory(external/bsm)
206add_subdirectory(external/zlib)
207# shellspawn can actually spawn any executable we want within the prefix,
208# so we include it in core to allow executables to be executed with the `darling` command.
209add_subdirectory(shellspawn)
210
211# typically considered CLI components, but required by launchctl (which is necessary for launchd to bootstrap)
212add_subdirectory(external/libedit)
213add_subdirectory(external/ncurses)
214
215#
216# end core components
217#
218# the rest of the projects are not all neatly separated like the core components are because
219# some projects build multiple targets which may be part of different components
220#
221
222if (COMPONENT_system)
223 set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME "system")
224
225 add_subdirectory(external/libiconv)
226 add_subdirectory(external/bzip2)
227 add_subdirectory(external/libressl-2.8.3)
228 add_subdirectory(external/libarchive/libarchive)
229 add_subdirectory(external/liblzma)
230 add_subdirectory(external/OpenDirectory)
231 add_subdirectory(external/openssl_certificates)
232 add_subdirectory(external/bash)
233 add_subdirectory(external/zsh)
234 add_subdirectory(external/tcsh)
235 add_subdirectory(external/files)
236 add_subdirectory(external/crontabs)
237 add_subdirectory(external/swift)
238endif()
239
240if (COMPONENT_cli)
241 set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME "cli")
242
243 add_subdirectory(external/darling-dmg)
244 add_subdirectory(external/libutil)
245 add_subdirectory(xtrace)
246 add_subdirectory(external/libxslt)
247 add_subdirectory(external/openssl/src)
248 add_subdirectory(external/nghttp2)
249 add_subdirectory(external/passwordserver_sasl)
250 add_subdirectory(external/curl)
251 add_subdirectory(external/OpenLDAP)
252 add_subdirectory(external/pcre)
253 add_subdirectory(external/libtelnet)
254 add_subdirectory(external/remote_cmds)
255 add_subdirectory(external/IOKitTools)
256 add_subdirectory(external/apr)
257 add_subdirectory(xcselect)
258 add_subdirectory(external/file/file)
259 add_subdirectory(external/shell_cmds)
260 add_subdirectory(external/file_cmds)
261 add_subdirectory(external/text_cmds)
262 add_subdirectory(external/adv_cmds)
263 add_subdirectory(external/network_cmds)
264 add_subdirectory(external/system_cmds)
265 add_subdirectory(external/mail_cmds)
266 add_subdirectory(external/doc_cmds)
267 add_subdirectory(external/basic_cmds)
268 add_subdirectory(external/misc_cmds)
269 add_subdirectory(external/patch_cmds)
270 add_subdirectory(external/less)
271 add_subdirectory(external/grep)
272 add_subdirectory(external/awk)
273 add_subdirectory(external/groff)
274 add_subdirectory(external/nano)
275 add_subdirectory(external/man)
276 add_subdirectory(external/bc)
277 add_subdirectory(external/zip)
278 add_subdirectory(external/installer)
279 add_subdirectory(external/bind9)
280 add_subdirectory(external/netcat)
281 add_subdirectory(external/gpatch)
282 add_subdirectory(external/gnudiff)
283 add_subdirectory(external/openssh)
284 add_subdirectory(external/top)
285 add_subdirectory(external/screen)
286 add_subdirectory(unxip)
287 add_subdirectory(external/rsync)
288 add_subdirectory(external/DSTools)
289 add_subdirectory(libsysmon)
290 add_subdirectory(PlistBuddy)
291 add_subdirectory(libquit)
292 add_subdirectory(external/lzfse)
293 add_subdirectory(clt)
294 add_subdirectory(diskutil)
295 add_subdirectory(ditto)
296
297 # these aren't used by anything we build (they're just included because they're also present in macOS)
298 # TODO: maybe we should introduce another component (e.g. `lib_stock`) for libraries we don't need but are expected in a stock macOS installation.
299 add_subdirectory(external/libressl-2.2.9)
300 add_subdirectory(external/libressl-2.5.5)
301 add_subdirectory(external/libressl-2.6.5)
302endif()
303
304if (COMPONENT_python OR COMPONENT_ruby)
305 set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME "ffi")
306 add_subdirectory(external/libffi)
307endif()
308
309if (COMPONENT_cli_dev)
310 set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME "cli_dev")
311 add_subdirectory(libgmalloc)
312endif()
313
314if (COMPONENT_cli OR COMPONENT_dev_gui_common)
315 set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME "cli_gui_common")
316
317 add_subdirectory(external/libxml2)
318 add_subdirectory(external/foundation)
319 add_subdirectory(external/cfnetwork/src)
320 add_subdirectory(external/sqlite)
321 add_subdirectory(external/openpam)
322 add_subdirectory(external/energytrace)
323 add_subdirectory(external/xnu/libkern/kxld)
324 add_subdirectory(external/IOKitUser)
325 add_subdirectory(external/xar)
326 add_subdirectory(libpmenergy)
327 add_subdirectory(external/DirectoryService)
328 add_subdirectory(libacm)
329 add_subdirectory(libaks)
330 add_subdirectory(libcompression)
331 add_subdirectory(external/Heimdal)
332 add_subdirectory(libDiagnosticMessagesClient)
333 add_subdirectory(libsandbox)
334 add_subdirectory(opendirectory_internal)
335 add_subdirectory(external/fmdb)
336 add_subdirectory(external/libnetwork)
337 add_subdirectory(libMobileGestalt)
338 add_subdirectory(external/MITKerberosShim)
339 add_subdirectory(MobileKeyBag)
340endif()
341
342if (COMPONENT_iokitd)
343 set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME iokitd)
344 add_subdirectory(external/iokitd)
345endif()
346
347if (COMPONENT_dev_gui_common)
348 set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME "cli_dev_gui_common")
349
350 add_subdirectory(libaccessibility)
351 add_subdirectory(external/openjdk) # *should* be in `cli` component, but requires AppKit
352endif()
353
354if (COMPONENT_cli_extra)
355 set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME "cli_extra")
356
357 add_subdirectory(external/gnutar/gnutar)
358endif()
359
360if (COMPONENT_gui)
361 set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME "gui")
362
363 add_subdirectory(external/cocotron)
364
365 add_subdirectory(CoreAudio)
366 add_subdirectory(external/cups)
367 add_subdirectory(pboard)
368
369 # not currently used by anything we build
370 add_subdirectory(external/dbuskit)
371endif()
372
373if (COMPONENT_python)
374 set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME "python")
375
376 add_subdirectory(external/python_modules)
377 add_subdirectory(external/python/2.7/Python-2.7.16)
378endif()
379
380if (COMPONENT_cli OR COMPONENT_python)
381 set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME "cli_python_common")
382
383 add_subdirectory(external/BerkeleyDB)
384 add_subdirectory(external/expat)
385endif()
386
387if (COMPONENT_gui_frameworks AND COMPONENT_gui_stubs AND COMPONENT_python)
388 set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME "pyobjc")
389
390 # TODO: pyobjc should only build individual modules if the respective components are enabled.
391 # right now, it's all-or-nothing.
392 add_subdirectory(external/pyobjc)
393endif()
394
395if (COMPONENT_ruby)
396 set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME "ruby")
397
398 add_subdirectory(external/ruby)
399endif()
400
401if (COMPONENT_perl)
402 set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME "perl")
403
404 add_subdirectory(external/perl)
405endif()
406
407#add_subdirectory(external/mDNSResponder)
408#add_subdirectory(external/OpenAL)
409#add_subdirectory(VideoDecodeAcceleration)
410#add_subdirectory(external/glut)
411
412# not a core component, but we always add it regardless of the components that are enabled;
413# it has its own component checks to determine which libraries to generate wrappers for.
414add_subdirectory(native)
415
416# has its own component checks
417add_subdirectory(external/vim)
418
419# has its own component checks
420add_subdirectory(tools)
421
422# these have their own component checks on a per-framework basis
423add_subdirectory(frameworks)
424add_subdirectory(private-frameworks)
425
426# /Applications
427#add_subdirectory(external/TextEdit)
428
429# Subprojects after this line need C++ headers
430
431include_directories(BEFORE
432 ${CMAKE_CURRENT_SOURCE_DIR}/external/libcxxabi/include
433)
434
435#
436# start core components with C++
437#
438
439set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME "core")
440
441add_subdirectory(external/libcxxabi)
442add_subdirectory(external/libcxx)
443
444add_subdirectory(external/libdispatch)
445add_subdirectory(external/cctools)
446
447#
448# end core components with C++
449#
450
451if (COMPONENT_cli OR COMPONENT_dev_gui_common)
452 set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME "cli_gui_common")
453
454 add_subdirectory(external/SmartCardServices)
455 add_subdirectory(external/security)
456 add_subdirectory(external/SecurityTokend)
457endif()
458
459if (COMPONENT_cli)
460 set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME "cli")
461
462 add_subdirectory(external/dtrace)
463 add_subdirectory(external/libauto)
464endif()
465
466if (COMPONENT_dev_gui_common)
467 set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME "cli_dev_gui_common")
468
469 add_subdirectory(external/metal)
470endif()
471
472if (COMPONENT_jsc OR COMPONENT_webkit)
473 set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME "jsc_webkit_common")
474
475 add_subdirectory(external/WTF)
476 add_subdirectory(external/bmalloc)
477endif()
478
479if (COMPONENT_jsc)
480 set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME "jsc")
481
482 add_subdirectory(external/JavaScriptCore)
483endif()
484
485#add_subdirectory(external/WebCore)