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 , 3 years ago
| Cc: | added |
|---|---|
| Component: | Unassigned → Build System |
| Owner: | set to |
| Platform: | → all |
| Project: | → ChimeraX |
| Status: | new → assigned |
| Summary: | ChimeraX bug report submission → Mac compiler error |
follow-up: 3 comment:3 by , 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 , 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 , 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:8 by , 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 , 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?
follow-up: 10 comment:10 by , 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 , 3 years ago
| Status: | assigned → feedback |
|---|
follow-up: 12 comment:12 by , 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:
follow-up: 13 comment:13 by , 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 , 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 , 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 , 3 years ago
| Resolution: | → fixed |
|---|---|
| Status: | feedback → closed |
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.