diff --git a/CMakeLists.txt b/CMakeLists.txt index 24bfdb2..d52d2a6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,7 +14,7 @@ set(CMAKE_CXX_STANDARD 11) option(RUNCPP2_UPDATE_DEFAULT_YAMLS "Update default yaml files" OFF) -set(RUNCPP2_CONFIG_VERSION "2") +set(RUNCPP2_CONFIG_VERSION "3") if (CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR) option(RUNCPP2_WARNINGS_AS_ERRORS "Treat warnings as errors" ON) diff --git a/DefaultYAMLs/Default/CommonFileTypes.yaml b/DefaultYAMLs/Default/CommonFileTypes.yaml index a4620e1..9740272 100644 --- a/DefaultYAMLs/Default/CommonFileTypes.yaml +++ b/DefaultYAMLs/Default/CommonFileTypes.yaml @@ -1,5 +1,6 @@ # DO NOT modify this file. Changes will be overwritten when there's a reset or update +# TODO: Make this arrays?... FilesTypes: # The file properties for the files to be **linked** as object file for each platform ObjectLinkFile: @@ -11,7 +12,7 @@ FilesTypes: # The file properties for the files to be **linked** as shared libraries for each platform SharedLinkFile: Prefix: - Windows: "" + DefaultPlatform: "" Linux: "lib" MacOS: "lib" Extension: @@ -21,9 +22,8 @@ FilesTypes: # The file properties for the files to be **copied** as shared libraries for each platform SharedLibraryFile: Prefix: - Windows: "" + DefaultPlatform: "" Linux: "lib" - MacOS: "" Extension: Windows: ".dll" Linux: ".so" @@ -31,17 +31,22 @@ FilesTypes: # The file properties for the files to be linked as static libraries for each platform StaticLinkFile: Prefix: + DefaultPlatform: "" Unix: "lib" - Windows: "" Extension: Windows: ".lib" Unix: ".a" + # The file properties for the files to be **copied** as executable for each platform + ExecutableFile: + Prefix: + DefaultPlatform: "" + Extension: + DefaultPlatform: "" + Windows: ".exe" # (Optional) The file properties for debug symbols to be copied alongside the binary - # for each platform + # for each platform DebugSymbolFile: Prefix: Windows: "" - Unix: "" Extension: Windows: ".pdb" - Unix: "" diff --git a/DefaultYAMLs/Default/g++.yaml b/DefaultYAMLs/Default/g++.yaml index b7ca7eb..ea4f18d 100644 --- a/DefaultYAMLs/Default/g++.yaml +++ b/DefaultYAMLs/Default/g++.yaml @@ -50,11 +50,13 @@ Compiler: # {Stage.SharedLinkFile.Prefix} # {Stage.StaticLinkFile.Prefix} # {Stage.ObjectLinkFile.Prefix} + # {Stage.ExecutableFile.Prefix} # {Stage.DebugSymbolFile.Prefix} # {Stage.SharedLibraryFile.Extension} # {Stage.SharedLinkFile.Extension} # {Stage.StaticLinkFile.Extension} # {Stage.ObjectLinkFile.Extension} + # {Stage.ExecutableFile.Extension} # {Stage.DebugSymbolFile.Extension} # {/}: Filesystem separator for the host platform @@ -104,11 +106,14 @@ Compiler: - Type: Repeats CommandPart: " -I\"{Stage.IncludeDirectory.Source.Path}\"" - Type: Once - CommandPart: " \"{Stage.Input.Path}\" -o \"{Stage.Output.Directory}{/}{Stage.ObjectLinkFile.Prefix}{Stage.Input.Name}{Stage.ObjectLinkFile.Extension}\"" + CommandPart: " \"{Stage.Input.Path}\" -o \"{Stage.Output.Directory}{/}\ + {Stage.ObjectLinkFile.Prefix}{Stage.Input.Name}\ + {Stage.ObjectLinkFile.Extension}\"" # What files to be expected as output for the command ExpectedOutputFiles: &g++_CompileExpectedOutputFiles - - "{Stage.Output.Directory}{/}{Stage.ObjectLinkFile.Prefix}{Stage.Input.Name}{Stage.ObjectLinkFile.Extension}" + - "{Stage.Output.Directory}{/}{Stage.ObjectLinkFile.Prefix}{Stage.Input.Name}\ + {Stage.ObjectLinkFile.Extension}" # (Optional) The commands to run in **shell** BEFORE compiling # This is run inside the .runcpp2 directory where the build happens. @@ -154,11 +159,13 @@ Linker: # {Stage.SharedLinkFile.Prefix} # {Stage.StaticLinkFile.Prefix} # {Stage.ObjectLinkFile.Prefix} + # {Stage.ExecutableFile.Prefix} # {Stage.DebugSymbolFile.Prefix} # {Stage.SharedLibraryFile.Extension} # {Stage.SharedLinkFile.Extension} # {Stage.StaticLinkFile.Extension} # {Stage.ObjectLinkFile.Extension} + # {Stage.ExecutableFile.Extension} # {Stage.DebugSymbolFile.Extension} # {/}: Filesystem separator for the host platform @@ -217,7 +224,8 @@ Linker: Executable: "g++" RunParts: - Type: Once - CommandPart: "{Stage.Executable} {Stage.LinkFlags} -o \"{Stage.Output.Directory}{/}{Stage.Output.Name}\"" + CommandPart: "{Stage.Executable} {Stage.LinkFlags} -o \"{Stage.Output.Directory}\ + {/}{Stage.Output.Name}\"" - Type: Repeats CommandPart: " \"{Stage.Input.Path}\"" ExpectedOutputFiles: ["{Stage.Output.Directory}{/}{Stage.Output.Name}"] @@ -228,10 +236,12 @@ Linker: Executable: "g++" RunParts: - Type: Once - CommandPart: "{Stage.Executable} {Stage.LinkFlags} -o \"{Stage.Output.Directory}{/}{Stage.Output.Name}.exe\"" + CommandPart: "{Stage.Executable} {Stage.LinkFlags} -o \"{Stage.Output.Directory}\ + {/}{Stage.Output.Name}{Stage.ExecutableFile.Extension}\"" - Type: Repeats CommandPart: " \"{Stage.Input.Path}\"" - ExpectedOutputFiles: ["{Stage.Output.Directory}{/}{Stage.Output.Name}.exe"] + ExpectedOutputFiles: + - "{Stage.Output.Directory}{/}{Stage.Output.Name}{Stage.ExecutableFile.Extension}" # Setup: [] # Cleanup: [] ExecutableShared: @@ -240,10 +250,14 @@ Linker: Executable: "g++" RunParts: - Type: Once - CommandPart: "{Stage.Executable} {Stage.LinkFlags} -o \"{Stage.Output.Directory}{/}{Stage.SharedLibraryFile.Prefix}{Stage.Output.Name}{Stage.SharedLibraryFile.Extension}\"" + CommandPart: "{Stage.Executable} {Stage.LinkFlags} -o \"{Stage.Output.Directory}\ + {/}{Stage.SharedLibraryFile.Prefix}{Stage.Output.Name}\ + {Stage.SharedLibraryFile.Extension}\"" - Type: Repeats CommandPart: " \"{Stage.Input.Path}\"" - ExpectedOutputFiles: ["{Stage.Output.Directory}{/}{Stage.SharedLibraryFile.Prefix}{Stage.Output.Name}{Stage.SharedLibraryFile.Extension}"] + ExpectedOutputFiles: + - "{Stage.Output.Directory}{/}{Stage.SharedLibraryFile.Prefix}{Stage.Output.Name}\ + {Stage.SharedLibraryFile.Extension}" # Setup: [] # Cleanup: [] Static: @@ -252,10 +266,13 @@ Linker: Executable: "g++" RunParts: - Type: Once - CommandPart: "{Stage.Executable} {Stage.LinkFlags} -o \"{Stage.Output.Directory}{/}{Stage.StaticLinkFile.Prefix}{Stage.Output.Name}{Stage.StaticLinkFile.Extension}\"" + CommandPart: "{Stage.Executable} {Stage.LinkFlags} -o \"{Stage.Output.Directory}\ + {/}{Stage.StaticLinkFile.Prefix}{Stage.Output.Name}{Stage.StaticLinkFile.Extension}\"" - Type: Repeats CommandPart: " \"{Stage.Input.Path}\"" - ExpectedOutputFiles: ["{Stage.Output.Directory}{/}{Stage.StaticLinkFile.Prefix}{Stage.Output.Name}{Stage.StaticLinkFile.Extension}"] + ExpectedOutputFiles: + - "{Stage.Output.Directory}{/}{Stage.StaticLinkFile.Prefix}{Stage.Output.Name}\ + {Stage.StaticLinkFile.Extension}" # Setup: [] # Cleanup: [] Shared: @@ -264,9 +281,13 @@ Linker: Executable: "g++" RunParts: - Type: Once - CommandPart: "{Stage.Executable} {Stage.LinkFlags} -o \"{Stage.Output.Directory}{/}{Stage.SharedLibraryFile.Prefix}{Stage.Output.Name}{Stage.SharedLibraryFile.Extension}\"" + CommandPart: "{Stage.Executable} {Stage.LinkFlags} -o \"{Stage.Output.Directory}\ + {/}{Stage.SharedLibraryFile.Prefix}{Stage.Output.Name}\ + {Stage.SharedLibraryFile.Extension}\"" - Type: Repeats CommandPart: " \"{Stage.Input.Path}\"" - ExpectedOutputFiles: ["{Stage.Output.Directory}{/}{Stage.SharedLibraryFile.Prefix}{Stage.Output.Name}{Stage.SharedLibraryFile.Extension}"] + ExpectedOutputFiles: + - "{Stage.Output.Directory}{/}{Stage.SharedLibraryFile.Prefix}{Stage.Output.Name}\ + {Stage.SharedLibraryFile.Extension}" # Setup: [] # Cleanup: [] diff --git a/DefaultYAMLs/Default/vs2022_v17+.yaml b/DefaultYAMLs/Default/vs2022_v17+.yaml index 8da2e7a..b80efb8 100644 --- a/DefaultYAMLs/Default/vs2022_v17+.yaml +++ b/DefaultYAMLs/Default/vs2022_v17+.yaml @@ -3,7 +3,8 @@ # List of YAML anchors that will be aliased later. `Template` is **NOT** part of a profile Templates: vs2022_v17+_CompileFlags: &vs2022_v17+_CompileFlags - Flags: "/nologo /W4 /diagnostics:caret /utf-8 /Gm- /MDd /EHar /TP /std:c++17 /GR /RTC1 /Zc:inline /Zi /external:W0" + Flags: "/nologo /W4 /diagnostics:caret /utf-8 /Gm- /MDd /EHar /TP /std:c++17 /GR /RTC1 \ + /Zc:inline /Zi /external:W0" # https://learn.microsoft.com/en-us/cpp/overview/compiler-versions?view=msvc-170 Name: "vs2022_v17+" @@ -42,12 +43,15 @@ Compiler: - Type: Repeats CommandPart: " /I\"{Stage.IncludeDirectory.Source.Path}\"" - Type: Once - CommandPart: " /Fo\"{Stage.Output.Directory}{/}{Stage.ObjectLinkFile.Prefix}{Stage.Input.Name}{Stage.ObjectLinkFile.Extension}\" \ - /Fd\"{Stage.Output.Directory}{/}{Stage.DebugSymbolFile.Prefix}{Stage.Input.Name}{Stage.DebugSymbolFile.Extension}\" \ - \"{Stage.Input.Path}\"" + CommandPart: " /Fo\"{Stage.Output.Directory}{/}{Stage.ObjectLinkFile.Prefix}\ + {Stage.Input.Name}{Stage.ObjectLinkFile.Extension}\" \ + /Fd\"{Stage.Output.Directory}{/}{Stage.DebugSymbolFile.Prefix}\ + {Stage.Input.Name}{Stage.DebugSymbolFile.Extension}\" \"{Stage.Input.Path}\"" ExpectedOutputFiles: &vs2022_v17+_CompileExpectedOutputFiles - - "{Stage.Output.Directory}{/}{Stage.ObjectLinkFile.Prefix}{Stage.Input.Name}{Stage.ObjectLinkFile.Extension}" - - "{Stage.Output.Directory}{/}{Stage.DebugSymbolFile.Prefix}{Stage.Input.Name}{Stage.DebugSymbolFile.Extension}" + - "{Stage.Output.Directory}{/}{Stage.ObjectLinkFile.Prefix}{Stage.Input.Name}\ + {Stage.ObjectLinkFile.Extension}" + - "{Stage.Output.Directory}{/}{Stage.DebugSymbolFile.Prefix}{Stage.Input.Name}\ + {Stage.DebugSymbolFile.Extension}" ExecutableShared: Windows: <<: *vs2022_v17+_CompileFlags @@ -81,12 +85,13 @@ Linker: Executable: "link.exe" RunParts: - Type: Once - CommandPart: >- - {Stage.Executable} {Stage.LinkFlags} - /OUT:"{Stage.Output.Directory}{/}{Stage.Output.Name}.exe" + CommandPart: "{Stage.Executable} {Stage.LinkFlags} \ + /OUT:\"{Stage.Output.Directory}{/}{Stage.Output.Name}\ + {Stage.ExecutableFile.Extension}\"" - Type: Repeats CommandPart: " \"{Stage.Input.Path}\"" - ExpectedOutputFiles: ["{Stage.Output.Directory}{/}{Stage.Output.Name}.exe"] + ExpectedOutputFiles: + - "{Stage.Output.Directory}{/}{Stage.Output.Name}{Stage.ExecutableFile.Extension}" ExecutableShared: Windows: Flags: >- @@ -96,14 +101,17 @@ Linker: Executable: "link.exe" RunParts: - Type: Once - CommandPart: >- - {Stage.Executable} {Stage.LinkFlags} - /OUT:"{Stage.Output.Directory}{/}{Stage.SharedLibraryFile.Prefix}{Stage.Output.Name}{Stage.SharedLibraryFile.Extension}" - /IMPLIB:"{Stage.Output.Directory}{/}{Stage.SharedLinkFile.Prefix}{Stage.Output.Name}{Stage.SharedLinkFile.Extension}" - /DEF:".\temp.def" + CommandPart: "{Stage.Executable} {Stage.LinkFlags} \ + /OUT:\"{Stage.Output.Directory}{/}{Stage.SharedLibraryFile.Prefix}\ + {Stage.Output.Name}{Stage.SharedLibraryFile.Extension}\" \ + /IMPLIB:\"{Stage.Output.Directory}{/}{Stage.SharedLinkFile.Prefix}\ + {Stage.Output.Name}{Stage.SharedLinkFile.Extension}\" \ + /DEF:\".\\temp.def\"" - Type: Repeats CommandPart: " \"{Stage.Input.Path}\"" - ExpectedOutputFiles: ["{Stage.Output.Directory}{/}{Stage.SharedLibraryFile.Prefix}{Stage.Output.Name}{Stage.SharedLibraryFile.Extension}"] + ExpectedOutputFiles: + - "{Stage.Output.Directory}{/}{Stage.SharedLibraryFile.Prefix}{Stage.Output.Name}\ + {Stage.SharedLibraryFile.Extension}" Setup: [ "echo EXPORTS > .\\temp.def", "echo. main @1 >> .\\temp.def" ] Cleanup: [ "del .\\temp.def" ] Static: @@ -112,13 +120,16 @@ Linker: Executable: "lib.exe" RunParts: - Type: Once - CommandPart: >- - {Stage.Executable} {Stage.LinkFlags} - /OUT:"{Stage.Output.Directory}{/}{Stage.StaticLinkFile.Prefix}{Stage.Output.Name}{Stage.StaticLinkFile.Extension}" - /IMPLIB:"{Stage.Output.Directory}{/}{Stage.SharedLinkFile.Prefix}{Stage.Output.Name}{Stage.SharedLinkFile.Extension}" + CommandPart: "{Stage.Executable} {Stage.LinkFlags} \ + /OUT:\"{Stage.Output.Directory}{/}{Stage.StaticLinkFile.Prefix}\ + {Stage.Output.Name}{Stage.StaticLinkFile.Extension}\" \ + /IMPLIB:\"{Stage.Output.Directory}{/}{Stage.SharedLinkFile.Prefix}\ + {Stage.Output.Name}{Stage.SharedLinkFile.Extension}\"" - Type: Repeats CommandPart: " \"{Stage.Input.Path}\"" - ExpectedOutputFiles: ["{Stage.Output.Directory}{/}{Stage.StaticLinkFile.Prefix}{Stage.Output.Name}{Stage.StaticLinkFile.Extension}"] + ExpectedOutputFiles: + - "{Stage.Output.Directory}{/}{Stage.StaticLinkFile.Prefix}{Stage.Output.Name}\ + {Stage.StaticLinkFile.Extension}" Shared: Windows: Flags: >- @@ -128,10 +139,13 @@ Linker: Executable: "link.exe" RunParts: - Type: Once - CommandPart: >- - {Stage.Executable} {Stage.LinkFlags} - /OUT:"{Stage.Output.Directory}{/}{Stage.SharedLibraryFile.Prefix}{Stage.Output.Name}{Stage.SharedLibraryFile.Extension}" - /IMPLIB:"{Stage.Output.Directory}{/}{Stage.SharedLinkFile.Prefix}{Stage.Output.Name}{Stage.SharedLinkFile.Extension}" + CommandPart: "{Stage.Executable} {Stage.LinkFlags} \ + /OUT:\"{Stage.Output.Directory}{/}{Stage.SharedLibraryFile.Prefix}\ + {Stage.Output.Name}{Stage.SharedLibraryFile.Extension}\" \ + /IMPLIB:\"{Stage.Output.Directory}{/}{Stage.SharedLinkFile.Prefix}\ + {Stage.Output.Name}{Stage.SharedLinkFile.Extension}\"" - Type: Repeats CommandPart: " \"{Stage.Input.Path}\"" - ExpectedOutputFiles: ["{Stage.Output.Directory}{/}{Stage.SharedLibraryFile.Prefix}{Stage.Output.Name}{Stage.SharedLibraryFile.Extension}"] + ExpectedOutputFiles: + - "{Stage.Output.Directory}{/}{Stage.SharedLibraryFile.Prefix}{Stage.Output.Name}\ + {Stage.SharedLibraryFile.Extension}" diff --git a/Src/Tests/ConfigParsingTest.cpp b/Src/Tests/ConfigParsingTest.cpp index 63b0a5d..a46419f 100644 --- a/Src/Tests/ConfigParsingTest.cpp +++ b/Src/Tests/ConfigParsingTest.cpp @@ -166,6 +166,7 @@ DS::Result TestMain() SharedLinkFile: *PrefixExtensionTemplate SharedLibraryFile: *PrefixExtensionTemplate StaticLinkFile: *PrefixExtensionTemplate + ExecutableFile: *PrefixExtensionTemplate DebugSymbolFile: *PrefixExtensionTemplate Compiler: CheckExistence: @@ -356,6 +357,7 @@ DS::Result TestMain() SharedLinkFile: *PrefixExtensionTemplate SharedLibraryFile: *PrefixExtensionTemplate StaticLinkFile: *PrefixExtensionTemplate + ExecutableFile: *PrefixExtensionTemplate DebugSymbolFile: *PrefixExtensionTemplate Compiler: CheckExistence: @@ -414,6 +416,7 @@ DS::Result TestMain() SharedLinkFile: *PrefixExtensionTemplate SharedLibraryFile: *PrefixExtensionTemplate StaticLinkFile: *PrefixExtensionTemplate + ExecutableFile: *PrefixExtensionTemplate DebugSymbolFile: *PrefixExtensionTemplate )"; diff --git a/Src/Tests/Data/ProfileTest.cpp b/Src/Tests/Data/ProfileTest.cpp index 9979f16..8fa7780 100644 --- a/Src/Tests/Data/ProfileTest.cpp +++ b/Src/Tests/Data/ProfileTest.cpp @@ -65,6 +65,13 @@ DS::Result TestMain() Extension: Windows: ".lib" Unix: ".a" + ExecutableFile: + Prefix: + Unix: "" + Windows: "" + Extension: + Windows: ".exe" + Unix: "" DebugSymbolFile: Prefix: Windows: "" @@ -329,6 +336,13 @@ DS::Result TestMain() DefaultPlatform: "lib" Extension: DefaultPlatform: ".a" + ExecutableFile: + Prefix: + Unix: "" + Windows: "" + Extension: + Windows: ".exe" + Unix: "" Compiler: CheckExistence: DefaultPlatform: "g++ -v" diff --git a/Src/runcpp2/CompilingLinking.hpp b/Src/runcpp2/CompilingLinking.hpp index 5d4c638..adeedd7 100644 --- a/Src/runcpp2/CompilingLinking.hpp +++ b/Src/runcpp2/CompilingLinking.hpp @@ -99,27 +99,33 @@ namespace { ssLOG_FUNC_DEBUG(); - outSubstitutionMap[ "{Stage.SharedLibraryFile.Prefix}" ] = - { *runcpp2::GetValueFromPlatformMap(fileTypesInfo. SharedLibraryFile.Prefix) }; - outSubstitutionMap[ "{Stage.SharedLinkFile.Prefix}" ] = - { *runcpp2::GetValueFromPlatformMap(fileTypesInfo. SharedLinkFile.Prefix) }; - outSubstitutionMap[ "{Stage.StaticLinkFile.Prefix}" ] = - { *runcpp2::GetValueFromPlatformMap(fileTypesInfo. StaticLinkFile.Prefix) }; - outSubstitutionMap[ "{Stage.ObjectLinkFile.Prefix}" ] = - { *runcpp2::GetValueFromPlatformMap(fileTypesInfo. ObjectLinkFile.Prefix) }; - outSubstitutionMap[ "{Stage.DebugSymbolFile.Prefix}" ] = - { *runcpp2::GetValueFromPlatformMap(fileTypesInfo. DebugSymbolFile.Prefix) }; + #define INTERN_POPULATE_SUB_MAP(x) \ + do \ + { \ + if(runcpp2::HasValueFromPlatformMap(fileTypesInfo. x)) \ + { \ + outSubstitutionMap[ "{Stage." #x "}" ] = \ + { \ + *runcpp2::GetValueFromPlatformMap(fileTypesInfo. x) \ + }; \ + } \ + } while(0) - outSubstitutionMap[ "{Stage.SharedLibraryFile.Extension}" ] = - { *runcpp2::GetValueFromPlatformMap(fileTypesInfo. SharedLibraryFile.Extension) }; - outSubstitutionMap[ "{Stage.SharedLinkFile.Extension}" ] = - { *runcpp2::GetValueFromPlatformMap(fileTypesInfo. SharedLinkFile.Extension) }; - outSubstitutionMap[ "{Stage.StaticLinkFile.Extension}" ] = - { *runcpp2::GetValueFromPlatformMap(fileTypesInfo. StaticLinkFile.Extension) }; - outSubstitutionMap[ "{Stage.ObjectLinkFile.Extension}" ] = - { *runcpp2::GetValueFromPlatformMap(fileTypesInfo. ObjectLinkFile.Extension) }; - outSubstitutionMap[ "{Stage.DebugSymbolFile.Extension}" ] = - { *runcpp2::GetValueFromPlatformMap(fileTypesInfo. DebugSymbolFile.Extension) }; + INTERN_POPULATE_SUB_MAP(SharedLibraryFile.Prefix); + INTERN_POPULATE_SUB_MAP(SharedLinkFile.Prefix); + INTERN_POPULATE_SUB_MAP(StaticLinkFile.Prefix); + INTERN_POPULATE_SUB_MAP(ObjectLinkFile.Prefix); + INTERN_POPULATE_SUB_MAP(ExecutableFile.Prefix); + INTERN_POPULATE_SUB_MAP(DebugSymbolFile.Prefix); + + INTERN_POPULATE_SUB_MAP(SharedLibraryFile.Extension); + INTERN_POPULATE_SUB_MAP(SharedLinkFile.Extension); + INTERN_POPULATE_SUB_MAP(StaticLinkFile.Extension); + INTERN_POPULATE_SUB_MAP(ObjectLinkFile.Extension); + INTERN_POPULATE_SUB_MAP(ExecutableFile.Extension); + INTERN_POPULATE_SUB_MAP(DebugSymbolFile.Extension); + + #undef INTERN_POPULATE_SUB_MAP } bool CompileScript( const ghc::filesystem::path& buildDir, diff --git a/Src/runcpp2/Data/BuildTypeHelper.hpp b/Src/runcpp2/Data/BuildTypeHelper.hpp index 73f4adb..d7e9add 100644 --- a/Src/runcpp2/Data/BuildTypeHelper.hpp +++ b/Src/runcpp2/Data/BuildTypeHelper.hpp @@ -26,8 +26,7 @@ namespace switch(buildType) { case BuildType::INTERNAL_EXECUTABLE_EXECUTABLE: - //NOTE: Currently this is a special case and handled outside - //TODO: Handle it as config + properties.push_back(&filesTypes.ExecutableFile); break; case BuildType::INTERNAL_EXECUTABLE_SHARED: case BuildType::SHARED: @@ -68,17 +67,6 @@ namespace BuildTypeHelper outPaths.clear(); outIsRunnable.clear(); - //For executable build type with executable flag, use platform-specific extension - if(buildType == BuildType::INTERNAL_EXECUTABLE_EXECUTABLE) - { - #ifdef _WIN32 - outPaths.push_back(buildDir / (scriptName + ".exe")); - #else - outPaths.push_back(buildDir / scriptName); - #endif - outIsRunnable.push_back(true); - } - //Get all relevant file properties std::vector fileProperties = GetOutputFileProperties(profile.FilesTypes, buildType); @@ -98,13 +86,11 @@ namespace BuildTypeHelper if(targetExt == nullptr || targetPrefix == nullptr) continue; - if(targetExt->empty() && targetPrefix->empty()) - continue; - outPaths.push_back(buildDir / (*targetPrefix + scriptName + *targetExt)); - //Only SharedLibraryFile is runnable for non-direct executables - outIsRunnable.push_back(fileTypeInfo == &profile.FilesTypes.SharedLibraryFile); + //Only ExecutableFile or SharedLibraryFile are runnable for non-direct executables + outIsRunnable.push_back(fileTypeInfo == &profile.FilesTypes.SharedLibraryFile || + fileTypeInfo == &profile.FilesTypes.ExecutableFile); } return !outPaths.empty(); diff --git a/Src/runcpp2/Data/FilesTypesInfo.hpp b/Src/runcpp2/Data/FilesTypesInfo.hpp index 248b005..a293b00 100644 --- a/Src/runcpp2/Data/FilesTypesInfo.hpp +++ b/Src/runcpp2/Data/FilesTypesInfo.hpp @@ -21,6 +21,7 @@ namespace Data FileProperties SharedLinkFile; FileProperties SharedLibraryFile; FileProperties StaticLinkFile; + FileProperties ExecutableFile; FileProperties DebugSymbolFile; inline bool ParseYAML_Node(YAML::ConstNodePtr node) @@ -33,6 +34,7 @@ namespace Data NodeRequirement("SharedLinkFile", YAML::NodeType::Map, true, false), NodeRequirement("SharedLibraryFile", YAML::NodeType::Map, true, false), NodeRequirement("StaticLinkFile", YAML::NodeType::Map, true, false), + NodeRequirement("ExecutableFile", YAML::NodeType::Map, true, false), NodeRequirement("DebugSymbolFile", YAML::NodeType::Map, false, false), }; @@ -70,6 +72,13 @@ namespace Data return false; } + YAML::ConstNodePtr executionFileNode = node->GetMapValueNode("ExecutableFile"); + if(!ExecutableFile.ParseYAML_Node(executionFileNode)) + { + ssLOG_ERROR("Compiler profile: ExecutableFile is invalid"); + return false; + } + if(ExistAndHasChild(node, "DebugSymbolFile")) { YAML::ConstNodePtr debugSymbolFileNode = node->GetMapValueNode("DebugSymbolFile"); @@ -101,6 +110,9 @@ namespace Data out += indentation + "StaticLinkFile:\n"; out += StaticLinkFile.ToString(indentation + " "); + out += indentation + "ExecutableFile:\n"; + out += ExecutableFile.ToString(indentation + " "); + if(!DebugSymbolFile.Prefix.empty() || !DebugSymbolFile.Extension.empty()) { out += indentation + "DebugSymbolFile:\n"; @@ -116,6 +128,7 @@ namespace Data SharedLinkFile.Equals(other.SharedLinkFile) && SharedLibraryFile.Equals(other.SharedLibraryFile) && StaticLinkFile.Equals(other.StaticLinkFile) && + ExecutableFile.Equals(other.ExecutableFile) && DebugSymbolFile.Equals(other.DebugSymbolFile); } }; diff --git a/Src/runcpp2/Data/Profile.hpp b/Src/runcpp2/Data/Profile.hpp index 6abea25..44d3180 100644 --- a/Src/runcpp2/Data/Profile.hpp +++ b/Src/runcpp2/Data/Profile.hpp @@ -63,11 +63,13 @@ namespace Data INTERN_ADD_MAP("{Stage.SharedLinkFile.Prefix}"); INTERN_ADD_MAP("{Stage.StaticLinkFile.Prefix}"); INTERN_ADD_MAP("{Stage.ObjectLinkFile.Prefix}"); + INTERN_ADD_MAP("{Stage.ExecutableFile.Prefix}"); INTERN_ADD_MAP("{Stage.DebugSymbolFile.Prefix}"); INTERN_ADD_MAP("{Stage.SharedLibraryFile.Extension}"); INTERN_ADD_MAP("{Stage.SharedLinkFile.Extension}"); INTERN_ADD_MAP("{Stage.StaticLinkFile.Extension}"); INTERN_ADD_MAP("{Stage.ObjectLinkFile.Extension}"); + INTERN_ADD_MAP("{Stage.ExecutableFile.Extension}"); INTERN_ADD_MAP("{Stage.DebugSymbolFile.Extension}"); INTERN_ADD_MAP("{Stage.Executable}"); INTERN_ADD_MAP("{Stage.CompileFlags}"); @@ -82,16 +84,7 @@ namespace Data INTERN_ADD_MAP("{Stage.IncludeDirectory.Path}"); INTERN_ADD_MAP("{Stage.IncludeDirectory.Source.Path}"); INTERN_ADD_MAP("{Stage.IncludeDirectory.Dep.Path}"); - INTERN_ADD_MAP("{Stage.SharedLibraryFile.Prefix}"); - INTERN_ADD_MAP("{Stage.SharedLinkFile.Prefix}"); - INTERN_ADD_MAP("{Stage.StaticLinkFile.Prefix}"); - INTERN_ADD_MAP("{Stage.ObjectLinkFile.Prefix}"); - INTERN_ADD_MAP("{Stage.DebugSymbolFile.Prefix}"); - INTERN_ADD_MAP("{Stage.SharedLibraryFile.Extension}"); - INTERN_ADD_MAP("{Stage.SharedLinkFile.Extension}"); - INTERN_ADD_MAP("{Stage.StaticLinkFile.Extension}"); - INTERN_ADD_MAP("{Stage.ObjectLinkFile.Extension}"); - INTERN_ADD_MAP("{Stage.DebugSymbolFile.Extension}"); + INTERN_ADD_MAP("{Stage.Executable}"); INTERN_ADD_MAP("{Stage.LinkFlags}"); INTERN_ADD_MAP("{Stage.Output.Name}");