neuronsimulator / nrn

NEURON Simulator
http://nrn.readthedocs.io
Other
401 stars 116 forks source link

Issue while building python extension on OSX with GNU compiler #362

Closed pramodk closed 3 years ago

pramodk commented 4 years ago

I am using following cmake options with GCC-9:

→ cmake .. -DNRN_ENABLE_CORENEURON=OFF -DNRN_ENABLE_INTERVIEWS=OFF -DCMAKE_C_COMPILER=gcc-9 -DCMAKE_CXX_COMPILER=g++-9

...
-- Configured NEURON 7.8
--
-- Some things you can do now:
-- --------------+--------------------------------------------------------------
-- Command       |   Description
-- --------------+--------------------------------------------------------------
-- make install  | Will install NEURON to: /usr/local
--               | Change the install location of NEURON using:
--               |     cmake <src_path> -DCMAKE_INSTALL_PREFIX=<install_path>
-- make docs     | Build the API documentation
-- make uninstall| Removes files installed by make install (todo)
-- --------------+--------------------------------------------------------------
--  Build option | Status
-- --------------+--------------------------------------------------------------
-- Shared        | ON
-- Legacy FR     | ON
-- MPI           | ON
--   INC         | /usr/local/Cellar/open-mpi/4.0.0/include
--   LIB         | /usr/local/Cellar/open-mpi/4.0.0/lib/libmpi.dylib
-- Python        | ON
--   EXE         | /usr/bin/python
--   INC         | /System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7
--   LIB         | /System/Library/Frameworks/Python.framework/Versions/2.7/lib/libpython2.7.dylib
--   DYNAMIC     | OFF
-- RX3D          | ON
--   OptLevel    | 0
-- Interviews    | OFF
-- CoreNEURON    | OFF
-- --------------+--------------------------------------------------------------
--  See documentation : https://www.neuron.yale.edu/neuron/
-- --------------+--------------------------------------------------------------

And while building we get:

$ make VERBOSE=1 -j
...
/usr/local/bin/g++-9
running build_ext
building 'graphicsPrimitives' extension
creating build
creating build/temp.macosx-10.14-intel-2.7
/usr/local/bin/gcc-9 -fno-strict-aliasing -fno-common -dynamic -g -Os -pipe -fno-common -fno-strict-aliasing -fwrapv -DENABLE_DTRACE -DMACOSX -DNDEBUG -Wall -Wstrict-prototypes -Wshorten-64-to-32 -DNDEBUG -g -fwrapv -Os -Wall -Wstrict-prototypes -DENABLE_DTRACE -I/usr/local/opt/ruby/include -arch i386 -arch x86_64 -pipe -I/Users/kumbhar/workarena/repos/bbp/nn/share/lib/python/neuron/rxd/geometry3d -I. -I/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/core/include -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c graphicsPrimitives.cpp -o build/temp.macosx-10.14-intel-2.7/graphicsPrimitives.o -O0
gcc-9: warning: x86_64 conflicts with i386 (arch flags ignored)
gcc-9: error: unrecognized command line option '-Wshorten-64-to-32'
error: command '/usr/local/bin/gcc-9' failed with exit status 1

If I remember this is because setup.py / setuptools by default assume Clang compiler on OSX and uses corresponding flags.

I will create a PR with fix soon.

pramodk commented 4 years ago

Not sure if this is relevant but with gcc on OSX I am seeing:

