Commit 41b588547c

Andrew Kelley <superjoe30@gmail.com>
2017-09-24 00:46:03
improvements to windows support
See #302
1 parent 7fd164f
cmake/Findllvm.cmake
@@ -80,32 +80,51 @@ else()
           "c:/msys64/mingw64/bin"
           "C:/Libraries/llvm-5.0.0/bin")
 
-  execute_process(
-      COMMAND ${LLVM_CONFIG_EXE} --libs
-      OUTPUT_VARIABLE LLVM_LIBRARIES
-      OUTPUT_STRIP_TRAILING_WHITESPACE)
-
-  execute_process(
-      COMMAND ${LLVM_CONFIG_EXE} --system-libs
-      OUTPUT_VARIABLE LLVM_SYSTEM_LIBS
-      OUTPUT_STRIP_TRAILING_WHITESPACE)
-
-  execute_process(
-      COMMAND ${LLVM_CONFIG_EXE} --libdir
-      OUTPUT_VARIABLE LLVM_LIBDIRS
-      OUTPUT_STRIP_TRAILING_WHITESPACE)
+  if(NOT(CMAKE_BUILD_TYPE STREQUAL "Debug"))
+    execute_process(
+        COMMAND ${LLVM_CONFIG_EXE} --libfiles --link-static
+        OUTPUT_VARIABLE LLVM_LIBRARIES_SPACES
+        OUTPUT_STRIP_TRAILING_WHITESPACE)
+    string(REPLACE " " ";" LLVM_LIBRARIES "${LLVM_LIBRARIES_SPACES}")
+
+    execute_process(
+        COMMAND ${LLVM_CONFIG_EXE} --system-libs --link-static
+        OUTPUT_VARIABLE LLVM_SYSTEM_LIBS_SPACES
+        OUTPUT_STRIP_TRAILING_WHITESPACE)
+    string(REPLACE " " ";" LLVM_SYSTEM_LIBS "${LLVM_SYSTEM_LIBS_SPACES}")
+
+    execute_process(
+        COMMAND ${LLVM_CONFIG_EXE} --libdir --link-static
+        OUTPUT_VARIABLE LLVM_LIBDIRS_SPACES
+        OUTPUT_STRIP_TRAILING_WHITESPACE)
+    string(REPLACE " " ";" LLVM_LIBDIRS "${LLVM_LIBDIRS_SPACES}")
+  endif()
+  if(NOT LLVM_LIBRARIES)
+    execute_process(
+        COMMAND ${LLVM_CONFIG_EXE} --libs
+        OUTPUT_VARIABLE LLVM_LIBRARIES
+        OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+    execute_process(
+        COMMAND ${LLVM_CONFIG_EXE} --system-libs
+        OUTPUT_VARIABLE LLVM_SYSTEM_LIBS
+        OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+    execute_process(
+        COMMAND ${LLVM_CONFIG_EXE} --libdir
+        OUTPUT_VARIABLE LLVM_LIBDIRS
+        OUTPUT_STRIP_TRAILING_WHITESPACE)
+  endif()
 
   execute_process(
       COMMAND ${LLVM_CONFIG_EXE} --includedir
       OUTPUT_VARIABLE LLVM_INCLUDE_DIRS
       OUTPUT_STRIP_TRAILING_WHITESPACE)
 
-  find_library(LLVM_LIBRARY NAMES LLVM)
-
   set(LLVM_LIBRARIES ${LLVM_LIBRARIES} ${LLVM_SYSTEM_LIBS})
 
-  if(LLVM_LIBRARY AND NOT LLVM_LIBRARIES)
-    set(LLVM_LIBRARIES ${LLVM_LIBRARY})
+  if(NOT LLVM_LIBRARIES)
+    find_library(LLVM_LIBRARIES NAMES LLVM LLVM-5.0 LLVM-5)
   endif()
 
   link_directories("${CMAKE_PREFIX_PATH}/lib")
src/analyze.cpp
@@ -3189,6 +3189,8 @@ ImportTableEntry *add_source_file(CodeGen *g, PackageTableEntry *package, Buf *a
             if (is_pub) {
                 if (buf_eql_str(proto_name, "main")) {
                     g->have_pub_main = true;
+                    g->windows_subsystem_windows = false;
+                    g->windows_subsystem_console = true;
                 } else if (buf_eql_str(proto_name, "panic")) {
                     g->have_pub_panic = true;
                 }
@@ -3196,6 +3198,8 @@ ImportTableEntry *add_source_file(CodeGen *g, PackageTableEntry *package, Buf *a
                     g->libc_link_lib != nullptr)
             {
                 g->have_c_main = true;
+                g->windows_subsystem_windows = false;
+                g->windows_subsystem_console = true;
             }
 
         }
src/os.hpp
@@ -81,7 +81,7 @@ bool os_is_sep(uint8_t c);
 #endif
 
 #if defined(ZIG_OS_WINDOWS)
-#define ZIG_PRI_usize "Iu"
+#define ZIG_PRI_usize "I64u"
 #define ZIG_PRI_u64 "I64u"
 #define ZIG_PRI_llu "I64u"
 #define ZIG_PRI_x64 "I64x"
CMakeLists.txt
@@ -352,9 +352,14 @@ else()
 endif()
 
 set(EXE_LDFLAGS " ")
+if(MINGW)
+    set(EXE_LDFLAGS "-static -static-libgcc -static-libstdc++")
+else()
+    set(EXE_LDFLAGS " ")
+endif()
 if(ZIG_TEST_COVERAGE)
     set(EXE_CFLAGS "${EXE_CFLAGS} -fprofile-arcs -ftest-coverage")
-    set(EXE_LDFLAGS "-fprofile-arcs -ftest-coverage")
+    set(EXE_LDFLAGS "${EXE_LDFLAGS} -fprofile-arcs -ftest-coverage")
 endif()
 
 add_executable(zig ${ZIG_SOURCES})