On 27/08/2015 19:02, Eric Thornton wrote:

Bill,

Hi Eric,

Thanks for your reply.

This is strange because I finally was able to get wsjtx to compile, but gave up on clang and used gcc for the whole process. After editing the hamlib autogen and configure scripts to get rid of an old no-precomp flag, things went smoothly. After the fact, while looking into why I still don't have any pulseaudio devices (posted a new message to the list on this last night) I found the notes on the libstdc++ and libc++ incompatibility. I think I should have received a linking error complaining about missing objects, but the build finished.

AFAIK g++ builds of Qt5 are not supported and can only be done by doing some hacking of the mkspecs provided by the Qt team. Because of this I chose to use Clang++ from the Apple dev tools and gfortran from MacPorts with some special treatment in the CMake script to allow for the lack of OpenMP support in CLang++ and to ensure that the correct support libraries are linked. This has worked well so far and allows us to distribute a single DMG installer that works on 10.7 through 10.10.

The build failures I received with clang+gfortran were listed in the wsjtx-stamp/configure-error.log and had to do with missing openmp libs. I tried installing several different variants of gcc49 in macports, but got the same error every time.

Those errors should be non-fatal configuration errors and subsequent builds should work. Are you basing your WSJT-X build on the instructions in:

https://sourceforge.net/p/wsjt/wsjt/HEAD/tree/branches/wsjtx/INSTALL

As a side note to my missing pulseaudio devices, I found that qt5-mac from macports is not building the pulse plugin, despite having selected the pulseaudio variant. I don't understand why, at this time.

Problems like that are usually due to missing dependencies at configure time. You probably need to check the configure log from Qt to see if the pulseaudio-dev package was detected at configure time.

Eric
KM4DSJ

73
Bill
G4WJS.

