mirror of
https://github.com/dlang/dmd.git
synced 2025-04-27 05:30:13 +03:00
61 lines
1.8 KiB
D
61 lines
1.8 KiB
D
import dshell;
|
|
|
|
import std.stdio;
|
|
|
|
int main()
|
|
{
|
|
// Only run this test, if CC has been set.
|
|
if (Vars.CC.empty)
|
|
return DISABLED;
|
|
|
|
version (Windows)
|
|
if (environment.get("C_RUNTIME", "") == "mingw")
|
|
return DISABLED;
|
|
|
|
version (FreeBSD)
|
|
if (Vars.MODEL == "32")
|
|
return DISABLED;
|
|
|
|
Vars.set(`SRC`, `$EXTRA_FILES${SEP}dll_cxx`);
|
|
Vars.set(`EXE_NAME`, `$OUTPUT_BASE${SEP}testdll$EXE`);
|
|
Vars.set(`DLL`, `$OUTPUT_BASE${SEP}mydll$SOEXT`);
|
|
|
|
string[] dllCmd = [Vars.CC];
|
|
string mainExtra;
|
|
version (Windows)
|
|
{
|
|
Vars.set(`DLL_LIB`, `$OUTPUT_BASE${SEP}mydll.lib`);
|
|
if (Vars.MODEL == "32omf")
|
|
{
|
|
// CC should be dmc for win32omf.
|
|
dllCmd ~= [`-mn`, `-L/implib:` ~ Vars.DLL_LIB, `-WD`, `-o` ~ Vars.DLL, `kernel32.lib`, `user32.lib`];
|
|
mainExtra = `$DLL_LIB`;
|
|
}
|
|
else
|
|
{
|
|
// CC should be cl for win32mscoff.
|
|
dllCmd ~= [`/LD`, `/nologo`, `/Fe` ~ Vars.DLL];
|
|
mainExtra = `$DLL_LIB`;
|
|
}
|
|
}
|
|
else version(OSX)
|
|
{
|
|
dllCmd ~= [`-dynamiclib`, `-fPIC`, `-o`, Vars.DLL, `-lstdc++`];
|
|
mainExtra = `-fPIC -L-L$OUTPUT_BASE -L$DLL -L-lstdc++ -L--no-demangle`;
|
|
}
|
|
else
|
|
{
|
|
dllCmd ~= [ `-m` ~ Vars.MODEL, `-shared`, `-fPIC`, `-o`, Vars.DLL ];
|
|
mainExtra = `-fPIC -L-L$OUTPUT_BASE -L$DLL -L-lstdc++ -L--no-demangle`;
|
|
}
|
|
|
|
dllCmd ~= Vars.SRC ~ Vars.SEP ~ `mydll.cpp`;
|
|
// The arguments have to be passed as an array, because run would replace '/' with '\\' otherwise.
|
|
run(dllCmd);
|
|
|
|
run(`$DMD -m$MODEL -I$SRC -g -od=$OUTPUT_BASE -of=$EXE_NAME $SRC/testdll.d $SRC/cppnew.d ` ~ mainExtra);
|
|
|
|
run(`$EXE_NAME`, stdout, stderr, [`LD_LIBRARY_PATH`: Vars.OUTPUT_BASE]);
|
|
|
|
return 0;
|
|
}
|