]> git.lizzy.rs Git - rust.git/commitdiff
rmake: Get all tests passing on MSVC
authorAlex Crichton <alex@alexcrichton.com>
Wed, 26 Aug 2015 23:57:56 +0000 (16:57 -0700)
committerAlex Crichton <alex@alexcrichton.com>
Thu, 17 Sep 2015 15:40:33 +0000 (08:40 -0700)
34 files changed:
mk/tests.mk
src/etc/maketest.py
src/test/run-make/archive-duplicate-names/Makefile
src/test/run-make/c-dynamic-dylib/cfoo.c
src/test/run-make/c-dynamic-rlib/cfoo.c
src/test/run-make/c-link-to-rust-dylib/Makefile
src/test/run-make/c-link-to-rust-staticlib/Makefile
src/test/run-make/c-static-dylib/Makefile
src/test/run-make/c-static-rlib/Makefile
src/test/run-make/crate-name-priority/Makefile
src/test/run-make/extern-fn-generic/Makefile
src/test/run-make/extern-fn-mangle/Makefile
src/test/run-make/extern-fn-with-packed-struct/Makefile
src/test/run-make/extern-fn-with-packed-struct/test.c
src/test/run-make/extern-fn-with-union/Makefile
src/test/run-make/interdependent-c-libraries/Makefile
src/test/run-make/issue-12446/Makefile
src/test/run-make/issue-14500/Makefile
src/test/run-make/issue-15460/Makefile
src/test/run-make/issue-15460/foo.c
src/test/run-make/issue-15460/foo.rs
src/test/run-make/issue-25581/Makefile
src/test/run-make/issue-26092/Makefile
src/test/run-make/link-path-order/Makefile
src/test/run-make/linkage-attr-on-static/Makefile
src/test/run-make/linkage-attr-on-static/bar.rs
src/test/run-make/lto-smoke-c/Makefile
src/test/run-make/no-duplicate-libs/Makefile
src/test/run-make/no-duplicate-libs/bar.c [deleted file]
src/test/run-make/no-duplicate-libs/foo.c [deleted file]
src/test/run-make/output-type-permutations/Makefile
src/test/run-make/relocation-model/Makefile
src/test/run-make/static-dylib-by-default/Makefile
src/test/run-make/tools.mk

index e0984cfe86f077084f49b5c011df10d4c311afd1..d004558d1bf3f58f11aab507552ca36c921ea7c7 100644 (file)
@@ -1046,6 +1046,10 @@ $$(call TEST_OK_FILE,$(1),$(2),$(3),rmake): \
                $$(RMAKE_TESTS:%=$(3)/test/run-make/%-$(1)-T-$(2)-H-$(3).ok)
        @touch $$@
 
+$(3)/test/run-make/%-$(1)-T-$(2)-H-$(3).ok: \
+       export INCLUDE := $$(CFG_MSVC_INCLUDE_PATH_$$(HOST_$(3)))
+$(3)/test/run-make/%-$(1)-T-$(2)-H-$(3).ok: \
+       export LIB := $$(CFG_MSVC_LIB_PATH_$$(HOST_$(3)))
 $(3)/test/run-make/%-$(1)-T-$(2)-H-$(3).ok: \
                $(S)src/test/run-make/%/Makefile \
                $$(CSREQ$(1)_T_$(2)_H_$(3))
@@ -1056,7 +1060,7 @@ $(3)/test/run-make/%-$(1)-T-$(2)-H-$(3).ok: \
         $$(MAKE) \
            $$(HBIN$(1)_H_$(3))/rustc$$(X_$(3)) \
            $(3)/test/run-make/$$* \
-           $$(CC_$(3)) \
+           '$$(CC_$(3))' \
            "$$(CFG_GCCISH_CFLAGS_$(3))" \
            $$(HBIN$(1)_H_$(3))/rustdoc$$(X_$(3)) \
            "$$(TESTNAME)" \
