From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pl1-x62b.google.com (mail-pl1-x62b.google.com [IPv6:2607:f8b0:4864:20::62b]) by sourceware.org (Postfix) with ESMTPS id 329523858D28 for ; Sun, 11 Jun 2023 23:08:12 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 329523858D28 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-pl1-x62b.google.com with SMTP id d9443c01a7336-1b3afd2f9bdso6936455ad.0 for ; Sun, 11 Jun 2023 16:08:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1686524891; x=1689116891; h=content-transfer-encoding:in-reply-to:from:cc:references:to :content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=EIBXulHyUOfSd3PjmJ/QxVyqwAb1TAt0yyY3g9XS7ts=; b=g0ylBHRv13jYD7cDtsysFyaH0pWHFHK44Q8l0U5vL7e44j063PVI0VBHQprkJ6brz8 xsjZRb2dWv8kI7MLVoUmuiQFUftX9GvaWAeRc1yPVDnPP9EYdCsTrgV47ewE0MgEBQzq OeaNp9jXpfPcvPxt0+7eNDYQt4AbmBRIdpUwVtCeH+cmtJO29NQIwMh1Z2CemTEHNNhB BXJAm9J2gj4OWDfdiMWRqvP7c5+o+kxoCbMEDRqJAbh0p6R2JuspsmHyLuYThnoVKnbn kHE27WBPD8K9vdO1jUV/S9BE8xu+JeGk1uiaU2ZdiURcBwl3wq6K0zPViLS532f/cZrz KL/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686524891; x=1689116891; h=content-transfer-encoding:in-reply-to:from:cc:references:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=EIBXulHyUOfSd3PjmJ/QxVyqwAb1TAt0yyY3g9XS7ts=; b=A1/JjV3MR9WH3VQ8wv88LbdZ5YmRII3XYRRCCWMSLDicxI2xIX4VUCcCGmtYG6Cw5b HTkrXVrkKOPesIfS8A/316knm9agtaPzt0MNSygJVyUR+gJ4ow7owys7G5Ifd5uNR/D7 aZ5N5Qy4o8Fr59o/7USRfnKDEclo0LAwmrcsmgFrG8nB/3vNBl+27Cmjo25QhgBbNcyp VT0NywcESmDjWBDE2SYeEoBRKALwm3cijM9Q4IFUqhdU4+jKopbFqddx6G6EKL6W8pJI ah2CPlVb2dzi74INr3H4FNR6QZc6+Q0/YJKXP8EexgZLxrfBIg97KrpJYVq5CjF7WhXD ZhGg== X-Gm-Message-State: AC+VfDyupkO1ZGscRhaeZsDAra7rgIYIVJoec7j7QDj5uBOygwOqvwOd 0nIyWdNGwJFgevmL8n/tuW0= X-Google-Smtp-Source: ACHHUZ5GLs/UFVXpPR2E8GngJxZfqWzy4RqH6rMLHsY29OPw/JUkHyX9T0e5NHLmTS62gyrK4Hkafg== X-Received: by 2002:a17:903:2441:b0:1aa:feca:b616 with SMTP id l1-20020a170903244100b001aafecab616mr5233172pls.65.1686524890859; Sun, 11 Jun 2023 16:08:10 -0700 (PDT) Received: from ?IPV6:2001:f40:91b::57b9? ([2001:f40:91b::57b9]) by smtp.gmail.com with ESMTPSA id k9-20020a170902ba8900b001a5260a6e6csm6781002pls.206.2023.06.11.16.08.09 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 11 Jun 2023 16:08:10 -0700 (PDT) Message-ID: <2617dc57-ec7a-197b-411f-db4b48d04bc2@gmail.com> Date: Sun, 11 Jun 2023 23:08:39 +0000 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.11.0 Subject: Re: [PATCH] Add MinGW option -mcrtdll= for choosing C RunTime DLL library Content-Language: en-US To: =?UTF-8?Q?Pali_Roh=c3=a1r?= , gcc-patches@gcc.gnu.org References: <20230527101412.19562-1-pali@kernel.org> Cc: Liu Hao , Jacek Caban , NightStrike From: Jonathan Yong <10walls@gmail.com> In-Reply-To: <20230527101412.19562-1-pali@kernel.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-3039.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,KAM_SHORT,NICE_REPLY_A,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On 5/27/23 10:14, Pali Rohár wrote: > It adjust preprocess, compile and link flags, which allows to change > default -lmsvcrt library by another provided by MinGW runtime. > > gcc/ > * config/i386/mingw-w64.h (CPP_SPEC): Adjust for -mcrtdll=. > (REAL_LIBGCC_SPEC): New define. > * config/i386/mingw.opt: Add mcrtdll= > * config/i386/mingw32.h (CPP_SPEC): Adjust for -mcrtdll=. > (REAL_LIBGCC_SPEC): Adjust for -mcrtdll=. > (STARTFILE_SPEC): Adjust for -mcrtdll=. > * doc/invoke.texi: Add mcrtdll= documentation. > --- > gcc/config/i386/mingw-w64.h | 22 +++++++++++++++++++++- > gcc/config/i386/mingw.opt | 4 ++++ > gcc/config/i386/mingw32.h | 28 ++++++++++++++++++++++++---- > gcc/doc/invoke.texi | 21 ++++++++++++++++++++- > 4 files changed, 69 insertions(+), 6 deletions(-) > > diff --git a/gcc/config/i386/mingw-w64.h b/gcc/config/i386/mingw-w64.h > index 3a21cec3f8cd..0146ed4f793e 100644 > --- a/gcc/config/i386/mingw-w64.h > +++ b/gcc/config/i386/mingw-w64.h > @@ -25,7 +25,27 @@ along with GCC; see the file COPYING3. If not see > #define CPP_SPEC "%{posix:-D_POSIX_SOURCE} %{mthreads:-D_MT} " \ > "%{municode:-DUNICODE} " \ > "%{" SPEC_PTHREAD1 ":-D_REENTRANT} " \ > - "%{" SPEC_PTHREAD2 ":-U_REENTRANT} " > + "%{" SPEC_PTHREAD2 ":-U_REENTRANT} " \ > + "%{mcrtdll=crtdll*:-U__MSVCRT__ -D__CRTDLL__} " \ > + "%{mcrtdll=msvcrt10*:-D__MSVCRT_VERSION__=0x100} " \ > + "%{mcrtdll=msvcrt20*:-D__MSVCRT_VERSION__=0x200} " \ > + "%{mcrtdll=msvcrt40*:-D__MSVCRT_VERSION__=0x400} " \ > + "%{mcrtdll=msvcrt-os*:-D__MSVCRT_VERSION__=0x700} " \ > + "%{mcrtdll=msvcr70*:-D__MSVCRT_VERSION__=0x700} " \ > + "%{mcrtdll=msvcr71*:-D__MSVCRT_VERSION__=0x701} " \ > + "%{mcrtdll=msvcr80*:-D__MSVCRT_VERSION__=0x800} " \ > + "%{mcrtdll=msvcr90*:-D__MSVCRT_VERSION__=0x900} " \ > + "%{mcrtdll=msvcr100*:-D__MSVCRT_VERSION__=0xA00} " \ > + "%{mcrtdll=msvcr110*:-D__MSVCRT_VERSION__=0xB00} " \ > + "%{mcrtdll=msvcr120*:-D__MSVCRT_VERSION__=0xC00} " \ > + "%{mcrtdll=ucrt*:-D_UCRT} " > + > +#undef REAL_LIBGCC_SPEC > +#define REAL_LIBGCC_SPEC \ > + "%{mthreads:-lmingwthrd} -lmingw32 \ > + " SHARED_LIBGCC_SPEC " \ > + -lmingwex %{!mcrtdll=*:-lmsvcrt} %{mcrtdll=*:-l%*} \ > + -lkernel32 " MCFGTHREAD_SPEC > > #undef STARTFILE_SPEC > #define STARTFILE_SPEC "%{shared|mdll:dllcrt2%O%s} \ > diff --git a/gcc/config/i386/mingw.opt b/gcc/config/i386/mingw.opt > index 0ae026a66bd6..dd66a50aec00 100644 > --- a/gcc/config/i386/mingw.opt > +++ b/gcc/config/i386/mingw.opt > @@ -18,6 +18,10 @@ > ; along with GCC; see the file COPYING3. If not see > ; . > > +mcrtdll= > +Target RejectNegative Joined > +Preprocess, compile or link with specified C RunTime DLL library. > + > pthread > Driver > > diff --git a/gcc/config/i386/mingw32.h b/gcc/config/i386/mingw32.h > index 6a55baaa4587..a1ee001983a7 100644 > --- a/gcc/config/i386/mingw32.h > +++ b/gcc/config/i386/mingw32.h > @@ -89,7 +89,20 @@ along with GCC; see the file COPYING3. If not see > #undef CPP_SPEC > #define CPP_SPEC "%{posix:-D_POSIX_SOURCE} %{mthreads:-D_MT} " \ > "%{" SPEC_PTHREAD1 ":-D_REENTRANT} " \ > - "%{" SPEC_PTHREAD2 ": } " > + "%{" SPEC_PTHREAD2 ": } " \ > + "%{mcrtdll=crtdll*:-U__MSVCRT__ -D__CRTDLL__} " \ > + "%{mcrtdll=msvcrt10*:-D__MSVCRT_VERSION__=0x100} " \ > + "%{mcrtdll=msvcrt20*:-D__MSVCRT_VERSION__=0x200} " \ > + "%{mcrtdll=msvcrt40*:-D__MSVCRT_VERSION__=0x400} " \ > + "%{mcrtdll=msvcrt-os*:-D__MSVCRT_VERSION__=0x700} " \ > + "%{mcrtdll=msvcr70*:-D__MSVCRT_VERSION__=0x700} " \ > + "%{mcrtdll=msvcr71*:-D__MSVCRT_VERSION__=0x701} " \ > + "%{mcrtdll=msvcr80*:-D__MSVCRT_VERSION__=0x800} " \ > + "%{mcrtdll=msvcr90*:-D__MSVCRT_VERSION__=0x900} " \ > + "%{mcrtdll=msvcr100*:-D__MSVCRT_VERSION__=0xA00} " \ > + "%{mcrtdll=msvcr110*:-D__MSVCRT_VERSION__=0xB00} " \ > + "%{mcrtdll=msvcr120*:-D__MSVCRT_VERSION__=0xC00} " \ > + "%{mcrtdll=ucrt*:-D_UCRT} " > > /* For Windows applications, include more libraries, but always include > kernel32. */ > @@ -184,11 +197,18 @@ along with GCC; see the file COPYING3. If not see > #define REAL_LIBGCC_SPEC \ > "%{mthreads:-lmingwthrd} -lmingw32 \ > " SHARED_LIBGCC_SPEC " \ > - -lmoldname -lmingwex -lmsvcrt -lkernel32 " MCFGTHREAD_SPEC > + %{mcrtdll=crtdll*:-lcoldname} %{!mcrtdll=crtdll*:-lmoldname} \ > + -lmingwex %{!mcrtdll=*:-lmsvcrt} %{mcrtdll=*:-l%*} \ > + -lkernel32 " MCFGTHREAD_SPEC > > #undef STARTFILE_SPEC > -#define STARTFILE_SPEC "%{shared|mdll:dllcrt2%O%s} \ > - %{!shared:%{!mdll:crt2%O%s}} %{pg:gcrt2%O%s} \ > +#define STARTFILE_SPEC " \ > + %{shared|mdll:%{mcrtdll=crtdll*:dllcrt1%O%s}} \ > + %{shared|mdll:%{!mcrtdll=crtdll*:dllcrt2%O%s}} \ > + %{!shared:%{!mdll:%{mcrtdll=crtdll*:crt1%O%s}}} \ > + %{!shared:%{!mdll:%{!mcrtdll=crtdll*:crt2%O%s}}} \ > + %{pg:%{mcrtdll=crtdll*:gcrt1%O%s}} \ > + %{pg:%{!mcrtdll=crtdll*:gcrt2%O%s}} \ > crtbegin.o%s \ > %{fvtable-verify=none:%s; \ > fvtable-verify=preinit:vtv_start.o%s; \ > diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi > index b92b85760279..32e3f504b22a 100644 > --- a/gcc/doc/invoke.texi > +++ b/gcc/doc/invoke.texi > @@ -1458,7 +1458,7 @@ See RS/6000 and PowerPC Options. > -munroll-only-small-loops -mlam=@var{choice}} > > @emph{x86 Windows Options} > -@gccoptlist{-mconsole -mcygwin -mno-cygwin -mdll > +@gccoptlist{-mconsole -mcrtdll=@var{library} -mcygwin -mno-cygwin -mdll > -mnop-fun-dllimport -mthread > -municode -mwin32 -mwindows -fno-set-stack-executable} > > @@ -34202,6 +34202,25 @@ required for console applications. > This option is available for Cygwin and MinGW targets and is > enabled by default on those targets. > > +@opindex mcrtdll > +@item -mcrtdll=@var{library} > +Preprocess, compile or link with specified C RunTime DLL @var{library}. > +This option adjust predefined macros @code{__CRTDLL__}, @code{__MSVCRT__} > +and @code{__MSVCRT_VERSION__} for specified CRT @var{library}, choose > +start file for CRT @var{library} and link with CRT @var{library}. > +Recognized CRT library names for proprocessor are: > +@code{crtdll}, @code{msvcrt10}, @code{msvcrt20}, @code{msvcrt40}, > +@code{msvcrt-os}, @code{msvcr70}, @code{msvcr80}, @code{msvcr90}, > +@code{msvcr100}, @code{msvcr110}, @code{msvcr120} and @code{ucrt}. > +If this options is not specified then the default MinGW import library > +@code{msvcrt} is used for linking and no other adjustment for > +preprocessor is done. MinGW import library @code{msvcrt} is just a > +symlink (or file copy) to the other MinGW CRT import library > +chosen during MinGW compilation. MinGW import library @code{msvcrt-os} > +is for Windows system CRT DLL library @code{msvcrt.dll} and > +in most cases is the default MinGW import library. > +This option is available for MinGW targets. > + > @opindex mdll > @item -mdll > This option is available for Cygwin and MinGW targets. It LH, Jacek, NS, any thoughts on this patch?