Skip to content

Commit 258121c

Browse files
committed
Fixed: Archiver now putting object files correctly
1 parent ce2fff1 commit 258121c

File tree

5 files changed

+31
-23
lines changed

5 files changed

+31
-23
lines changed

source/redub/building/compile.d

+1-1
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ CompilationResult execCompilation(immutable ThreadBuildData data, shared Project
132132
auto archiverRes = executeArchiver(data, info, cmd);
133133
ret.status = archiverRes.status;
134134
ret.output~= archiverRes.output;
135-
res.compilationCommand~= cmd;
135+
res.compilationCommand~= "\n\nArchiving: \n\t"~cmd;
136136
}
137137

138138
copyDir(inDir, dirName(outDir));

source/redub/building/utils.d

+20-5
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,13 @@ auto linkBase(const ThreadBuildData data, CompilingSession session, string rootH
6060
);
6161
}
6262

63+
/**
64+
* Generates a static library using archiver. FIXME: BuildRequirements should know its files.
65+
* Params:
66+
* data = The data containing project information
67+
* s = Compiling Session
68+
* command = Command for being able to print it later
69+
*/
6370
auto executeArchiver(const ThreadBuildData data, CompilingSession s, out string command)
6471
{
6572
import std.process;
@@ -72,17 +79,25 @@ auto executeArchiver(const ThreadBuildData data, CompilingSession s, out string
7279
string[] cmd = [a.bin];
7380
final switch(a.type) with(AcceptedArchiver)
7481
{
75-
case ar, llvmAr: cmd~= "rcs"; break;
82+
case ar, llvmAr: cmd~= ["--format=default", "rcs"]; break;
7683
case libtool: cmd~= ["-static", "-o"]; break;
7784
case none: break;
7885
}
7986

80-
cmd~= getOutputName(data.cfg, s.os, s.isa);
81-
82-
string objExt = getObjectExtension(s.os);
83-
cmd = mapAppend(cmd, data.cfg.sourceFiles, (string src) => stripExtension(src)~ objExt);
87+
cmd~= buildNormalizedPath(data.cfg.outputDirectory, getOutputName(data.cfg, s.os, s.isa));
8488

89+
putObjectFiles(cmd, data.cfg, s.os, s.compiler.compiler.gcc ? cExt : cppExt);
8590
command = cmd.join(" ");
8691

8792
return executeShell(command);
93+
}
94+
95+
private void putObjectFiles(ref string[] target, const BuildConfiguration b, OS os, scope const string[] extensions...)
96+
{
97+
import redub.command_generators.commons;
98+
import std.file;
99+
import std.path;
100+
string[] objectFiles;
101+
putSourceFiles(objectFiles, b.workingDir, b.sourcePaths, b.sourceFiles, b.excludeSourceFiles, extensions);
102+
target = mapAppend(target, objectFiles, (string src) => setExtension(src, getObjectExtension(os)));
88103
}

source/redub/command_generators/automatic.d

+3-2
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,13 @@ string escapeCompilationCommands(string compilerBin, string[] flags)
2323
*/
2424
string[] getCompilationFlags(const BuildConfiguration cfg, CompilingSession s, string mainPackHash, bool isRoot)
2525
{
26+
import redub.command_generators.commons;
2627
switch(s.compiler.compiler) with(AcceptedCompiler)
2728
{
2829
case gxx:
29-
return redub.command_generators.gnu_based.parseBuildConfiguration(cfg, s, mainPackHash, isRoot, ".c", ".cpp", ".cc", ".i", ".cxx", ".c++");
30+
return redub.command_generators.gnu_based.parseBuildConfiguration(cfg, s, mainPackHash, isRoot, cppExt);
3031
case gcc:
31-
return redub.command_generators.gnu_based.parseBuildConfiguration(cfg, s, mainPackHash, isRoot, ".c", ".i");
32+
return redub.command_generators.gnu_based.parseBuildConfiguration(cfg, s, mainPackHash, isRoot, cExt);
3233
case dmd:
3334
return redub.command_generators.dmd.parseBuildConfiguration(cfg, s, mainPackHash, isRoot);
3435
case ldc2:

source/redub/command_generators/commons.d

+7
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,13 @@ public import redub.compiler_identification;
77
import redub.buildapi;
88
public import std.file:DirEntry;
99

10+
///Valid d extensions
11+
immutable string[] dExt = [".d"];
12+
///Valid c extensions
13+
immutable string[] cExt = [".c", ".i"];
14+
///Valid c++ extensions
15+
immutable string[] cppExt = [".c", ".cpp", ".cc", ".i", ".cxx", ".c++"];
16+
1017

1118
OS osFromArch(string arch)
1219
{

source/redub/command_generators/linkers.d

-15
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,6 @@ string[] parseLinkConfiguration(const ThreadBuildData data, CompilingSession s,
5757
commands = mapAppend(commands, libraries, (string l) => "-L-l"~stripLibraryExtension(l));
5858

5959
}
60-
else if(!s.compiler.isDCompiler) //Generates a static library using archiver. FIXME: BuildRequirements should know its files.
61-
{
62-
commands~= "--format=default";
63-
commands~= "rcs";
64-
commands~= buildNormalizedPath(outputDirectory, getOutputName(b, s.os));
65-
putObjectFiles(commands, b, s.os, ".c", ".cpp", ".cc", ".i", ".cxx", ".c++");
66-
}
6760
}
6861

6962
return commands;
@@ -133,11 +126,3 @@ string getTargetTypeFlag(TargetType o, Compiler compiler)
133126
}
134127

135128

136-
private void putObjectFiles(ref string[] target, const BuildConfiguration b, OS os, scope const string[] extensions...)
137-
{
138-
import std.file;
139-
import std.path;
140-
string[] objectFiles;
141-
putSourceFiles(objectFiles, b.workingDir, b.sourcePaths, b.sourceFiles, b.excludeSourceFiles, extensions);
142-
target = mapAppend(target, objectFiles, (string src) => setExtension(src, getObjectExtension(os)));
143-
}

0 commit comments

Comments
 (0)