[  6%] Linking CXX shared library ../../lib/libnrniv.dylib
cd /Users/kumbhar/workarena/repos/bbp/nn/build/src/nrniv && /usr/local/Cellar/cmake/3.16.1/bin/cmake -E cmake_link_script CMakeFiles/nrniv_lib.dir/link.txt --verbose=1
/usr/local/bin/g++-9 -g  -O2 -dynamiclib -Wl,-headerpad_max_install_names -L/usr/local/opt/ruby/lib -o ../../lib/libnrniv.dylib -install_name @rpath/libnrniv.dylib CMakeFiles/nrniv_lib.dir/__/ivoc/apwindow.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/axis.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/bndedval.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/cbwidget.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/checkpnt.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/epsprint.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/fourier.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/gifimage.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/graph.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/graphvec.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/grglyph.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/grmanip.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/hocmark.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/htlist.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/idraw.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/ivoc.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/ivocmain.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/ivocrand.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/ivocvect.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/matrix.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/mlinedit.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/mymath.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/objcmd.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/oc2iv.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/ocbox.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/ocbrowsr.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/ocdeck.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/ocfile.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/ochelp.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/oclist.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/ocmatrix.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/ocnoiv1.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/ocobserv.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/ocpicker.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/ocpointer.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/ocptrvector.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/octimer.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/pwman.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/rect.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/rubband.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/scene.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/scenepic.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/strfun.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/symchoos.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/utility.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/xmenu.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/xyview.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/field.cpp.o CMakeFiles/nrniv_lib.dir/__/ivoc/xdep.cpp.o CMakeFiles/nrniv_lib.dir/bbs.cpp.o CMakeFiles/nrniv_lib.dir/bbsavestate.cpp.o CMakeFiles/nrniv_lib.dir/bbsdirect.cpp.o CMakeFiles/nrniv_lib.dir/bbslocal.cpp.o CMakeFiles/nrniv_lib.dir/bbslsrv.cpp.o CMakeFiles/nrniv_lib.dir/bbslsrv2.cpp.o CMakeFiles/nrniv_lib.dir/bbsrcli.cpp.o CMakeFiles/nrniv_lib.dir/bbssrv.cpp.o CMakeFiles/nrniv_lib.dir/bgpmeminfo.c.o CMakeFiles/nrniv_lib.dir/cachevec.cpp.o CMakeFiles/nrniv_lib.dir/classreg.cpp.o CMakeFiles/nrniv_lib.dir/cvodeobj.cpp.o CMakeFiles/nrniv_lib.dir/cvodestb.cpp.o CMakeFiles/nrniv_lib.dir/cvtrset.cpp.o CMakeFiles/nrniv_lib.dir/cxprop.cpp.o CMakeFiles/nrniv_lib.dir/datapath.cpp.o CMakeFiles/nrniv_lib.dir/finithnd.cpp.o CMakeFiles/nrniv_lib.dir/geometry3d.cpp.o CMakeFiles/nrniv_lib.dir/glinerec.cpp.o CMakeFiles/nrniv_lib.dir/hocmech.cpp.o CMakeFiles/nrniv_lib.dir/impedanc.cpp.o CMakeFiles/nrniv_lib.dir/kschan.cpp.o CMakeFiles/nrniv_lib.dir/kssingle.cpp.o CMakeFiles/nrniv_lib.dir/linmod.cpp.o CMakeFiles/nrniv_lib.dir/linmod1.cpp.o CMakeFiles/nrniv_lib.dir/matrixmap.cpp.o CMakeFiles/nrniv_lib.dir/multisplit.cpp.o CMakeFiles/nrniv_lib.dir/ndatclas.cpp.o CMakeFiles/nrniv_lib.dir/netcvode.cpp.o CMakeFiles/nrniv_lib.dir/netpar.cpp.o CMakeFiles/nrniv_lib.dir/nonlinz.cpp.o CMakeFiles/nrniv_lib.dir/nrnbbcore_write.cpp.o CMakeFiles/nrniv_lib.dir/nrndae.cpp.o CMakeFiles/nrniv_lib.dir/nrndaspk.cpp.o CMakeFiles/nrniv_lib.dir/nrnmenu.cpp.o CMakeFiles/nrniv_lib.dir/nrnpy.cpp.o CMakeFiles/nrniv_lib.dir/nrnrtime.cpp.o CMakeFiles/nrniv_lib.dir/nrnste.cpp.o CMakeFiles/nrniv_lib.dir/nvector_nrnserial_ld.c.o CMakeFiles/nrniv_lib.dir/nvector_nrnthread.c.o CMakeFiles/nrniv_lib.dir/nvector_nrnthread_ld.c.o CMakeFiles/nrniv_lib.dir/ocbbs.cpp.o CMakeFiles/nrniv_lib.dir/occvode.cpp.o CMakeFiles/nrniv_lib.dir/ocjump.cpp.o CMakeFiles/nrniv_lib.dir/partrans.cpp.o CMakeFiles/nrniv_lib.dir/ppshape.cpp.o CMakeFiles/nrniv_lib.dir/prcellstate.cpp.o CMakeFiles/nrniv_lib.dir/pysecname2sec.cpp.o CMakeFiles/nrniv_lib.dir/rotate3d.cpp.o CMakeFiles/nrniv_lib.dir/savstate.cpp.o CMakeFiles/nrniv_lib.dir/secbrows.cpp.o CMakeFiles/nrniv_lib.dir/shape.cpp.o CMakeFiles/nrniv_lib.dir/shapeplt.cpp.o CMakeFiles/nrniv_lib.dir/singlech.cpp.o CMakeFiles/nrniv_lib.dir/spaceplt.cpp.o CMakeFiles/nrniv_lib.dir/splitcell.cpp.o CMakeFiles/nrniv_lib.dir/symdir.cpp.o CMakeFiles/nrniv_lib.dir/tqueue.cpp.o CMakeFiles/nrniv_lib.dir/vrecord.cpp.o CMakeFiles/nrniv_lib.dir/__/nrnoc/cabcode.c.o CMakeFiles/nrniv_lib.dir/__/nrnoc/capac.c.o CMakeFiles/nrniv_lib.dir/__/nrnoc/clamp.c.o CMakeFiles/nrniv_lib.dir/__/nrnoc/code.c.o CMakeFiles/nrniv_lib.dir/__/nrnoc/eion.c.o CMakeFiles/nrniv_lib.dir/__/nrnoc/extcelln.c.o CMakeFiles/nrniv_lib.dir/__/nrnoc/fadvance.c.o CMakeFiles/nrniv_lib.dir/__/nrnoc/fstim.c.o CMakeFiles/nrniv_lib.dir/__/nrnoc/hocprax.c.o CMakeFiles/nrniv_lib.dir/__/nrnoc/hocusr.c.o CMakeFiles/nrniv_lib.dir/__/nrnoc/hoc_init.c.o CMakeFiles/nrniv_lib.dir/__/nrnoc/hoc_oop.c.o CMakeFiles/nrniv_lib.dir/__/nrnoc/init.c.o CMakeFiles/nrniv_lib.dir/__/nrnoc/ldifus.c.o CMakeFiles/nrniv_lib.dir/__/nrnoc/method3.c.o CMakeFiles/nrniv_lib.dir/__/nrnoc/nrnnemo.c.o CMakeFiles/nrniv_lib.dir/__/nrnoc/nrntimeout.c.o CMakeFiles/nrniv_lib.dir/__/nrnoc/nrnversion.c.o CMakeFiles/nrniv_lib.dir/__/nrnoc/passive0.c.o CMakeFiles/nrniv_lib.dir/__/nrnoc/point.c.o CMakeFiles/nrniv_lib.dir/__/nrnoc/psection.c.o CMakeFiles/nrniv_lib.dir/__/nrnoc/seclist.c.o CMakeFiles/nrniv_lib.dir/__/nrnoc/secref.c.o CMakeFiles/nrniv_lib.dir/__/nrnoc/solve.c.o CMakeFiles/nrniv_lib.dir/__/nrnoc/synapse.c.o CMakeFiles/nrniv_lib.dir/__/nrnoc/treeset.c.o CMakeFiles/nrniv_lib.dir/__/oc/isaac64.c.o CMakeFiles/nrniv_lib.dir/__/oc/mcran4.c.o CMakeFiles/nrniv_lib.dir/__/oc/nrnisaac.c.o CMakeFiles/nrniv_lib.dir/__/oc/nrnran123.c.o CMakeFiles/nrniv_lib.dir/__/oc/audit.c.o CMakeFiles/nrniv_lib.dir/__/oc/axis.c.o CMakeFiles/nrniv_lib.dir/__/oc/bksub.c.o CMakeFiles/nrniv_lib.dir/__/oc/code2.c.o CMakeFiles/nrniv_lib.dir/__/oc/cygwinprt.c.o CMakeFiles/nrniv_lib.dir/__/oc/debug.c.o CMakeFiles/nrniv_lib.dir/__/oc/fileio.c.o CMakeFiles/nrniv_lib.dir/__/oc/fmenu.c.o CMakeFiles/nrniv_lib.dir/__/oc/ftime.c.o CMakeFiles/nrniv_lib.dir/__/oc/functabl.c.o CMakeFiles/nrniv_lib.dir/__/oc/getelm.c.o CMakeFiles/nrniv_lib.dir/__/oc/getsym.c.o CMakeFiles/nrniv_lib.dir/__/oc/hoc.c.o CMakeFiles/nrniv_lib.dir/__/oc/hocedit.c.o CMakeFiles/nrniv_lib.dir/__/oc/isoc99.c.o CMakeFiles/nrniv_lib.dir/__/oc/lineq.c.o CMakeFiles/nrniv_lib.dir/__/oc/list.c.o CMakeFiles/nrniv_lib.dir/__/oc/math.c.o CMakeFiles/nrniv_lib.dir/__/oc/nonlin.c.o CMakeFiles/nrniv_lib.dir/__/oc/nrnfilewrap.c.o CMakeFiles/nrniv_lib.dir/__/oc/ocerf.c.o CMakeFiles/nrniv_lib.dir/__/oc/parallel.c.o CMakeFiles/nrniv_lib.dir/__/oc/parse.c.o CMakeFiles/nrniv_lib.dir/__/oc/plot.c.o CMakeFiles/nrniv_lib.dir/__/oc/plt.c.o CMakeFiles/nrniv_lib.dir/__/oc/prmat.c.o CMakeFiles/nrniv_lib.dir/__/oc/regexp.c.o CMakeFiles/nrniv_lib.dir/__/oc/scoprand.c.o CMakeFiles/nrniv_lib.dir/__/oc/settext.c.o CMakeFiles/nrniv_lib.dir/__/oc/subrows.c.o CMakeFiles/nrniv_lib.dir/__/oc/symbol.c.o CMakeFiles/nrniv_lib.dir/__/oc/version.c.o CMakeFiles/nrniv_lib.dir/__/oc/x.c.o CMakeFiles/nrniv_lib.dir/__/oc/xred.c.o CMakeFiles/nrniv_lib.dir/__/memacs/ansi.c.o CMakeFiles/nrniv_lib.dir/__/memacs/basic.c.o CMakeFiles/nrniv_lib.dir/__/memacs/bind.c.o CMakeFiles/nrniv_lib.dir/__/memacs/buffer.c.o CMakeFiles/nrniv_lib.dir/__/memacs/display.c.o CMakeFiles/nrniv_lib.dir/__/memacs/file.c.o CMakeFiles/nrniv_lib.dir/__/memacs/fileio.c.o CMakeFiles/nrniv_lib.dir/__/memacs/line.c.o CMakeFiles/nrniv_lib.dir/__/memacs/lock.c.o CMakeFiles/nrniv_lib.dir/__/memacs/main1.c.o CMakeFiles/nrniv_lib.dir/__/memacs/random.c.o CMakeFiles/nrniv_lib.dir/__/memacs/region.c.o CMakeFiles/nrniv_lib.dir/__/memacs/search.c.o CMakeFiles/nrniv_lib.dir/__/memacs/spawn.c.o CMakeFiles/nrniv_lib.dir/__/memacs/tcap.c.o CMakeFiles/nrniv_lib.dir/__/memacs/termio.c.o CMakeFiles/nrniv_lib.dir/__/memacs/window.c.o CMakeFiles/nrniv_lib.dir/__/memacs/word.c.o CMakeFiles/nrniv_lib.dir/__/mesch/arnoldi.c.o CMakeFiles/nrniv_lib.dir/__/mesch/bdfactor.c.o CMakeFiles/nrniv_lib.dir/__/mesch/bkpfacto.c.o CMakeFiles/nrniv_lib.dir/__/mesch/chfactor.c.o CMakeFiles/nrniv_lib.dir/__/mesch/conjgrad.c.o CMakeFiles/nrniv_lib.dir/__/mesch/copy.c.o CMakeFiles/nrniv_lib.dir/__/mesch/dmacheps.c.o CMakeFiles/nrniv_lib.dir/__/mesch/err.c.o CMakeFiles/nrniv_lib.dir/__/mesch/extras.c.o CMakeFiles/nrniv_lib.dir/__/mesch/fft.c.o CMakeFiles/nrniv_lib.dir/__/mesch/givens.c.o CMakeFiles/nrniv_lib.dir/__/mesch/hessen.c.o CMakeFiles/nrniv_lib.dir/__/mesch/hsehldr.c.o CMakeFiles/nrniv_lib.dir/__/mesch/init.c.o CMakeFiles/nrniv_lib.dir/__/mesch/iter0.c.o CMakeFiles/nrniv_lib.dir/__/mesch/iternsym.c.o CMakeFiles/nrniv_lib.dir/__/mesch/itersym.c.o CMakeFiles/nrniv_lib.dir/__/mesch/ivecop.c.o CMakeFiles/nrniv_lib.dir/__/mesch/lanczos.c.o CMakeFiles/nrniv_lib.dir/__/mesch/lufactor.c.o CMakeFiles/nrniv_lib.dir/__/mesch/machine.c.o CMakeFiles/nrniv_lib.dir/__/mesch/matlab.c.o CMakeFiles/nrniv_lib.dir/__/mesch/matop.c.o CMakeFiles/nrniv_lib.dir/__/mesch/matrixio.c.o CMakeFiles/nrniv_lib.dir/__/mesch/meminfo.c.o CMakeFiles/nrniv_lib.dir/__/mesch/memory.c.o CMakeFiles/nrniv_lib.dir/__/mesch/memstat.c.o CMakeFiles/nrniv_lib.dir/__/mesch/mfunc.c.o CMakeFiles/nrniv_lib.dir/__/mesch/norm.c.o CMakeFiles/nrniv_lib.dir/__/mesch/otherio.c.o CMakeFiles/nrniv_lib.dir/__/mesch/pxop.c.o CMakeFiles/nrniv_lib.dir/__/mesch/qrfactor.c.o CMakeFiles/nrniv_lib.dir/__/mesch/schur.c.o CMakeFiles/nrniv_lib.dir/__/mesch/solve.c.o CMakeFiles/nrniv_lib.dir/__/mesch/sparse.c.o CMakeFiles/nrniv_lib.dir/__/mesch/sparseio.c.o CMakeFiles/nrniv_lib.dir/__/mesch/spbkp.c.o CMakeFiles/nrniv_lib.dir/__/mesch/spchfctr.c.o CMakeFiles/nrniv_lib.dir/__/mesch/splufctr.c.o CMakeFiles/nrniv_lib.dir/__/mesch/sprow.c.o CMakeFiles/nrniv_lib.dir/__/mesch/spswap.c.o CMakeFiles/nrniv_lib.dir/__/mesch/submat.c.o CMakeFiles/nrniv_lib.dir/__/mesch/svd.c.o CMakeFiles/nrniv_lib.dir/__/mesch/symmeig.c.o CMakeFiles/nrniv_lib.dir/__/mesch/update.c.o CMakeFiles/nrniv_lib.dir/__/mesch/vecop.c.o CMakeFiles/nrniv_lib.dir/__/mesch/version.c.o CMakeFiles/nrniv_lib.dir/__/mesch/zcopy.c.o CMakeFiles/nrniv_lib.dir/__/mesch/zfunc.c.o CMakeFiles/nrniv_lib.dir/__/mesch/zgivens.c.o CMakeFiles/nrniv_lib.dir/__/mesch/zhessen.c.o CMakeFiles/nrniv_lib.dir/__/mesch/zhsehldr.c.o CMakeFiles/nrniv_lib.dir/__/mesch/zlufctr.c.o CMakeFiles/nrniv_lib.dir/__/mesch/zmachine.c.o CMakeFiles/nrniv_lib.dir/__/mesch/zmatio.c.o CMakeFiles/nrniv_lib.dir/__/mesch/zmatlab.c.o CMakeFiles/nrniv_lib.dir/__/mesch/zmatop.c.o CMakeFiles/nrniv_lib.dir/__/mesch/zmemory.c.o CMakeFiles/nrniv_lib.dir/__/mesch/znorm.c.o CMakeFiles/nrniv_lib.dir/__/mesch/zqrfctr.c.o CMakeFiles/nrniv_lib.dir/__/mesch/zschur.c.o CMakeFiles/nrniv_lib.dir/__/mesch/zsolve.c.o CMakeFiles/nrniv_lib.dir/__/mesch/zvecop.c.o CMakeFiles/nrniv_lib.dir/__/nrnoc/apcount.c.o CMakeFiles/nrniv_lib.dir/__/nrnoc/feature.c.o CMakeFiles/nrniv_lib.dir/__/nrnoc/intfire2.c.o CMakeFiles/nrniv_lib.dir/__/nrnoc/oclmp.c.o CMakeFiles/nrniv_lib.dir/__/nrnoc/ppmark.c.o CMakeFiles/nrniv_lib.dir/__/nrnoc/syn.c.o CMakeFiles/nrniv_lib.dir/__/nrnoc/exp2syn.c.o CMakeFiles/nrniv_lib.dir/__/nrnoc/hh.c.o CMakeFiles/nrniv_lib.dir/__/nrnoc/intfire4.c.o CMakeFiles/nrniv_lib.dir/__/nrnoc/passive.c.o CMakeFiles/nrniv_lib.dir/__/nrnoc/stim.c.o CMakeFiles/nrniv_lib.dir/__/nrnoc/vclmp.c.o CMakeFiles/nrniv_lib.dir/__/nrnoc/expsyn.c.o CMakeFiles/nrniv_lib.dir/__/nrnoc/intfire1.c.o CMakeFiles/nrniv_lib.dir/__/nrnoc/netstim.c.o CMakeFiles/nrniv_lib.dir/__/nrnoc/pattern.c.o CMakeFiles/nrniv_lib.dir/__/nrnoc/svclmp.c.o CMakeFiles/nrniv_lib.dir/__/gnu/ACG.cpp.o CMakeFiles/nrniv_lib.dir/__/gnu/Binomial.cpp.o CMakeFiles/nrniv_lib.dir/__/gnu/Complex.cpp.o CMakeFiles/nrniv_lib.dir/__/gnu/DiscUnif.cpp.o CMakeFiles/nrniv_lib.dir/__/gnu/Erlang.cpp.o CMakeFiles/nrniv_lib.dir/__/gnu/Geom.cpp.o CMakeFiles/nrniv_lib.dir/__/gnu/HypGeom.cpp.o CMakeFiles/nrniv_lib.dir/__/gnu/LogNorm.cpp.o CMakeFiles/nrniv_lib.dir/__/gnu/MLCG.cpp.o CMakeFiles/nrniv_lib.dir/__/gnu/NegExp.cpp.o CMakeFiles/nrniv_lib.dir/__/gnu/Normal.cpp.o CMakeFiles/nrniv_lib.dir/__/gnu/Poisson.cpp.o CMakeFiles/nrniv_lib.dir/__/gnu/RNG.cpp.o CMakeFiles/nrniv_lib.dir/__/gnu/Random.cpp.o CMakeFiles/nrniv_lib.dir/__/gnu/RndInt.cpp.o CMakeFiles/nrniv_lib.dir/__/gnu/SmplHist.cpp.o CMakeFiles/nrniv_lib.dir/__/gnu/SmplStat.cpp.o CMakeFiles/nrniv_lib.dir/__/gnu/Uniform.cpp.o CMakeFiles/nrniv_lib.dir/__/gnu/Weibull.cpp.o CMakeFiles/nrniv_lib.dir/__/gnu/builtin.cpp.o CMakeFiles/nrniv_lib.dir/__/gnu/d_avec.cpp.o CMakeFiles/nrniv_lib.dir/__/gnu/d_vec.cpp.o CMakeFiles/nrniv_lib.dir/__/scopmath/abort.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/adams.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/adeuler.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/adrunge.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/advance.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/boundary.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/crank.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/crout.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/csoda.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/csodabnc.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/deflate.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/dimplic.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/scoperf.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/euler.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/expfit.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/exprand.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/f2cmisc.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/factoria.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/force.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/gauss.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/gear.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/getmem.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/harmonic.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/heun.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/hyperbol.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/invert.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/lag.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/legendre.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/newton.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/normrand.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/perpulse.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/perstep.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/poisrand.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/poisson.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/praxis.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/pulse.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/quad.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/ramp.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/revhyper.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/revsawto.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/revsigmo.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/romberg.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/runge.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/sawtooth.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/schedule.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/seidel.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/sigmoid.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/simeq.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/simplex.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/sparse.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/vsparse.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/spline.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/squarewa.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/ssimplic.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/step.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/threshol.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/tridiag.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/sparse_thread.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/newton_thread.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/crout_thread.c.o CMakeFiles/nrniv_lib.dir/__/scopmath/ssimplic_thread.c.o CMakeFiles/nrniv_lib.dir/__/sparse13/spalloc.c.o CMakeFiles/nrniv_lib.dir/__/sparse13/spbuild.c.o CMakeFiles/nrniv_lib.dir/__/sparse13/spfactor.c.o CMakeFiles/nrniv_lib.dir/__/sparse13/spoutput.c.o CMakeFiles/nrniv_lib.dir/__/sparse13/spsolve.c.o CMakeFiles/nrniv_lib.dir/__/sparse13/sputils.c.o CMakeFiles/nrniv_lib.dir/__/sparse13/cspalloc.c.o CMakeFiles/nrniv_lib.dir/__/sparse13/cspbuild.c.o CMakeFiles/nrniv_lib.dir/__/sparse13/cspfactor.c.o CMakeFiles/nrniv_lib.dir/__/sparse13/cspoutput.c.o CMakeFiles/nrniv_lib.dir/__/sparse13/cspsolve.c.o CMakeFiles/nrniv_lib.dir/__/sparse13/csputils.c.o CMakeFiles/nrniv_lib.dir/__/sundials/cvodes/cvband.c.o CMakeFiles/nrniv_lib.dir/__/sundials/cvodes/cvbandpre.c.o CMakeFiles/nrniv_lib.dir/__/sundials/cvodes/cvbbdpre.c.o CMakeFiles/nrniv_lib.dir/__/sundials/cvodes/cvdense.c.o CMakeFiles/nrniv_lib.dir/__/sundials/cvodes/cvdiag.c.o CMakeFiles/nrniv_lib.dir/__/sundials/cvodes/cvodea.c.o CMakeFiles/nrniv_lib.dir/__/sundials/cvodes/cvodes.c.o CMakeFiles/nrniv_lib.dir/__/sundials/cvodes/cvodesio.c.o CMakeFiles/nrniv_lib.dir/__/sundials/cvodes/cvspgmr.c.o CMakeFiles/nrniv_lib.dir/__/sundials/ida/idaband.c.o CMakeFiles/nrniv_lib.dir/__/sundials/ida/idabbdpre.c.o CMakeFiles/nrniv_lib.dir/__/sundials/ida/ida.c.o CMakeFiles/nrniv_lib.dir/__/sundials/ida/idadense.c.o CMakeFiles/nrniv_lib.dir/__/sundials/ida/idaic.c.o CMakeFiles/nrniv_lib.dir/__/sundials/ida/idaio.c.o CMakeFiles/nrniv_lib.dir/__/sundials/ida/idaspgmr.c.o CMakeFiles/nrniv_lib.dir/__/sundials/shared/band.c.o CMakeFiles/nrniv_lib.dir/__/sundials/shared/dense.c.o CMakeFiles/nrniv_lib.dir/__/sundials/shared/iterative.c.o CMakeFiles/nrniv_lib.dir/__/sundials/shared/nvector.c.o CMakeFiles/nrniv_lib.dir/__/sundials/shared/nvector_serial.c.o CMakeFiles/nrniv_lib.dir/__/sundials/shared/smalldense.c.o CMakeFiles/nrniv_lib.dir/__/sundials/shared/spgmr.c.o CMakeFiles/nrniv_lib.dir/__/sundials/shared/sundialsmath.c.o CMakeFiles/nrniv_lib.dir/__/nrnmpi/nrnmpi.c.o CMakeFiles/nrniv_lib.dir/__/nrnmpi/bbsmpipack.c.o CMakeFiles/nrniv_lib.dir/__/nrnmpi/mpispike.c.o CMakeFiles/nrniv_lib.dir/__/nrnmpi/nrnrt.c.o CMakeFiles/nrniv_lib.dir/__/nrnpython/nrnpython.cpp.o CMakeFiles/nrniv_lib.dir/__/nrnpython/nrnpy_hoc.cpp.o CMakeFiles/nrniv_lib.dir/__/nrnpython/nrnpy_nrn.cpp.o CMakeFiles/nrniv_lib.dir/__/nrnpython/nrnpy_p2h.cpp.o CMakeFiles/nrniv_lib.dir/__/nrnpython/grids.cpp.o CMakeFiles/nrniv_lib.dir/__/nrnpython/rxd.cpp.o CMakeFiles/nrniv_lib.dir/__/nrnpython/rxd_extracellular.cpp.o CMakeFiles/nrniv_lib.dir/__/nrnpython/rxd_intracellular.cpp.o CMakeFiles/nrniv_lib.dir/__/nrnpython/rxd_vol.cpp.o CMakeFiles/nrniv_lib.dir/__/nrnpython/rxd_marching_cubes.c.o CMakeFiles/nrniv_lib.dir/__/nrnpython/rxd_llgramarea.c.o CMakeFiles/nrniv_lib.dir/__/ivos/file.cpp.o CMakeFiles/nrniv_lib.dir/__/ivos/listimpl.cpp.o CMakeFiles/nrniv_lib.dir/__/ivos/math.cpp.o CMakeFiles/nrniv_lib.dir/__/ivos/memory.cpp.o CMakeFiles/nrniv_lib.dir/__/ivos/string.cpp.o CMakeFiles/nrniv_lib.dir/__/ivos/ustring.cpp.o CMakeFiles/nrniv_lib.dir/__/ivos/observe.cpp.o CMakeFiles/nrniv_lib.dir/__/ivos/regexp.cpp.o CMakeFiles/nrniv_lib.dir/__/ivos/resource.cpp.o  ../../lib/libreadline.a /System/Library/Frameworks/Python.framework/Versions/2.7/lib/libpython2.7.dylib /usr/lib/libcurses.dylib /usr/lib/libform.dylib
Undefined symbols for architecture x86_64:
  "_modl_reg", referenced from:
      _hoc_last_init in init.c.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
