Merge pull request #253939 from angerman/angerman/ucrt64

Add ucrt64 mingw toolchain.
This commit is contained in:
John Ericson 2023-09-08 22:40:14 -04:00 committed by GitHub
commit e829eca886
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 22 additions and 14 deletions

View file

@ -313,6 +313,11 @@ rec {
libc = "msvcrt"; # This distinguishes the mingw (non posix) toolchain
};
ucrt64 = {
config = "x86_64-w64-mingw32";
libc = "ucrt"; # This distinguishes the mingw (non posix) toolchain
};
# BSDs
x86_64-freebsd = {

View file

@ -47,7 +47,7 @@ let
# See https://github.com/NixOS/nixpkgs/pull/209870#issuecomment-1500550903
disableBootstrap' = disableBootstrap && !langFortran && !langGo;
crossMingw = targetPlatform != hostPlatform && targetPlatform.libc == "msvcrt";
crossMingw = targetPlatform != hostPlatform && targetPlatform.isMinGW;
crossDarwin = targetPlatform != hostPlatform && targetPlatform.libc == "libSystem";
targetPrefix = lib.optionalString (stdenv.targetPlatform != stdenv.hostPlatform)

View file

@ -20,7 +20,7 @@ drv: lib.pipe drv
(pkg: pkg.overrideAttrs (previousAttrs:
lib.optionalAttrs (
targetPlatform != hostPlatform &&
(enableShared || targetPlatform.libc == "msvcrt") &&
(enableShared || targetPlatform.isMinGW) &&
withoutTargetLibc
) {
makeFlags = [ "all-gcc" "all-target-libgcc" ];

View file

@ -115,7 +115,7 @@ let inherit version;
patches = callFile ./patches {};
/* Cross-gcc settings (build == host != target) */
crossMingw = targetPlatform != hostPlatform && targetPlatform.libc == "msvcrt";
crossMingw = targetPlatform != hostPlatform && targetPlatform.isMinGW;
stageNameAddon = if withoutTargetLibc then "stage-static" else "stage-final";
crossNameAddon = optionalString (targetPlatform != hostPlatform) "${targetPlatform.config}-${stageNameAddon}-";

View file

@ -9,7 +9,7 @@
, enableDebug ? false
, enableSingleThreaded ? false
, enableMultiThreaded ? true
, enableShared ? !(with stdenv.hostPlatform; isStatic || libc == "msvcrt") # problems for now
, enableShared ? !(with stdenv.hostPlatform; isStatic || isMinGW) # problems for now
, enableStatic ? !enableShared
, enablePython ? false
, enableNumpy ? false
@ -91,7 +91,7 @@ let
++ lib.optional (!enablePython) "--without-python"
++ lib.optional needUserConfig "--user-config=user-config.jam"
++ lib.optional (stdenv.buildPlatform.isDarwin && stdenv.hostPlatform.isLinux) "pch=off"
++ lib.optionals (stdenv.hostPlatform.libc == "msvcrt") [
++ lib.optionals stdenv.hostPlatform.isMinGW [
"threadapi=win32"
] ++ extraB2Args
);
@ -259,7 +259,7 @@ stdenv.mkDerivation {
# Make boost header paths relative so that they are not runtime dependencies
cd "$dev" && find include \( -name '*.hpp' -or -name '*.h' -or -name '*.ipp' \) \
-exec sed '1s/^\xef\xbb\xbf//;1i#line 1 "{}"' -i '{}' \;
'' + lib.optionalString (stdenv.hostPlatform.libc == "msvcrt") ''
'' + lib.optionalString stdenv.hostPlatform.isMinGW ''
$RANLIB "$out/lib/"*.a
'';

View file

@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
];
postPatch =
lib.optionalString ((stdenv.hostPlatform != stdenv.buildPlatform && stdenv.hostPlatform.libc == "msvcrt") || stdenv.cc.nativeLibc)
lib.optionalString ((stdenv.hostPlatform != stdenv.buildPlatform && stdenv.hostPlatform.isMinGW) || stdenv.cc.nativeLibc)
''
sed '/^_GL_WARN_ON_USE (gets/d' -i srclib/stdio.in.h
''

View file

@ -42,7 +42,7 @@ stdenv.mkDerivation rec {
# This is needed by freeimage
patches = [ ./0001-Compile-transupp.c-as-part-of-the-library.patch ]
++ lib.optional (stdenv.hostPlatform.libc or null == "msvcrt")
++ lib.optional stdenv.hostPlatform.isMinGW
./mingw-boolean.patch;
outputs = [ "bin" "dev" "dev_private" "out" "man" "doc" ];

View file

@ -17,7 +17,7 @@
(stdenv.hostPlatform == stdenv.buildPlatform || stdenv.hostPlatform.isCygwin || stdenv.hostPlatform.isLinux || stdenv.hostPlatform.isWasi)
, icuSupport ? false
, icu
, enableShared ? stdenv.hostPlatform.libc != "msvcrt" && !stdenv.hostPlatform.isStatic
, enableShared ? !stdenv.hostPlatform.isMinGW && !stdenv.hostPlatform.isStatic
, enableStatic ? !enableShared
, gnome
}:

View file

@ -51,7 +51,7 @@ stdenv.mkDerivation (finalAttrs: {
setOutputFlags = false;
outputDoc = "dev"; # single tiny man3 page
dontConfigure = stdenv.hostPlatform.libc == "msvcrt";
dontConfigure = stdenv.hostPlatform.isMinGW;
preConfigure = lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform) ''
export CHOST=${stdenv.hostPlatform.config}
@ -96,7 +96,7 @@ stdenv.mkDerivation (finalAttrs: {
''
# Non-typical naming confuses libtool which then refuses to use zlib's DLL
# in some cases, e.g. when compiling libpng.
+ lib.optionalString (stdenv.hostPlatform.libc == "msvcrt" && shared) ''
+ lib.optionalString (stdenv.hostPlatform.isMinGW && shared) ''
ln -s zlib1.dll $out/bin/libz.dll
'';
@ -109,7 +109,7 @@ stdenv.mkDerivation (finalAttrs: {
dontStrip = stdenv.hostPlatform != stdenv.buildPlatform && static;
configurePlatforms = [];
installFlags = lib.optionals (stdenv.hostPlatform.libc == "msvcrt") [
installFlags = lib.optionals stdenv.hostPlatform.isMinGW [
"BINARY_PATH=$(out)/bin"
"INCLUDE_PATH=$(dev)/include"
"LIBRARY_PATH=$(out)/lib"
@ -120,7 +120,7 @@ stdenv.mkDerivation (finalAttrs: {
makeFlags = [
"PREFIX=${stdenv.cc.targetPrefix}"
] ++ lib.optionals (stdenv.hostPlatform.libc == "msvcrt") [
] ++ lib.optionals stdenv.hostPlatform.isMinGW [
"-f" "win32/Makefile.gcc"
] ++ lib.optionals shared [
# Note that as of writing (zlib 1.2.11), this flag only has an effect

View file

@ -36,6 +36,8 @@ in stdenv.mkDerivation {
configureFlags = [
"--enable-idl"
"--enable-secure-api"
] ++ lib.optionals (stdenv.targetPlatform.libc == "ucrt") [
"--with-default-msvcrt=ucrt"
];
enableParallelBuilding = true;

View file

@ -21756,7 +21756,7 @@ with pkgs;
# These are used when buiding compiler-rt / libgcc, prior to building libc.
preLibcCrossHeaders = let
inherit (stdenv.targetPlatform) libc;
in if libc == "msvcrt" then targetPackages.windows.mingw_w64_headers or windows.mingw_w64_headers
in if stdenv.targetPlatform.isMinGW then targetPackages.windows.mingw_w64_headers or windows.mingw_w64_headers
else if libc == "nblibc" then targetPackages.netbsdCross.headers or netbsdCross.headers
else if libc == "libSystem" && stdenv.targetPlatform.isAarch64 then targetPackages.darwin.LibsystemCross or darwin.LibsystemCross
else null;
@ -21777,6 +21777,7 @@ with pkgs;
else if name == "newlib-nano" then targetPackages.newlib-nanoCross or newlib-nanoCross
else if name == "musl" then targetPackages.muslCross or muslCross
else if name == "msvcrt" then targetPackages.windows.mingw_w64 or windows.mingw_w64
else if name == "ucrt" then targetPackages.windows.mingw_w64 or windows.mingw_w64
else if name == "libSystem" then
if stdenv.targetPlatform.useiOSPrebuilt
then targetPackages.darwin.iosSdkPkgs.libraries or darwin.iosSdkPkgs.libraries