darling: init at unstable-2023-05-02
This commit is contained in:
parent
120dd6a803
commit
925e670b55
2 changed files with 199 additions and 0 deletions
197
pkgs/applications/emulators/darling/default.nix
Normal file
197
pkgs/applications/emulators/darling/default.nix
Normal 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" ];
|
||||
};
|
||||
}
|
|
@ -493,6 +493,8 @@ with pkgs;
|
|||
|
||||
dae = callPackage ../tools/networking/dae { };
|
||||
|
||||
darling = callPackage ../applications/emulators/darling { };
|
||||
|
||||
databricks-sql-cli = python3Packages.callPackage ../applications/misc/databricks-sql-cli { };
|
||||
|
||||
dhallDirectoryToNix = callPackage ../build-support/dhall/directory-to-nix.nix { };
|
||||
|
|
Loading…
Reference in a new issue