@@ -1064,7 +1068,8 @@ $(3)/test/run-make/%-$(1)-T-$(2)-H-$(3).ok: \
            "$$(LD_LIBRARY_PATH_ENV_HOSTDIR$(1)_T_$(2)_H_$(3))" \
            "$$(LD_LIBRARY_PATH_ENV_TARGETDIR$(1)_T_$(2)_H_$(3))" \
            $(1) \
-           $$(S)
+           $$(S) \
+           $(3)
        @touch -r $$@.start_time $$@ && rm $$@.start_time
 else
 # FIXME #11094 - The above rule doesn't work right for multiple targets
index 04bf81a96aaf3ab09d6389712645c05228e6ddf2..c2958caddc40098e22d677c9e282fe73a74f0c83 100644 (file)
@@ -12,6 +12,7 @@ import subprocess
 import os
 import sys
 
+target_triple = sys.argv[14]
 
 def normalize_path(v):
     """msys1/msys2 automatically converts `/abs/path1:/abs/path2` into
@@ -22,8 +23,11 @@ def normalize_path(v):
     windows paths so it is really error-prone. revert it for peace."""
     v = v.replace('\\', '/')
     # c:/path -> /c/path
-    if ':/' in v:
-        v = '/' + v.replace(':/', '/')
+    # "c:/path" -> "/c/path"
+    start = v.find(':/')
+    while start != -1:
+        v = v[:start - 1] + '/' + v[start - 1:start] + v[start + 1:]
+        start = v.find(':/')
     return v
 
 
@@ -50,6 +54,10 @@ putenv('TARGET_RPATH_DIR', os.path.abspath(sys.argv[11]))
 putenv('RUST_BUILD_STAGE', sys.argv[12])
 putenv('S', os.path.abspath(sys.argv[13]))
 putenv('PYTHON', sys.executable)
+os.putenv('TARGET', target_triple)
+
+if 'msvc' in target_triple:
+    os.putenv('IS_MSVC', '1')
 
 if filt not in sys.argv[1]:
     sys.exit(0)
index 72c2d389e2aac7cf9beb1426568f50d33b88b002..5202e6dea541ee396c97d99c249d7cbce84fccca 100644 (file)
@@ -3,8 +3,8 @@
 all:
        mkdir $(TMPDIR)/a
        mkdir $(TMPDIR)/b
-       $(CC) -c -o $(TMPDIR)/a/foo.o foo.c
-       $(CC) -c -o $(TMPDIR)/b/foo.o bar.c
+       $(call COMPILE_OBJ,$(TMPDIR)/a/foo.o,foo.c)
+       $(call COMPILE_OBJ,$(TMPDIR)/b/foo.o,bar.c)
        ar crus $(TMPDIR)/libfoo.a $(TMPDIR)/a/foo.o $(TMPDIR)/b/foo.o
        $(RUSTC) foo.rs
        $(RUSTC) bar.rs
index 113717a776a99f8f533c6d77622170a747568e35..a97554935412332df45cf1a7ddf47334770780ea 100644 (file)
@@ -1,2 +1,5 @@
 // ignore-license
+#ifdef _WIN32
+__declspec(dllexport)
+#endif
 int foo() { return 0; }
index 113717a776a99f8f533c6d77622170a747568e35..b2849326a7588583aaea7f7badaff2abb855e174 100644 (file)
@@ -1,2 +1,6 @@
 // ignore-license
+
+#ifdef _WIN32
+__declspec(dllexport)
+#endif
 int foo() { return 0; }
index 2a6cc0394852e1708464c31953ca8076e555fa0e..7b2130cd4ed96bdc2dc402c67b677da4907bdfe5 100644 (file)
@@ -1,10 +1,17 @@
 -include ../tools.mk
 
-HOST_LIB_DIR=$(TMPDIR)/../../../stage$(RUST_BUILD_STAGE)/lib
-
-all:
-       $(RUSTC) foo.rs
-       $(CC) bar.c -lfoo -o $(call RUN_BINFILE,bar) $(call RPATH_LINK_SEARCH,$(HOST_LIB_DIR)) -Wl,-rpath,$(TMPDIR) $(EXTRACFLAGS)
+all: $(TMPDIR)/$(call BIN,bar)
        $(call RUN,bar)
        $(call REMOVE_DYLIBS,foo)
        $(call FAIL,bar)
