Developer forums (C::B DEVELOPMENT STRICTLY!) > Development

gcc-4.6.1 builds availiable

<< < (2/8) > >>

MortenMacFly:

--- Quote from: reckless on August 05, 2011, 09:51:47 pm ---if possible ill try to get it to autodetect both the 64 and 32 bit compiler atm only the 32 bit one is autodetected.

--- End quote ---
That would be a nice contribution. :-)

reckless:
ok ill see what i can cook up :) packaging the source now should be on the ftp in a few minutes. or if you prefer ill put it on my google code site the size should be ok for that.

then ill make a diff.

reckless:
modified trunk source should be up now.

ftp://90.184.233.166:21/codeblocks-trunk-modified-src.7z

might have a solution to the detection of the 64 bit compiler allready but still running some tests. still pretty new to wxwidgets :)

reckless:
ftp://90.184.233.166:21/compilerMINGW.diff

diff of the changes unfortunatly still needs some work, as it seems checking wxIsPlatform64Bit() only applies to wxwidget itself hm ? ideas are welcome.

reckless:
slight change to the diff the first one was a bit messy.


--- Code: ------ compilerMINGW.cpp.orig 2011-08-05 20:58:41 +0000
+++ compilerMINGW.cpp 2011-08-06 06:23:08 +0000
@@ -25,7 +25,7 @@
 #include <configmanager.h>
 
 #ifdef __WXMSW__
-    #include <wx/msw/registry.h>
+#include <wx/msw/registry.h>
 #endif
 
 CompilerMINGW::CompilerMINGW(const wxString& name, const wxString& ID)
@@ -55,13 +55,27 @@
 {
     if (platform::windows)
     {
-        m_Programs.C         = _T("mingw32-gcc.exe");
-        m_Programs.CPP       = _T("mingw32-g++.exe");
-        m_Programs.LD        = _T("mingw32-g++.exe");
-        m_Programs.DBG       = _T("gdb.exe");
-        m_Programs.LIB       = _T("ar.exe");
-        m_Programs.WINDRES   = _T("windres.exe");
-        m_Programs.MAKE      = _T("mingw32-make.exe");
+        // need an idea to also reset the standard mingw compiler ?
+        if (wxIsPlatform64Bit())
+        {
+            m_Programs.C         = _T("x86_64-w64-mingw32-gcc.exe");
+            m_Programs.CPP       = _T("x86_64-w64-mingw32-g++.exe");
+            m_Programs.LD        = _T("x86_64-w64-mingw32-g++.exe");
+            m_Programs.DBG       = _T("gdb.exe");
+            m_Programs.LIB       = _T("ar.exe");
+            m_Programs.WINDRES   = _T("windres.exe");
+            m_Programs.MAKE      = _T("winmake.exe");
+        }
+        else
+        {
+            m_Programs.C         = _T("i686-w64-mingw32-gcc.exe");
+            m_Programs.CPP       = _T("i686-w64-mingw32-g++.exe");
+            m_Programs.LD        = _T("i686-w64-mingw32-g++.exe");
+            m_Programs.DBG       = _T("gdb.exe");
+            m_Programs.LIB       = _T("ar.exe");
+            m_Programs.WINDRES   = _T("windres.exe");
+            m_Programs.MAKE      = _T("winmake.exe");
+        }
     }
     else
     {
@@ -96,12 +110,12 @@
 
     m_Options.ClearOptions();
     m_Options.AddOption(_("Produce debugging symbols"),
-                _T("-g"),
-                _("Debugging"),
-                _T(""),
-                true,
-                _T("-O -O1 -O2 -O3 -Os"),
-                _("You have optimizations enabled. This is Not A Good Thing(tm) when producing debugging symbols..."));
+                        _T("-g"),
+                        _("Debugging"),
+                        _T(""),
+                        true,
+                        _T("-O -O1 -O2 -O3 -Os"),
+                        _("You have optimizations enabled. This is Not A Good Thing(tm) when producing debugging symbols..."));
     wxString gprof_link = _T("-pg");
     if (platform::windows)
         gprof_link = _T("-pg -lgmon");
@@ -144,6 +158,7 @@
     m_Options.AddOption(_("Optimize generated code (for size)"), _T("-Os"), category);
     m_Options.AddOption(_("Expensive optimizations"), _T("-fexpensive-optimizations"), category);
     m_Options.AddOption(_("Don't keep the frame pointer in a register for functions that don't need one"), _T("-fomit-frame-pointer"), category);
+
     // machine dependent options - cpu arch
     category = _("CPU architecture tuning (choose none, or only one of these)");
     m_Options.AddOption(_("i386"), _T("-march=i386"), category);
@@ -175,6 +190,7 @@
     m_Commands[(int)ctGenDependenciesCmd].push_back(CompilerTool(_T("$compiler -MM $options -MF $dep_object -MT $object $includes $file")));
     m_Commands[(int)ctCompileResourceCmd].push_back(CompilerTool(_T("$rescomp -i $file -J rc -o $resource_output -O coff $res_includes")));
     m_Commands[(int)ctLinkConsoleExeCmd].push_back(CompilerTool(_T("$linker $libdirs -o $exe_output $link_objects $link_resobjects $link_options $libs")));
+
     if (platform::windows)
     {
         m_Commands[(int)ctLinkNativeCmd].push_back(CompilerTool(_T("$linker $libdirs -o $exe_output $link_objects $link_resobjects $link_options $libs --subsystem,native")));
@@ -249,15 +265,25 @@
             }
         }
     }
