Subversion Repositories QNX 8.QNX8 linker driver

Rev

Rev 12 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 12 Rev 13
Line 54... Line 54...
54
#define IS_TARGET_INTEL 0
54
#define IS_TARGET_INTEL 0
55
#define TARGET_TRIPLE "aarch64-unknown-nto-qnx8.0.0"
55
#define TARGET_TRIPLE "aarch64-unknown-nto-qnx8.0.0"
56
#else
56
#else
57
#error unsupported platform (not x86_64, not aarch64le). Please implement!
57
#error unsupported platform (not x86_64, not aarch64le). Please implement!
58
#endif
58
#endif
59
#define COMPILER "clang" EXECUTABLE_SUFFIX
59
#define COMPILER "clang"
60
#define LINKER TARGET_TRIPLE "-ld"
60
#define LINKER TARGET_TRIPLE "-ld"
61
//#define LINKER "ld.lld"
61
//#define LINKER "ld.lld"
62
 
62
 
63
 
63
 
64
#define ARGMODE_SINGLE   0
64
#define ARGMODE_SINGLE   0
Line 238... Line 238...
238
   {
238
   {
239
      if (ARGV_CONTAINS_SINGLEARG ("-c"))
239
      if (ARGV_CONTAINS_SINGLEARG ("-c"))
240
         for (arg_index = 1; arg_index < argc; arg_index++)
240
         for (arg_index = 1; arg_index < argc; arg_index++)
241
            if (strcmp (argv[arg_index], "-shared") == 0)
241
            if (strcmp (argv[arg_index], "-shared") == 0)
242
               argv[arg_index] = ""; // HACK for GNU autotools: when compiling, wipe out the -shared flag to avoid a warning
242
               argv[arg_index] = ""; // HACK for GNU autotools: when compiling, wipe out the -shared flag to avoid a warning
243
      execvpe (COMPILER, argv, envp); // by leaving argv[0] untouched, we will be invoking Clang as 'gcc', which will give it a supplemental hint about how to behave
243
      execvpe (COMPILER EXECUTABLE_SUFFIX, argv, envp); // by leaving argv[0] untouched, we will be invoking Clang as 'gcc', which will give it a supplemental hint about how to behave
244
   }
244
   }
245
 
245
 
246
   // collect source and object files in two separate lists
246
   // collect source and object files in two separate lists
247
   for (arg_index = 1; arg_index < argc; arg_index++)
247
   for (arg_index = 1; arg_index < argc; arg_index++)
248
      if ((strcmp (argv[arg_index - 1], "-o") != 0) // this arg is NOT preceded by "-o"...
248
      if ((strcmp (argv[arg_index - 1], "-o") != 0) // this arg is NOT preceded by "-o"...
Line 268... Line 268...
268
   {
268
   {
269
      if (ARGV_CONTAINS_SINGLEARG ("-c"))
269
      if (ARGV_CONTAINS_SINGLEARG ("-c"))
270
         for (arg_index = 1; arg_index < argc; arg_index++)
270
         for (arg_index = 1; arg_index < argc; arg_index++)
271
            if (strcmp (argv[arg_index], "-shared") == 0)
271
            if (strcmp (argv[arg_index], "-shared") == 0)
272
               argv[arg_index] = ""; // HACK for GNU autotools: when compiling, wipe out the -shared flag to avoid a warning
272
               argv[arg_index] = ""; // HACK for GNU autotools: when compiling, wipe out the -shared flag to avoid a warning
273
      execvpe (COMPILER, argv, envp); // by leaving argv[0] untouched, we will be invoking Clang as 'gcc', which will give it a supplemental hint about how to behave
273
      execvpe (COMPILER EXECUTABLE_SUFFIX, argv, envp); // by leaving argv[0] untouched, we will be invoking Clang as 'gcc', which will give it a supplemental hint about how to behave
274
   }
274
   }
275
 
275
 
276
   // collect -l flags
276
   // collect -l flags
277
   for (arg_index = 1; arg_index < argc; arg_index++)
277
   for (arg_index = 1; arg_index < argc; arg_index++)
278
      if ((strncmp (argv[arg_index], "-l", 2) == 0) && ((argv[arg_index])[2] != 0))
278
      if ((strncmp (argv[arg_index], "-l", 2) == 0) && ((argv[arg_index])[2] != 0))
Line 1197... Line 1197...
1197
      for (arg_index = 0; arg_index < linker_argc; arg_index++)
1197
      for (arg_index = 0; arg_index < linker_argc; arg_index++)
1198
         fprintf (stderr, "%s%s%s\n", (arg_index > 0 ? "\t" : ""), linker_argv[arg_index], ((size_t) arg_index + 1 < linker_argc ? " \\" : ""));
1198
         fprintf (stderr, "%s%s%s\n", (arg_index > 0 ? "\t" : ""), linker_argv[arg_index], ((size_t) arg_index + 1 < linker_argc ? " \\" : ""));
1199
      fputs ("LINKER DRIVER: CONSTRUCTED COMMAND LINE END\n", stderr);
1199
      fputs ("LINKER DRIVER: CONSTRUCTED COMMAND LINE END\n", stderr);
1200
   }
1200
   }
1201
 
1201
 
1202
   execvpe (LINKER, linker_argv, envp);
1202
   execvpe (LINKER EXECUTABLE_SUFFIX, linker_argv, envp);
1203
   return (1); // unreachable code
1203
   return (1); // unreachable code
1204
}
1204
}