alexsavulescu commented 3 years ago

Couldn't reproduce on my mac. Looks like it was due to the fact Python2.7 on Mac OS X is compiled by default with the alias "cc", maybe you had a discrepancy over there (see https://stackoverflow.com/questions/28121148/how-to-fix-cc-error-unrecognized-command-line-option-wshorten-64-to-32-is/46610651)

ohm314 commented 3 years ago

So, the reason why this is happening is the following: When src/nrnpython/setup.py is executed, the environment has neither CFLAGS or CPPFLAGS set. With python 2.7 and whatever distutils runs within this will load a set of flags when running the build_ext command. Specifically this happens in distutils/command/build_ext.py:run() as customize_compiler(self.compiler) is called. This function is defined in distutils/sysconfig.py.

         if sys.platform == "darwin":
             global _config_vars
             # Use get_config_var() to ensure _config_vars is initialized.
             if not get_config_var('CUSTOMIZED_OSX_COMPILER'):
                 import _osx_support
                 _osx_support.customize_compiler(_config_vars)
                 _config_vars['CUSTOMIZED_OSX_COMPILER'] = 'True'

         (cc, cxx, opt, cflags, ccshared, ldshared, so_ext, ar, ar_flags) = \
             get_config_vars('CC', 'CXX', 'OPT', 'CFLAGS',
                             'CCSHARED', 'LDSHARED', 'SO', 'AR',
                             'ARFLAGS')

