From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ej1-x62d.google.com (mail-ej1-x62d.google.com [IPv6:2a00:1450:4864:20::62d]) by sourceware.org (Postfix) with ESMTPS id 86D27396D824 for ; Sun, 20 Nov 2022 12:53:51 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 86D27396D824 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-ej1-x62d.google.com with SMTP id vv4so13795632ejc.2 for ; Sun, 20 Nov 2022 04:53:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=user-agent:content-disposition:mime-version:message-id:subject:to :from:date:from:to:cc:subject:date:message-id:reply-to; bh=mMeKqxeg7VtTloTwDX3cnCKr+x8r6+dlHnnQLXnYmX4=; b=Z5iweav+k4Ogq8L6pMBu2crH2XyAUT8FKNBuMQ6qw/crbq+f/BZBfjht3/LLI6o7sW BJ6ACDNZIcf9NcB+inDLIc44rzg5Z/lHaoXZ77BR1z5hY4Y9DLiTqWWbKivaIkxIIMfo e3kzsq4PgD1jfpaSvgAwFCpqWyQ1KgwDJQ2UUiu0SNfa6Zy0UH2KdLGt+Jvnp0DeV9aH DilkVsPrWtOfSSqLws4Wf5HtVosZqEdtswOV+IAbhtKcNBSeQHzrZXu26XkrbGb9bGHA QwrFImX+qbA12faCcTS+QYecSSvUuUuVJvNzwm2SAjxc9qEa5SFy6+ZMSSto6i6Oq8+e k/HA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=user-agent:content-disposition:mime-version:message-id:subject:to :from:date:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=mMeKqxeg7VtTloTwDX3cnCKr+x8r6+dlHnnQLXnYmX4=; b=cj/rk5yhVHqkj0YQr7iopecUEJfAFv+GbxDZ61TTFKJr7ZnWW8llwL79FhTDNwOU4p S4BOjDzkGa+Hb/dyu2mgZzKNiKrvQZdr++lbqwnHt3Qm3QjL0iFqAq8hj0QAShAmlN/d SGdx1vvNTqqwxrQfyS8SGNgOzBn8bfUn+A7U+LQ2p59jakLVTdHfK2Nqum0x+bP5ERbQ ovWEAci4GGItUBFljCrYCMj3TIyOSDUG8PUgMXp0TBe29y6ybYXLPjlpME9tByrwU5ye kBC9sazLlYxyTZKUinFsdIAL35owgT0GMsWIUHH/vqW3Eiefcq4XEfYkOSBSnkpIxXcY UafA== X-Gm-Message-State: ANoB5pk29tMToy4ze2CezAtbIu2ltY8VyT7H8K+Cwht1TZ7g7LL7CAfc Ejs9UHqahdsU+g/lFtoaY6YB4wJ40bE= X-Google-Smtp-Source: AA0mqf7NL48VDGssu4sioE0mPd4RU/G7Hv6B5V0qsAdzfleUak3UeITp9ziBdQsEQ7bqAKmRm2/VCg== X-Received: by 2002:a17:906:9457:b0:7ac:db40:7e1 with SMTP id z23-20020a170906945700b007acdb4007e1mr12240914ejx.204.1668948830020; Sun, 20 Nov 2022 04:53:50 -0800 (PST) Received: from pali ([2a02:2b88:6:5cc6::2f]) by smtp.gmail.com with ESMTPSA id a25-20020a50ff19000000b00461bd82581asm3947143edu.84.2022.11.20.04.53.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 20 Nov 2022 04:53:49 -0800 (PST) Date: Sun, 20 Nov 2022 13:53:48 +0100 From: Pali =?utf-8?B?Um9ow6Fy?= To: gcc@gcc.gnu.org, mingw-w64-public@lists.sourceforge.net Subject: gcc parameter -mcrtdll= for choosing Windows C RunTime DLL library Message-ID: <20221120125348.a6xh7kxmvrimse72@pali> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: NeoMutt/20180716 X-Spam-Status: No, score=-1.5 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP 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: Hello! I would like to propose a new parameter for gcc: -mcrtdll= to allow specifying against which Windows C Runtime library should be binary linked. On Windows there are more crt libraries and currently gcc links to libmsvcrt.a which is in most cases symlink to libmsvcrt-os.a (but can be changed, e.g. during mingw-w64 building). mingw-w64 project already builds import .a library for every crt dll library (from the old crtdll.dll up to the new ucrtbase.dll), so it is ready for usage. Simple patch for gcc which implements -mcrtdll parameter is below. Note that on internet are other very similar patches for -mcrtdll= parameters and some are parts of custom mingw32 / mingw-w64 gcc builds. What do you think? Could gcc have "official" support for -mcrtdll= parameter? --- gcc/config/i386/cygming.opt 2022-02-06 21:00:05.377656896 +0100 +++ gcc/config/i386/cygming.opt 2022-02-06 21:04:06.690995944 +0100 @@ -22,6 +22,10 @@ mconsole Target RejectNegative Create console application. +mcrtdll= +Target RejectNegative Joined +Link with specified C RunTime DLL library. + mdll Target RejectNegative Generate code for a DLL. --- gcc/config/i386/mingw32.h 2022-01-16 17:28:31.157999097 +0100 +++ gcc/config/i386/mingw32.h 2022-01-16 17:36:03.552856726 +0100 @@ -95,7 +95,20 @@ along with GCC; see the file COPYING3. #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. */ @@ -185,11 +198,16 @@ along with GCC; see the file COPYING3. #define REAL_LIBGCC_SPEC \ "%{mthreads:-lmingwthrd} -lmingw32 \ " SHARED_LIBGCC_SPEC " \ - -lmoldname -lmingwex -lmsvcrt -lkernel32" + -lmoldname -lmingwex %{!mcrtdll=*:-lmsvcrt} %{mcrtdll=*:-l%*} -lkernel32" #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; \