Skip to content

Commit 091cb6d

Browse files
author
Daniel Kroening
committed
goto-cl: /Fo can set an output directory
1 parent 8b51faf commit 091cb6d

File tree

9 files changed

+53
-9
lines changed

9 files changed

+53
-9
lines changed

buildspec-windows.yml

+1
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ phases:
6363
- |
6464
$env:Path = "C:\tools\cygwin\bin;$env:Path"
6565
cmd /c 'call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x64 && bash -c "make -C regression test BUILD_ENV=MSVC" '
66+
cmd /c 'call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x64 && bash -c "make -C regression/goto-cl test BUILD_ENV=MSVC" '
6667
6768
- |
6869
$env:Path = "C:\tools\cygwin\bin;$env:Path"
+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
CORE
2+
3+
/c main1.c main2.c /Fo dir
4+
^EXIT=0$
5+
^SIGNAL=0$
6+
--
7+
^warning: ignoring
8+
^CONVERSION ERROR$

regression/goto-cl/Fo/dir/dummy

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
// blank

regression/goto-cl/Fo/main1.c

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
// blank

regression/goto-cl/Fo/main2.c

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
// blank

regression/goto-cl/Makefile

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
default: tests.log
2+
3+
test:
4+
@../test.pl -p -c ../../../src/goto-cc/goto-cl
5+
6+
tests.log: ../test.pl
7+
@../test.pl -p -c ../../../src/goto-cc/goto-cl
8+
9+
show:
10+
@for dir in *; do \
11+
if [ -d "$$dir" ]; then \
12+
vim -o "$$dir/*.c" "$$dir/*.out"; \
13+
fi; \
14+
done;
15+
16+
clean:
17+
find -name '*.out' -execdir $(RM) '{}' \;
18+
find -name '*.gb' -execdir $(RM) '{}' \;
19+
find -name '*.obj' -execdir $(RM) '{}' \;
20+
find -name '*.goto-cc-saved' -execdir $(RM) '{}' \;
21+
$(RM) tests.log

src/goto-cc/compile.cpp

+10-2
Original file line numberDiff line numberDiff line change
@@ -421,9 +421,17 @@ bool compilet::compile()
421421
std::string cfn;
422422

423423
if(output_file_object=="")
424-
cfn=get_base_name(file_name, true)+"."+object_file_extension;
424+
{
425+
std::string file_name =
426+
get_base_name(file_name, true) + "." + object_file_extension;
427+
428+
if(!output_directory_object.empty())
429+
cfn = concat_dir_file(output_directory_object, file_name);
430+
else
431+
cfn = file_name;
432+
}
425433
else
426-
cfn=output_file_object;
434+
cfn = output_file_object;
427435

428436
if(write_object_file(cfn, symbol_table, compiled_functions))
429437
return true;

src/goto-cc/compile.h

+4-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,10 @@ class compilet:public language_uit
4545
std::list<irep_idt> seen_modes;
4646

4747
std::string object_file_extension;
48-
std::string output_file_object, output_file_executable;
48+
std::string output_file_executable;
49+
50+
// the two options below are mutually exclusive -- use either or
51+
std::string output_file_object, output_directory_object;
4952

5053
compilet(cmdlinet &_cmdline, ui_message_handlert &mh, bool Werror);
5154

src/goto-cc/ms_cl_mode.cpp

+6-6
Original file line numberDiff line numberDiff line change
@@ -103,13 +103,13 @@ int ms_cl_modet::doit()
103103

104104
if(cmdline.isset("Fo"))
105105
{
106-
compiler.output_file_object=cmdline.get_value("Fo");
106+
std::string Fo_value = cmdline.get_value("Fo");
107107

108-
// this could be a directory
109-
if(is_directory(compiler.output_file_object) &&
110-
cmdline.args.size()>=1)
111-
compiler.output_file_object+=
112-
get_base_name(cmdline.args[0], true)+".obj";
108+
// this could be a directory or a file name
109+
if(is_directory(Fo_value))
110+
compiler.output_directory_object = Fo_value;
111+
else
112+
compiler.output_file_object = Fo_value;
113113
}
114114

115115
if(cmdline.isset("Fe"))

0 commit comments

Comments
 (0)