glvis icon indicating copy to clipboard operation
glvis copied to clipboard

Can't build on M1 Apple Silicon version!

Open supriome opened this issue 2 years ago • 6 comments

When build on macOS m1 with command make MFEM_DIR=../mfem-4.4 -j , there some problem.

fatal error: too many errors emitted, stopping now [-ferror-limit=]
/Library/Developer/CommandLineTools/usr/lib/clang/13.1.6/include/mmintrin.h:394:19: error: use of undeclared identifier '__builtin_ia32_paddd'; did you mean '__builtin_arm_addg'?
    return (__m64)__builtin_ia32_paddd((__v2si)__m1, (__v2si)__m2);
                  ^
/Library/Developer/CommandLineTools/usr/lib/clang/13.1.6/include/mmintrin.h:352:19: note: '__builtin_arm_addg' declared here
    return (__m64)__builtin_ia32_paddb((__v8qi)__m1, (__v8qi)__m2);
                  ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
/Library/Developer/CommandLineTools/usr/lib/clang/13.1.6/include/mmintrin.h:394:19: error: use of undeclared identifier '__builtin_ia32_paddd'; did you mean '__builtin_arm_addg'?
    return (__m64)__builtin_ia32_paddd((__v2si)__m1, (__v2si)__m2);
                  ^
/Library/Developer/CommandLineTools/usr/lib/clang/13.1.6/include/mmintrin.h:352:19: note: '__builtin_arm_addg' declared here
    return (__m64)__builtin_ia32_paddb((__v8qi)__m1, (__v8qi)__m2);

Seems that clang++ version not support.

supriome avatar Mar 29 '22 06:03 supriome

Hi @supriome,

Unfortunately I don't have access to an M1 mac to try to reproduce this, but looking at the error this doesn't seem to be an issue inside GLVis.

I know other folks have gotten MFEM to work on M1 macs, see https://github.com/mfem/mfem/pull/2273.

Does your MFEM build works, e.g. does "make test" work there?

tzanio avatar Apr 10 '22 00:04 tzanio

ping: @matthiasdiener and @samuelpmishLLNL, in case you can help.

tzanio avatar Apr 10 '22 00:04 tzanio

This build script for mfem works for Mac M1: https://github.com/conda-forge/mfem-feedstock/blob/main/recipe/build.sh

Have you run make config when building mfem? It looks like it is trying to compile for x86 (see e.g. the warning for __builtin_ia32_paddd)

matthiasdiener avatar Apr 10 '22 19:04 matthiasdiener

@supriome I got the same error message, where MFEM would compile but glvis would not. Tried all of the solutions posted, as well as confirming homebrew and command line tools were up to date. The MFEM build was confirmed to be compiled for arm64. It seems to be a linking issue with clang via apple command line tools. The line where compilation fails on my M1 Mac is:

> g++ -O3 -std=c++11 -I../mfem-4.4 -DGLVIS_MULTISAMPLE=4 -DGLVIS_MS_LINEWIDTH=1.0 -DGLVIS_OGL3 -DGLVIS_USE_LOGO -I/opt/X11/include/freetype2 -I/usr/local/include -I/usr/local/include -I/opt/homebrew/include -DGLVIS_USE_LIBPNG -o lib/aux_vis.o -c lib/aux_vis.cpp

It seems that when using make or gmake, there is an issue with clang trying to compile with x86 for a few of the libraries, starting with libGL. Instead of compiling via llvm installed through homebrew, it tries to install with the apple command line version of clang. Here is the filepath for the first error thrown:

In file included from lib/gl/renderer.cpp:12:
In file included from lib/gl/renderer.hpp:20:
In file included from lib/gl/platform_gl.hpp:17:
In file included from /usr/local/include/SDL2/SDL.h:38:
In file included from /usr/local/include/SDL2/SDL_cpuinfo.h:102:
In file included from /Library/Developer/CommandLineTools/usr/lib/clang/13.1.6/include/immintrin.h:13:
In file included from /Library/Developer/CommandLineTools/usr/lib/clang/13.1.6/include/x86gprintrin.h:15:

I tried using:

> echo 'export PATH="/opt/homebrew/opt/llvm/bin:$PATH"' >> ~/.zshrc

which didn't fix the issue.

To fix this, I edited the makefile search path lines for glew, SDL2, gym, and OpenGL (lines 166, 172, 177, 178, and 182) to force compilation via llvm installed via homebrew:

166:      GLEW_SEARCH_PATHS =  $(BREW_PREFIX) $(abspath ../glew)

172:      SDL_SEARCH_PATHS :=  $(BREW_PREFIX) $(abspath ../SDL2)

177:      GLM_SEARCH_PATHS = \  

178:      $(if $(BREW_PREFIX), $(BREW_PREFIX)/include) $(abspath ../glm)

182:     OPENGL_SEARCH_PATHS = $(BREW_PREFIX) /usr /usr/local /opt/local

Compiled MFEM with:

> gmake serial -j 4

Compiled with GLVIS with:

> gmake MFEM_DIR=../mfem-4.4 -j 4

This is probably just a quick and dirty way to fix it, but it worked for me. I have tested and verified functionality with the MFEM examples. Also I did not try with cmake, so that might work.

congunter avatar Jul 25 '22 02:07 congunter

Thank you @congunter

tzanio avatar Jul 25 '22 15:07 tzanio

Hi all,

I'm running MFEM and GLVis on my M1 for a year and I never had any issues. I've tried different commits of both software packages and it always worked fine. Both, MFEM and GLVis are in my home folder, e.g. ~/mfem and ~/glvis. I compile both packages with cmake, e.g.

cd ~/mfem
mkdir build
cd build
cmake ..
make -j8

and

cd ~/glvis
mkdir build
cd build
cmake ..
make -j8

Note that GLVis requires a few external dependencies that can be installed via brew. The following list might not be exhaustive, but I believe I had to install the following packages:

  • sdl2
  • glew
  • glm
  • libpng
  • fontconfig

But Cmake should guide you through this process of installing missing dependencies (if there are any). This works on M1 without any problems. To run GLVis, I execute

glvis/build/glvis

in my home folder. Executing an MFEM example such as ex16 should then be able to communicate with the running GLVis server. E.g. try

cd ~/mfem/build/examples
make ex16
./ex16

Hope that helps, good luck!

TobiasDuswald avatar Jul 26 '22 19:07 TobiasDuswald