From: Guilherme B. T. <gui...@gm...> - 2013-12-04 23:55:03
|
On 04/12/13 22:53, Bastien ROUCARIES wrote: > On Wed, Dec 4, 2013 at 10:32 PM, Guilherme Brondani Torri > <gui...@gm...> wrote: >> On 04/12/13 21:47, Bastien ROUCARIES wrote: >>> Hi, >>> >>> Could you test the branch simplify_20131114 ? >>> >>> It simplify a lot qucs: >>> 205 files changed, 4893 insertions(+), 6970 deletions(-) >>> >>> So a net deletion of about 2000 loc. >>> >>> Bastien >>> >> Hi again, >> >> Got around the other issue, but I will let you add the ax_cxx_namespaces.m4 >> to qucs-core/m4. >> >> Now it got stuck at: >> <snip> >> /bin/sh ../../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. >> -I../../.. -I/usr/local/Cellar/eigen/3.2.0/include/eigen3 -I../../../src >> -I../../../src/math -I../../../src/components >> -I../../../src/components/devices -g -O2 -pipe -fno-exceptions -fno-rtti >> -fno-check-new -W -Wall -MT substrate.lo -MD -MP -MF .deps/substrate.Tpo -c >> -o substrate.lo substrate.cpp >> libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../../.. >> -I/usr/local/Cellar/eigen/3.2.0/include/eigen3 -I../../../src >> -I../../../src/math -I../../../src/components >> -I../../../src/components/devices -g -O2 -pipe -fno-exceptions -fno-rtti >> -fno-check-new -W -Wall -MT substrate.lo -MD -MP -MF .deps/substrate.Tpo -c >> substrate.cpp -fno-common -DPIC -o .libs/substrate.o >> In file included from ../../../src/net.h:28, >> from ../../../src/components/component.h:42, >> from substrate.cpp:29: >> ../../../src/ptrlist.h:31: error: expected unqualified-id before ‘using’ >> In file included from ../../../src/components/component.h:42, >> from substrate.cpp:29: >> ../../../src/net.h:75: error: ISO C++ forbids declaration of ‘ptrlist’ with >> no type >> ../../../src/net.h:75: error: expected ‘;’ before ‘<’ token >> ../../../src/net.h:94: error: ISO C++ forbids declaration of ‘ptrlist’ with >> no type >> ../../../src/net.h:94: error: expected ‘;’ before ‘<’ token >> ../../../src/net.h:95: error: ISO C++ forbids declaration of ‘ptrlist’ with >> no type >> ../../../src/net.h:95: error: expected ‘;’ before ‘<’ token >> In file included from ../../../src/characteristic.h:28, >> from ../../../src/circuit.h:28, >> from ../../../src/components/component.h:43, >> from substrate.cpp:29: >> ../../../src/pair.h: In constructor ‘pair::pair(const char*)’: >> ../../../src/pair.h:39: error: ‘nullptr’ was not declared in this scope >> ../../../src/pair.h: In constructor ‘pair::pair(const char*, double)’: >> ../../../src/pair.h:43: error: ‘nullptr’ was not declared in this scope >> ../../../src/pair.h: In member function ‘void pair::setName(const char*)’: >> ../../../src/pair.h:47: error: ‘nullptr’ was not declared in this scope >> make[4]: *** [substrate.lo] Error 1 >> make[3]: *** [all-recursive] Error 1 >> make[2]: *** [all-recursive] Error 1 >> make[1]: *** [all-recursive] Error 1 >> make: *** [all] Error 2 >> >> ~/git/qucs/qucs-core $ g++ -v >> Using built-in specs. >> Target: i686-apple-darwin11 >> Configured with: >> /private/var/tmp/llvmgcc42/llvmgcc42-2336.11~182/src/configure >> --disable-checking --enable-werror >> --prefix=/Applications/Xcode.app/Contents/Developer/usr/llvm-gcc-4.2 >> --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ >> --program-prefix=llvm- --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ >> --with-slibdir=/usr/lib --build=i686-apple-darwin11 >> --enable-llvm=/private/var/tmp/llvmgcc42/llvmgcc42-2336.11~182/dst-llvmCore/Developer/usr/local >> --program-prefix=i686-apple-darwin11- --host=x86_64-apple-darwin11 >> --target=i686-apple-darwin11 --with-gxx-include-dir=/usr/include/c++/4.2.1 >> Thread model: posix >> gcc version 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00) >> >> >> I didn't read all your changes, but I see C++11 on the log. >> Just curious, do you know if there is a minimum version of GCC or LLVM Clang >> for the features you added? > Nothing really advanced. > > Unfortunatly alias template need gcc 4.7 or clang 3.1 > > This feature is needed in order to alias eigen to tmatrix. > > Bastien >> Regards, >> Guilherme Hi Bastien, Raising the bar on the minimum compiler version is ok with me. I guess GCC 4.7 is already on stable Debian, no? On the Mac we can use Clang, after working out the bugs. I guess the GCC 4.2 from Apple won't cut it. On Windows, hum, for native compilation the issue is Qt. The binary libraries shipped by Digia require GCC 4.4. Off course one can compile from source, but it is faster/easier to use the official binaries... Not ideal, but one can also use a newer version just for qucs-core. What the other developers have to say? Ok back to your code, trying with Clang it went a bit further. A few notes below, till the point where I got stuck again. Compiler version: ~/git/qucs/qucs-core $ clang++ -v Apple LLVM version 4.2 (clang-425.0.28) (based on LLVM 3.2svn) Target: x86_64-apple-darwin12.5.0 0) On the Mac I am using: $ CXX=clang++ CXXFLAGS="-std=c++11 -stdlib=libc++" LDDFLAGS=-stdlib=libc++ ./configure --enable-maintainer-mode If I don't enforce the CXX, CXXFLAGS and LDDFLAGS, see what happens: /bin/sh ../../libtool --tag=CXX --mode=compile clang++ -DHAVE_CONFIG_H -I. -I../.. -I/usr/local/Cellar/eigen/3.2.0/include/eigen3 -I../../src -g -O2 -std=gnu++11 -pipe -fno-exceptions -fno-rtti -fno-check-new -W -Wall -MT matrix.lo -MD -MP -MF .deps/matrix.Tpo -c -o matrix.lo matrix.cpp libtool: compile: clang++ -DHAVE_CONFIG_H -I. -I../.. -I/usr/local/Cellar/eigen/3.2.0/include/eigen3 -I../../src -g -O2 -std=gnu++11 -pipe -fno-exceptions -fno-rtti -fno-check-new -W -Wall -MT matrix.lo -MD -MP -MF .deps/matrix.Tpo -c matrix.cpp -fno-common -DPIC -o .libs/matrix.o clang: warning: argument unused during compilation: '-fno-check-new' In file included from matrix.cpp:96: In file included from ./matrix.h:28: In file included from /usr/local/Cellar/eigen/3.2.0/include/eigen3/Eigen/Dense:1: In file included from /usr/local/Cellar/eigen/3.2.0/include/eigen3/Eigen/Core:256: /usr/local/Cellar/eigen/3.2.0/include/eigen3/Eigen/src/Core/util/Memory.h:737:23: error: no member named 'forward' in namespace 'std' ::new(p) T(std::forward<Args>(args)...); ~~~~~^ /usr/local/Cellar/eigen/3.2.0/include/eigen3/Eigen/src/Core/util/Memory.h:737:31: error: 'Args' does not refer to a value ::new(p) T(std::forward<Args>(args)...); ^ /usr/local/Cellar/eigen/3.2.0/include/eigen3/Eigen/src/Core/util/Memory.h:734:26: note: declared here template<typename... Args> ^ 2 errors generated. This was easy to Google out. 1) It seems that TR1 is not available/necessary with Clang (or C++11): Out of the configure phase. <snip> checking for EIGEN3... yes checking whether the compiler implements namespaces... yes checking whether the compiler has numeric_limits<T>... yes checking whether the compiler implements namespaces... yes checking whether the compiler has complex<T>... yes checking whether the compiler has TR1 compliant complex<T>... no checking for complex cos... yes checking for complex cosh... yes checking for complex exp... yes checking for complex log... yes checking for complex log10... yes checking for complex sin... yes checking for complex sinh... yes checking for complex sqrt... yes checking for complex tan... yes checking for complex tanh... yes checking for complex acos... yes checking for complex acosh... yes checking for complex asin... yes checking for complex asinh... yes checking for complex atan... yes checking for complex atanh... yes checking for complex log2... no checking for complex norm... yes checking for complex pow... yes checking for complex atan2... no checking for complex fmod... no checking for complex polar (double, double)... yes checking for complex polar (complex, complex)... no <snip> The build moves forward to stop with: <snip> /bin/sh ../../libtool --tag=CXX --mode=compile clang++ -DHAVE_CONFIG_H -I. -I../.. -I/usr/local/Cellar/eigen/3.2.0/include/eigen3 -I../../src -std=c++11 -stdlib=libc++ -pipe -fno-exceptions -fno-rtti -fno-check-new -W -Wall -MT complex.lo -MD -MP -MF .deps/complex.Tpo -c -o complex.lo complex.cpp libtool: compile: clang++ -DHAVE_CONFIG_H -I. -I../.. -I/usr/local/Cellar/eigen/3.2.0/include/eigen3 -I../../src -std=c++11 -stdlib=libc++ -pipe -fno-exceptions -fno-rtti -fno-check-new -W -Wall -MT complex.lo -MD -MP -MF .deps/complex.Tpo -c complex.cpp -fno-common -DPIC -o .libs/complex.o clang: warning: argument unused during compilation: '-fno-check-new' In file included from complex.cpp:37: ./complex.h:50:12: error: no member named 'tr1' in namespace 'std' using std::tr1::acos; ~~~~~^ ./complex.h:56:12: error: no member named 'tr1' in namespace 'std' using std::tr1::acosh; ~~~~~^ ./complex.h:62:12: error: no member named 'tr1' in namespace 'std' using std::tr1::asin; ~~~~~^ ./complex.h:68:12: error: no member named 'tr1' in namespace 'std' using std::tr1::asinh; ~~~~~^ ./complex.h:74:12: error: no member named 'tr1' in namespace 'std' using std::tr1::atan; ~~~~~^ ./complex.h:80:12: error: no member named 'tr1' in namespace 'std' using std::tr1::atanh; ~~~~~^ complex.cpp:333:25: error: no member named 'tr1' in namespace 'std' nr_complex_t a = std::tr1::atan (y / x); ~~~~~^ 7 errors generated. <snip> Looking at the error line in `complex.h` I don't get this, it should fall into the first branch of`#ifndef HAVE_CXX_COMPLEX_ACOS`. 'Acos' is supposed to be defined as seen above in the configure. Anyway, removing the 'tr1::' from the second branch lets it go ahead. It seems that the ifdefs on complex.h are not dealing with the fact that TRI is now integrated into C++11. 2) Finally it gets stuck at: <snip> /bin/sh ../../../libtool --tag=CXX --mode=compile clang++ -DHAVE_CONFIG_H -I. -I../../.. -I/usr/local/Cellar/eigen/3.2.0/include/eigen3 -I../../../src -I../../../src/math -I../../../src/components -I../../../src/components/devices -std=c++11 -stdlib=libc++ -pipe -fno-exceptions -fno-rtti -fno-check-new -W -Wall -MT bondwire.lo -MD -MP -MF .deps/bondwire.Tpo -c -o bondwire.lo bondwire.cpp libtool: compile: clang++ -DHAVE_CONFIG_H -I. -I../../.. -I/usr/local/Cellar/eigen/3.2.0/include/eigen3 -I../../../src -I../../../src/math -I../../../src/components -I../../../src/components/devices -std=c++11 -stdlib=libc++ -pipe -fno-exceptions -fno-rtti -fno-check-new -W -Wall -MT bondwire.lo -MD -MP -MF .deps/bondwire.Tpo -c bondwire.cpp -fno-common -DPIC -o .libs/bondwire.o clang: warning: argument unused during compilation: '-fno-check-new' bondwire.cpp:404:47: error: call to 'norm' is ambiguous nr_double_t f = kelvin (T) * 4.0 * R * z0 / norm (4.0 * z0 + R) / T0; ^~~~ ../../../src/math/real.h:31:15: note: candidate function nr_double_t norm (const nr_double_t); ^ /usr/bin/../lib/c++/v1/complex:953:1: note: candidate function norm(double __re) ^ /usr/bin/../lib/c++/v1/complex:946:1: note: candidate function norm(long double __re) ^ /usr/bin/../lib/c++/v1/complex:972:1: note: candidate function norm(float __re) ^ 1 error generated. <snip> Any idea how to get past here? Do we need to cast these floats? Of there is a clever way of doing it? Regards, Guilherme |