this repo has no description
at fixPythonPipStalling 228 lines 8.2 kB view raw
1cmake_minimum_required(VERSION 3.13) 2 3SET(CMAKE_SYSTEM_NAME Linux) 4SET(CMAKE_SYSTEM_PROCESSOR "x86-64") 5 6# This allows setting the compiler with -DCMAKE_C_COMPILER when configuring. 7if (NOT DEFINED CMAKE_C_COMPILER) 8 find_program(CMAKE_C_COMPILER NAMES 9 "clang" 10 "clang-4.0" 11 "clang-6.0" 12 "clang-7" 13 "clang-9" 14 "clang-10" 15 "clang-11" 16 "clang-12" 17 "clang-13" 18 "clang-14" 19 "clang-15" 20) 21endif(NOT DEFINED CMAKE_C_COMPILER) 22 23if (NOT DEFINED CMAKE_CXX_COMPILER) 24 find_program(CMAKE_CXX_COMPILER NAMES 25 "clang++" 26 "clang++-4.0" 27 "clang++-6.0" 28 "clang++-7" 29 "clang++-9" 30 "clang++-10" 31 "clang++-11" 32 "clang++-12" 33 "clang++-13" 34 "clang++-14" 35 "clang++-15" 36) 37endif(NOT DEFINED CMAKE_CXX_COMPILER) 38 39option(DARLING_NO_CCACHE "Disable ccache usage" OFF) 40 41find_program(CCACHE_PROGRAM ccache) 42if(CCACHE_PROGRAM AND NOT DARLING_NO_CCACHE) 43 set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}") 44endif() 45 46SET(CMAKE_SKIP_RPATH TRUE) 47 48# technically ignored by CMake when building on non-Apple platforms, but it's already a standard variable for the 49# SDK deployment target, so we'll just use it and then add it to the compiler flags manually 50set(CMAKE_OSX_DEPLOYMENT_TARGET 11.0 CACHE STRING "The version of macOS we're simulating") 51 52project(darling) 53 54enable_language(ASM) 55 56set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME "core") 57 58set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") 59include(clang_version_check) 60include(InstallSymlink) 61include(MacroEnsureOutOfSourceBuild) 62include(dsym) 63include(xcproj) 64include(architecture) 65include(create_symlink) 66 67set(CLANG_RECOMMENDED_MINIMUM_VERSION 11) 68clang_version_check(${CMAKE_C_COMPILER} c ${CLANG_RECOMMENDED_MINIMUM_VERSION}) 69clang_version_check(${CMAKE_CXX_COMPILER} cpp ${CLANG_RECOMMENDED_MINIMUM_VERSION}) 70 71MACRO_ENSURE_OUT_OF_SOURCE_BUILD() 72 73set(DARLING_TOP_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}") 74set(DARLING_NO_EXECUTABLES OFF) 75set(CMAKE_C_IMPLICIT_LINK_LIBRARIES "") 76set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "") 77 78if (${CMAKE_HOST_SYSTEM_PROCESSOR} MATCHES "i686|i386") 79 message(FATAL_ERROR "This software can only be built on x86-64 systems") 80endif (${CMAKE_HOST_SYSTEM_PROCESSOR} MATCHES "i686|i386") 81 82SET(IGNORED_WARNINGS "-Wno-nullability-completeness -Wno-deprecated-declarations -Wno-availability") 83 84if (${CMAKE_C_COMPILER_ID} STREQUAL "Clang" AND NOT ${CMAKE_C_COMPILER_VERSION} VERSION_LESS "3.9") 85 SET(IGNORED_WARNINGS "${IGNORED_WARNINGS} -Wno-expansion-to-defined") 86endif (${CMAKE_C_COMPILER_ID} STREQUAL "Clang" AND NOT ${CMAKE_C_COMPILER_VERSION} VERSION_LESS "3.9") 87 88if(${CMAKE_C_COMPILER_ID} STREQUAL "Clang" AND ${CMAKE_C_COMPILER_VERSION} VERSION_GREATER_EQUAL "11") 89 # newer Clang chokes on the idiomatic way to use CF_ENUM; e.g. like this: 90 # typedef CF_ENUM(int, MyEnum) { 91 # MY_ENUM_THING, 92 # MY_ENUM_OTHER_THING, 93 # # etc... 94 # } 95 set(IGNORED_WARNINGS "${IGNORED_WARNINGS} -Wno-elaborated-enum-base -Wno-undef-prefix") 96 set(ASM_IGNORED_WARNINGS "${ASM_IGNORED_WARNINGS} -Wno-undef-prefix") 97endif() 98 99SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${IGNORED_WARNINGS}") 100SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${IGNORED_WARNINGS}") 101set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} ${ASM_IGNORED_WARNINGS}") 102SET(CMAKE_C_FLAGS_DEBUG "-O0 -ggdb") 103SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -ggdb") 104 105# prevent object filename conflicts for two source files that differ only in extension (e.g. `object.c` and `object.m`) 106set(CMAKE_C_OUTPUT_EXTENSION ".c.o") 107set(CMAKE_CXX_OUTPUT_EXTENSION ".cpp.o") 108set(CMAKE_OBJC_OUTPUT_EXTENSION ".m.o") 109 110if(CMAKE_POSITION_INDEPENDENT_CODE) 111 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") 112 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC") 113 SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie") 114endif(CMAKE_POSITION_INDEPENDENT_CODE) 115 116enable_language(ASM-ATT) 117 118option(TARGET_i386 "Enable i386 slices" ON) 119option(TARGET_x86_64 "Enable x86_64 slices" ON) 120option(DEBIAN_PACKAGING "Packaging for Debian" OFF) 121option(ENABLE_TESTS "Install in-prefix unit tests" OFF) 122option(REGENERATE_SDK "Regenerate Header Files For Open Source SDK" OFF) 123 124if (DEBIAN_PACKAGING) 125 set(COMPONENTS_DEFAULT "all") 126else() 127 set(COMPONENTS_DEFAULT "stock") 128endif() 129 130set(COMPONENTS "${COMPONENTS_DEFAULT}" CACHE STRING "Choose which components of Darling to build") 131include(darling_parse_components) 132darling_parse_components("${COMPONENTS}") 133 134set(COMPILE_PY2_BYTECODE AUTO CACHE STRING "Pre-compile bytecode for Python 2 packages") 135set_property(CACHE COMPILE_PY2_BYTECODE PROPERTY STRINGS AUTO ON OFF) 136 137string(TOLOWER "${COMPILE_PY2_BYTECODE}" COMPILE_PY2_BYTECODE) 138 139if (COMPILE_PY2_BYTECODE STREQUAL "auto") 140 find_package(Python2 QUIET COMPONENTS Interpreter) 141 142 if (Python2_Interpreter_FOUND) 143 set(COMPILE_PY2_BYTECODE ON) 144 message("Found Python 2; enabling pre-compilation of Python bytecode") 145 else() 146 set(COMPILE_PY2_BYTECODE OFF) 147 message("Python 2 not available; bytecode compilation is disabled") 148 endif (Python2_Interpreter_FOUND) 149endif (COMPILE_PY2_BYTECODE STREQUAL "auto") 150 151if (COMPILE_PY2_BYTECODE) 152 find_package(Python2 REQUIRED COMPONENTS Interpreter) 153endif (COMPILE_PY2_BYTECODE) 154 155set(ENABLE_METAL AUTO CACHE STRING "Build Darling with Metal support") 156set_property(CACHE ENABLE_METAL PROPERTY STRINGS AUTO ON OFF) 157 158string(TOLOWER "${ENABLE_METAL}" BUILD_METAL) 159 160if(BUILD_METAL STREQUAL "auto") 161 # check if Vulkan and LLVM are available 162 find_program(LLVM_CONFIG_PROGRAM llvm-config) 163 find_package(Vulkan) 164 165 if(LLVM_CONFIG_PROGRAM AND Vulkan_FOUND) 166 set(BUILD_METAL ON) 167 message("Found required libraries; building with Metal support") 168 else() 169 set(BUILD_METAL OFF) 170 message("Did not find required libraries (Vulkan and LLVM); building without Metal support") 171 endif() 172endif() 173 174FindDsymutil() 175find_package(Setcap REQUIRED) 176 177# Missing CMakeLists.txt must trigger an error 178cmake_policy(SET CMP0014 NEW) 179 180generate_architecture() 181 182add_subdirectory(src) 183 184install(DIRECTORY DESTINATION libexec/darling/private) 185install(DIRECTORY DESTINATION libexec/darling/private/etc) 186install(DIRECTORY DESTINATION libexec/darling/private/var) 187install(DIRECTORY DESTINATION libexec/darling/private/tmp) 188InstallSymlink(private/etc ${CMAKE_INSTALL_PREFIX}/libexec/darling/etc) 189InstallSymlink(private/var ${CMAKE_INSTALL_PREFIX}/libexec/darling/var) 190 191install(FILES etc/resolv.conf 192 DESTINATION libexec/darling/private/etc) 193InstallSymlink(/Volumes/SystemRoot/etc/machine-id ${CMAKE_INSTALL_PREFIX}/libexec/darling/private/etc/machine-id) 194InstallSymlink(/Volumes/SystemRoot/etc/nsswitch.conf ${CMAKE_INSTALL_PREFIX}/libexec/darling/private/etc/nsswitch.conf) 195 196install(DIRECTORY DESTINATION libexec/darling/Volumes) 197install(DIRECTORY DESTINATION libexec/darling/Volumes/SystemRoot) 198InstallSymlink(/ ${CMAKE_INSTALL_PREFIX}/libexec/darling/Volumes/DarlingEmulatedDrive) 199 200install(DIRECTORY DESTINATION libexec/darling/proc) 201 202install(DIRECTORY DESTINATION libexec/darling/var/root) 203install(DIRECTORY DESTINATION libexec/darling/var/run) 204InstallSymlink(/dev/log ${CMAKE_INSTALL_PREFIX}/libexec/darling/var/run/syslog) 205 206install(DIRECTORY DESTINATION libexec/darling/usr) 207install(DIRECTORY DESTINATION libexec/darling/usr/local) 208install(DIRECTORY DESTINATION libexec/darling/usr/local/share) 209 210InstallSymlink(/Volumes/SystemRoot/dev ${CMAKE_INSTALL_PREFIX}/libexec/darling/dev) 211InstallSymlink(private/tmp ${CMAKE_INSTALL_PREFIX}/libexec/darling/tmp) 212 213InstallSymlink(/proc/self/mounts ${CMAKE_INSTALL_PREFIX}/libexec/darling/private/etc/mtab) 214#InstallSymlink(/Volumes/SystemRoot/etc/passwd ${CMAKE_INSTALL_PREFIX}/libexec/darling/private/etc/passwd) 215#InstallSymlink(/Volumes/SystemRoot/etc/group ${CMAKE_INSTALL_PREFIX}/libexec/darling/private/etc/group) 216InstallSymlink(/Volumes/SystemRoot/etc/localtime ${CMAKE_INSTALL_PREFIX}/libexec/darling/private/etc/localtime) 217 218InstallSymlink(/Volumes/SystemRoot/usr/share/zoneinfo ${CMAKE_INSTALL_PREFIX}/libexec/darling/usr/share/zoneinfo) 219 220install(DIRECTORY DESTINATION libexec/darling/Library/Preferences) 221 222if(NOT DEBIAN_PACKAGING) 223 install(CODE "execute_process(COMMAND bash ${DARLING_TOP_DIRECTORY}/tools/shutdown-user.sh)") 224endif(NOT DEBIAN_PACKAGING) 225 226add_custom_target(uninstall 227 COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/tools/uninstall 228 COMMENT "Uninstall Darling and kernel module")