From 4c72da2cf1b1b140c841adac0097c1a29e306719 Mon Sep 17 00:00:00 2001 From: "L. E. Segovia" Date: Tue, 10 Oct 2017 12:28:07 -0300 Subject: [PATCH 1/2] Fix Linux compilation - Map between Qt package names and pkg-config names; fixes #32 - thread.cpp: pthreads needed an additional parameter, my bad --- data/scons/qt5.py | 65 ++++++++++++++++++++++-------------------- src/libcore/thread.cpp | 4 ++- 2 files changed, 37 insertions(+), 32 deletions(-) diff --git a/data/scons/qt5.py b/data/scons/qt5.py index 3c5b85dc9..12321acec 100644 --- a/data/scons/qt5.py +++ b/data/scons/qt5.py @@ -1,4 +1,4 @@ - +# coding: utf8 """SCons.Tool.qt Tool-specific initialization for Qt. @@ -389,48 +389,50 @@ def recursiveFiles(basepath, path) : def enable_modules(self, modules, debug=False, crosscompiling=False) : import sys - validModules = [ - 'QtCore', - 'QtGui', - 'QtWidgets', - 'QtOpenGL', - 'Qt3Support', - 'QtAssistant', # deprecated - 'QtAssistantClient', - 'QtScript', - 'QtDBus', - 'QtSql', - 'QtSvg', + # https://askubuntu.com/questions/508503/whats-the-development-package-for-qt5-in-14-04 + + # Dictionary changes between MacOS/Windows names and pkg-config names + validModules = { + 'QtCore': 'Qt5Core', + 'QtGui': 'Qt5Gui', + 'QtWidgets': 'Qt5Widgets', + 'QtOpenGL': 'Qt5OpenGL', + # 'Qt3Support': 'Qt3Support', # removed in Qt5 + # 'QtAssistant': 'QtAssistant', # deprecated in Qt5 + # 'QtAssistantClient': 'QtAssistantClient', # deprecated in Qt5 + # 'QtDBus': 'Qt5DBus', # unused + # 'QtSql': 'Qt5Sql', # unused + # 'QtSvg': 'Qt5Svg', # unused # The next modules have not been tested yet so, please # maybe they require additional work on non Linux platforms - 'QtNetwork', - 'QtTest', - 'QtXml', - 'QtXmlPatterns', - 'QtUiTools', - 'QtDesigner', - 'QtDesignerComponents', - 'QtWebKit', - 'QtHelp', - 'QtScript', - 'QtScriptTools', - 'QtMultimedia', - ] + 'QtNetwork': 'Qt5Network', + # 'QtTest': 'Qt5Test', # unused + 'QtXml': 'Qt5Xml', + 'QtXmlPatterns': 'Qt5XmlPatterns', + # 'QtUiTools': 'Qt5UiTools', # unused + # 'QtDesigner' : 'Qt5Designer', # unused + # 'QtDesignerComponents' : 'Qt5DesignerComponents', # unused + # 'QtWebKit': 'Qt5WebKit', # unused + # 'QtHelp': 'Qt5Help', # unused + # 'QtScript': 'Qt5Script', # unused + # 'QtScriptTools': 'Qt5ScriptTools', # unused + # 'QtMultimedia': 'Qt5Multimedia', # unused + } pclessModules = [ # in qt <= 4.3 designer and designerComponents are pcless, on qt5.4 they are not, so removed. # 'QtDesigner', # 'QtDesignerComponents', ] - staticModules = [ - 'QtUiTools', - ] + staticModules = { + # 'QtUiTools': 'Qt5UiTools', # unused + } invalidModules=[] for module in modules: if module not in validModules : invalidModules.append(module) if invalidModules : raise Exception("Modules %s are not Qt5 modules. Valid Qt5 modules are: %s"% ( - str(invalidModules),str(validModules))) + str(invalidModules),str(validModules.keys()))) moduleDefines = { 'QtScript' : ['QT_SCRIPT_LIB'], @@ -464,7 +466,8 @@ def enable_modules(self, modules, debug=False, crosscompiling=False) : pcmodules.remove("QtAssistant") pcmodules.append("QtAssistantClient") if sys.platform.startswith('linux'): - self.ParseConfig('pkg-config %s --libs --cflags'% ' '.join(pcmodules)) + pkgconfigmodules = [validModules[module]+debugSuffix for module in modules if module not in pclessModules] + self.ParseConfig('pkg-config %s --libs --cflags'% ' '.join(pkgconfigmodules)) elif sys.platform == 'darwin': for module in pcmodules: #self.AppendUnique(CPPPATH="$QTDIR/frameworks/%s.framework/Versions/5/Headers" % module) diff --git a/src/libcore/thread.cpp b/src/libcore/thread.cpp index dca266b91..f86461291 100644 --- a/src/libcore/thread.cpp +++ b/src/libcore/thread.cpp @@ -633,7 +633,9 @@ void Thread::initializeOpenMP(size_t threadCount) { } const std::string threadName = "Mitsuba: " + thread->getName(); - #if defined(__LINUX__) || defined(__OSX__) + #if defined(__LINUX__) + pthread_setname_np(pthread_self(), threadName.c_str()); + #elif defined(__OSX__) pthread_setname_np(threadName.c_str()); #elif defined(__WINDOWS__) SetThreadName(threadName.c_str()); From 463f435749b39cb7eddfb4d0a6f5030343a97628 Mon Sep 17 00:00:00 2001 From: "L. E. Segovia" Date: Sat, 21 Oct 2017 10:56:54 -0300 Subject: [PATCH 2/2] Add missing std and fPIC flags to Linux release config --- build/config-linux-gcc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/config-linux-gcc.py b/build/config-linux-gcc.py index 8443a4a79..e0c337484 100644 --- a/build/config-linux-gcc.py +++ b/build/config-linux-gcc.py @@ -4,7 +4,7 @@ DISTDIR = '#dist' CXX = 'g++' CC = 'gcc' -CXXFLAGS = ['-O3', '-Wall', '-g', '-pipe', '-march=nocona', '-msse2', '-ftree-vectorize', '-mfpmath=sse', '-funsafe-math-optimizations', '-fno-rounding-math', '-fno-signaling-nans', '-fno-math-errno', '-fomit-frame-pointer', '-DMTS_DEBUG', '-DSINGLE_PRECISION', '-DSPECTRUM_SAMPLES=3', '-DMTS_SSE', '-DMTS_HAS_COHERENT_RT', '-fopenmp', '-fvisibility=hidden', '-mtls-dialect=gnu2'] +CXXFLAGS = ['-O3', '-Wall', '-g', '-pipe', '-march=nocona', '-msse2', '-ftree-vectorize', '-mfpmath=sse', '-funsafe-math-optimizations', '-fno-rounding-math', '-fno-signaling-nans', '-fno-math-errno', '-fomit-frame-pointer', '-DMTS_DEBUG', '-DSINGLE_PRECISION', '-DSPECTRUM_SAMPLES=3', '-DMTS_SSE', '-DMTS_HAS_COHERENT_RT', '-fopenmp', '-fvisibility=hidden', '-mtls-dialect=gnu2', '-std=c++11', '-fPIC'] LINKFLAGS = [] SHLINKFLAGS = ['-rdynamic', '-shared', '-fPIC', '-lstdc++'] BASEINCLUDE = ['#include']