If the environment variables are set, the defaults are overwritten:

         if 'CFLAGS' in os.environ:
             cflags = opt + ' ' + os.environ['CFLAGS']
             ldshared = ldshared + ' ' + os.environ['CFLAGS']
         if 'CPPFLAGS' in os.environ:
             cpp = cpp + ' ' + os.environ['CPPFLAGS']
             cflags = cflags + ' ' + os.environ['CPPFLAGS']
             ldshared = ldshared + ' ' + os.environ['CPPFLAGS']

By the way _osx_support is found here: /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/_osx_support.py

ohm314 commented 3 years ago

And here's a little bit more context (_osx_support.py):


def customize_config_vars(_config_vars):
    """Customize Python build configuration variables.

    Called internally from sysconfig with a mutable mapping
    containing name/value pairs parsed from the configured
    makefile used to build this interpreter.  Returns
    the mapping updated as needed to reflect the environment
    in which the interpreter is running; in the case of
    a Python from a binary installer, the installed
    environment may be very different from the build
    environment, i.e. different OS levels, different
    built tools, different available CPU architectures.

    This customization is performed whenever
    distutils.sysconfig.get_config_vars() is first
    called.  It may be used in environments where no
    compilers are present, i.e. when installing pure
    Python dists.  Customization of compiler paths
    and detection of unavailable archs is deferred
    until the first extension module build is
    requested (in distutils.sysconfig.customize_compiler).

    Currently called from distutils.sysconfig
    """