+
+ifdef IS_MSVC
+$(TMPDIR)/$(call BIN,bar): $(call DYLIB,foo)
+       $(CC) bar.c $(TMPDIR)/foo.lib $(call OUT_EXE,bar)
+else
+$(TMPDIR)/$(call BIN,bar): $(call DYLIB,foo)
+       $(CC) bar.c -lfoo -o $(call RUN_BINFILE,bar) -L $(TMPDIR)
+endif
+
+$(call DYLIB,foo): foo.rs
+       $(RUSTC) foo.rs
index 2b927e3e4a730835bebe04f11dd0f37f2c10b104..3d44b3c256efcaa4da06c40f260b2f88fd0e88ac 100644 (file)
@@ -1,12 +1,12 @@
 -include ../tools.mk
 
-EXTRAFLAGS := $(EXTRACFLAGS)
-
 # FIXME: ignore freebsd
 ifneq ($(shell uname),FreeBSD)
 all:
        $(RUSTC) foo.rs
-       $(CC) bar.c -lfoo -o $(call RUN_BINFILE,bar) $(EXTRAFLAGS) $(EXTRACXXFLAGS)
+       cp $(TMPDIR)/libfoo.a $(call NATIVE_STATICLIB,foo2)
+       $(CC) bar.c $(call NATIVE_STATICLIB,foo2) $(call OUT_EXE,bar) \
+               $(EXTRACFLAGS) $(EXTRACXXFLAGS)
        $(call RUN,bar)
        rm $(call STATICLIB,foo*)
        $(call RUN,bar)
index 9914e12d5696e6561c108ef3794562bfaa589ff1..f88786857ccdc26bd247f326fffc2c349d4b9bb7 100644 (file)
@@ -1,9 +1,9 @@
 -include ../tools.mk
 
-all: $(call STATICLIB,cfoo)
+all: $(call NATIVE_STATICLIB,cfoo)
        $(RUSTC) foo.rs -C prefer-dynamic
        $(RUSTC) bar.rs
-       rm $(TMPDIR)/$(call STATICLIB_GLOB,cfoo)
+       rm $(call NATIVE_STATICLIB,cfoo)
        $(call RUN,bar)
        $(call REMOVE_DYLIBS,foo)
        $(call FAIL,bar)
index 02b24ef9846dd48cc9048b5f6b6463e35c3f6a69..be22b2728f05b0eca8e1a1e4d82cc86b8b2ba80d 100644 (file)
@@ -1,8 +1,8 @@
 -include ../tools.mk
 
-all: $(call STATICLIB,cfoo)
+all: $(call NATIVE_STATICLIB,cfoo)
        $(RUSTC) foo.rs
        $(RUSTC) bar.rs
        $(call REMOVE_RLIBS,foo)
-       rm $(TMPDIR)/$(call STATICLIB_GLOB,cfoo)
+       rm $(call NATIVE_STATICLIB,cfoo)
        $(call RUN,bar)
index 2fe518324336171c97d0c4bfb37e314979fafd39..17ecb33ab28d0124e3a11891a493e786c0eeab74 100644 (file)
@@ -7,5 +7,5 @@ all:
        rm $(TMPDIR)/$(call BIN,bar)
        $(RUSTC) foo1.rs
        rm $(TMPDIR)/$(call BIN,foo)
-       $(RUSTC) foo1.rs -o $(TMPDIR)/bar1
+       $(RUSTC) foo1.rs -o $(TMPDIR)/$(call BIN,bar1)
        rm $(TMPDIR)/$(call BIN,bar1)
index a325acbf687b54d01868aded39450f79a904fe3e..cf897dba1f2798ba4944b6523eeba7c1def1b9cf 100644 (file)
@@ -1,8 +1,6 @@
 -include ../tools.mk
 
