Skip to content

Commit f92c2d4

Browse files
committed
Update: Now it is possible to build D and C together
1 parent 8c50a51 commit f92c2d4

File tree

6 files changed

+34
-28
lines changed

6 files changed

+34
-28
lines changed

source/redub/building/compile.d

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ CompilationResult execCompilation(immutable ThreadBuildData data, shared Project
130130
if(!isDCompiler(c) && !ret.status && isStaticLibrary(data.cfg.targetType)) //Must call archiver when
131131
{
132132
string cmd ;
133-
auto archiverRes = executeArchiver(data, info, cmd);
133+
auto archiverRes = executeArchiver(data, info, hash.rootHash, cmd);
134134
ret.status = archiverRes.status;
135135
ret.output~= archiverRes.output;
136136
res.compilationCommand~= "\n\nArchiving: \n\t"~cmd;

source/redub/building/utils.d

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -68,13 +68,14 @@ auto linkBase(const ThreadBuildData data, CompilingSession session, string rootH
6868
* s = Compiling Session
6969
* command = Command for being able to print it later
7070
*/
71-
auto executeArchiver(const ThreadBuildData data, CompilingSession s, out string command)
71+
auto executeArchiver(const ThreadBuildData data, CompilingSession s, string mainPackHash, out string command)
7272
{
7373
import std.process;
7474
import std.array;
7575
import redub.command_generators.commons;
7676
import redub.compiler_identification;
7777
import std.path;
78+
import redub.building.cache;
7879
Archiver a = s.compiler.archiver;
7980

8081
string[] cmd = [a.bin];
@@ -87,18 +88,10 @@ auto executeArchiver(const ThreadBuildData data, CompilingSession s, out string
8788

8889
cmd~= buildNormalizedPath(data.cfg.outputDirectory, getOutputName(data.cfg, s.os, s.isa));
8990

90-
putObjectFiles(cmd, data.cfg, s.os, data.cfg.getCompiler(s.compiler).compiler == AcceptedCompiler.gcc ? cExt : cppExt);
91+
string cacheDir = getCacheOutputDir(mainPackHash, data.cfg, s, data.extra.isRoot);
92+
93+
putSourceFiles(cmd, null, [cacheDir], data.cfg.sourceFiles, data.cfg.excludeSourceFiles, ".o", ".obj");
9194
command = cmd.join(" ");
9295

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

source/redub/cli/dub.d

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,14 +141,14 @@ struct DubArguments
141141
"Arbitrary pre- and suffixes to the identifiers below are recognized (e.g. ldc2 or dmd-2.063) and matched to the proper compiler type:\n" ~
142142
"dmd, ldc (For the C Compilers, use -C or --cCompiler) gcc, g++ "
143143
)
144-
@("compiler|D")
144+
@("dc|compiler")
145145
string compiler;
146146

147147
@(
148148
"Specifies which C compiler binary to use "~
149149
"The current supported C compilers are gcc and g++"
150150
)
151-
@("cCompiler|C")
151+
@("cc|c-compiler")
152152
string cCompiler;
153153

154154

source/redub/command_generators/commons.d

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,14 +110,21 @@ string getLibraryPath(string libName, string outputDir, OS os)
110110
*/
111111
string getConfigurationOutputName(const BuildConfiguration conf, OS os)
112112
{
113-
import redub.building.cache;
114113
with(conf)
115114
{
116115
if(targetType.isStaticLibrary)
117116
return getOutputName(targetType, targetName, os);
118-
return targetName~getObjectExtension(os);
117+
return getObjectOutputName(conf, os);
119118
}
120119
}
120+
/**
121+
*
122+
* Params:
123+
* conf = The configuration
124+
* os = OS in which is being built for
125+
* Returns: A name with an extension that should be used for compiling
126+
*/
127+
string getObjectOutputName(const BuildConfiguration conf, OS os){ return conf.targetName~getObjectExtension(os);}
121128

122129
string getDepsFilePath(ProjectNode root, CompilingSession s)
123130
{

source/redub/command_generators/gnu_based.d

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@ import redub.logging;
77
import redub.building.cache;
88

99
/// Parse G++ configuration
10-
string[] parseBuildConfiguration(const BuildConfiguration b, CompilingSession s, string requirementCache, bool isRoot, const string[] extensions...)
10+
string[] parseBuildConfiguration(const BuildConfiguration b, CompilingSession s, string mainPackHash, bool isRoot, const string[] extensions...)
1111
{
12+
import std.file;
1213
import std.algorithm.iteration:map;
1314
import redub.misc.path;
1415

@@ -17,7 +18,7 @@ string[] parseBuildConfiguration(const BuildConfiguration b, CompilingSession s,
1718
with(b)
1819
{
1920
if(isDebug) commands~= "-g";
20-
if(targetType.isLinkedSeparately) commands~= "-c";
21+
commands~= "-c";
2122

2223
commands = mapAppendPrefix(commands, versions, "-D", false);
2324
commands~= dFlags;
@@ -26,14 +27,15 @@ string[] parseBuildConfiguration(const BuildConfiguration b, CompilingSession s,
2627

2728

2829
string outFlag = getTargetTypeFlag(targetType);
29-
if(outFlag) commands~= outFlag;
30-
31-
if(targetType.isLinkedSeparately)
32-
{
33-
commands~= "-o";
34-
string cacheDir = getCacheOutputDir(requirementCache, b, s, isRoot);
30+
string cacheDir = getCacheOutputDir(mainPackHash, b, s, isRoot);
31+
mkdirRecurse(cacheDir);
32+
if(outFlag)
33+
commands~= outFlag;
34+
commands~= "-o";
35+
if(outFlag)
3536
commands ~= buildNormalizedPath(cacheDir, getConfigurationOutputName(b, s.os)).escapePath;
36-
}
37+
else
38+
commands ~= buildNormalizedPath(cacheDir, getObjectOutputName(b, os)).escapePath;
3739
}
3840

3941
return commands;
@@ -44,8 +46,7 @@ string getTargetTypeFlag(TargetType o)
4446
final switch(o) with(TargetType)
4547
{
4648
case invalid, none: throw new Exception("Invalid targetType");
47-
case autodetect, executable, sourceLibrary: return null;
49+
case autodetect, executable, sourceLibrary, staticLibrary, library: return null;
4850
case dynamicLibrary: return "-shared";
49-
case staticLibrary, library: return "-c";
5051
}
5152
}

source/redub/meta.d

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,16 @@ private string getRedubMetaFileName()
1919

2020
void saveRedubMeta(JSONValue content)
2121
{
22+
import redub.buildapi;
2223
import std.file;
2324
import std.path;
2425
string dir = dirName(getRedubMetaFileName);
2526
if(!std.file.exists(dir))
2627
mkdirRecurse(dir);
28+
29+
if(!("version" in content))
30+
content["version"] = JSONValue(RedubVersionOnly);
31+
2732
std.file.write(getRedubMetaFileName, content.toString);
2833
}
2934

0 commit comments

Comments
 (0)