-
     wxString sep = wxFileName::GetPathSeparator();
+
     if (platform::windows)
     {
         // look first if MinGW was installed with Code::Blocks (new in beta6)
         m_MasterPath = ConfigManager::GetExecutableFolder();
         if (!wxFileExists(m_MasterPath + sep + _T("bin") + sep + m_Programs.C))
+        {
             // if that didn't do it, look under C::B\MinGW, too (new in 08.02)
             m_MasterPath += sep + _T("MinGW");
+        }
+
+        if (!wxFileExists(m_MasterPath + sep + _T("bin") + sep + m_Programs.C))
+        {
+            // if that didn't do it, look under C::B\MinGW32 or C::B\MinGW64, too (new in 08.02)
+            m_MasterPath += wxIsPlatform64Bit() ? sep + _T("MinGW64") : sep + _T("MinGW32");
+        }
+
+        // standard mingw no 64 bit compiler and the mingw64 compiler has no ini.
         if (!wxFileExists(m_MasterPath + sep + _T("bin") + sep + m_Programs.C))
         {
             // no... search for MinGW installation dir
@@ -300,16 +326,15 @@
 #endif
             }
         }
-        else
-            m_Programs.MAKE = _T("make.exe"); // we distribute "make" not "mingw32-make"
+        else m_Programs.MAKE = _T("make.exe"); // we distribute "make" not "mingw32-make"
     }
-    else
-        m_MasterPath = _T("/usr");
+    else m_MasterPath = _T("/usr");
 
     AutoDetectResult ret = wxFileExists(m_MasterPath + sep + _T("bin") + sep + m_Programs.C) ? adrDetected : adrGuessed;
     // don't add lib/include dirs. GCC knows where its files are located
 
     SetVersionString();
+
     return ret;
 }
 
@@ -317,7 +342,7 @@
 {
     /*  NOTE (Biplab#9#): There is a critical bug which blocks C::B from starting up.
         So we'll disable version string checking till we fix the bug. */
-    #if !wxCHECK_VERSION(2, 9, 0)
+#if !wxCHECK_VERSION(2, 9, 0)
 //    Manager::Get()->GetLogManager()->DebugLog(_T("Compiler detection for compiler ID: '") + GetID() + _T("' (parent ID= '") + GetParentID() + _T("')"));
 
     wxArrayString output, errors;
@@ -394,5 +419,5 @@
             }
         }
     }
-    #endif
+#endif
 }

--- End code ---

wxIsPlatform64Bit() should actually work but my C++ fu is a bit impaired so i likely made some mistake. im normally used to working in old C mode.

still need to find a solution to reset the standard MinGW compiler's executables with the new autodetect code. atm it will only work for the mingw64 compiler. it should be as easy as checking for a certain #define only present in mingw64 but i forgot its name so i need to find it again.

Navigation

[0] Message Index

[#] Next page

[*] Previous page

Go to full version