-all:
-       $(CC) -std=c99 test.c -c -o $(TMPDIR)/test.o
-       $(AR) rcs $(TMPDIR)/libtest.a $(TMPDIR)/test.o
-       $(RUSTC) testcrate.rs -L $(TMPDIR)
-       $(RUSTC) test.rs -L $(TMPDIR)
+all: $(call NATIVE_STATICLIB,test)
+       $(RUSTC) testcrate.rs
+       $(RUSTC) test.rs
        $(call RUN,test) || exit 1
index ea6971853fe998aa42fc23e3d7421f300a71ef9f..042048ec25f63c05096693257dff6b2d8f6a3a2d 100644 (file)
@@ -1,7 +1,5 @@
 -include ../tools.mk
 
-all:
-       $(CC) -std=c99 test.c -c -o $(TMPDIR)/test.o
-       $(AR) rcs $(TMPDIR)/libtest.a $(TMPDIR)/test.o
-       $(RUSTC) test.rs -L $(TMPDIR)
+all: $(call NATIVE_STATICLIB,test)
+       $(RUSTC) test.rs
        $(call RUN,test) || exit 1
index ea6971853fe998aa42fc23e3d7421f300a71ef9f..042048ec25f63c05096693257dff6b2d8f6a3a2d 100644 (file)
@@ -1,7 +1,5 @@
 -include ../tools.mk
 
-all:
-       $(CC) -std=c99 test.c -c -o $(TMPDIR)/test.o
-       $(AR) rcs $(TMPDIR)/libtest.a $(TMPDIR)/test.o
-       $(RUSTC) test.rs -L $(TMPDIR)
+all: $(call NATIVE_STATICLIB,test)
+       $(RUSTC) test.rs
        $(call RUN,test) || exit 1
index 121e48e84e46fd8ba2fbbbbf1eb32c99f4859a37..506954fca46172efde81f8e1fd5b79ac11667ebd 100644 (file)
@@ -1,11 +1,21 @@
 // ignore-license
 // Pragma needed cause of gcc bug on windows: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52991
+
+#ifdef _MSC_VER
+#pragma pack(push,1)
+struct Foo {
+    char a;
+    short b;
+    char c;
+};
+#else
 #pragma pack(1)
 struct __attribute__((packed)) Foo {
     char a;
     short b;
     char c;
 };
