Opened 3 years ago

Closed 3 years ago

#8266 closed defect (fixed)

Mac compiler error

Reported by: Tristan Croll Owned by: Zach Pearson
Priority: normal Milestone:
Component: Build System Version:
Keywords: Cc: chimera-programmers
Blocked By: Blocking:
Notify when closed: Platform: all
Project: ChimeraX

Description

The following bug report has been submitted:
Platform:        macOS-12.5.1-arm64-arm-64bit
ChimeraX Version: 1.6.dev202301050222 (2023-01-05 02:22:38 UTC)
Description
New compiler error trying to build on the Mac (I haven't made any relevant changes to cause this - lbfgs.c is compiled inline with some C++ files for the OpenMM interface and has been for years). 

gcc -Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -arch arm64 -arch x86_64 -g -DMAJOR_VERSION=0 -DMINOR_VERSION=1 -I/Applications/ChimeraX_Daily.app/Contents/include -Iextern/openmm/openmmapi/include -Iextern/openmm/serialization/include -Iextern/openmm/olla/include -Iextern/pybind11/include -Isrc/deps/lbfgs/include -I/Applications/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/chimerax/core/include -I/Applications/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/chimerax/atomic_lib/include "-I/Users/tcroll/Library/Application Support/ChimeraX/1.6/site-packages/chimerax/clipper/include" -I/Applications/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/chimerax/arrays/include -I/Applications/ChimeraX_Daily.app/Contents/Library/Frameworks/Python.framework/Versions/3.9/include/python3.9 -c src/deps/lbfgs/src/lbfgs.c -o build/temp.macosx-10.9-universal2-cpython-39/src/deps/lbfgs/src/lbfgs.o -std=c++11 -stdlib=libc++
error: invalid argument '-std=c++11' not allowed with 'C'
error: command '/usr/bin/gcc' failed with exit code 1
make: *** [app-install] Error 1 

OpenGL version: 4.1 Metal - 76.3
OpenGL renderer: Apple M1 Pro
OpenGL vendor: Apple

Python: 3.9.11
Locale: UTF-8
Qt version: PyQt6 6.4.0, Qt 6.4.0
Qt runtime version: 6.4.1
Qt platform: cocoa
Hardware:

    Hardware Overview:

      Model Name: MacBook Pro
      Model Identifier: MacBookPro18,1
      Chip: Apple M1 Pro
      Total Number of Cores: 10 (8 performance and 2 efficiency)
      Memory: 32 GB
      System Firmware Version: 7459.141.1
      OS Loader Version: 7459.141.1

Software:

    System Software Overview:

      System Version: macOS 12.5.1 (21G83)
      Kernel Version: Darwin 21.6.0
      Time since boot: 34 days 1:06

Graphics/Displays:

    Apple M1 Pro:

      Chipset Model: Apple M1 Pro
      Type: GPU
      Bus: Built-In
      Total Number of Cores: 16
      Vendor: Apple (0x106b)
      Metal Family: Supported, Metal GPUFamily Apple 7
      Displays:
        Color LCD:
          Display Type: Built-in Liquid Retina XDR Display
          Resolution: 3456 x 2234 Retina
          Main Display: Yes
          Mirror: Off
          Online: Yes
          Automatically Adjust Brightness: Yes
          Connection Type: Internal
        HP Z27k G3:
          Resolution: 3840 x 2160 (2160p/4K UHD 1 - Ultra High Definition)
          UI Looks like: 1920 x 1080 @ 60.00Hz
          Mirror: Off
          Online: Yes
          Rotation: Supported


Installed Packages:
    alabaster: 0.7.12
    appdirs: 1.4.4
    appnope: 0.1.3
    asttokens: 2.2.1
    Babel: 2.11.0
    backcall: 0.2.0
    blockdiag: 3.0.0
    build: 0.8.0
    certifi: 2021.10.8
    cftime: 1.6.2
    charset-normalizer: 2.1.1
    ChimeraX-AddCharge: 1.5.8
    ChimeraX-AddH: 2.2.3
    ChimeraX-AlignmentAlgorithms: 2.0
    ChimeraX-AlignmentHdrs: 3.3.1
    ChimeraX-AlignmentMatrices: 2.1
    ChimeraX-Alignments: 2.8
    ChimeraX-AlphaFold: 1.0
    ChimeraX-AltlocExplorer: 1.0.3
    ChimeraX-AmberInfo: 1.0
    ChimeraX-Arrays: 1.0
    ChimeraX-Atomic: 1.43.4
    ChimeraX-AtomicLibrary: 10.0
    ChimeraX-AtomSearch: 2.0.1
    ChimeraX-AxesPlanes: 2.3.2
    ChimeraX-BasicActions: 1.1.2
    ChimeraX-BILD: 1.0
    ChimeraX-BlastProtein: 2.1.2
    ChimeraX-BondRot: 2.0.1
    ChimeraX-BugReporter: 1.0.1
    ChimeraX-BuildStructure: 2.7.2
    ChimeraX-Bumps: 1.0
    ChimeraX-BundleBuilder: 1.2
    ChimeraX-ButtonPanel: 1.0.1
    ChimeraX-CageBuilder: 1.0.1
    ChimeraX-CellPack: 1.0
    ChimeraX-Centroids: 1.3.1
    ChimeraX-ChangeChains: 1.0.2
    ChimeraX-CheckWaters: 1.3.1
    ChimeraX-ChemGroup: 2.0
    ChimeraX-Clashes: 2.2.4
    ChimeraX-Clipper: 0.20.0
    ChimeraX-ColorActions: 1.0.3
    ChimeraX-ColorGlobe: 1.0
    ChimeraX-ColorKey: 1.5.3
    ChimeraX-CommandLine: 1.2.5
    ChimeraX-ConnectStructure: 2.0.1
    ChimeraX-Contacts: 1.0.1
    ChimeraX-Core: 1.6.dev202301050222
    ChimeraX-CoreFormats: 1.1
    ChimeraX-coulombic: 1.4.1
    ChimeraX-Crosslinks: 1.0
    ChimeraX-Crystal: 1.0
    ChimeraX-CrystalContacts: 1.0.1
    ChimeraX-DataFormats: 1.2.3
    ChimeraX-Dicom: 1.1
    ChimeraX-DistMonitor: 1.3
    ChimeraX-DockPrep: 1.1
    ChimeraX-Dssp: 2.0
    ChimeraX-EMDB-SFF: 1.0
    ChimeraX-ESMFold: 1.0
    ChimeraX-ExperimentalCommands: 1.0
    ChimeraX-FileHistory: 1.0.1
    ChimeraX-FunctionKey: 1.0.1
    ChimeraX-Geometry: 1.2
    ChimeraX-gltf: 1.0
    ChimeraX-Graphics: 1.1
    ChimeraX-Hbonds: 2.4
    ChimeraX-Help: 1.2.1
    ChimeraX-HKCage: 1.3
    ChimeraX-IHM: 1.1
    ChimeraX-ImageFormats: 1.2
    ChimeraX-IMOD: 1.0
    ChimeraX-IO: 1.0.1
    ChimeraX-ItemsInspection: 1.0.1
    ChimeraX-Label: 1.1.7
    ChimeraX-ListInfo: 1.1.1
    ChimeraX-Log: 1.1.5
    ChimeraX-LookingGlass: 1.1
    ChimeraX-Maestro: 1.8.2
    ChimeraX-Map: 1.1.3
    ChimeraX-MapData: 2.0
    ChimeraX-MapEraser: 1.0.1
    ChimeraX-MapFilter: 2.0.1
    ChimeraX-MapFit: 2.0
    ChimeraX-MapSeries: 2.1.1
    ChimeraX-Markers: 1.0.1
    ChimeraX-Mask: 1.0.1
    ChimeraX-MatchMaker: 2.0.11
    ChimeraX-MDcrds: 2.6
    ChimeraX-MedicalToolbar: 1.0.2
    ChimeraX-Meeting: 1.0.1
    ChimeraX-MLP: 1.1
    ChimeraX-mmCIF: 2.10
    ChimeraX-MMTF: 2.2
    ChimeraX-Modeller: 1.5.8
    ChimeraX-ModelPanel: 1.3.6
    ChimeraX-ModelSeries: 1.0.1
    ChimeraX-Mol2: 2.0
    ChimeraX-Mole: 1.0
    ChimeraX-Morph: 1.0.1
    ChimeraX-MouseModes: 1.2
    ChimeraX-Movie: 1.0
    ChimeraX-Neuron: 1.0
    ChimeraX-Nucleotides: 2.0.3
    ChimeraX-OpenCommand: 1.9.3
    ChimeraX-PDB: 2.6.11
    ChimeraX-PDBBio: 1.0
    ChimeraX-PDBLibrary: 1.0.2
    ChimeraX-PDBMatrices: 1.0
    ChimeraX-PickBlobs: 1.0.1
    ChimeraX-Positions: 1.0
    ChimeraX-PresetMgr: 1.1
    ChimeraX-PubChem: 2.1
    ChimeraX-ReadPbonds: 1.0.1
    ChimeraX-Registration: 1.1.1
    ChimeraX-RemoteControl: 1.0
    ChimeraX-RenderByAttr: 1.0
    ChimeraX-RenumberResidues: 1.1
    ChimeraX-ResidueFit: 1.0.1
    ChimeraX-RestServer: 1.1
    ChimeraX-RNALayout: 1.0
    ChimeraX-RotamerLibMgr: 3.0
    ChimeraX-RotamerLibsDunbrack: 2.0
    ChimeraX-RotamerLibsDynameomics: 2.0
    ChimeraX-RotamerLibsRichardson: 2.0
    ChimeraX-SaveCommand: 1.5.1
    ChimeraX-SchemeMgr: 1.0
    ChimeraX-SDF: 2.0.1
    ChimeraX-Segger: 1.0
    ChimeraX-Segment: 1.0
    ChimeraX-SelInspector: 1.0
    ChimeraX-SeqView: 2.8.1
    ChimeraX-Shape: 1.0.1
    ChimeraX-Shell: 1.0.1
    ChimeraX-Shortcuts: 1.1.1
    ChimeraX-ShowSequences: 1.0.1
    ChimeraX-SideView: 1.0.1
    ChimeraX-Smiles: 2.1
    ChimeraX-SmoothLines: 1.0
    ChimeraX-SpaceNavigator: 1.0
    ChimeraX-StdCommands: 1.10.1
    ChimeraX-STL: 1.0
    ChimeraX-Storm: 1.0
    ChimeraX-StructMeasure: 1.1.1
    ChimeraX-Struts: 1.0.1
    ChimeraX-Surface: 1.0
    ChimeraX-SwapAA: 2.0.1
    ChimeraX-SwapRes: 2.2
    ChimeraX-TapeMeasure: 1.0
    ChimeraX-Test: 1.0
    ChimeraX-Toolbar: 1.1.2
    ChimeraX-ToolshedUtils: 1.2.1
    ChimeraX-Topography: 1.0
    ChimeraX-Tug: 1.0.1
    ChimeraX-UI: 1.26
    ChimeraX-uniprot: 2.2.1
    ChimeraX-UnitCell: 1.0.1
    ChimeraX-ViewDockX: 1.1.6
    ChimeraX-VIPERdb: 1.0
    ChimeraX-Vive: 1.1
    ChimeraX-VolumeMenu: 1.0.1
    ChimeraX-VTK: 1.0
    ChimeraX-WavefrontOBJ: 1.0
    ChimeraX-WebCam: 1.0.1
    ChimeraX-WebServices: 1.1.1
    ChimeraX-Zone: 1.0.1
    colorama: 0.4.5
    comm: 0.1.2
    contourpy: 1.0.6
    cxservices: 1.2
    cycler: 0.11.0
    Cython: 0.29.32
    debugpy: 1.6.4
    decorator: 5.1.1
    docutils: 0.19
    entrypoints: 0.4
    executing: 1.2.0
    filelock: 3.7.1
    fonttools: 4.38.0
    funcparserlib: 1.0.1
    grako: 3.16.5
    h5py: 3.7.0
    html2text: 2020.1.16
    idna: 3.4
    ihm: 0.35
    imagecodecs: 2022.9.26
    imagesize: 1.4.1
    importlib-metadata: 6.0.0
    ipykernel: 6.19.2
    ipython: 8.7.0
    ipython-genutils: 0.2.0
    jedi: 0.18.2
    Jinja2: 3.1.2
    jupyter-client: 7.4.8
    jupyter-core: 5.1.2
    kiwisolver: 1.4.4
    line-profiler: 3.5.1
    lxml: 4.9.1
    lz4: 4.0.2
    MarkupSafe: 2.1.1
    matplotlib: 3.6.2
    matplotlib-inline: 0.1.6
    msgpack: 1.0.4
    nest-asyncio: 1.5.6
    netCDF4: 1.6.0
    networkx: 2.8.8
    numexpr: 2.8.4
    numpy: 1.23.5
    openvr: 1.23.701
    packaging: 21.3
    ParmEd: 3.4.3
    parso: 0.8.3
    pep517: 0.13.0
    pexpect: 4.8.0
    pickleshare: 0.7.5
    Pillow: 9.3.0
    pip: 22.2.2
    pkginfo: 1.8.3
    platformdirs: 2.6.2
    prompt-toolkit: 3.0.36
    psutil: 5.9.4
    ptyprocess: 0.7.0
    pure-eval: 0.2.2
    pycollada: 0.7.2
    pydicom: 2.3.0
    Pygments: 2.12.0
    PyOpenGL: 3.1.5
    PyOpenGL-accelerate: 3.1.5
    pyparsing: 3.0.9
    PyQt6-commercial: 6.4.0
    PyQt6-Qt6: 6.4.1
    PyQt6-sip: 13.4.0
    PyQt6-WebEngine-commercial: 6.4.0
    PyQt6-WebEngine-Qt6: 6.4.1
    python-dateutil: 2.8.2
    pytz: 2022.7
    pyzmq: 24.0.1
    qtconsole: 5.4.0
    QtPy: 2.3.0
    RandomWords: 0.4.0
    requests: 2.28.1
    scipy: 1.9.3
    setuptools: 65.1.1
    setuptools-scm: 7.0.5
    sfftk-rw: 0.7.2
    six: 1.16.0
    snowballstemmer: 2.2.0
    sortedcontainers: 2.4.0
    Sphinx: 5.1.1
    sphinx-autodoc-typehints: 1.19.1
    sphinxcontrib-applehelp: 1.0.2
    sphinxcontrib-blockdiag: 3.0.0
    sphinxcontrib-devhelp: 1.0.2
    sphinxcontrib-htmlhelp: 2.0.0
    sphinxcontrib-jsmath: 1.0.1
    sphinxcontrib-qthelp: 1.0.3
    sphinxcontrib-serializinghtml: 1.1.5
    stack-data: 0.6.2
    tables: 3.7.0
    tifffile: 2022.10.10
    tinyarray: 1.2.4
    tomli: 2.0.1
    tornado: 6.2
    traitlets: 5.8.0
    typing-extensions: 4.4.0
    urllib3: 1.26.13
    wcwidth: 0.2.5
    webcolors: 1.12
    wheel: 0.37.1
    wheel-filename: 1.4.1
    zipp: 3.11.0

Change History (16)

comment:1 by Eric Pettersen, 3 years ago

Cc: chimera-programmers added
Component: UnassignedBuild System
Owner: set to Zach Pearson
Platform: all
Project: ChimeraX
Status: newassigned
Summary: ChimeraX bug report submissionMac compiler error

comment:2 by Zach Pearson, 3 years ago

Which project are you building? This could be new bundle builder code or it could be the new setuptools, but either way I need to try a build locally.

in reply to:  3 ; comment:3 by Tristan Croll, 3 years ago

This is ISOLDE (github.com/tristanic/isolde). You’ll need to have built and
installed Clipper (github.com/tristanic/chimerax-clipper) first.

On Thu, 5 Jan 2023 at 18:43, ChimeraX <ChimeraX-bugs-admin@cgl.ucsf.edu>
wrote:

comment:4 by Zach Pearson, 3 years ago

It looks like the root of the issue is that modern clang/llvm is more strict on mixing C and C++ compiler flags. There is a family of issues on GitHub here, here, and here, for examples.

I think going forward on macOS these mixed C-C++ libraries will need to wrap the C in 'extern "C"' and use the C++ compiler.

I changed the extension of the offending file to .cpp, wrapped all of its contents in 'extern "C" {}', then changed the filename in bundle_info.xml -- afterwards, I was able to build and install isolde.

I'm not sure how to hit the specific code path that uses lbfgs.cpp, but I was able to see ISOLDE in the toolbar and launch its GUI and look around.

comment:5 by Tom Goddard, 3 years ago

The error is in a gcc compile. But on Mac I believe we use clang and clang++ for all our compilations. So I'm wondering why this ISOLDE compilation is using gcc on Mac.

comment:6 by Zach Pearson, 3 years ago

It's not. On macOS gcc and g++ are symbolic links to clang.

comment:7 by Zach Pearson, 3 years ago

Wait, no they're not links anymore but they still just call clang.

comment:8 by Tom Goddard, 3 years ago

Ok. So supposedly clang is giving this error. The error seems pretty reasonable, that you aren't supposed to specify a C++ standard library for compiling C code. It seems like this is a bug in the compiler invocation that would be fixed by not adding C++ options to C compiler calls.

gcc ...  -std=c++11 -stdlib=libc++
error: invalid argument '-std=c++11' not allowed with 'C'

comment:9 by Zach Pearson, 3 years ago

In the bundle builder code, even before it was touched last year, we don't build modules -- only libaries and executables. For modules we make a setuptools.Extension instance and let setuptools handle it. We can't change that invocation easily, but we do pass in extra arguments, and we decide what they are based on the extensions of the files listed in source_files, e.g. "if there are C++ files use -std=c++11,-stdlib=libc++"

I think they're naive about it and just use the compiler they guess based on the filename, because the calls can jump back and forth between gcc and g++ and because changing the extension changed the compiler. They seem to apply the same passed-in arguments to every invocation of every compiler -- so they assume all native projects are one language. Which is annoying but not unreasonable.

If 'extern "C"' works I would do that. What's the difference running C through a C++ compiler besides the name mangling?

in reply to:  10 ; comment:10 by goddard@…, 3 years ago

Ok.  Just like to avoid changing correct code because the build system is broken.  That is a two wrongs make a right solution.  But sometimes it is the best that can be done.

comment:11 by Zach Pearson, 3 years ago

Status: assignedfeedback

in reply to:  12 ; comment:12 by Tristan Croll, 3 years ago

Will take a stab at this tomorrow.

On Wed, 18 Jan 2023 at 21:05, ChimeraX <ChimeraX-bugs-admin@cgl.ucsf.edu>
wrote:

in reply to:  13 ; comment:13 by Tristan Croll, 3 years ago

Of course, the other option is to just compile lbfgs into its own separate
CLibrary then link against it…

On Wed, 18 Jan 2023 at 21:28, Tristan Croll <tcroll@altoslabs.com> wrote:

comment:14 by Tristan Croll, 3 years ago

Tried the latter approach - just turned lbfgs.c into its own minimal CLibrary, with the OpenMM code depending on that. Works fine with no modification to the code, so I'm happy to run with that.

comment:15 by Tristan Croll, 3 years ago

Urgh. That approach doesn't work in Windows, because lbfgs doesn't export any symbols. But the good news is that lbfgs.h already contains:

#ifdef  __cplusplus
extern "C" {
#endif/*__cplusplus*/

... so if I simply rename lbfgs.c to lbfgs.cpp then compiling inline happily works again, without having to edit any code.

comment:16 by Zach Pearson, 3 years ago

Resolution: fixed
Status: feedbackclosed

OK, I didn't check the header before I modified the .c file -- I'm glad there was a solution that didn't require changing the code.

Note: See TracTickets for help on using tickets.