qmake/generators/symbian/symmake.cpp
changeset 22 79de32ba3296
parent 19 fcece45ef507
child 29 b72c6db6890b
equal deleted inserted replaced
19:fcece45ef507 22:79de32ba3296
    79 #define RSS_TAG_DEFAULT "default_rules" // Same as just giving rules without tag
    79 #define RSS_TAG_DEFAULT "default_rules" // Same as just giving rules without tag
    80 
    80 
    81 #define MMP_TARGET "TARGET"
    81 #define MMP_TARGET "TARGET"
    82 #define MMP_TARGETTYPE "TARGETTYPE"
    82 #define MMP_TARGETTYPE "TARGETTYPE"
    83 #define MMP_SECUREID "SECUREID"
    83 #define MMP_SECUREID "SECUREID"
    84 #define MMP_OPTION_CW "OPTION CW"
    84 #define MMP_OPTION "OPTION"
    85 #define MMP_OPTION_ARMCC "OPTION ARMCC"
    85 #define MMP_LINKEROPTION "LINKEROPTION"
    86 #define MMP_OPTION_GCCE "OPTION GCCE"
       
    87 #define MMP_LINKEROPTION_CW "LINKEROPTION CW"
       
    88 #define MMP_LINKEROPTION_ARMCC "LINKEROPTION ARMCC"
       
    89 #define MMP_LINKEROPTION_GCCE "LINKEROPTION GCCE"
       
    90 #define MMP_CAPABILITY "CAPABILITY"
    86 #define MMP_CAPABILITY "CAPABILITY"
    91 #define MMP_EPOCALLOWDLLDATA "EPOCALLOWDLLDATA"
    87 #define MMP_EPOCALLOWDLLDATA "EPOCALLOWDLLDATA"
    92 #define MMP_EPOCHEAPSIZE "EPOCHEAPSIZE"
    88 #define MMP_EPOCHEAPSIZE "EPOCHEAPSIZE"
    93 #define MMP_EPOCSTACKSIZE "EPOCSTACKSIZE"
    89 #define MMP_EPOCSTACKSIZE "EPOCSTACKSIZE"
    94 #define MMP_UID "UID"
    90 #define MMP_UID "UID"
    95 #define MMP_VENDORID "VENDORID"
    91 #define MMP_VENDORID "VENDORID"
    96 #define MMP_VERSION "VERSION"
    92 #define MMP_VERSION "VERSION"
    97 #define MMP_START_RESOURCE "START RESOURCE"
    93 #define MMP_START_RESOURCE "START RESOURCE"
    98 #define MMP_END_RESOURCE "END"
    94 #define MMP_END_RESOURCE "END"
       
    95 
       
    96 #define VAR_CXXFLAGS "QMAKE_CXXFLAGS"
       
    97 #define VAR_CFLAGS "QMAKE_CFLAGS"
       
    98 #define VAR_LFLAGS "QMAKE_LFLAGS"
    99 
    99 
   100 #define SIS_TARGET "sis"
   100 #define SIS_TARGET "sis"
   101 #define INSTALLER_SIS_TARGET "installer_sis"
   101 #define INSTALLER_SIS_TARGET "installer_sis"
   102 #define ROM_STUB_SIS_TARGET "stub_sis"
   102 #define ROM_STUB_SIS_TARGET "stub_sis"
   103 #define OK_SIS_TARGET "ok_sis"
   103 #define OK_SIS_TARGET "ok_sis"
   820     QStringList restrictedMmpKeywords;
   820     QStringList restrictedMmpKeywords;
   821     bool inResourceBlock = false;
   821     bool inResourceBlock = false;
   822 
   822 
   823     overridableMmpKeywords << QLatin1String(MMP_TARGETTYPE) << QLatin1String(MMP_EPOCHEAPSIZE);
   823     overridableMmpKeywords << QLatin1String(MMP_TARGETTYPE) << QLatin1String(MMP_EPOCHEAPSIZE);
   824     restrictableMmpKeywords << QLatin1String(MMP_TARGET) << QLatin1String(MMP_SECUREID)
   824     restrictableMmpKeywords << QLatin1String(MMP_TARGET) << QLatin1String(MMP_SECUREID)
   825        << QLatin1String(MMP_LINKEROPTION_CW) << QLatin1String(MMP_LINKEROPTION_ARMCC)
   825        << QLatin1String(MMP_OPTION) << QLatin1String(MMP_LINKEROPTION)
   826        << QLatin1String(MMP_LINKEROPTION_GCCE)
       
   827        << QLatin1String(MMP_CAPABILITY) << QLatin1String(MMP_EPOCALLOWDLLDATA)
   826        << QLatin1String(MMP_CAPABILITY) << QLatin1String(MMP_EPOCALLOWDLLDATA)
   828        << QLatin1String(MMP_EPOCSTACKSIZE) << QLatin1String(MMP_UID)
   827        << QLatin1String(MMP_EPOCSTACKSIZE) << QLatin1String(MMP_UID)
   829        << QLatin1String(MMP_VENDORID) << QLatin1String(MMP_VERSION);
   828        << QLatin1String(MMP_VENDORID) << QLatin1String(MMP_VERSION);
   830 
   829 
   831     foreach (QString item, project->values("MMP_RULES")) {
   830     foreach (QString item, project->values("MMP_RULES")) {
  1184         t << MMP_CAPABILITY "\t\tNone";
  1183         t << MMP_CAPABILITY "\t\tNone";
  1185     }
  1184     }
  1186     t << endl << endl;
  1185     t << endl << endl;
  1187 }
  1186 }
  1188 
  1187 
       
  1188 void SymbianMakefileGenerator::writeMmpFileConditionalOptions(QTextStream& t,
       
  1189                                                               const QString &optionType,
       
  1190                                                               const QString &optionTag,
       
  1191                                                               const QString &variableBase)
       
  1192 {
       
  1193     foreach(QString compilerVersion, project->values("VERSION_FLAGS." + optionTag)) {
       
  1194         QStringList currentValues = project->values(variableBase + "." + compilerVersion);
       
  1195         if (currentValues.size()) {
       
  1196             t << "#if defined(" << compilerVersion << ")" << endl;
       
  1197             t << optionType << " " << optionTag << " " << currentValues.join(" ") <<  endl;
       
  1198             t << "#endif" << endl;
       
  1199         }
       
  1200     }
       
  1201 }
       
  1202 
       
  1203 void SymbianMakefileGenerator::writeMmpFileSimpleOption(QTextStream& t,
       
  1204                                                         const QString &optionType,
       
  1205                                                         const QString &optionTag,
       
  1206                                                         const QString &options)
       
  1207 {
       
  1208     QString trimmedOptions = options.trimmed();
       
  1209     if (!trimmedOptions.isEmpty())
       
  1210         t << optionType << " " << optionTag << " " << trimmedOptions << endl;
       
  1211 }
       
  1212 
       
  1213 void SymbianMakefileGenerator::appendMmpFileOptions(QString &options, const QStringList &list)
       
  1214 {
       
  1215     if (list.size()) {
       
  1216         options.append(list.join(" "));
       
  1217         options.append(" ");
       
  1218     }
       
  1219 }
       
  1220 
  1189 void SymbianMakefileGenerator::writeMmpFileCompilerOptionPart(QTextStream& t)
  1221 void SymbianMakefileGenerator::writeMmpFileCompilerOptionPart(QTextStream& t)
  1190 {
  1222 {
  1191     QString cw, armcc, gcce;
  1223     QStringList keywords =  project->values("MMP_OPTION_KEYWORDS");
  1192     QString cwlink, armlink, gccelink;
  1224     QStringList commonCxxFlags = project->values(VAR_CXXFLAGS);
  1193 
  1225     QStringList commonCFlags = project->values(VAR_CFLAGS);
  1194     if (0 != project->values("QMAKE_CXXFLAGS.CW").size()) {
  1226     QStringList commonLFlags = project->values(VAR_LFLAGS);
  1195         cw.append(project->values("QMAKE_CXXFLAGS.CW").join(" "));
  1227 
  1196         cw.append(" ");
  1228     foreach(QString item, keywords) {
  1197     }
  1229         QString compilerOption;
  1198 
  1230         QString linkerOption;
  1199     if (0 != project->values("QMAKE_CXXFLAGS.ARMCC").size()) {
  1231 
  1200         armcc.append(project->values("QMAKE_CXXFLAGS.ARMCC").join(" "));
  1232         appendMmpFileOptions(compilerOption, project->values(VAR_CXXFLAGS "." + item));
  1201         armcc.append(" ");
  1233         appendMmpFileOptions(compilerOption, project->values(VAR_CFLAGS "." + item));
  1202     }
  1234         appendMmpFileOptions(compilerOption, commonCxxFlags);
  1203 
  1235         appendMmpFileOptions(compilerOption, commonCFlags);
  1204     if (0 != project->values("QMAKE_CXXFLAGS.GCCE").size()) {
  1236 
  1205         gcce.append(project->values("QMAKE_CXXFLAGS.GCCE").join(" "));
  1237         appendMmpFileOptions(linkerOption, project->values(VAR_LFLAGS "."  + item));
  1206         gcce.append(" ");
  1238         appendMmpFileOptions(linkerOption, commonLFlags);
  1207     }
  1239 
  1208 
  1240         writeMmpFileSimpleOption(t, MMP_OPTION, item, compilerOption);
  1209     if (0 != project->values("QMAKE_CFLAGS.CW").size()) {
  1241         writeMmpFileSimpleOption(t, MMP_LINKEROPTION, item, linkerOption);
  1210         cw.append(project->values("QMAKE_CFLAGS.CW").join(" "));
  1242 
  1211         cw.append(" ");
  1243         writeMmpFileConditionalOptions(t, MMP_OPTION, item, VAR_CXXFLAGS);
  1212     }
  1244         writeMmpFileConditionalOptions(t, MMP_LINKEROPTION, item, VAR_LFLAGS);
  1213 
  1245     }
  1214     if (0 != project->values("QMAKE_CFLAGS.ARMCC").size()) {
       
  1215         armcc.append(project->values("QMAKE_CFLAGS.ARMCC").join(" "));
       
  1216         armcc.append(" ");
       
  1217     }
       
  1218 
       
  1219     if (0 != project->values("QMAKE_CFLAGS.GCCE").size()) {
       
  1220         gcce.append(project->values("QMAKE_CXXFLAGS.GCCE").join(" "));
       
  1221         gcce.append(" ");
       
  1222     }
       
  1223 
       
  1224     if (0 != project->values("QMAKE_CXXFLAGS").size()) {
       
  1225         cw.append(project->values("QMAKE_CXXFLAGS").join(" "));
       
  1226         cw.append(" ");
       
  1227         armcc.append(project->values("QMAKE_CXXFLAGS").join(" "));
       
  1228         armcc.append(" ");
       
  1229         gcce.append(project->values("QMAKE_CXXFLAGS").join(" "));
       
  1230         gcce.append(" ");
       
  1231     }
       
  1232 
       
  1233     if (0 != project->values("QMAKE_CFLAGS").size()) {
       
  1234         cw.append(project->values("QMAKE_CFLAGS").join(" "));
       
  1235         cw.append(" ");
       
  1236         armcc.append(project->values("QMAKE_CFLAGS").join(" "));
       
  1237         armcc.append(" ");
       
  1238         gcce.append(project->values("QMAKE_CFLAGS").join(" "));
       
  1239         gcce.append(" ");
       
  1240     }
       
  1241 
       
  1242     if (0 != project->values("QMAKE_LFLAGS.CW").size()) {
       
  1243         cwlink.append(project->values("QMAKE_LFLAGS.CW").join(" "));
       
  1244         cwlink.append(" ");
       
  1245     }
       
  1246 
       
  1247     if (0 != project->values("QMAKE_LFLAGS.ARMCC").size()) {
       
  1248         armlink.append(project->values("QMAKE_LFLAGS.ARMCC").join(" "));
       
  1249         armlink.append(" ");
       
  1250     }
       
  1251 
       
  1252     if (0 != project->values("QMAKE_LFLAGS.GCCE").size()) {
       
  1253         gccelink.append(project->values("QMAKE_LFLAGS.GCCE").join(" "));
       
  1254         gccelink.append(" ");
       
  1255     }
       
  1256 
       
  1257     if (0 != project->values("QMAKE_LFLAGS").size()) {
       
  1258         cwlink.append(project->values("QMAKE_LFLAGS").join(" "));
       
  1259         cwlink.append(" ");
       
  1260         armlink.append(project->values("QMAKE_LFLAGS").join(" "));
       
  1261         armlink.append(" ");
       
  1262         gccelink.append(project->values("QMAKE_LFLAGS").join(" "));
       
  1263         gccelink.append(" ");
       
  1264     }
       
  1265 
       
  1266     if (!cw.isEmpty() && cw[cw.size()-1] == ' ')
       
  1267         cw.chop(1);
       
  1268     if (!armcc.isEmpty() && armcc[armcc.size()-1] == ' ')
       
  1269         armcc.chop(1);
       
  1270     if (!gcce.isEmpty() && gcce[gcce.size()-1] == ' ')
       
  1271         gcce.chop(1);
       
  1272     if (!cwlink.isEmpty() && cwlink[cwlink.size()-1] == ' ')
       
  1273         cwlink.chop(1);
       
  1274     if (!armlink.isEmpty() && armlink[armlink.size()-1] == ' ')
       
  1275         armlink.chop(1);
       
  1276     if (!gccelink.isEmpty() && gccelink[gccelink.size()-1] == ' ')
       
  1277         gccelink.chop(1);
       
  1278 
       
  1279     if (!cw.isEmpty())
       
  1280         t << MMP_OPTION_CW " " << cw <<  endl;
       
  1281     if (!armcc.isEmpty())
       
  1282         t << MMP_OPTION_ARMCC " " << armcc <<  endl;
       
  1283 
       
  1284     foreach(QString armccVersion, project->values("VERSION_FLAGS.ARMCC")) {
       
  1285         QStringList currentValues = project->values("QMAKE_CXXFLAGS." + armccVersion);
       
  1286         if (currentValues.size()) {
       
  1287             t << "#if defined(" << armccVersion << ")" << endl;
       
  1288             t << MMP_OPTION_ARMCC " " << currentValues.join(" ") <<  endl;
       
  1289             t << "#endif" << endl;
       
  1290         }
       
  1291     }
       
  1292 
       
  1293     if (!gcce.isEmpty())
       
  1294         t << MMP_OPTION_GCCE " " << gcce <<  endl;
       
  1295 
       
  1296     if (!cwlink.isEmpty())
       
  1297         t << MMP_LINKEROPTION_CW " " << cwlink <<  endl;
       
  1298     if (!armlink.isEmpty())
       
  1299         t << MMP_LINKEROPTION_ARMCC " " << armlink <<  endl;
       
  1300     if (!gccelink.isEmpty())
       
  1301         t << MMP_LINKEROPTION_GCCE " " << gccelink <<  endl;
       
  1302 
  1246 
  1303     t << endl;
  1247     t << endl;
  1304 }
  1248 }
  1305 
  1249 
  1306 void SymbianMakefileGenerator::writeMmpFileBinaryVersionPart(QTextStream& t)
  1250 void SymbianMakefileGenerator::writeMmpFileBinaryVersionPart(QTextStream& t)