forked from mirrors/nixpkgs
Merge pull request #227765 from zhaofengli/darling
darling: init at unstable-2023-05-02
This commit is contained in:
commit
6a751fe806
|
@ -153,6 +153,7 @@
|
||||||
./programs/cnping.nix
|
./programs/cnping.nix
|
||||||
./programs/command-not-found/command-not-found.nix
|
./programs/command-not-found/command-not-found.nix
|
||||||
./programs/criu.nix
|
./programs/criu.nix
|
||||||
|
./programs/darling.nix
|
||||||
./programs/dconf.nix
|
./programs/dconf.nix
|
||||||
./programs/digitalbitbox/default.nix
|
./programs/digitalbitbox/default.nix
|
||||||
./programs/dmrconfig.nix
|
./programs/dmrconfig.nix
|
||||||
|
|
21
nixos/modules/programs/darling.nix
Normal file
21
nixos/modules/programs/darling.nix
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
cfg = config.programs.darling;
|
||||||
|
in {
|
||||||
|
options = {
|
||||||
|
programs.darling = {
|
||||||
|
enable = lib.mkEnableOption (lib.mdDoc "Darling, a Darwin/macOS compatibility layer for Linux");
|
||||||
|
package = lib.mkPackageOptionMD pkgs "darling" {};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
security.wrappers.darling = {
|
||||||
|
source = lib.getExe cfg.package;
|
||||||
|
owner = "root";
|
||||||
|
group = "root";
|
||||||
|
setuid = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -180,6 +180,7 @@ in {
|
||||||
cups-pdf = handleTest ./cups-pdf.nix {};
|
cups-pdf = handleTest ./cups-pdf.nix {};
|
||||||
custom-ca = handleTest ./custom-ca.nix {};
|
custom-ca = handleTest ./custom-ca.nix {};
|
||||||
croc = handleTest ./croc.nix {};
|
croc = handleTest ./croc.nix {};
|
||||||
|
darling = handleTest ./darling.nix {};
|
||||||
deepin = handleTest ./deepin.nix {};
|
deepin = handleTest ./deepin.nix {};
|
||||||
deluge = handleTest ./deluge.nix {};
|
deluge = handleTest ./deluge.nix {};
|
||||||
dendrite = handleTest ./matrix/dendrite.nix {};
|
dendrite = handleTest ./matrix/dendrite.nix {};
|
||||||
|
|
44
nixos/tests/darling.nix
Normal file
44
nixos/tests/darling.nix
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
import ./make-test-python.nix ({ pkgs, lib, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
# Well, we _can_ cross-compile from Linux :)
|
||||||
|
hello = pkgs.runCommand "hello" {
|
||||||
|
sdk = "${pkgs.darling.sdk}/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk";
|
||||||
|
nativeBuildInputs = with pkgs.llvmPackages_latest; [ clang-unwrapped lld ];
|
||||||
|
src = pkgs.writeText "hello.c" ''
|
||||||
|
#include <stdio.h>
|
||||||
|
int main() {
|
||||||
|
printf("Hello, Darling!\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
} ''
|
||||||
|
clang \
|
||||||
|
-target x86_64-apple-darwin \
|
||||||
|
-fuse-ld=lld \
|
||||||
|
-nostdinc -nostdlib \
|
||||||
|
-mmacosx-version-min=10.15 \
|
||||||
|
--sysroot $sdk \
|
||||||
|
-isystem $sdk/usr/include \
|
||||||
|
-L $sdk/usr/lib -lSystem \
|
||||||
|
$src -o $out
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
{
|
||||||
|
name = "darling";
|
||||||
|
|
||||||
|
meta.maintainers = with lib.maintainers; [ zhaofengli ];
|
||||||
|
|
||||||
|
nodes.machine = {
|
||||||
|
programs.darling.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
testScript = ''
|
||||||
|
start_all()
|
||||||
|
|
||||||
|
# Darling holds stdout until the server is shutdown
|
||||||
|
machine.succeed("darling ${hello} >hello.out")
|
||||||
|
machine.succeed("grep Hello hello.out")
|
||||||
|
machine.succeed("darling shutdown")
|
||||||
|
'';
|
||||||
|
})
|
231
pkgs/applications/emulators/darling/default.nix
Normal file
231
pkgs/applications/emulators/darling/default.nix
Normal file
|
@ -0,0 +1,231 @@
|
||||||
|
{ clangStdenv
|
||||||
|
, lib
|
||||||
|
, runCommandWith
|
||||||
|
, writeShellScript
|
||||||
|
, fetchFromGitHub
|
||||||
|
, fetchpatch
|
||||||
|
|
||||||
|
, freetype
|
||||||
|
, libjpeg
|
||||||
|
, libpng
|
||||||
|
, libtiff
|
||||||
|
, giflib
|
||||||
|
, libX11
|
||||||
|
, libXext
|
||||||
|
, libXrandr
|
||||||
|
, libXcursor
|
||||||
|
, libxkbfile
|
||||||
|
, cairo
|
||||||
|
, libglvnd
|
||||||
|
, fontconfig
|
||||||
|
, dbus
|
||||||
|
, libGLU
|
||||||
|
, fuse
|
||||||
|
, ffmpeg
|
||||||
|
, pulseaudio
|
||||||
|
|
||||||
|
, makeWrapper
|
||||||
|
, python2
|
||||||
|
, python3
|
||||||
|
, cmake
|
||||||
|
, ninja
|
||||||
|
, pkg-config
|
||||||
|
, bison
|
||||||
|
, flex
|
||||||
|
|
||||||
|
, libbsd
|
||||||
|
, openssl
|
||||||
|
|
||||||
|
, xdg-user-dirs
|
||||||
|
|
||||||
|
, addOpenGLRunpath
|
||||||
|
|
||||||
|
# Whether to pre-compile Python 2 bytecode for performance.
|
||||||
|
, compilePy2Bytecode ? false
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
stdenv = clangStdenv;
|
||||||
|
|
||||||
|
# The build system invokes clang to compile Darwin executables.
|
||||||
|
# In this case, our cc-wrapper must not be used.
|
||||||
|
ccWrapperBypass = runCommandWith {
|
||||||
|
inherit stdenv;
|
||||||
|
name = "cc-wrapper-bypass";
|
||||||
|
runLocal = false;
|
||||||
|
derivationArgs = {
|
||||||
|
template = writeShellScript "template" ''
|
||||||
|
for (( i=1; i<=$#; i++)); do
|
||||||
|
j=$((i+1))
|
||||||
|
if [[ "''${!i}" == "-target" && "''${!j}" == *"darwin"* ]]; then
|
||||||
|
# their flags must take precedence
|
||||||
|
exec @unwrapped@ "$@" $NIX_CFLAGS_COMPILE
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
exec @wrapped@ "$@"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
} ''
|
||||||
|
unwrapped_bin=${stdenv.cc.cc}/bin
|
||||||
|
wrapped_bin=${stdenv.cc}/bin
|
||||||
|
|
||||||
|
mkdir -p $out/bin
|
||||||
|
|
||||||
|
unwrapped=$unwrapped_bin/$CC wrapped=$wrapped_bin/$CC \
|
||||||
|
substituteAll $template $out/bin/$CC
|
||||||
|
unwrapped=$unwrapped_bin/$CXX wrapped=$wrapped_bin/$CXX \
|
||||||
|
substituteAll $template $out/bin/$CXX
|
||||||
|
|
||||||
|
chmod +x $out/bin/$CC $out/bin/$CXX
|
||||||
|
'';
|
||||||
|
|
||||||
|
wrappedLibs = [
|
||||||
|
# To find all of them: rg -w wrap_elf
|
||||||
|
|
||||||
|
# src/native/CMakeLists.txt
|
||||||
|
freetype
|
||||||
|
libjpeg
|
||||||
|
libpng
|
||||||
|
libtiff
|
||||||
|
giflib
|
||||||
|
libX11
|
||||||
|
libXext
|
||||||
|
libXrandr
|
||||||
|
libXcursor
|
||||||
|
libxkbfile
|
||||||
|
cairo
|
||||||
|
libglvnd
|
||||||
|
fontconfig
|
||||||
|
dbus
|
||||||
|
libGLU
|
||||||
|
|
||||||
|
# src/external/darling-dmg/CMakeLists.txt
|
||||||
|
fuse
|
||||||
|
|
||||||
|
# src/CoreAudio/CMakeLists.txt
|
||||||
|
ffmpeg
|
||||||
|
pulseaudio
|
||||||
|
];
|
||||||
|
in stdenv.mkDerivation {
|
||||||
|
pname = "darling";
|
||||||
|
version = "unstable-2023-05-02";
|
||||||
|
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "darlinghq";
|
||||||
|
repo = "darling";
|
||||||
|
rev = "557e7e9dece394a3f623825679474457e5b64fd0";
|
||||||
|
fetchSubmodules = true;
|
||||||
|
hash = "sha256-SOoLaV7wg33qRHPQXkdMvrY++CvoG85kwd6IU6DkYa0=";
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs = [ "out" "sdk" ];
|
||||||
|
|
||||||
|
postPatch = ''
|
||||||
|
# We have to be careful - Patching everything indiscriminately
|
||||||
|
# would affect Darwin scripts as well
|
||||||
|
chmod +x src/external/bootstrap_cmds/migcom.tproj/mig.sh
|
||||||
|
patchShebangs \
|
||||||
|
src/external/bootstrap_cmds/migcom.tproj/mig.sh \
|
||||||
|
src/external/darlingserver/scripts \
|
||||||
|
src/external/openssl_certificates/scripts
|
||||||
|
|
||||||
|
substituteInPlace src/startup/CMakeLists.txt --replace SETUID ""
|
||||||
|
substituteInPlace src/external/basic_cmds/CMakeLists.txt --replace SETGID ""
|
||||||
|
'';
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
bison
|
||||||
|
ccWrapperBypass
|
||||||
|
cmake
|
||||||
|
flex
|
||||||
|
makeWrapper
|
||||||
|
ninja
|
||||||
|
pkg-config
|
||||||
|
python3
|
||||||
|
]
|
||||||
|
++ lib.optional compilePy2Bytecode python2;
|
||||||
|
buildInputs = wrappedLibs ++ [
|
||||||
|
libbsd
|
||||||
|
openssl
|
||||||
|
stdenv.cc.libc.linuxHeaders
|
||||||
|
];
|
||||||
|
|
||||||
|
# Breaks valid paths like
|
||||||
|
# Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include
|
||||||
|
dontFixCmake = true;
|
||||||
|
|
||||||
|
# src/external/objc4 forces OBJC_IS_DEBUG_BUILD=1, which conflicts with NDEBUG
|
||||||
|
# TODO: Fix in a better way
|
||||||
|
cmakeBuildType = " ";
|
||||||
|
|
||||||
|
cmakeFlags = [
|
||||||
|
"-DTARGET_i386=OFF"
|
||||||
|
"-DCOMPILE_PY2_BYTECODE=${if compilePy2Bytecode then "ON" else "OFF"}"
|
||||||
|
"-DDARLINGSERVER_XDG_USER_DIR_CMD=${xdg-user-dirs}/bin/xdg-user-dir"
|
||||||
|
];
|
||||||
|
|
||||||
|
env.NIX_CFLAGS_COMPILE = "-Wno-macro-redefined -Wno-unused-command-line-argument";
|
||||||
|
|
||||||
|
# Linux .so's are dlopen'd by wrapgen during the build
|
||||||
|
env.LD_LIBRARY_PATH = lib.makeLibraryPath wrappedLibs;
|
||||||
|
|
||||||
|
# Breaks shebangs of Darwin scripts
|
||||||
|
dontPatchShebangs = true;
|
||||||
|
|
||||||
|
postInstall = ''
|
||||||
|
# Install the SDK as a separate output
|
||||||
|
mkdir -p $sdk
|
||||||
|
|
||||||
|
sdkDir=$(readlink -f ../Developer)
|
||||||
|
|
||||||
|
while read -r path; do
|
||||||
|
dst="$sdk/Developer/''${path#$sdkDir}"
|
||||||
|
|
||||||
|
if [[ -L "$path" ]]; then
|
||||||
|
target=$(readlink -m "$path")
|
||||||
|
if [[ -e "$target" && "$target" == "$NIX_BUILD_TOP"* && "$target" != "$sdkDir"* ]]; then
|
||||||
|
# dereference
|
||||||
|
cp -r -L "$path" "$dst"
|
||||||
|
elif [[ -e "$target" ]]; then
|
||||||
|
# preserve symlink
|
||||||
|
cp -d "$path" "$dst"
|
||||||
|
else
|
||||||
|
# ignore symlink
|
||||||
|
>&2 echo "Ignoring symlink $path -> $target"
|
||||||
|
fi
|
||||||
|
elif [[ -f $path ]]; then
|
||||||
|
cp "$path" "$dst"
|
||||||
|
elif [[ -d $path ]]; then
|
||||||
|
mkdir -p "$dst"
|
||||||
|
fi
|
||||||
|
done < <(find $sdkDir)
|
||||||
|
|
||||||
|
mkdir -p $sdk/bin
|
||||||
|
cp src/external/cctools-port/cctools/ld64/src/*-ld $sdk/bin
|
||||||
|
cp src/external/cctools-port/cctools/ar/*-{ar,ranlib} $sdk/bin
|
||||||
|
'';
|
||||||
|
|
||||||
|
postFixup = ''
|
||||||
|
echo "Checking for references to $NIX_STORE in Darling root..."
|
||||||
|
|
||||||
|
set +e
|
||||||
|
grep -r --exclude=mldr "$NIX_STORE" $out/libexec/darling
|
||||||
|
ret=$?
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [[ $ret == 0 ]]; then
|
||||||
|
echo "Found references to $NIX_STORE in Darling root (see above)"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
patchelf --add-rpath "${lib.makeLibraryPath wrappedLibs}:${addOpenGLRunpath.driverLink}/lib" \
|
||||||
|
$out/libexec/darling/usr/libexec/darling/mldr
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
description = "Open-source Darwin/macOS emulation layer for Linux";
|
||||||
|
homepage = "https://www.darlinghq.org";
|
||||||
|
license = licenses.gpl3Plus;
|
||||||
|
maintainers = with maintainers; [ zhaofengli ];
|
||||||
|
platforms = [ "x86_64-linux" ];
|
||||||
|
};
|
||||||
|
}
|
|
@ -495,6 +495,8 @@ with pkgs;
|
||||||
|
|
||||||
dae = callPackage ../tools/networking/dae { };
|
dae = callPackage ../tools/networking/dae { };
|
||||||
|
|
||||||
|
darling = callPackage ../applications/emulators/darling { };
|
||||||
|
|
||||||
databricks-sql-cli = python3Packages.callPackage ../applications/misc/databricks-sql-cli { };
|
databricks-sql-cli = python3Packages.callPackage ../applications/misc/databricks-sql-cli { };
|
||||||
|
|
||||||
dhallDirectoryToNix = callPackage ../build-support/dhall/directory-to-nix.nix { };
|
dhallDirectoryToNix = callPackage ../build-support/dhall/directory-to-nix.nix { };
|
||||||
|
|
Loading…
Reference in a new issue