]> git.tdb.fi Git - builder.git/blobdiff - source/architecture.cpp
Create a directory structure for generated source files
[builder.git] / source / architecture.cpp
index a3f3b132447f3213ce7d5f0f797751f90beae79b..212f148027d00c5ab4f1465af16dc1bf226d87f5 100644 (file)
@@ -4,6 +4,7 @@
 #include "architecture.h"
 #include "builder.h"
 #include "executable.h"
+#include "importlibrary.h"
 #include "objectfile.h"
 #include "sharedlibrary.h"
 #include "staticlibrary.h"
@@ -48,6 +49,8 @@ const char *fpus[] =
 {
        "387",   "x86",
        "sse",   "x86",
+       "sse3",  "x86",
+       "sse4.1", "x86",
        "vfpv3", "arm",
        "neon",  "arm",
        0
@@ -67,6 +70,7 @@ const char *toolchains[] =
 {
        "gnu",
        "clang",
+       "msvc",
        0
 };
 
@@ -130,6 +134,8 @@ Architecture::Architecture(Builder &b, const string &spec):
        {
                if((system=="darwin" || system=="freebsd") && builder.get_vfs().find_binary("clang"))
                        toolchain = "clang";
+               else if(system=="windows" && native)
+                       toolchain = "msvc";
                else
                        toolchain = "gnu";
        }
@@ -141,20 +147,27 @@ Architecture::Architecture(Builder &b, const string &spec):
                name += format("-%s", fpu);
        name += format("-%d-%s-%s", bits, system, toolchain);
 
-       add_pattern<ObjectFile>("%.o");
        if(system=="windows")
        {
                add_pattern<SharedLibrary>("%.dll");
-               add_pattern<SharedLibrary>("lib%.dll");
-               /* XXX Hack: Consider import libraries (*.dll.a) as dynamic libraries,
-               even though technically they are linked statically. */
-               add_pattern<SharedLibrary>("lib%.dll.a");
-               add_pattern<StaticLibrary>("lib%.a");
-               add_pattern<StaticLibrary>("%.lib");
+               if(toolchain=="msvc")
+               {
+                       add_pattern<ObjectFile>("%.obj");
+                       add_pattern<ImportLibrary>("%.lib");
+                       add_pattern<StaticLibrary>("%_static.lib");
+               }
+               else
+               {
+                       add_pattern<ObjectFile>("%.o");
+                       add_pattern<SharedLibrary>("lib%.dll");
+                       add_pattern<ImportLibrary>("lib%.dll.a");
+                       add_pattern<StaticLibrary>("lib%.a");
+               }
                add_pattern<Executable>("%.exe");
        }
        else
        {
+               add_pattern<ObjectFile>("%.o");
                if(system=="darwin")
                        add_pattern<SharedLibrary>("lib%.dylib");
                else