Loading pkgs/by-name/fe/fex/package.nix +115 −0 Original line number Diff line number Diff line Loading @@ -11,8 +11,83 @@ xxHash, fmt, nasm, buildEnv, writeText, pkgsCross, libclang, libllvm, alsa-lib, libdrm, libGL, wayland, xorg, }: let # Headers required to build the ThunkLibs subtree libForwardingInputs = lib.map lib.getInclude [ alsa-lib libdrm libGL wayland xorg.libX11 xorg.libxcb xorg.libXrandr xorg.libXrender xorg.xorgproto ]; pkgsCross32 = pkgsCross.gnu32; pkgsCross64 = pkgsCross.gnu64; devRootFS = buildEnv { name = "fex-dev-rootfs"; paths = [ pkgsCross64.stdenv.cc.libc_dev pkgsCross32.stdenv.cc.libc_dev pkgsCross64.stdenv.cc.cc pkgsCross32.stdenv.cc.cc ] ++ libForwardingInputs; ignoreCollisions = true; pathsToLink = [ "/include" "/lib" ]; postBuild = '' mkdir -p $out/usr ln -s $out/include $out/usr/ ''; }; toolchain32 = writeText "toolchain_nix_x86_32.txt" '' set(CMAKE_EXE_LINKER_FLAGS_INIT "-fuse-ld=lld") set(CMAKE_MODULE_LINKER_FLAGS_INIT "-fuse-ld=lld") set(CMAKE_SHARED_LINKER_FLAGS_INIT "-fuse-ld=lld") set(CMAKE_SYSTEM_PROCESSOR i686) set(CMAKE_C_COMPILER clang) set(CMAKE_CXX_COMPILER clang++) set(CMAKE_C_COMPILER ${pkgsCross32.buildPackages.clang}/bin/i686-unknown-linux-gnu-clang) set(CMAKE_CXX_COMPILER ${pkgsCross32.buildPackages.clang}/bin/i686-unknown-linux-gnu-clang++) set(CLANG_FLAGS "-nodefaultlibs -nostartfiles -target i686-linux-gnu -msse2 -mfpmath=sse --sysroot=${devRootFS} -iwithsysroot/usr/include") set(CMAKE_C_FLAGS "''${CMAKE_C_FLAGS} ''${CLANG_FLAGS}") set(CMAKE_CXX_FLAGS "''${CMAKE_CXX_FLAGS} ''${CLANG_FLAGS}") ''; toolchain = writeText "toolchain_nix_x86_64.txt" '' set(CMAKE_EXE_LINKER_FLAGS_INIT "-fuse-ld=lld") set(CMAKE_MODULE_LINKER_FLAGS_INIT "-fuse-ld=lld") set(CMAKE_SHARED_LINKER_FLAGS_INIT "-fuse-ld=lld") set(CMAKE_SYSTEM_PROCESSOR x86_64) set(CMAKE_C_COMPILER clang) set(CMAKE_CXX_COMPILER clang++) set(CMAKE_C_COMPILER ${pkgsCross64.buildPackages.clang}/bin/x86_64-unknown-linux-gnu-clang) set(CMAKE_CXX_COMPILER ${pkgsCross64.buildPackages.clang}/bin/x86_64-unknown-linux-gnu-clang++) set(CLANG_FLAGS "-nodefaultlibs -nostartfiles -target x86_64-linux-gnu --sysroot=${devRootFS} -iwithsysroot/usr/include") set(CMAKE_C_FLAGS "''${CMAKE_C_FLAGS} ''${CLANG_FLAGS}") set(CMAKE_CXX_FLAGS "''${CMAKE_CXX_FLAGS} ''${CLANG_FLAGS}") ''; in llvmPackages.stdenv.mkDerivation (finalAttrs: { pname = "fex"; version = "2508.1"; Loading Loading @@ -49,6 +124,37 @@ llvmPackages.stdenv.mkDerivation (finalAttrs: { ''; }; postPatch = '' substituteInPlace ThunkLibs/GuestLibs/CMakeLists.txt ThunkLibs/HostLibs/CMakeLists.txt \ --replace-fail "/usr/include/libdrm" "${devRootFS}/include/libdrm" \ --replace-fail "/usr/include/wayland" "${devRootFS}/include/wayland" # Add include paths for thunkgen invocation substituteInPlace ThunkLibs/HostLibs/CMakeLists.txt \ --replace-fail "-- " "-- $(cat ${llvmPackages.stdenv.cc}/nix-support/libc-cflags) $(cat ${llvmPackages.stdenv.cc}/nix-support/libcxx-cxxflags) ${ lib.concatMapStrings (x: "-isystem " + x + "/include ") libForwardingInputs }" substituteInPlace ThunkLibs/GuestLibs/CMakeLists.txt \ --replace-fail "-- " "-- $(cat ${llvmPackages.stdenv.cc}/nix-support/libcxx-cxxflags) " # Patch any references to library wrapper paths substituteInPlace FEXCore/Source/Interface/Config/Config.json.in \ --replace-fail "ThunkGuestLibs" "UnusedThunkGuestLibs" \ --replace-fail "ThunkHostLibs" "UnusedThunkHostLibs" substituteInPlace FEXCore/Source/Interface/Config/Config.cpp \ --replace-fail "FEXCore::Config::CONFIG_THUNKGUESTLIBS" "FEXCore::Config::CONFIG_UNUSEDTHUNKGUESTLIBS" \ --replace-fail "FEXCore::Config::CONFIG_THUNKHOSTLIBS" "FEXCore::Config::CONFIG_UNUSEDTHUNKHOSTLIBS" substituteInPlace Source/Tools/LinuxEmulation/VDSO_Emulation.cpp \ --replace-fail "FEX_CONFIG_OPT(ThunkGuestLibs, THUNKGUESTLIBS);" "auto ThunkGuestLibs = []() { return \"$out/share/fex-emu/GuestThunks/\"; };" substituteInPlace Source/Tools/LinuxEmulation/LinuxSyscalls/FileManagement.h \ --replace-fail "FEX_CONFIG_OPT(ThunkGuestLibs, THUNKGUESTLIBS);" "fextl::string ThunkGuestLibs() { return \"$out/share/fex-emu/GuestThunks/\"; }" substituteInPlace Source/Tools/LinuxEmulation/Thunks.cpp \ --replace-fail "FEX_CONFIG_OPT(ThunkHostLibsPath, THUNKHOSTLIBS);" "fextl::string ThunkHostLibsPath() { return \"$out/lib/fex-emu/HostThunks/\"; }" substituteInPlace Source/Tools/FEXConfig/main.qml \ --replace-fail "config: \"Thunk" "config: \"UnusedThunk" \ --replace-fail "title: qsTr(\"Library forwarding:\")" "visible: false; title: qsTr(\"Library forwarding:\")" ''; nativeBuildInputs = [ cmake ninja Loading @@ -69,7 +175,12 @@ llvmPackages.stdenv.mkDerivation (finalAttrs: { buildInputs = [ xxHash fmt pkgsCross64.buildPackages.clang pkgsCross32.buildPackages.clang libclang libllvm ] ++ libForwardingInputs ++ (with qt5; [ qtbase qtdeclarative Loading @@ -83,6 +194,10 @@ llvmPackages.stdenv.mkDerivation (finalAttrs: { (lib.cmakeBool "ENABLE_ASSERTIONS" false) (lib.cmakeFeature "OVERRIDE_VERSION" finalAttrs.version) (lib.cmakeBool "BUILD_TESTS" finalAttrs.finalPackage.doCheck) (lib.cmakeBool "BUILD_THUNKS" true) (lib.cmakeFeature "X86_32_TOOLCHAIN_FILE" "${toolchain32}") (lib.cmakeFeature "X86_64_TOOLCHAIN_FILE" "${toolchain}") (lib.cmakeFeature "X86_DEV_ROOTFS" "${devRootFS}") ]; strictDeps = true; Loading Loading
pkgs/by-name/fe/fex/package.nix +115 −0 Original line number Diff line number Diff line Loading @@ -11,8 +11,83 @@ xxHash, fmt, nasm, buildEnv, writeText, pkgsCross, libclang, libllvm, alsa-lib, libdrm, libGL, wayland, xorg, }: let # Headers required to build the ThunkLibs subtree libForwardingInputs = lib.map lib.getInclude [ alsa-lib libdrm libGL wayland xorg.libX11 xorg.libxcb xorg.libXrandr xorg.libXrender xorg.xorgproto ]; pkgsCross32 = pkgsCross.gnu32; pkgsCross64 = pkgsCross.gnu64; devRootFS = buildEnv { name = "fex-dev-rootfs"; paths = [ pkgsCross64.stdenv.cc.libc_dev pkgsCross32.stdenv.cc.libc_dev pkgsCross64.stdenv.cc.cc pkgsCross32.stdenv.cc.cc ] ++ libForwardingInputs; ignoreCollisions = true; pathsToLink = [ "/include" "/lib" ]; postBuild = '' mkdir -p $out/usr ln -s $out/include $out/usr/ ''; }; toolchain32 = writeText "toolchain_nix_x86_32.txt" '' set(CMAKE_EXE_LINKER_FLAGS_INIT "-fuse-ld=lld") set(CMAKE_MODULE_LINKER_FLAGS_INIT "-fuse-ld=lld") set(CMAKE_SHARED_LINKER_FLAGS_INIT "-fuse-ld=lld") set(CMAKE_SYSTEM_PROCESSOR i686) set(CMAKE_C_COMPILER clang) set(CMAKE_CXX_COMPILER clang++) set(CMAKE_C_COMPILER ${pkgsCross32.buildPackages.clang}/bin/i686-unknown-linux-gnu-clang) set(CMAKE_CXX_COMPILER ${pkgsCross32.buildPackages.clang}/bin/i686-unknown-linux-gnu-clang++) set(CLANG_FLAGS "-nodefaultlibs -nostartfiles -target i686-linux-gnu -msse2 -mfpmath=sse --sysroot=${devRootFS} -iwithsysroot/usr/include") set(CMAKE_C_FLAGS "''${CMAKE_C_FLAGS} ''${CLANG_FLAGS}") set(CMAKE_CXX_FLAGS "''${CMAKE_CXX_FLAGS} ''${CLANG_FLAGS}") ''; toolchain = writeText "toolchain_nix_x86_64.txt" '' set(CMAKE_EXE_LINKER_FLAGS_INIT "-fuse-ld=lld") set(CMAKE_MODULE_LINKER_FLAGS_INIT "-fuse-ld=lld") set(CMAKE_SHARED_LINKER_FLAGS_INIT "-fuse-ld=lld") set(CMAKE_SYSTEM_PROCESSOR x86_64) set(CMAKE_C_COMPILER clang) set(CMAKE_CXX_COMPILER clang++) set(CMAKE_C_COMPILER ${pkgsCross64.buildPackages.clang}/bin/x86_64-unknown-linux-gnu-clang) set(CMAKE_CXX_COMPILER ${pkgsCross64.buildPackages.clang}/bin/x86_64-unknown-linux-gnu-clang++) set(CLANG_FLAGS "-nodefaultlibs -nostartfiles -target x86_64-linux-gnu --sysroot=${devRootFS} -iwithsysroot/usr/include") set(CMAKE_C_FLAGS "''${CMAKE_C_FLAGS} ''${CLANG_FLAGS}") set(CMAKE_CXX_FLAGS "''${CMAKE_CXX_FLAGS} ''${CLANG_FLAGS}") ''; in llvmPackages.stdenv.mkDerivation (finalAttrs: { pname = "fex"; version = "2508.1"; Loading Loading @@ -49,6 +124,37 @@ llvmPackages.stdenv.mkDerivation (finalAttrs: { ''; }; postPatch = '' substituteInPlace ThunkLibs/GuestLibs/CMakeLists.txt ThunkLibs/HostLibs/CMakeLists.txt \ --replace-fail "/usr/include/libdrm" "${devRootFS}/include/libdrm" \ --replace-fail "/usr/include/wayland" "${devRootFS}/include/wayland" # Add include paths for thunkgen invocation substituteInPlace ThunkLibs/HostLibs/CMakeLists.txt \ --replace-fail "-- " "-- $(cat ${llvmPackages.stdenv.cc}/nix-support/libc-cflags) $(cat ${llvmPackages.stdenv.cc}/nix-support/libcxx-cxxflags) ${ lib.concatMapStrings (x: "-isystem " + x + "/include ") libForwardingInputs }" substituteInPlace ThunkLibs/GuestLibs/CMakeLists.txt \ --replace-fail "-- " "-- $(cat ${llvmPackages.stdenv.cc}/nix-support/libcxx-cxxflags) " # Patch any references to library wrapper paths substituteInPlace FEXCore/Source/Interface/Config/Config.json.in \ --replace-fail "ThunkGuestLibs" "UnusedThunkGuestLibs" \ --replace-fail "ThunkHostLibs" "UnusedThunkHostLibs" substituteInPlace FEXCore/Source/Interface/Config/Config.cpp \ --replace-fail "FEXCore::Config::CONFIG_THUNKGUESTLIBS" "FEXCore::Config::CONFIG_UNUSEDTHUNKGUESTLIBS" \ --replace-fail "FEXCore::Config::CONFIG_THUNKHOSTLIBS" "FEXCore::Config::CONFIG_UNUSEDTHUNKHOSTLIBS" substituteInPlace Source/Tools/LinuxEmulation/VDSO_Emulation.cpp \ --replace-fail "FEX_CONFIG_OPT(ThunkGuestLibs, THUNKGUESTLIBS);" "auto ThunkGuestLibs = []() { return \"$out/share/fex-emu/GuestThunks/\"; };" substituteInPlace Source/Tools/LinuxEmulation/LinuxSyscalls/FileManagement.h \ --replace-fail "FEX_CONFIG_OPT(ThunkGuestLibs, THUNKGUESTLIBS);" "fextl::string ThunkGuestLibs() { return \"$out/share/fex-emu/GuestThunks/\"; }" substituteInPlace Source/Tools/LinuxEmulation/Thunks.cpp \ --replace-fail "FEX_CONFIG_OPT(ThunkHostLibsPath, THUNKHOSTLIBS);" "fextl::string ThunkHostLibsPath() { return \"$out/lib/fex-emu/HostThunks/\"; }" substituteInPlace Source/Tools/FEXConfig/main.qml \ --replace-fail "config: \"Thunk" "config: \"UnusedThunk" \ --replace-fail "title: qsTr(\"Library forwarding:\")" "visible: false; title: qsTr(\"Library forwarding:\")" ''; nativeBuildInputs = [ cmake ninja Loading @@ -69,7 +175,12 @@ llvmPackages.stdenv.mkDerivation (finalAttrs: { buildInputs = [ xxHash fmt pkgsCross64.buildPackages.clang pkgsCross32.buildPackages.clang libclang libllvm ] ++ libForwardingInputs ++ (with qt5; [ qtbase qtdeclarative Loading @@ -83,6 +194,10 @@ llvmPackages.stdenv.mkDerivation (finalAttrs: { (lib.cmakeBool "ENABLE_ASSERTIONS" false) (lib.cmakeFeature "OVERRIDE_VERSION" finalAttrs.version) (lib.cmakeBool "BUILD_TESTS" finalAttrs.finalPackage.doCheck) (lib.cmakeBool "BUILD_THUNKS" true) (lib.cmakeFeature "X86_32_TOOLCHAIN_FILE" "${toolchain32}") (lib.cmakeFeature "X86_64_TOOLCHAIN_FILE" "${toolchain}") (lib.cmakeFeature "X86_DEV_ROOTFS" "${devRootFS}") ]; strictDeps = true; Loading