Ticket #54773: patch-use-libcxx.diff

File patch-use-libcxx.diff, 3.0 KB (added by RJVB (René Bertin), 7 years ago)
  • incpath.c

    old new  
    129129  int relocated = cpp_relocated ();
    130130  size_t len;
    131131
     132  if (cxx_stdinc)
     133    {
     134      if (!getenv("LIBCPP_INCLUDE_PATH") && !getenv("GCC_FORCE_LIBSTDCPP"))
     135        {
     136          add_path (xstrdup ("@LLVMHEADERPATH@"), SYSTEM, true, false);
     137        }
     138    }
    132139  if (iprefix && (len = cpp_GCC_INCLUDE_DIR_len) != 0)
    133140    {
    134141      /* Look for directories that start with the standard prefix.
     
    474481  /* CPATH and language-dependent environment variables may add to the
    475482     include chain.  */
    476483  add_env_var_paths ("CPATH", BRACKET);
     484  if (stdinc && cxx_stdinc && !getenv("GCC_FORCE_LIBSTDCPP"))
     485    add_env_var_paths ("LIBCPP_INCLUDE_PATH", SYSTEM);
    477486  add_env_var_paths (lang_env_vars[idx], SYSTEM);
    478487
    479488  target_c_incpath.extra_pre_includes (sysroot, iprefix, stdinc);
  • g++spec.c

    old new  
    4848#ifndef LIBSTDCXX
    4949#define LIBSTDCXX "stdc++"
    5050#endif
     51// libc++ support:
     52#ifndef LIBCXX
     53#define LIBCXX "c++"
     54#define LIBCXXABI "c++abi"
     55// using libsupc++ is a hack, probably to be dropped on systems that have a new enough libc++
     56// which has `operator delete(void*, unsigned long)`
     57#define LIBSUPCXX "supc++"
     58#endif
    5159#ifndef LIBSTDCXX_PROFILE
    5260#define LIBSTDCXX_PROFILE LIBSTDCXX
    5361#endif
     62
    5463#ifndef LIBSTDCXX_STATIC
    5564#define LIBSTDCXX_STATIC NULL
    5665#endif
     
    342351          j++;
    343352        }
    344353#endif
    345       generate_option (OPT_l,
    346                        saw_profile_flag ? LIBSTDCXX_PROFILE : LIBSTDCXX, 1,
    347                        CL_DRIVER, &new_decoded_options[j]);
    348       added_libraries++;
    349       j++;
    350       /* Add target-dependent static library, if necessary.  */
    351       if ((static_link || library > 1) && LIBSTDCXX_STATIC != NULL)
     354    // NOT checking for the existence of LIBCXXABI and LIBSUPCXX on purpose
     355         if (getenv ("GCC_FORCE_LIBSTDCPP")) {
     356                 fprintf(stderr, "GCC_FORCE_LIBSTDCPP - using -l%s instead of -l%s -l%s -l%s\n",
     357                 (saw_profile_flag ? LIBSTDCXX_PROFILE : LIBSTDCXX), LIBCXX, LIBCXXABI, LIBSUPCXX);
     358                 generate_option (OPT_l,
     359                                  saw_profile_flag ? LIBSTDCXX_PROFILE : LIBSTDCXX, 1,
     360                                  CL_DRIVER, &new_decoded_options[j]);
     361                 added_libraries++;
     362                 j++;
     363         } else {
     364                 generate_option (OPT_l, LIBCXX, 1,
     365                                  CL_DRIVER, &new_decoded_options[j]);
     366                 added_libraries++;
     367                 j++;
     368                 // add -lc++abi and -lsupc++
     369                 generate_option (OPT_l, LIBCXXABI, 1,
     370                                  CL_DRIVER, &new_decoded_options[j]);
     371                 added_libraries++;
     372                 j++;
     373                 generate_option (OPT_l, LIBSUPCXX, 1,
     374                                  CL_DRIVER, &new_decoded_options[j]);
     375                 added_libraries++;
     376                 j++;
     377         }
     378         /* Add target-dependent static library, if necessary.  */
     379         if ((static_link || library > 1) && (LIBSTDCXX_STATIC != NULL || getenv("GCC_IS_BUILDING_ITSELF")))
    352380        {
    353           generate_option (OPT_l, LIBSTDCXX_STATIC, 1,
     381          generate_option (OPT_l, LIBSTDCXX_STATIC ? LIBSTDCXX_STATIC : LIBSTDCXX, 1,
    354382                           CL_DRIVER, &new_decoded_options[j]);
    355383          added_libraries++;
    356384          j++;