Browse Source

Projucer: Added an "add recommended warning flags" checkbox to the exporters

tags/2021-05-28
Tom Poole 6 years ago
parent
commit
1fd9c2f282
7 changed files with 76 additions and 9 deletions
  1. +14
    -5
      extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Android.h
  2. +4
    -0
      extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_CodeBlocks.h
  3. +4
    -0
      extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Make.h
  4. +5
    -3
      extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Xcode.h
  5. +42
    -0
      extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.cpp
  6. +6
    -1
      extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.h
  7. +1
    -0
      extras/Projucer/Source/Utility/Helpers/jucer_PresetIDs.h

+ 14
- 5
extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Android.h View File

@@ -288,6 +288,7 @@ protected:
void createConfigProperties (PropertyListBuilder& props) override
{
addRecommendedLLVMCompilerWarningsProperty (props);
addGCCOptimisationProperty (props);
props.add (new TextPropertyComponent (androidArchitectures, "Architectures", 256, false),
@@ -634,11 +635,19 @@ private:
if (getProject().getProjectType().isStaticLibrary())
mo << " targets \"" << getNativeModuleBinaryName (cfg) << "\"" << newLine;
mo << " arguments \"-DJUCE_BUILD_CONFIGURATION=" << cfg.getProductFlavourCMakeIdentifier() << "\""
<< ", \"-DCMAKE_CXX_FLAGS_" << (cfg.isDebug() ? "DEBUG" : "RELEASE")
<< "=-O" << cfg.getGCCOptimisationFlag() << "\""
<< ", \"-DCMAKE_C_FLAGS_" << (cfg.isDebug() ? "DEBUG" : "RELEASE")
<< "=-O" << cfg.getGCCOptimisationFlag() << "\"" << newLine;
mo << " arguments "
<< "\"-DJUCE_BUILD_CONFIGURATION=" << cfg.getProductFlavourCMakeIdentifier() << "\"";
mo << ", \"-DCMAKE_CXX_FLAGS_" << (cfg.isDebug() ? "DEBUG" : "RELEASE")
<< "=-O" << cfg.getGCCOptimisationFlag();
for (auto& flag : cfg.getRecommendedCompilerWarningFlags())
mo << " " << flag;
mo << "\""
<< ", \"-DCMAKE_C_FLAGS_" << (cfg.isDebug() ? "DEBUG" : "RELEASE")
<< "=-O" << cfg.getGCCOptimisationFlag()
<< "\"" << newLine;
mo << " }" << newLine;
mo << " }" << newLine << newLine;


+ 4
- 0
extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_CodeBlocks.h View File

@@ -209,6 +209,7 @@ private:
void createConfigProperties (PropertyListBuilder& props) override
{
addRecommendedLinuxCompilerWarningsProperty (props);
addGCCOptimisationProperty (props);
props.add (new ChoicePropertyComponent (architectureTypeValue, "Architecture",
@@ -401,6 +402,9 @@ private:
if (auto* codeBlocksConfig = dynamic_cast<const CodeBlocksBuildConfiguration*> (&config))
flags.add (codeBlocksConfig->getArchitectureTypeString());
for (auto& recommended : config.getRecommendedCompilerWarningFlags())
flags.add (recommended);
flags.add ("-O" + config.getGCCOptimisationFlag());
if (config.isLinkTimeOptimisationEnabled())


+ 4
- 0
extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Make.h View File

@@ -45,6 +45,7 @@ protected:
void createConfigProperties (PropertyListBuilder& props) override
{
addRecommendedLinuxCompilerWarningsProperty (props);
addGCCOptimisationProperty (props);
props.add (new ChoicePropertyComponent (architectureTypeValue, "Architecture",
@@ -521,6 +522,9 @@ private:
if (extra.isNotEmpty())
result.add (extra);
for (auto& recommended : config.getRecommendedCompilerWarningFlags())
result.add (recommended);
return result;
}


+ 5
- 3
extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Xcode.h View File

@@ -631,6 +631,7 @@ protected:
void createConfigProperties (PropertyListBuilder& props) override
{
addXcodePluginInstallPathProperties (props);
addRecommendedLLVMCompilerWarningsProperty (props);
addGCCOptimisationProperty (props);
if (iOS)
@@ -1244,10 +1245,11 @@ public:
if (config.isFastMathEnabled())
s.set ("GCC_FAST_MATH", "YES");
auto extraFlags = owner.replacePreprocessorTokens (config, owner.getExtraCompilerFlagsString()).trim();
auto flags = (owner.replacePreprocessorTokens (config, owner.getExtraCompilerFlagsString())
+ " " + config.getRecommendedCompilerWarningFlags().joinIntoString (" ")).trim();
if (extraFlags.isNotEmpty())
s.set ("OTHER_CPLUSPLUSFLAGS", extraFlags.quoted());
if (flags.isNotEmpty())
s.set ("OTHER_CPLUSPLUSFLAGS", flags.quoted());
auto installPath = getInstallPathForConfiguration (config);


+ 42
- 0
extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.cpp View File

@@ -923,6 +923,7 @@ ProjectExporter::BuildConfiguration::BuildConfiguration (Project& p, const Value
configNameValue (config, Ids::name, getUndoManager(), "Build Configuration"),
targetNameValue (config, Ids::targetName, getUndoManager(), project.getProjectFilenameRootString()),
targetBinaryPathValue (config, Ids::binaryPath, getUndoManager()),
recommendedWarningsValue (config, Ids::recommendedWarnings, getUndoManager()),
optimisationLevelValue (config, Ids::optimisation, getUndoManager()),
linkTimeOptimisationValue (config, Ids::linkTimeOptimisation, getUndoManager(), ! isDebug()),
ppDefinesValue (config, Ids::defines, getUndoManager()),
@@ -930,6 +931,18 @@ ProjectExporter::BuildConfiguration::BuildConfiguration (Project& p, const Value
librarySearchPathValue (config, Ids::libraryPath, getUndoManager()),
userNotesValue (config, Ids::userNotes, getUndoManager())
{
recommendedCompilerWarningFlags["LLVM"] = { "-Wall", "-Wshadow-all", "-Wshorten-64-to-32", "-Wstrict-aliasing", "-Wuninitialized", "-Wunused-parameter",
"-Wconversion", "-Wsign-compare", "-Wint-conversion", "-Wconditional-uninitialized", "-Woverloaded-virtual",
"-Wreorder", "-Wconstant-conversion", "-Wsign-conversion", "-Wunused-private-field", "-Wbool-conversion",
"-Wextra-semi", "-Wunreachable-code", "-Wzero-as-null-pointer-constant", "-Wcast-align",
"-Winconsistent-missing-destructor-override", "-Wshift-sign-overflow", "-Wnullable-to-nonnull-conversion",
"-Wno-missing-field-initializers", "-Wno-ignored-qualifiers" };
recommendedCompilerWarningFlags["GCC"] = { "-Wall", "-Wextra", "-Wstrict-aliasing", "-Wuninitialized", "-Wunused-parameter", "-Wsign-compare",
"-Woverloaded-virtual", "-Wreorder", "-Wsign-conversion", "-Wunreachable-code",
"-Wzero-as-null-pointer-constant", "-Wcast-align", "-Wno-implicit-fallthrough",
"-Wno-maybe-uninitialized", "-Wno-missing-field-initializers", "-Wno-ignored-qualifiers" };
recommendedCompilerWarningFlags["GCC-7"] = recommendedCompilerWarningFlags["GCC"];
recommendedCompilerWarningFlags["GCC-7"].add ("-Wno-strict-overflow");
}
ProjectExporter::BuildConfiguration::~BuildConfiguration()
@@ -961,6 +974,35 @@ void ProjectExporter::BuildConfiguration::addGCCOptimisationProperty (PropertyLi
"The optimisation level for this configuration");
}
void ProjectExporter::BuildConfiguration::addRecommendedLinuxCompilerWarningsProperty (PropertyListBuilder& props)
{
props.add (new ChoicePropertyComponent (recommendedWarningsValue, "Add Recommended Compiler Warning Flags",
{ "GCC", "GCC 7 and below", "LLVM", "Disabled" },
{ "GCC", "GCC-7", "LLVM", "" }),
"Enable this to add a set of recommended compiler warning flags.");
recommendedWarningsValue.setDefault ("");
}
void ProjectExporter::BuildConfiguration::addRecommendedLLVMCompilerWarningsProperty (PropertyListBuilder& props)
{
props.add (new ChoicePropertyComponent (recommendedWarningsValue, "Add Recommended Compiler Warning Flags",
{ "Enabled", "Disabled" },
{ "LLVM", "" }),
"Enable this to add a set of recommended compiler warning flags.");
recommendedWarningsValue.setDefault ("");
}
StringArray ProjectExporter::BuildConfiguration::getRecommendedCompilerWarningFlags() const
{
auto label = recommendedWarningsValue.get().toString();
auto it = recommendedCompilerWarningFlags.find (label);
if (it != recommendedCompilerWarningFlags.end())
return it->second;
return {};
}
void ProjectExporter::BuildConfiguration::createPropertyEditors (PropertyListBuilder& props)
{
if (exporter.supportsUserDefinedConfigurations())


+ 6
- 1
extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.h View File

@@ -272,6 +272,9 @@ public:
//==============================================================================
void createPropertyEditors (PropertyListBuilder&);
void addRecommendedLinuxCompilerWarningsProperty (PropertyListBuilder&);
void addRecommendedLLVMCompilerWarningsProperty (PropertyListBuilder&);
StringArray getRecommendedCompilerWarningFlags() const;
void addGCCOptimisationProperty (PropertyListBuilder&);
void removeFromExporter();
@@ -281,10 +284,12 @@ public:
const ProjectExporter& exporter;
protected:
ValueWithDefault isDebugValue, configNameValue, targetNameValue, targetBinaryPathValue, optimisationLevelValue,
ValueWithDefault isDebugValue, configNameValue, targetNameValue, targetBinaryPathValue, recommendedWarningsValue, optimisationLevelValue,
linkTimeOptimisationValue, ppDefinesValue, headerSearchPathValue, librarySearchPathValue, userNotesValue;
private:
std::map<String, StringArray> recommendedCompilerWarningFlags;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (BuildConfiguration)
};


+ 1
- 0
extras/Projucer/Source/Utility/Helpers/jucer_PresetIDs.h View File

@@ -90,6 +90,7 @@ namespace Ids
DECLARE_ID (alwaysGenerateDebugSymbols);
DECLARE_ID (targetName);
DECLARE_ID (binaryPath);
DECLARE_ID (recommendedWarnings);
DECLARE_ID (optimisation);
DECLARE_ID (defines);
DECLARE_ID (headerPath);


Loading…
Cancel
Save