From: Jonathan Yong <10walls@gmail.com>
To: "Pali Rohár" <pali@kernel.org>, gcc-patches@gcc.gnu.org
Cc: Liu Hao <lh_mouse@126.com>, Jacek Caban <jacek@codeweavers.com>,
NightStrike <nightstrike@gmail.com>
Subject: Re: [PATCH] Add MinGW option -mcrtdll= for choosing C RunTime DLL library
Date: Sun, 11 Jun 2023 23:08:39 +0000 [thread overview]
Message-ID: <2617dc57-ec7a-197b-411f-db4b48d04bc2@gmail.com> (raw)
In-Reply-To: <20230527101412.19562-1-pali@kernel.org>
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
> ; <http://www.gnu.org/licenses/>.
>
> +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?
next prev parent reply other threads:[~2023-06-11 23:08 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-27 10:14 Pali Rohár
2023-06-11 23:08 ` Jonathan Yong [this message]
2023-06-12 1:26 ` LIU Hao
2023-06-12 23:13 ` Jonathan Yong
2023-06-13 6:29 ` Pali Rohár
2023-06-13 8:40 ` LIU Hao
2023-06-14 16:09 ` [PATCH v2] " Pali Rohár
2023-06-16 13:18 ` Jonathan Yong
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2617dc57-ec7a-197b-411f-db4b48d04bc2@gmail.com \
--to=10walls@gmail.com \
--cc=gcc-patches@gcc.gnu.org \
--cc=jacek@codeweavers.com \
--cc=lh_mouse@126.com \
--cc=nightstrike@gmail.com \
--cc=pali@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).