+#endif
 
 struct Foo foo(struct Foo foo) {
     return foo;
index a325acbf687b54d01868aded39450f79a904fe3e..cf897dba1f2798ba4944b6523eeba7c1def1b9cf 100644 (file)
@@ -1,8 +1,6 @@
 -include ../tools.mk
 
-all:
-       $(CC) -std=c99 test.c -c -o $(TMPDIR)/test.o
-       $(AR) rcs $(TMPDIR)/libtest.a $(TMPDIR)/test.o
-       $(RUSTC) testcrate.rs -L $(TMPDIR)
-       $(RUSTC) test.rs -L $(TMPDIR)
+all: $(call NATIVE_STATICLIB,test)
+       $(RUSTC) testcrate.rs
+       $(RUSTC) test.rs
        $(call RUN,test) || exit 1
index cf7683479f08e648341db30acada9f0988dcd6e7..1268022e37b744294eb2772f96333598109f9e33 100644 (file)
@@ -8,7 +8,7 @@
 # correct to complete the linkage. If passed as "-lfoo -lbar", then the 'foo'
 # library will be stripped out, and the linkage will fail.
 
-all: $(call STATICLIB,foo) $(call STATICLIB,bar)
+all: $(call NATIVE_STATICLIB,foo) $(call NATIVE_STATICLIB,bar)
        $(RUSTC) foo.rs
        $(RUSTC) bar.rs
        $(RUSTC) main.rs -Z print-link-args
index e864ee0058c7e3da5be9864bbbced3b2b20629c6..c412b0479fb84b32afc2ca6fa0323065b65f216e 100644 (file)
@@ -1,6 +1,6 @@
 -include ../tools.mk
 
-all: $(call STATICLIB,foo)
+all: $(call NATIVE_STATICLIB,foo)
        $(RUSTC) foo.rs
        $(RUSTC) bar.rs
        $(call RUN,bar)
index 6ea3cf48ffbbd41d2d3179b81a3cb81eecbde1d2..bd94db09520288c593995cd866c8f043435f6223 100644 (file)
@@ -13,5 +13,5 @@ endif
 all:
        $(RUSTC) foo.rs --crate-type=rlib
        $(RUSTC) bar.rs --crate-type=staticlib -C lto -L. -o $(TMPDIR)/libbar.a
-       $(CC) foo.c -lbar -o $(call RUN_BINFILE,foo) $(EXTRACFLAGS)
+       $(CC) foo.c $(TMPDIR)/libbar.a $(EXTRACFLAGS) $(call OUT_EXE,foo)
        $(call RUN,foo)
index bc5e9b728694f27225af3f353dd192d6d7fa5068..846805686a12a82a8598b24a7e14fd17b00f1c7b 100644 (file)
@@ -1,6 +1,6 @@
 -include ../tools.mk
 
-all: $(TMPDIR)/libfoo.a
+all: $(call NATIVE_STATICLIB,foo)
        $(RUSTC) foo.rs -C extra-filename=-383hf8 -C prefer-dynamic
        $(RUSTC) bar.rs
        $(call RUN,bar)
index 2895ad473bf966158015a0295e161767b673f29a..fdf595b574e3397280431138651de0bfd5c85c6f 100644 (file)
@@ -1,2 +1,6 @@
 // ignore-license
+
+#ifdef _WIN32
+__declspec(dllexport)
+#endif
 void foo() {}
index 6917fa55579801da9e10c8fc76b3a83257303340..8b96fe36824715b3197e36ee72f5cd3e595cac55 100644 (file)
@@ -8,9 +8,11 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+#![feature(linked_from)]
 #![crate_type = "dylib"]
 
 #[link(name = "foo", kind = "static")]
+#[linked_from = "foo"]
 extern {
     pub fn foo();
 }
index ea6971853fe998aa42fc23e3d7421f300a71ef9f..042048ec25f63c05096693257dff6b2d8f6a3a2d 100644 (file)
@@ -1,7 +1,5 @@
 -include ../tools.mk
 
-all:
-       $(CC) -std=c99 test.c -c -o $(TMPDIR)/test.o
-       $(AR) rcs $(TMPDIR)/libtest.a $(TMPDIR)/test.o
-       $(RUSTC) test.rs -L $(TMPDIR)
+all: $(call NATIVE_STATICLIB,test)
+       $(RUSTC) test.rs
        $(call RUN,test) || exit 1
index 1e66e3a53804f81c67727d051fac03b0838b766a..0d94c99a3948a9553c98cdd08195e224a26d7b0a 100644 (file)
@@ -2,4 +2,4 @@
 
 all:
                $(RUSTC) -o "" blank.rs 2>&1 | \
-                       grep 'No such file or directory'
+                       grep -i 'No such file or directory'
index 116c7ae991cf67ae778218719addc8542f7c838f..eeea0e3714e7f18444b0ffd738b522ca5e7b42c7 100644 (file)
@@ -6,10 +6,12 @@
 CORRECT_DIR=$(TMPDIR)/correct
 WRONG_DIR=$(TMPDIR)/wrong
 
-all: $(TMPDIR)/libcorrect.a $(TMPDIR)/libwrong.a
+F := $(call NATIVE_STATICLIB_FILE,foo)
+
+all: $(call NATIVE_STATICLIB,correct) $(call NATIVE_STATICLIB,wrong)
        mkdir -p $(CORRECT_DIR) $(WRONG_DIR)
-       mv $(TMPDIR)/libcorrect.a $(CORRECT_DIR)/libfoo.a
-       mv $(TMPDIR)/libwrong.a $(WRONG_DIR)/libfoo.a
+       mv $(call NATIVE_STATICLIB,correct) $(CORRECT_DIR)/$(F)
+       mv $(call NATIVE_STATICLIB,wrong) $(WRONG_DIR)/$(F)
        $(RUSTC) main.rs -o $(TMPDIR)/should_succeed -L $(CORRECT_DIR) -L $(WRONG_DIR)
        $(call RUN,should_succeed)
        $(RUSTC) main.rs -o $(TMPDIR)/should_fail -L $(WRONG_DIR) -L $(CORRECT_DIR)
index 1871a5bbdc7f6dd0befd848c07e5a19b071bacbd..4befbe1446542ed99f22c695d4fc2aa001c8931d 100644 (file)
@@ -1,7 +1,5 @@
 -include ../tools.mk
 
-all:
-       $(CC) foo.c -c -o $(TMPDIR)/foo.o
-       $(AR) rcs $(TMPDIR)/libfoo.a $(TMPDIR)/foo.o
-       $(RUSTC) bar.rs -lfoo -L $(TMPDIR)
+all: $(call NATIVE_STATICLIB,foo)
+       $(RUSTC) bar.rs
        $(call RUN,bar) || exit 1
index 6125421bdeb6c91bbba5fe91863dde5b95f451ff..274401c448bada6adabad33b0c7acc3553973c75 100644 (file)
@@ -14,6 +14,7 @@
 #[linkage = "external"]
 static BAZ: i32 = 21;
 
+#[link(name = "foo", kind = "static")]
 extern {
     fn what() -> i32;
 }
index 6165afbeb222f56ddf1c9d9f79fd429a324a441c..72c161abe9113f10665f6ea3449b843b4adecf55 100644 (file)
@@ -5,5 +5,7 @@ CC := $(CC:-g=)
 
 all:
        $(RUSTC) foo.rs -C lto
-       $(CC) bar.c -lfoo -o $(call RUN_BINFILE,bar) $(EXTRACFLAGS) $(EXTRACXXFLAGS)
+       $(CC) bar.c $(TMPDIR)/libfoo.a \
+               $(call OUT_EXE,bar) \
+               $(EXTRACFLAGS) $(EXTRACXXFLAGS)
        $(call RUN,bar)
index fdb6048dc4d527e0a639446b4ba4e2092fa55883..3f6a28c251a2fad4e3cd7a72bba83d89b94d54cb 100644 (file)
@@ -1,7 +1,12 @@
 -include ../tools.mk
 
+ifdef IS_MSVC
+# FIXME(#27979)
+all:
+else
 all:
        $(RUSTC) foo.rs
        $(RUSTC) bar.rs
        $(RUSTC) main.rs
        $(call RUN,main)
+endif
diff --git a/src/test/run-make/no-duplicate-libs/bar.c b/src/test/run-make/no-duplicate-libs/bar.c
deleted file mode 100644 (file)
index a7b02a2..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-// ignore-license
-extern void foo();
-
-void bar() { foo(); }
diff --git a/src/test/run-make/no-duplicate-libs/foo.c b/src/test/run-make/no-duplicate-libs/foo.c
deleted file mode 100644 (file)
index 2895ad4..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-// ignore-license
-void foo() {}
index 4efbd9ee48df21f3bae75e5710b3b29b82bf8167..e3c36b9c0b7017b96bfb3df9d5c8388b72697456 100644 (file)
@@ -4,7 +4,8 @@ all:
        $(RUSTC) foo.rs --crate-type=rlib,dylib,staticlib
        $(call REMOVE_RLIBS,bar)
        $(call REMOVE_DYLIBS,bar)
-       rm $(TMPDIR)/$(call STATICLIB_GLOB,bar)
+       rm $(TMPDIR)/libbar.a
+       rm -f $(TMPDIR)/bar.{exp,lib}
        # Check that $(TMPDIR) is empty.
        [ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ]
 
@@ -36,7 +37,7 @@ all:
        rm $(TMPDIR)/foo
        [ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ]
 
-       $(RUSTC) foo.rs --emit=link -o $(TMPDIR)/foo
+       $(RUSTC) foo.rs --emit=link -o $(TMPDIR)/$(call BIN,foo)
        rm $(TMPDIR)/$(call BIN,foo)
        [ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ]
 
@@ -44,15 +45,16 @@ all:
        rm $(TMPDIR)/foo
        [ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ]
 
-       $(RUSTC) foo.rs --crate-type=dylib -o $(TMPDIR)/foo
-       rm $(TMPDIR)/$(call BIN,foo)  # FIXME 13794
+       $(RUSTC) foo.rs --crate-type=dylib -o $(TMPDIR)/$(call BIN,foo)
+       rm $(TMPDIR)/$(call BIN,foo)
+       rm -f $(TMPDIR)/foo.{exp,lib}
        [ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ]
 
        $(RUSTC) foo.rs --crate-type=staticlib -o $(TMPDIR)/foo
        rm $(TMPDIR)/foo
        [ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ]
 
-       $(RUSTC) foo.rs --crate-type=bin -o $(TMPDIR)/foo
+       $(RUSTC) foo.rs --crate-type=bin -o $(TMPDIR)/$(call BIN,foo)
        rm $(TMPDIR)/$(call BIN,foo)
        [ "$$(ls -1 $(TMPDIR) | wc -l)" -eq "0" ]
 
@@ -60,7 +62,7 @@ all:
        rm $(TMPDIR)/bar.ll
        rm $(TMPDIR)/bar.s
        rm $(TMPDIR)/bar.o
-       rm $(TMPDIR)/$(call STATICLIB_GLOB,bar)
+       rm $(TMPDIR)/libbar.a
        mv $(TMPDIR)/bar.bc $(TMPDIR)/foo.bc
        # Don't check that the $(TMPDIR) is empty - we left `foo.bc` for later
        # comparison.
index 2fcdd32bfcbd4c54b12d57367017a00f92e57496..b22f34fa35b54af8b262159d26d461e6dc301db6 100644 (file)
@@ -1,15 +1,21 @@
 -include ../tools.mk
 
-all:
+all: others
        $(RUSTC) -C relocation-model=dynamic-no-pic foo.rs
        $(call RUN,foo)
 
        $(RUSTC) -C relocation-model=default foo.rs
        $(call RUN,foo)
 
+       $(RUSTC) -C relocation-model=default --crate-type=dylib foo.rs
+       $(RUSTC) -C relocation-model=dynamic-no-pic --crate-type=dylib foo.rs
+
+ifdef IS_MSVC
+# FIXME(#28026)
+others:
+else
+others:
        $(RUSTC) -C relocation-model=static foo.rs
        $(call RUN,foo)
-
-       $(RUSTC) -C relocation-model=default --crate-type=dylib foo.rs
        $(RUSTC) -C relocation-model=static --crate-type=dylib foo.rs
-       $(RUSTC) -C relocation-model=dynamic-no-pic --crate-type=dylib foo.rs
+endif
index 1505e679af01142b51d7c05f5deb3bd2d2bdcdc4..8bd05dc201fcfa1bf0b97ad3aef3aac29d029536 100644 (file)
@@ -1,9 +1,16 @@
 -include ../tools.mk
 
+TO_LINK := $(call DYLIB,bar)
+ifdef IS_MSVC
+LINK_ARG = $(TO_LINK:dll=lib)
+else
+LINK_ARG = $(TO_LINK)
+endif
+
 all:
        $(RUSTC) foo.rs
        $(RUSTC) bar.rs
-       $(CC) main.c -o $(call RUN_BINFILE,main) -lbar $(EXTRACFLAGS)
+       $(CC) main.c $(call OUT_EXE,main) $(LINK_ARG) $(EXTRACFLAGS)
        rm $(TMPDIR)/*.rlib
        rm $(call DYLIB,foo)
        $(call RUN,main)
index 223296286bd89aeb81b7717938766074bdce784f..14d8e468f50d36fafc0b2bc1b90c583c73b62bfe 100644 (file)
@@ -7,7 +7,7 @@ TARGET_RPATH_ENV = \
 
 BARE_RUSTC := $(HOST_RPATH_ENV) $(RUSTC)
 RUSTC := $(BARE_RUSTC) --out-dir $(TMPDIR) -L $(TMPDIR)
-CC := $(CC) -L $(TMPDIR)
+#CC := $(CC) -L $(TMPDIR)
 HTMLDOCCK := $(PYTHON) $(S)/src/etc/htmldocck.py
 
 # This is the name of the binary we will generate and run; use this
@@ -19,8 +19,6 @@ RUN_BINFILE = $(TMPDIR)/$(1)
 # variable before running the binary.
 
 RLIB_GLOB = lib$(1)*.rlib
-STATICLIB = $(TMPDIR)/lib$(1).a
-STATICLIB_GLOB = lib$(1)*.a
 BIN = $(1)
 
 UNAME = $(shell uname)
@@ -33,27 +31,48 @@ RUN = $(TARGET_RPATH_ENV) $(RUN_BINFILE)
 FAIL = $(TARGET_RPATH_ENV) $(RUN_BINFILE) && exit 1 || exit 0
 DYLIB_GLOB = lib$(1)*.dylib
 DYLIB = $(TMPDIR)/lib$(1).dylib
-RPATH_LINK_SEARCH =
+STATICLIB = $(TMPDIR)/lib$(1).a
+STATICLIB_GLOB = lib$(1)*.a
 else
 ifdef IS_WINDOWS
 RUN = PATH="$(PATH):$(TARGET_RPATH_DIR)" $(RUN_BINFILE)
 FAIL = PATH="$(PATH):$(TARGET_RPATH_DIR)" $(RUN_BINFILE) && exit 1 || exit 0
 DYLIB_GLOB = $(1)*.dll
 DYLIB = $(TMPDIR)/$(1).dll
+STATICLIB = $(TMPDIR)/$(1).lib
+STATICLIB_GLOB = $(1)*.lib
 BIN = $(1).exe
-RPATH_LINK_SEARCH =
 else
 RUN = $(TARGET_RPATH_ENV) $(RUN_BINFILE)
 FAIL = $(TARGET_RPATH_ENV) $(RUN_BINFILE) && exit 1 || exit 0
 DYLIB_GLOB = lib$(1)*.so
 DYLIB = $(TMPDIR)/lib$(1).so
-RPATH_LINK_SEARCH = -Wl,-rpath-link=$(1)
+STATICLIB = $(TMPDIR)/lib$(1).a
+STATICLIB_GLOB = lib$(1)*.a
+endif
 endif
+
+ifdef IS_MSVC
+COMPILE_OBJ = $(CC) -c -Fo:`cygpath -w $(1)` $(2)
+NATIVE_STATICLIB_FILE = $(1).lib
+NATIVE_STATICLIB = $(TMPDIR)/$(call NATIVE_STATICLIB_FILE,$(1))
+OUT_EXE=-Fe:`cygpath -w $(TMPDIR)/$(call BIN,$(1))` \
+       -Fo:`cygpath -w $(TMPDIR)/$(1).obj`
+else
+COMPILE_OBJ = $(CC) -c -o $(1) $(2)
+NATIVE_STATICLIB_FILE = lib$(1).a
+NATIVE_STATICLIB = $(call STATICLIB,$(1))
+OUT_EXE=-o $(TMPDIR)/$(1)
 endif
 
+
 # Extra flags needed to compile a working executable with the standard library
 ifdef IS_WINDOWS
+ifdef IS_MSVC
+       EXTRACFLAGS := ws2_32.lib userenv.lib shell32.lib advapi32.lib
+else
        EXTRACFLAGS := -lws2_32 -luserenv
+endif
 else
 ifeq ($(UNAME),Darwin)
 else
@@ -80,12 +99,20 @@ REMOVE_RLIBS      = rm $(TMPDIR)/$(call RLIB_GLOB,$(1))
 
 %.a: %.o
        ar crus $@ $<
+%.lib: lib%.o
+       ar crus $@ $<
 %.dylib: %.o
        $(CC) -dynamiclib -Wl,-dylib -o $@ $<
 %.so: %.o
        $(CC) -o $@ $< -shared
+
+ifdef IS_MSVC
+%.dll: lib%.o
+       $(CC) $< -link -dll -out:`cygpath -w $@`
+else
 %.dll: lib%.o
        $(CC) -o $@ $< -shared
+endif
 
 $(TMPDIR)/lib%.o: %.c
-       $(CC) -c -o $@ $<
+       $(call COMPILE_OBJ,$@,$<)