]> git.tdb.fi Git - builder.git/blobdiff - source/gnucompiler.cpp
Add FPU specification to Architecture and GnuCompiler
[builder.git] / source / gnucompiler.cpp
index 6daa99d81a565c482c05f6a49127986d0a457ead..816a9a31eaf196e461e9ea3ca2423bd4804f2a38 100644 (file)
@@ -92,7 +92,6 @@ void GnuCompiler::do_prepare()
 Task *GnuCompiler::run(const Target &target) const
 {
        const ObjectFile &object = dynamic_cast<const ObjectFile &>(target);
-       const Component &comp = *object.get_component();
 
        ExternalTask::Arguments argv;
        argv.push_back(executable->get_path().str());
@@ -136,7 +135,10 @@ Task *GnuCompiler::run(const Target &target) const
                        argv.push_back("-Winline");
                }
                if(binfo.fatal_warnings)
+               {
                        argv.push_back("-Werror");
+                       argv.push_back("-Wno-error=deprecated-declarations");
+               }
        }
 
        const FS::Path &sysroot = binfo.sysroot;
@@ -188,9 +190,24 @@ Task *GnuCompiler::run(const Target &target) const
                argv.push_back("-march="+cpu);
        }
 
+       if(!architecture->get_fpu().empty())
+       {
+               if(architecture->get_type()=="x86")
+               {
+                       argv.push_back("-mfpmath="+architecture->get_fpu());
+                       if(architecture->get_fpu()=="sse")
+                               argv.push_back("-msse2");
+               }
+               else if(architecture->get_type()=="arm")
+               {
+                       argv.push_back("-mfpu="+architecture->get_fpu());
+                       argv.push_back("-mfloat-abi=softfp");
+               }
+       }
+
        FS::Path obj_path = object.get_path();
        FS::Path src_path = object.get_source().get_path();
-       FS::Path work_dir = comp.get_package().get_source_directory();
+       FS::Path work_dir = object.get_component()->get_package().get_source_directory();
 
        argv.push_back("-o");
        argv.push_back(relative(obj_path, work_dir).str());