On Aug 27, 2015 9:43 AM, "Bill Somerville" <g4...@classdesign.com <mailto:g4...@classdesign.com>> wrote:

    On 09/08/2015 17:00, Eric Thornton wrote:
    Hello all,
    Hi Eric,

    firstly, sorry for the delayed response as I have been off the
    grid for a few weeks enjoying some holiday time.

    I've run into the same (or similar issue) compiling on OSX. I
    need to compile my own version since I'm using pulse audio as my
    sound server. I've already compiled QT from macports with pulse
    audio support.

    If I use CC=gcc and CXX=g++, ham lib won't compile. I have been
    unable to work around the "-no-cpp-precomp" error. Anyway, I'm
    pretty sure my macports libs and QT are build with clang (the
    default) anyway.

    If I use the default clang compilers, ham lib compiles fine
    (after pointing it to glibtoolize), but then wsjtx won't compile
    because of the openmp errors. I am using FC=gfortran-mp-4.9 from
    macports.
    There should be no fatal errors with those tools if you use the
    CMake build script. What make you think the build fails?

    I don't have a good understanding of openmp. Is this error
    because clang and gfortran are not compatible? I tried
    downloading a native gfortran compiler but got the same result.
    Using CLang/Clang++ combined with gfortran from MacPorts is a
    valid combination and is the only one supported. The reason for
    this is that Qt only supports compilation with CLang++ on OS X.
    Clang/Clang++ have no OpenMP support but since our code only uses
    OpenMP in Fortran modules we are able to get away with the mixed
    compiler support. The CMake build script does what is necessary to
    make this apparently incompatible tool set work. It does report
    the OpenMP availability issues but they can be safely ignored for
    WSJT-X builds.

    Thanks,

    Eric
    KM4DSJ
    73
    Bill
    G4WJS.


    -- Building for for: Darwin-x86_64
    -- ******************************************************
    -- Try OpenMP C flag = [ ]
    -- Performing Test OpenMP_FLAG_DETECTED
    -- Performing Test OpenMP_FLAG_DETECTED - Failed
    -- Try OpenMP C flag = [-fopenmp]
    -- Performing Test OpenMP_FLAG_DETECTED
    -- Performing Test OpenMP_FLAG_DETECTED - Failed
    -- Try OpenMP C flag = [/openmp]
    -- Performing Test OpenMP_FLAG_DETECTED
    -- Performing Test OpenMP_FLAG_DETECTED - Failed
    -- Try OpenMP C flag = [-Qopenmp]
    -- Performing Test OpenMP_FLAG_DETECTED
    -- Performing Test OpenMP_FLAG_DETECTED - Failed
    -- Try OpenMP C flag = [-openmp]
    -- Performing Test OpenMP_FLAG_DETECTED
    -- Performing Test OpenMP_FLAG_DETECTED - Failed
    -- Try OpenMP C flag = [-xopenmp]
    -- Performing Test OpenMP_FLAG_DETECTED
    -- Performing Test OpenMP_FLAG_DETECTED - Failed
    -- Try OpenMP C flag = [+Oopenmp]
    -- Performing Test OpenMP_FLAG_DETECTED
    -- Performing Test OpenMP_FLAG_DETECTED - Failed
    -- Try OpenMP C flag = [-qsmp]
    -- Performing Test OpenMP_FLAG_DETECTED
    -- Performing Test OpenMP_FLAG_DETECTED - Failed
    -- Try OpenMP C flag = [-mp]
    -- Performing Test OpenMP_FLAG_DETECTED
    -- Performing Test OpenMP_FLAG_DETECTED - Failed
    -- Try OpenMP CXX flag = [ ]
    -- Performing Test OpenMP_FLAG_DETECTED
    -- Performing Test OpenMP_FLAG_DETECTED - Failed
    -- Try OpenMP CXX flag = [-fopenmp]
    -- Performing Test OpenMP_FLAG_DETECTED
    -- Performing Test OpenMP_FLAG_DETECTED - Failed
    -- Try OpenMP CXX flag = [/openmp]
    -- Performing Test OpenMP_FLAG_DETECTED
    -- Performing Test OpenMP_FLAG_DETECTED - Failed
    -- Try OpenMP CXX flag = [-Qopenmp]
    -- Performing Test OpenMP_FLAG_DETECTED
    -- Performing Test OpenMP_FLAG_DETECTED - Failed
    -- Try OpenMP CXX flag = [-openmp]
    -- Performing Test OpenMP_FLAG_DETECTED
    -- Performing Test OpenMP_FLAG_DETECTED - Failed
    -- Try OpenMP CXX flag = [-xopenmp]
    -- Performing Test OpenMP_FLAG_DETECTED
    -- Performing Test OpenMP_FLAG_DETECTED - Failed
    -- Try OpenMP CXX flag = [+Oopenmp]
    -- Performing Test OpenMP_FLAG_DETECTED
    -- Performing Test OpenMP_FLAG_DETECTED - Failed
    -- Try OpenMP CXX flag = [-qsmp]
    -- Performing Test OpenMP_FLAG_DETECTED
    -- Performing Test OpenMP_FLAG_DETECTED - Failed
    -- Try OpenMP CXX flag = [-mp]
    -- Performing Test OpenMP_FLAG_DETECTED
    -- Performing Test OpenMP_FLAG_DETECTED - Failed
    -- Could NOT find OpenMP (missing:  OpenMP_C_FLAGS OpenMP_CXX_FLAGS)

    On Mon, Jun 29, 2015 at 6:12 PM, Bill Somerville
    <g4...@classdesign.com <mailto:g4...@classdesign.com>> wrote:

        On 29/06/2015 22:58, Steven Franke wrote:
        > Bill,
        Hi Steve,
        >> On Jun 29, 2015, at 4:43 PM, Bill Somerville
        <g4...@classdesign.com <mailto:g4...@classdesign.com>> wrote:
        >>
        >> On 29/06/2015 22:30, Steven Franke wrote:
        >>> Bill,
        >> Hi Steve,
        >>>> On Jun 29, 2015, at 4:26 PM, Bill Somerville
        <g4...@classdesign.com <mailto:g4...@classdesign.com>> wrote:
        >>>>
        >>>> On 29/06/2015 22:17, Steven Franke wrote:
        >>>>> Bill,
        >>>>>
        >>>>>> On Jun 29, 2015, at 3:57 PM, Bill Somerville
        <g4...@classdesign.com <mailto:g4...@classdesign.com>> wrote:
        >>>>>>
        >>>>>> On 29/06/2015 21:34, Steven Franke wrote:
        >>>>>>> Bill,
        >>>>>>>> On Jun 29, 2015, at 9:00 AM, Bill Somerville
        <g4...@classdesign.com <mailto:g4...@classdesign.com>> wrote:
        >>>>>>>>
        >>>>>>>> On 28/06/2015 22:08, Steven Franke wrote:
        >>>>>>>>> Thanks Bill,
        >>>>>>>> Hi Steve,
        >>>>>>>>> For what it’s worth, here a link to the VERBOSE
        build capture:
        >>>>>>>>>
        https://dl.dropboxusercontent.com/u/33211132/k9an_build_capture.txt
        >>>>>>>>>
        >>>>>>>>> Here’s the CMakeCache.txt:
        >>>>>>>>>
        https://dl.dropboxusercontent.com/u/33211132/CMakeCache.txt
        >>>>>>>> OK, the problem wasn't quite what I thought. It is
        an include directive
        >>>>>>>> ordering issue but it stems from the use of FFTW3
        from MacPorts, this in
        >>>>>>>> itself is not an issue but it has the side effect of
        picking up the Qt4
        >>>>>>>> headers as well. Unfortunately I can't find an easy
        way of ensuring the
        >>>>>>>> -I/opt/local/include is after the includes for Qt5.
        That would solve the
        >>>>>>>> issue but the way that the Qt includes are detected
        by CMake doesn't
        >>>>>>>> seem to have a way to change the ordering. I have
        posted a question to
        >>>>>>>> the CMake ML but for now you should be able to build
        by deactivating
        >>>>>>>> qt4-mac before building WSJT-X. It would be wise to
        add a
        >>>>>>>> '--clean-first' to the CMake build for the first
        time to ensure any
        >>>>>>>> incorrectly built object files are discarded.
        Something like:
        >>>>>>>>
        >>>>>>>> $ sudo port deactivate qt4-mac
        >>>>>>>> $ cmake --build ~/Builds/wsjtx --clean-first
        --target install -- -j
        >>>>>>>> $ sudo port activate qt4-mac
        >>>>>>>> $ open ~/Builds/wsjtx_install/wsjtx.app
        >>>>>>> This got me past the incorrect headers issue, but now
        it dies because of an OpenMP problem. I’ve placed the VERBOSE
        build capture here:
        >>>>>>>
        https://dl.dropboxusercontent.com/u/33211132/k9an_build_capture.txt
        >>>>>>>
        >>>>>>> and the CMakeCache.txt here:
        >>>>>>>
        https://dl.dropboxusercontent.com/u/33211132/CMakeCache.txt
        >>>>>> Is your OS X 32-bit or 64-bit?
        >>>>>>
        >>>>>> https://support.apple.com/en-gb/HT201948
        >>>>> My processor is 64-bit:
        >>>>>
        >>>>> Hardware Overview:
        >>>>>
        >>>>>    Model Name:    MacBook Air
        >>>>>    Model Identifier: MacBookAir5,2
        >>>>>    Processor Name: Intel Core i7
        >>>>>    Processor Speed:       2 GHz
        >>>>>    Number of Processors:  1
        >>>>>    Total Number of Cores: 2
        >>>>>    L2 Cache (per Core):  256 KB
        >>>>>    L3 Cache:      4 MB
        >>>>>    Memory:        8 GB
        >>>>>    Boot ROM Version: MBA51.00EF.B02
        >>>>>    SMC Version (system): 2.5f9
        >>>>>    Serial Number (system):       C02J401ADRVG
        >>>>>    Hardware UUID: 1F7ABB4C-7FB0-5918-8AE6-0CA0AB789A89
        >>>>>
        >>>>> and I am running the 64-bit kernel:
        >>>>> $ uname -a
        >>>>> Darwin Stevens-MacBook-Air.local 14.3.0 Darwin Kernel
        Version 14.3.0: Mon Mar 23 11:59:05 PDT 2015;
        root:xnu-2782.20.48~5/RELEASE_X86_64 x86_64
        >>>> OK, looks like the MacPorts libgcc is 32-bit only for
        some reason. What
        >>>> do the following print:
        >>>>
        >>>> $ grep build_arch /opt/local/etc/macports/macports.conf
        >>> $ grep build_arch /opt/local/etc/macports/macports.conf
        >>> #build_arch                 i386
        >>>
        >>>> and:
        >>>>
        >>>> $ grep universal /opt/local/etc/macports/macports.conf
        >>> $ grep universal /opt/local/etc/macports/macports.conf
        >>> # CPU architectures to use for Universal Binaries
        (+universal variant)
        >>> universal_archs             x86_64 i386
        >>>
        >>>> and:
        >>>>
        >>>> $ file /opt/local/lib/gcc49/libgomp.1.dylib
        >>> $  file /opt/local/lib/gcc49/libgomp.1.dylib
        >>> /opt/local/lib/gcc49/libgomp.1.dylib: Mach-O 64-bit
        dynamically linked shared library x86_64
        >> Hmm, that is all as expected. I think that means the link
        is picking up
        >> another libgomp from somewhere outside of MacPorts. The
        only other path
        >> that seems likely is /usr/local/lib is there an old
        libgomp there from
        >> some prior build of gcc/gfortran?
        > You’re a wizard! That was the problem. Moved the old
        libraries out of the way and compile completed. Running it now.
        > Thanks!!
        Good, that was my last guess at a solution.

        This is related to the liberties we take with OpenMP I
        mentioned further
        up this thread. Normally if you use gfortran you would link
        with the gcc
        compiler driver or gfortran itself, these know exactly were
        to get he
        matching libgcc supporting libraries like libgomp and
        libgcc_1. Because
        we have to use the clang++ compiler driver to link since Qt
        uses that
        for its C++, we have to manually add the gcc/gfortran support
        libraries
        to the link command line. Perhaps I should use the gcc/gfortran
        compiler/linker driver to discover the correct paths to avoid
        this kind
        of issue.

        It is a PITA that Apple and LLVM don't have a Fortran
        compiler nor
        OpenMP support in clang/clang++.

        ...

        73
        Bill
        G4WJS.


------------------------------------------------------------------------------
_______________________________________________
wsjt-devel mailing list
wsjt-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wsjt-devel

Reply via email to