diff --git a/source/dub/compilers/compiler.d b/source/dub/compilers/compiler.d index e03095d..a714533 100644 --- a/source/dub/compilers/compiler.d +++ b/source/dub/compilers/compiler.d @@ -214,7 +214,10 @@ void extractBuildOptions(ref BuildSettings settings) const; /// Adds the appropriate flag to set a target path - void setTarget(ref BuildSettings settings, in BuildPlatform platform) const; + /// + /// Params: + /// targetPath: If it's not null, it will be output to the given path. Else, the compiler will decide. + void setTarget(ref BuildSettings settings, in BuildPlatform platform, string targetPath = null) const; /// Invokes the compiler using the given flags void invoke(in BuildSettings settings, in BuildPlatform platform, void delegate(int, string) output_callback); diff --git a/source/dub/compilers/dmd.d b/source/dub/compilers/dmd.d index b4ef823..fc1faa9 100644 --- a/source/dub/compilers/dmd.d +++ b/source/dub/compilers/dmd.d @@ -153,7 +153,7 @@ settings.dflags = newflags.data; } - void setTarget(ref BuildSettings settings, in BuildPlatform platform) const + void setTarget(ref BuildSettings settings, in BuildPlatform platform, string tpath = null) const { final switch (settings.targetType) { case TargetType.autodetect: assert(false, "Invalid target type: autodetect"); @@ -170,8 +170,9 @@ break; } - auto tpath = Path(settings.targetPath) ~ getTargetFileName(settings, platform); - settings.addDFlags("-of"~tpath.toNativeString()); + if (tpath is null) + tpath = (Path(settings.targetPath) ~ getTargetFileName(settings, platform)).toNativeString(); + settings.addDFlags("-of"~tpath); } void invoke(in BuildSettings settings, in BuildPlatform platform, void delegate(int, string) output_callback) diff --git a/source/dub/compilers/gdc.d b/source/dub/compilers/gdc.d index c213d38..ae9f067 100644 --- a/source/dub/compilers/gdc.d +++ b/source/dub/compilers/gdc.d @@ -156,7 +156,7 @@ settings.dflags = newflags.data; } - void setTarget(ref BuildSettings settings, in BuildPlatform platform) const + void setTarget(ref BuildSettings settings, in BuildPlatform platform, string tpath = null) const { final switch (settings.targetType) { case TargetType.autodetect: assert(false, "Invalid target type: autodetect"); @@ -172,8 +172,9 @@ break; } - auto tpath = Path(settings.targetPath) ~ getTargetFileName(settings, platform); - settings.addDFlags("-o", tpath.toNativeString()); + if (tpath is null) + tpath = (Path(settings.targetPath) ~ getTargetFileName(settings, platform)).toNativeString(); + settings.addDFlags("-o", tpath); } void invoke(in BuildSettings settings, in BuildPlatform platform, void delegate(int, string) output_callback) diff --git a/source/dub/compilers/ldc.d b/source/dub/compilers/ldc.d index 0c39cec..196426a 100644 --- a/source/dub/compilers/ldc.d +++ b/source/dub/compilers/ldc.d @@ -143,7 +143,7 @@ settings.dflags = newflags.data; } - void setTarget(ref BuildSettings settings, in BuildPlatform platform) const + void setTarget(ref BuildSettings settings, in BuildPlatform platform, string tpath = null) const { final switch (settings.targetType) { case TargetType.autodetect: assert(false, "Invalid target type: autodetect"); @@ -159,8 +159,9 @@ break; } - auto tpath = Path(settings.targetPath) ~ getTargetFileName(settings, platform); - settings.addDFlags("-of"~tpath.toNativeString()); + if (tpath is null) + tpath = (Path(settings.targetPath) ~ getTargetFileName(settings, platform)).toNativeString(); + settings.addDFlags("-of"~tpath); } void invoke(in BuildSettings settings, in BuildPlatform platform, void delegate(int, string) output_callback) diff --git a/source/dub/generators/build.d b/source/dub/generators/build.d index 9dee164..3e4e107 100644 --- a/source/dub/generators/build.d +++ b/source/dub/generators/build.d @@ -350,16 +350,17 @@ static string pathToObjName(string path) { return std.path.buildNormalizedPath(getcwd(), path~objSuffix)[1..$].replace("/", "."); } /// Compile a single source file (srcFile), and write the object to objName. static string compileUnit(string srcFile, string objName, BuildSettings bs, GeneratorSettings gs) { - Path tempobj = Path(bs.targetPath)~objName; - string objPath = tempobj.toNativeString(); - bs.libs = null; - bs.lflags = null; - bs.addDFlags("-c", "-of"~objPath); - bs.sourceFiles = [ srcFile ]; - gs.compiler.prepareBuildSettings(bs, BuildSetting.commandLine); - gs.compiler.invoke(bs, gs.platform, gs.compileCallback); - return objPath; - } + Path tempobj = Path(bs.targetPath)~objName; + string objPath = tempobj.toNativeString(); + bs.libs = null; + bs.lflags = null; + bs.addDFlags("-c"); + bs.sourceFiles = [ srcFile ]; + gs.compiler.prepareBuildSettings(bs, BuildSetting.commandLine); + gs.compiler.setTarget(bs, gs.platform, objPath); + gs.compiler.invoke(bs, gs.platform, gs.compileCallback); + return objPath; + } void buildWithCompiler(GeneratorSettings settings, BuildSettings buildsettings) {