From patchwork Sun Oct 18 14:36:12 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Iain Sandoe X-Patchwork-Id: 531944 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id CE92414076B for ; Mon, 19 Oct 2015 01:37:54 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b=Fn67aCRr; dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :subject:mime-version:content-type:from:in-reply-to:date:cc :message-id:references:to; q=dns; s=default; b=dlvkY+mL6UmykhNgF BCtG2SPABrylejVswX9j0bT45sEna3WhPLRcM1SRz0zCJYvxlDtk7xKsJuUdVAdZ mEvkp3Sgrq/EUkvjwja5zDRM7/9Eao8A+MT0ZQCRfyxy/WI1ugWTlElhZSjetxSW kGPC+KCRgoHTXnuP7G++vUetO4= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :subject:mime-version:content-type:from:in-reply-to:date:cc :message-id:references:to; s=default; bh=v29OEjRYHR6zqdoc24Y4uQb N93Y=; b=Fn67aCRr8G/HDAVvU54uNteI89MvdQYK2BqZU1Dq98oiVublORz/61E jN72erUb0Rrmp4yYojJpz/XBOEGv7W2NxCwDRtDRH9zpo2LMDMUAFQ4xt6Rn5k1S rTyImeVAqKQgbf4AYt0xu9gXQsGGw3/i4LQdzkZw/iqJ9rwH8/Yw= Received: (qmail 42926 invoked by alias); 18 Oct 2015 14:36:50 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 42806 invoked by uid 89); 18 Oct 2015 14:36:49 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.8 required=5.0 tests=AWL, BAYES_00, KAM_ASCII_DIVIDERS, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=no version=3.3.2 X-HELO: relay1.mentorg.com Received: from relay1.mentorg.com (HELO relay1.mentorg.com) (192.94.38.131) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sun, 18 Oct 2015 14:36:21 +0000 Received: from nat-ies.mentorg.com ([192.94.31.2] helo=SVR-IES-FEM-02.mgc.mentorg.com) by relay1.mentorg.com with esmtp id 1Znp4K-0001MA-Vd from Iain_Sandoe@mentor.com ; Sun, 18 Oct 2015 07:36:17 -0700 Received: from [127.0.0.1] (137.202.0.76) by SVR-IES-FEM-02.mgc.mentorg.com (137.202.0.106) with Microsoft SMTP Server id 14.3.224.2; Sun, 18 Oct 2015 15:36:15 +0100 Subject: Re: [Darwin, Driver/specs] A bit more TLC, factor version-min code, lose some dead specs. MIME-Version: 1.0 (Apple Message framework v1283) From: Iain Sandoe In-Reply-To: <40C1E2DE-6071-40ED-AF86-090B8AF0607D@comcast.net> Date: Sun, 18 Oct 2015 15:36:12 +0100 CC: gcc-patches List Message-ID: <53AF1A35-4FEA-4F90-A7C6-6EDA859422A1@codesourcery.com> References: <40C1E2DE-6071-40ED-AF86-090B8AF0607D@comcast.net> To: Mike Stump On 13 Sep 2015, at 21:25, Mike Stump wrote: > > Ok with or without the warning. So .. I removed the warning, and changed the string handling funcs to use those from libiberty, since earlier Darwin don't have the strn*, actual patch applied attached, cheers Iain Index: gcc/ChangeLog =================================================================== --- gcc/ChangeLog (revision 228943) +++ gcc/ChangeLog (working copy) @@ -1,5 +1,15 @@ 2015-10-18 Iain Sandoe + * config/darwin-driver.c (darwin_default_min_version): Refactor code. + (darwin_driver_init): Note a version-min when provided on the c/l. + * config/darwin.h (%darwin_minversion): Remove. + * config/i386/darwin.h: Likewise. + * config/rs6000/darwin.h: Likewise. + * config/darwin.opt (mmacosx-version-min=): Use the configured default, rather than + an arbitrary constant. + +2015-10-18 Iain Sandoe + * config/darwin-driver.c (darwin_driver_init): Handle '-arch' for PPC, detect conflicts between -arch and multilib settings. Detect and warn about conflicts between multiple -arch definitions. Index: gcc/config/darwin-driver.c =================================================================== --- gcc/config/darwin-driver.c (revision 228943) +++ gcc/config/darwin-driver.c (working copy) @@ -19,6 +19,7 @@ . */ #include "config.h" +#include "libiberty.h" #include "system.h" #include "coretypes.h" #include "tm.h" @@ -96,73 +97,36 @@ included in tm.h). This may be overidden by setting the flag explicitly (or by the MACOSX_DEPLOYMENT_TARGET environment). */ -static void -darwin_default_min_version (unsigned int *decoded_options_count, - struct cl_decoded_option **decoded_options) +static const char * +darwin_default_min_version (void) { - const unsigned int argc = *decoded_options_count; - struct cl_decoded_option *const argv = *decoded_options; - unsigned int i; - const char *new_flag; + /* Try to retrieve the deployment target from the environment. */ + const char *new_flag = getenv ("MACOSX_DEPLOYMENT_TARGET"); - /* If the command-line is empty, just return. */ - if (argc <= 1) - return; - - /* Don't do this if the user specified -mmacosx-version-min= or - -mno-macosx-version-min. */ - for (i = 1; i < argc; i++) - if (argv[i].opt_index == OPT_mmacosx_version_min_) - return; - - /* Retrieve the deployment target from the environment and insert - it as a flag. */ - { - const char * macosx_deployment_target; - macosx_deployment_target = getenv ("MACOSX_DEPLOYMENT_TARGET"); - if (macosx_deployment_target - /* Apparently, an empty string for MACOSX_DEPLOYMENT_TARGET means - "use the default". Or, possibly "use 10.1". We choose - to ignore the environment variable, as if it was never set. */ - && macosx_deployment_target[0]) - { - ++*decoded_options_count; - *decoded_options = XNEWVEC (struct cl_decoded_option, - *decoded_options_count); - (*decoded_options)[0] = argv[0]; - generate_option (OPT_mmacosx_version_min_, macosx_deployment_target, - 1, CL_DRIVER, &(*decoded_options)[1]); - memcpy (*decoded_options + 2, argv + 1, - (argc - 1) * sizeof (struct cl_decoded_option)); - return; - } - } - + /* Apparently, an empty string for MACOSX_DEPLOYMENT_TARGET means + "use the default". Or, possibly "use 10.1". We choose + to ignore the environment variable, as if it was never set. */ + if (new_flag == NULL || new_flag[0] == 0) #ifndef CROSS_DIRECTORY_STRUCTURE - - /* Try to find the version from the kernel, if we fail - we print a message - and give up. */ - new_flag = darwin_find_version_from_kernel (); - if (!new_flag) - return; - + /* Try to find the version from the kernel, if we fail - we print a + message and give up. */ + new_flag = darwin_find_version_from_kernel (); #else - - /* For cross-compilers, default to the target OS version. */ - new_flag = DEF_MIN_OSX_VERSION; - + /* For cross-compilers, default to a minimum version determined by + the configuration. */ + new_flag = DEF_MIN_OSX_VERSION; #endif /* CROSS_DIRECTORY_STRUCTURE */ - /* Add the new flag. */ - ++*decoded_options_count; - *decoded_options = XNEWVEC (struct cl_decoded_option, - *decoded_options_count); - (*decoded_options)[0] = argv[0]; - generate_option (OPT_mmacosx_version_min_, new_flag, - 1, CL_DRIVER, &(*decoded_options)[1]); - memcpy (*decoded_options + 2, argv + 1, - (argc - 1) * sizeof (struct cl_decoded_option)); - return; + if (new_flag != NULL) + { + size_t len = strlen (new_flag); + if (len > 128) { /* Arbitrary limit, number should be like xx.yy.zz */ + warning (0, "couldn%'t understand version %s\n", new_flag); + return NULL; + } + new_flag = xstrndup (new_flag, len); + } + return new_flag; } /* Translate -filelist and -framework options in *DECODED_OPTIONS @@ -187,6 +151,8 @@ bool seenM64 = false; bool appendM32 = false; bool appendM64 = false; + const char *vers_string = NULL; + bool seen_version_min = false; for (i = 1; i < *decoded_options_count; i++) { @@ -246,12 +212,15 @@ CL_DRIVER, &(*decoded_options)[i]); break; + case OPT_mmacosx_version_min_: + seen_version_min = true; + vers_string = xstrndup ((*decoded_options)[i].arg, 32); + default: break; } } - darwin_default_min_version (decoded_options_count, decoded_options); /* Turn -arch xxxx into the appropriate -m32/-m64 flag. If the User tried to specify multiple arch flags (which is possible with some Darwin compilers) warn that this mode is not supported by this @@ -308,4 +277,21 @@ &(*decoded_options)[*decoded_options_count - 1]); } + /* We will need to know the OS X version we're trying to build for here + so that we can figure out the mechanism and source for the sysroot to + be used. */ + if (! seen_version_min && *decoded_options_count > 1) + { + /* Not set by the User, try to figure it out. */ + vers_string = darwin_default_min_version (); + if (vers_string != NULL) + { + ++*decoded_options_count; + *decoded_options = XRESIZEVEC (struct cl_decoded_option, + *decoded_options, + *decoded_options_count); + generate_option (OPT_mmacosx_version_min_, vers_string, 1, CL_DRIVER, + &(*decoded_options)[*decoded_options_count - 1]); + } + } } Index: gcc/config/darwin.h =================================================================== --- gcc/config/darwin.h (revision 228943) +++ gcc/config/darwin.h (working copy) @@ -271,7 +271,6 @@ %{headerpad_max_install_names} \ %{Zimage_base*:-image_base %*} \ %{Zinit*:-init %*} \ - %{!mmacosx-version-min=*:-macosx_version_min %(darwin_minversion)} \ %{mmacosx-version-min=*:-macosx_version_min %*} \ %{nomultidefs} \ %{Zmulti_module:-multi_module} %{Zsingle_module:-single_module} \ @@ -370,8 +369,7 @@ #define DARWIN_EXTRA_SPECS \ { "darwin_crt1", DARWIN_CRT1_SPEC }, \ - { "darwin_dylib1", DARWIN_DYLIB1_SPEC }, \ - { "darwin_minversion", DARWIN_MINVERSION_SPEC }, + { "darwin_dylib1", DARWIN_DYLIB1_SPEC }, #define DARWIN_DYLIB1_SPEC \ "%:version-compare(!> 10.5 mmacosx-version-min= -ldylib1.o) \ @@ -916,7 +914,9 @@ #define SUPPORTS_INIT_PRIORITY 0 /* When building cross-compilers (and native crosses) we shall default to - providing an osx-version-min of this unless overridden by the User. */ -#define DEF_MIN_OSX_VERSION "10.4" + providing an osx-version-min of this unless overridden by the User. + 10.5 is the only version that fully supports all our archs so that's the + fall-back default. */ +#define DEF_MIN_OSX_VERSION "10.5" #endif /* CONFIG_DARWIN_H */ Index: gcc/config/darwin.opt =================================================================== --- gcc/config/darwin.opt (revision 228943) +++ gcc/config/darwin.opt (working copy) @@ -226,10 +226,9 @@ ; The Init here is for the convenience of GCC developers, so that cc1 ; and cc1plus don't crash if no -mmacosx-version-min is passed. The ; driver will always pass a -mmacosx-version-min, so in normal use the -; Init is never used. Useful for setting the OS on which people -; usually debug. +; Init is never used. mmacosx-version-min= -Target Joined Report Var(darwin_macosx_version_min) Init("10.6") +Target Joined Report Var(darwin_macosx_version_min) Init(DEF_MIN_OSX_VERSION) The earliest MacOS X version on which this program will run mone-byte-bool Index: gcc/config/darwin12.h =================================================================== --- gcc/config/darwin12.h (revision 228943) +++ gcc/config/darwin12.h (working copy) @@ -25,3 +25,6 @@ %:version-compare(>= 10.6 mmacosx-version-min= -lSystem) } } \ %{fno-pic|fno-PIC|fno-pie|fno-PIE|fapple-kext|mkernel|static|mdynamic-no-pic: \ %:version-compare(>= 10.7 mmacosx-version-min= -no_pie) } %G %L" + +#undef DEF_MIN_OSX_VERSION +#define DEF_MIN_OSX_VERSION "10.8" Index: gcc/config/i386/darwin.h =================================================================== --- gcc/config/i386/darwin.h (revision 228943) +++ gcc/config/i386/darwin.h (working copy) @@ -108,7 +108,6 @@ #undef CC1_SPEC #define CC1_SPEC "%(cc1_cpu) \ %{!mkernel:%{!static:%{!mdynamic-no-pic:-fPIC}}} \ - %{!mmacosx-version-min=*:-mmacosx-version-min=%(darwin_minversion)} \ %{g: %{!fno-eliminate-unused-debug-symbols: -feliminate-unused-debug-symbols }} " \ DARWIN_CC1_SPEC @@ -119,15 +118,6 @@ #define DARWIN_ARCH_SPEC "%{m64:x86_64;:i386}" #define DARWIN_SUBARCH_SPEC DARWIN_ARCH_SPEC -/* Determine a minimum version based on compiler options. */ -#define DARWIN_MINVERSION_SPEC \ - "%{!m64|fgnu-runtime:10.4; \ - ,objective-c|,objc-cpp-output:10.5; \ - ,objective-c-header:10.5; \ - ,objective-c++|,objective-c++-cpp-output:10.5; \ - ,objective-c++-header|,objc++-cpp-output:10.5; \ - :10.4}" - #undef ENDFILE_SPEC #define ENDFILE_SPEC \ "%{Ofast|ffast-math|funsafe-math-optimizations:crtfastmath.o%s} \ Index: gcc/config/rs6000/darwin.h =================================================================== --- gcc/config/rs6000/darwin.h (revision 228943) +++ gcc/config/rs6000/darwin.h (working copy) @@ -93,7 +93,6 @@ %(cc1_cpu) \ %{g: %{!fno-eliminate-unused-debug-symbols: -feliminate-unused-debug-symbols }} \ %{static: %{Zdynamic: %e conflicting code gen style switches are used}}\ - %{!mmacosx-version-min=*:-mmacosx-version-min=%(darwin_minversion)} \ %{!mkernel:%{!static:%{!mdynamic-no-pic:-fPIC}}} \ %{faltivec:-maltivec -include altivec.h} %{fno-altivec:-mno-altivec} \ % 10.4 mmacosx-version-min= crt2.o%s)}" -/* Determine a minimum version based on compiler options. */ -#define DARWIN_MINVERSION_SPEC \ - "%{m64:%{fgnu-runtime:10.4; \ - ,objective-c|,objc-cpp-output:10.5; \ - ,objective-c-header:10.5; \ - ,objective-c++|,objective-c++-cpp-output:10.5; \ - ,objective-c++-header|,objc++-cpp-output:10.5; \ - :10.4}; \ - shared-libgcc:10.3; \ - :10.1}" - #undef SUBTARGET_EXTRA_SPECS #define SUBTARGET_EXTRA_SPECS \ DARWIN_EXTRA_SPECS \