darling: init at unstable-2023-05-02

This commit is contained in:
Zhaofeng Li 2023-05-01 17:39:19 -06:00
parent 120dd6a803
commit 925e670b55
2 changed files with 199 additions and 0 deletions

View file

@ -0,0 +1,197 @@
{ 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=";
};
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;
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" ];
};
}

View file

@ -493,6 +493,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 { };