In short: the cflags are set by default to be the same as the ones used to build python.
ohm314 commented 3 years ago

Since @pramodk asked. When building with python 3.9 this issue does not appear. distutils evidently uses the correct set of build arguments. Here is the relevant build command issued by the setup.py:

/usr/local/bin/gcc-10 -Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -I/usr/local/include -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk -I/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include -I/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -DNRNCMAKE=1 -I/Users/awile/workbench/fix_nrn_osx_cmake/nrn/src/oc -I../oc -I/Users/awile/workbench/fix_nrn_osx_cmake/nrn/src/nrnmpi -I/usr/local/include -I/usr/local/opt/openssl@1.1/include -I/usr/local/opt/sqlite/include -I/Users/awile/workbench/fix_nrn_osx_cmake/.venv/include -I/usr/local/Cellar/python@3.9/3.9.1_5/Frameworks/Python.framework/Versions/3.9/include/python3.9 -c inithoc.cpp -o build/temp.macosx-10.15-x86_64-3.9/inithoc.o
/usr/local/bin/g++-10 -bundle -undefined dynamic_lookup -L/usr/local/lib -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk build/temp.macosx-10.15-x86_64-3.9/inithoc.o -L/usr/local/lib -L/../lib -L/Users/awile/workbench/fix_nrn_osx_cmake/nrn/build/lib -L/usr/local/lib -L/usr/local/opt/openssl@1.1/lib -L/usr/local/opt/sqlite/lib -lnrniv -o /Users/awile/workbbench/fix_nrn_osx_cmake/nrn/build/lib/python/neuron/hoc.cpython-39-darwin.so -Wl,-rpath,@loader_path/../../ -Wl,-rpath,/../lib

as you can see it uses for example -isysroot instead of -iwithsysroot.

But it is also possible that the python 3.9 from homebrew was built with gcc and hence the flags will be "correct" even if the behavior is wrong.