Changeset dffaeac for src/driver/cc1.cc


Ignore:
Timestamp:
Jul 13, 2018, 6:34:11 PM (4 years ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
aaron-thesis, arm-eh, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, no_list, persistent-indexer
Children:
6b8b767
Parents:
26ef3b2
Message:

fix -x flag and handle CFA suffixes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/driver/cc1.cc

    r26ef3b2 rdffaeac  
    1010// Created On       : Fri Aug 26 14:23:51 2005
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Sat May 12 16:11:53 2018
    13 // Update Count     : 94
     12// Last Modified On : Fri Jul 13 17:40:10 2018
     13// Update Count     : 110
    1414//
    1515
     
    4444} // prefix
    4545
     46enum { NumSuffixes = 2 };
     47const string suffixes[NumSuffixes] = { "cfa", "hfa", };
     48
     49bool suffix( string arg ) {
     50        //std::cerr << arg << std::endl;
     51        size_t dot = arg.find_last_of( "." );
     52        //std::cerr << dot << " " << (dot != string::npos ? arg.substr( dot + 1 ) : "fred" ) << std::endl;
     53        if ( dot == string::npos ) return false;
     54        string sx = arg.substr( dot + 1 );
     55        for ( int i = 0; i < NumSuffixes; i += 1 ) {
     56                if ( sx == suffixes[i] ) return true;
     57        } // for
     58        return false;
     59} // suffix
     60
    4661
    4762void checkEnv( const char *args[], int &nargs ) {
     
    5166        if ( value != NULL ) {
    5267                compiler_name = value;
    53 #ifdef __DEBUG_H__
     68                #ifdef __DEBUG_H__
    5469                cerr << "env arg:\"" << compiler_name << "\"" << endl;
    55 #endif // __DEBUG_H__
     70                #endif // __DEBUG_H__
    5671        } // if
    5772
     
    5974        if ( value != NULL ) {
    6075                args[nargs] = ( *new string( value ) ).c_str(); // pass the argument along
    61 #ifdef __DEBUG_H__
     76                #ifdef __DEBUG_H__
    6277                cerr << "env arg:\"" << args[nargs] << "\"" << endl;
    63 #endif // __DEBUG_H__
     78                #endif // __DEBUG_H__
    6479                nargs += 1;
    6580        } // if
     
    6883        if ( value != NULL ) {
    6984                args[nargs] = ( *new string( value ) ).c_str(); // pass the argument along
    70 #ifdef __DEBUG_H__
     85                #ifdef __DEBUG_H__
    7186                cerr << "env arg:\"" << args[nargs] << "\"" << endl;
    72 #endif // __DEBUG_H__
     87                #endif // __DEBUG_H__
    7388                nargs += 1;
    7489        } // if
     
    115130        signal( SIGTERM, sigTermHandler );
    116131
    117 #ifdef __DEBUG_H__
     132        #ifdef __DEBUG_H__
    118133        cerr << "Stage1" << endl;
    119 #endif // __DEBUG_H__
     134        #endif // __DEBUG_H__
    120135
    121136        // process all the arguments
     
    124139
    125140        for ( i = 1; i < argc; i += 1 ) {
    126 #ifdef __DEBUG_H__
     141                #ifdef __DEBUG_H__
    127142                cerr << "argv[" << i << "]:\"" << argv[i] << "\"" << endl;
    128 #endif // __DEBUG_H__
     143                #endif // __DEBUG_H__
    129144                arg = argv[i];
    130 #ifdef __DEBUG_H__
     145                #ifdef __DEBUG_H__
    131146                cerr << "arg:\"" << arg << "\"" << endl;
    132 #endif // __DEBUG_H__
     147                #endif // __DEBUG_H__
    133148                if ( prefix( arg, "-" ) ) {
    134149                        // strip g++ flags that are inappropriate or cause duplicates in subsequent passes
     
    164179                                ncargs += 1;
    165180                                i += 1;                                                                 // and the argument
    166                         } else if ( prefix( arg, D__GCC_X__ ) ) {
    167                                 args[nargs] = "-x";
    168                                 nargs += 1;
    169                                 args[nargs] = ( *new string( arg.substr( D__GCC_X__.size() ) ) ).c_str(); // pass the flag along
    170                                 nargs += 1;
    171                         } else if ( arg == "-D" && prefix( argv[i + 1], D__GCC_X__.substr(2) ) ) {
    172                                 args[nargs] = "-x";
    173                                 nargs += 1;
    174                                 args[nargs] = ( *new string( string( argv[i + 1] ).substr( D__GCC_X__.size() - 2 ) ) ).c_str(); // pass the flag along
    175                                 nargs += 1;
    176                                 i += 1;                                                                 // and the argument
     181                        // } else if ( prefix( arg, D__GCC_X__ ) ) {
     182                        //      args[nargs] = "-x";
     183                        //      nargs += 1;
     184                        //      args[nargs] = ( *new string( arg.substr( D__GCC_X__.size() ) ) ).c_str(); // pass the flag along
     185                        //      nargs += 1;
     186                        // } else if ( arg == "-D" && prefix( argv[i + 1], D__GCC_X__.substr(2) ) ) {
     187                        //      args[nargs] = "-x";
     188                        //      nargs += 1;
     189                        //      args[nargs] = ( *new string( string( argv[i + 1] ).substr( D__GCC_X__.size() - 2 ) ) ).c_str(); // pass the flag along
     190                        //      nargs += 1;
     191                        //      i += 1;                                                                 // and the argument
    177192                        } else if ( prefix( arg, D__GCC_BPREFIX__ ) ) {
    178193                                bprefix = arg.substr( D__GCC_BPREFIX__.size() );
     
    196211                                        args[nargs] = argv[i];                          // pass the argument along
    197212                                        nargs += 1;
    198 #ifdef __DEBUG_H__
     213                                        #ifdef __DEBUG_H__
    199214                                        cerr << "argv[" << i << "]:\"" << argv[i] << "\"" << endl;
    200 #endif // __DEBUG_H__
     215                                        #endif // __DEBUG_H__
    201216                                } else if ( arg == "-MD" || arg == "-MMD" ) {
    202217                                        args[nargs] = "-MF";                            // insert before file
     
    205220                                        args[nargs] = argv[i];                          // pass the argument along
    206221                                        nargs += 1;
    207 #ifdef __DEBUG_H__
     222                                        #ifdef __DEBUG_H__
    208223                                        cerr << "argv[" << i << "]:\"" << argv[i] << "\"" << endl;
    209 #endif // __DEBUG_H__
     224                                        #endif // __DEBUG_H__
    210225                                } // if
    211226                        } // if
     
    213228                        if ( cpp_in == NULL ) {
    214229                                cpp_in = argv[i];
    215 #ifdef __DEBUG_H__
     230                                #ifdef __DEBUG_H__
    216231                                cerr << "cpp_in:\"" << cpp_in << "\"" << endl;
    217 #endif // __DEBUG_H__
     232                                #endif // __DEBUG_H__
    218233                        } else if ( cpp_out == NULL ) {
    219234                                cpp_out = argv[i];
    220 #ifdef __DEBUG_H__
     235                                #ifdef __DEBUG_H__
    221236                                cerr << "cpp_out:\"" << cpp_out << "\""<< endl;
    222 #endif // __DEBUG_H__
     237                                #endif // __DEBUG_H__
    223238                        } else {
    224239                                cerr << "Usage: " << argv[0] << " input-file [output-file] [options]" << endl;
     
    228243        } // for
    229244
    230 #ifdef __DEBUG_H__
     245        #ifdef __DEBUG_H__
    231246        cerr << "args:";
    232247        for ( i = 1; i < nargs; i += 1 ) {
     
    236251        if ( cpp_out != NULL ) cerr << " " << cpp_out;
    237252        cerr << endl;
    238 #endif // __DEBUG_H__
     253        #endif // __DEBUG_H__
    239254
    240255        if ( cpp_in == NULL ) {
     
    258273                args[nargs] = NULL;                                                             // terminate argument list
    259274
    260 #ifdef __DEBUG_H__
     275                #ifdef __DEBUG_H__
    261276                cerr << "nargs: " << nargs << endl;
    262277                for ( i = 0; args[i] != NULL; i += 1 ) {
     
    264279                } // for
    265280                cerr << endl;
    266 #endif // __DEBUG_H__
     281                #endif // __DEBUG_H__
    267282
    268283                execvp( args[0], (char *const *)args );                 // should not return
     
    279294        } // if
    280295
    281 #ifdef __DEBUG_H__
     296        #ifdef __DEBUG_H__
    282297        cerr << "tmpname:" << tmpname << " tmpfilefd:" << tmpfilefd << endl;
    283 #endif // __DEBUG_H__
     298        #endif // __DEBUG_H__
    284299
    285300        // Run the C preprocessor and save the output in tmpfile.
     
    295310
    296311                args[0] = compiler_name.c_str();
     312                if ( suffix( cpp_in ) ) {
     313                        args[nargs] = "-x";
     314                        nargs += 1;
     315                        args[nargs] = "c";
     316                        nargs += 1;
     317                } // if
    297318                args[nargs] = cpp_in;                                                   // input to cpp
    298319                nargs += 1;
    299320                args[nargs] = NULL;                                                             // terminate argument list
    300321
    301 #ifdef __DEBUG_H__
     322                #ifdef __DEBUG_H__
    302323                cerr << "cpp nargs: " << nargs << endl;
    303324                for ( i = 0; args[i] != NULL; i += 1 ) {
     
    305326                } // for
    306327                cerr << endl;
    307 #endif // __DEBUG_H__
     328                #endif // __DEBUG_H__
    308329
    309330                execvp( args[0], (char *const *)args );                 // should not return
     
    314335        wait( &code );                                                                          // wait for child to finish
    315336
    316 #ifdef __DEBUG_H__
     337        #ifdef __DEBUG_H__
    317338        cerr << "return code from cpp:" << WEXITSTATUS(code) << endl;
    318 #endif // __DEBUG_H__
     339        #endif // __DEBUG_H__
    319340
    320341        if ( WIFSIGNALED(code) != 0 ) {                                         // child failed ?
     
    352373                cargs[ncargs] = NULL;                                                   // terminate argument list
    353374
    354 #ifdef __DEBUG_H__
     375                #ifdef __DEBUG_H__
    355376                cerr << "cfa-cpp ncargs: " << o_name << " " << CFA_flag << " " << ncargs << endl;
    356377                for ( i = 0; cargs[i] != NULL; i += 1 ) {
     
    358379                } // for
    359380                cerr << endl;
    360 #endif // __DEBUG_H__
     381                #endif // __DEBUG_H__
    361382
    362383                execvp( cargs[0], (char * const *)cargs );              // should not return
     
    367388        wait( &code );                                                                          // wait for child to finish
    368389
    369 #ifdef __DEBUG_H__
     390        #ifdef __DEBUG_H__
    370391        cerr << "return code from cfa-cpp:" << WEXITSTATUS(code) << endl;
    371 #endif // __DEBUG_H__
     392        #endif // __DEBUG_H__
    372393
    373394        // Must unlink here because file must exist across execvp.
     
    393414        int nargs = 1;                                                                          // number of arguments in args list; 0 => command name
    394415
    395 #ifdef __DEBUG_H__
     416        #ifdef __DEBUG_H__
    396417        cerr << "Stage2" << endl;
    397 #endif // __DEBUG_H__
     418        #endif // __DEBUG_H__
    398419
    399420        // process all the arguments
     
    402423
    403424        for ( i = 1; i < argc; i += 1 ) {
    404 #ifdef __DEBUG_H__
     425                #ifdef __DEBUG_H__
    405426                cerr << "argv[" << i << "]:\"" << argv[i] << "\"" << endl;
    406 #endif // __DEBUG_H__
     427                #endif // __DEBUG_H__
    407428                arg = argv[i];
    408 #ifdef __DEBUG_H__
     429                #ifdef __DEBUG_H__
    409430                cerr << "arg:\"" << arg << "\"" << endl;
    410 #endif // __DEBUG_H__
     431                #endif // __DEBUG_H__
    411432                if ( prefix( arg, "-" ) ) {
    412433                        // strip inappropriate flags
    413434
    414435                        if ( arg == "-quiet" || arg == "-version" || arg == "-fpreprocessed" ||
    415                                  // Currently CFA does not suppose precompiled .h files.
    416                                  prefix( arg, "--output-pch" ) ) {
     436                                // Currently CFA does not suppose precompiled .h files.
     437                                prefix( arg, "--output-pch" ) ) {
    417438
    418439                                // strip inappropriate flags with an argument
     
    420441                        } else if ( arg == "-auxbase" || arg == "-auxbase-strip" || arg == "-dumpbase" ) {
    421442                                i += 1;
    422 #ifdef __DEBUG_H__
     443                                #ifdef __DEBUG_H__
    423444                                cerr << "arg:\"" << argv[i] << "\"" << endl;
    424 #endif // __DEBUG_H__
     445                                #endif // __DEBUG_H__
    425446
    426447                                // all other flags
     
    433454                                        args[nargs] = argv[i];                          // pass the argument along
    434455                                        nargs += 1;
    435 #ifdef __DEBUG_H__
     456                #ifdef __DEBUG_H__
    436457                                        cerr << "arg:\"" << argv[i] << "\"" << endl;
    437 #endif // __DEBUG_H__
     458                #endif // __DEBUG_H__
    438459                                } // if
    439460                        } // if
     
    441462                        if ( cpp_in == NULL ) {
    442463                                cpp_in = argv[i];
    443 #ifdef __DEBUG_H__
     464                                #ifdef __DEBUG_H__
    444465                                cerr << "cpp_in:\"" << cpp_in << "\"" << endl;
    445 #endif // __DEBUG_H__
     466                                #endif // __DEBUG_H__
    446467                        } else {
    447468                                cerr << "Usage: " << argv[0] << " input-file [output-file] [options]" << endl;
     
    451472        } // for
    452473
    453 #ifdef __DEBUG_H__
     474        #ifdef __DEBUG_H__
    454475        cerr << "args:";
    455476        for ( i = 1; i < nargs; i += 1 ) {
     
    458479        cerr << endl;
    459480        if ( cpp_in != NULL ) cerr << " " << cpp_in;
    460 #endif // __DEBUG_H__
     481        #endif // __DEBUG_H__
    461482
    462483        args[0] = compiler_name.c_str();
     
    467488        args[nargs] = NULL;                                                                     // terminate argument list
    468489
    469 #ifdef __DEBUG_H__
     490        #ifdef __DEBUG_H__
    470491        cerr << "stage2 nargs: " << nargs << endl;
    471492        for ( i = 0; args[i] != NULL; i += 1 ) {
     
    473494        } // for
    474495        cerr << endl;
    475 #endif // __DEBUG_H__
     496        #endif // __DEBUG_H__
    476497
    477498        execvp( args[0], (char * const *)args );                        // should not return
     
    482503
    483504int main( const int argc, const char * const argv[], __attribute__((unused)) const char * const env[] ) {
    484 #ifdef __DEBUG_H__
     505        #ifdef __DEBUG_H__
    485506        for ( int i = 0; env[i] != NULL; i += 1 ) {
    486507                cerr << env[i] << endl;
    487508        } // for
    488 #endif // __DEBUG_H__
     509        #endif // __DEBUG_H__
    489510
    490511        string arg = argv[1];
Note: See TracChangeset for help on using the changeset viewer.