Mac에서 기본적으로 제공되는 컴파일러는 Apple LLVM(clang)이다.
gcc, g++를 입력하면 자동으로 clang이 실행된다.
사용해보니 컴파일 에러가 발생했을 때 더 자세한 내용을 알려주거나 오타를 잡아주는 등의 gnu gcc보다 편리한 점이 있지만, 일단 평소 평소 사용하는 환경에 맞추기 위해 gnu gcc를 설치하기로 했다.
(사실 gprof 쓰려는데, 다른 툴 사용법 익히기는 귀찮고,, 겸사겸사...)
다행히도 얼마 전에 Mac에 gcc를 설치하고 그 과정을 포스트한 분이 계셔서 참고했다. 예! 한글이라 더좋다.
http://aiceru.blogspot.kr/2016/03/mac-os-x-gnu-gcc.html
또는 아래 링크를 참고해도 좋을듯.
https://solarianprogrammer.com/2015/05/01/compiling-gcc-5-mac-os-x/
일단 내가 쓰는 Mac 버전은 macOS Sierra 10.12.4 이다.
gcc설치를 위해 아래의 라이브러리를 내려받았다.
1. gcc-6.3.0 - https://gcc.gnu.org/mirrors.html
2. mpc-1.0.3 - http://www.multiprecision.org/index.php?prog=mpc&page=download
3. mpfr-3.1.5. - http://www.mpfr.org/mpfr-current/#download
4. gmp-6.1.2 - https://gmplib.org
5. isl-0.16.1 - ftp://gcc.gnu.org/pub/gcc/infrastructure/
** 인터넷 돌아다니면서 읽다 보니 isl 버전 관련해서 쓴 글이 있었다. 최신 버전을 받았더니 gcc 빌드 중에 에러가 발생해서, 일부러 지난 버전을 받아서 성공했다.. 는 내용인데, 꽤 오래 전에 쓴 글이라 일단 무시하고 모두 최신 버전을 받았다.
** gmp 링크를 따라가면 위에 .lz파일로 다운받기가 있는데, 그냥 쉽게 압축 풀려면 밑으로 조금만 더 내려서 .bz2 를 받아주자.
** isl 링크를 그대로 클릭하면 finder에서 열기가 나오는데, 내 경우에는 문제가 발생했다. finder로 ftp에 접속한 뒤 몇 초 있다가 finder가 맛이 가고, 앱 재시작도 안되고, 한참 그러다가 갑자기 재부팅된다. 한번도 아니고 두번이나... 그래서 다른 ftp 클라이언트로 접속해서 받았다.
그리고... 위의 링크대로 쭉 따라해보자. 어려운것도 아니고...
1. Build GMP
cd gmp-6.1.2mkdir build && cd build
../configure --prefix=/usr/local/gcc-6.3.0 --enable-cxx
...
make -j 4
...
sudo make install
...
make check
마지막 명령어는 라이브러리가 제대로 설치 되었는지 확인하는거 같다.
2. Build MPFR
cd ../../mpfr-3.1.5
mkdir build && cd build
../configure --prefix=/usr/local/gcc-6.3.0 --with-gmp=/usr/local/gcc-6.3.0
...
make -j 4
...
sudo make install
3. Build MPC
cd ../../mpc-1.0.3
mkdir build && cd build
../configure --prefix=/usr/local/gcc-6.3.0 --with-gmp=/usr/local/gcc-6.3.0 --with-mpfr=/usr/local/gcc-6.3.0
...
make -j 4
...
sudo make install
일단 여기까지 해서 gcc를 build하기 위한 세 가지 라이브러리 설치가 끝났다. Graphite loop optimization을 위해서는 isl도 설치하면 좋다는거 같은데... 일단 그대로 따라한다.
4. Build ISL (maybe optional??)
cd ../../isl-0.16.
mkdir build && cd build
../configure --prefix=/usr/local/gcc-6.3.0 --with-gmp-prefix=/usr/local/gcc-6.3.0
...
make -j 4
...
sudo make install
5. Build GCC
cd ../../gcc-6.3.0
mkdir build && cd build
../configure --prefix=/usr/local/gcc-6.3.0 --enable-checking=release --with-gmp=/usr/local/gcc-6.3.0 --with-mpfr=/usr/local/gcc-6.3.0 --with-mpc=/usr/local/gcc-6.3.0 --enable-languages=c,c++,fortran --with-isl=/usr/local/gcc-6.3.0 --program-suffix=-6.3.0
--enable-languages
컴파일 가능한 언어 지정. fortran 필요 없을거 같지만, 일단 그대로 따라하기로 했으니 썼다. (사실 all 할까 고민함) https://gcc.gnu.org/install/configure.html 참조.
--program-suffix
그냥 gcc를 실행하면 clang이 invoke되고, gcc-6.3.0이라고 풀네임을 입력해야(-6.3.0으로 옵션을 줬으니) gnu gcc가 invoke되도록 함.
이제 위에서 했던거랑 똑같이 make해주자.
make -j 4
오래걸린다.... 내 맥북(i7-6700HQ @ 2.6GHz)에서는 약 45분정도 걸렸다.
sudo make install
마지막으로, ~/.bashrc 또는 ~/.bash_profile.. 등 맥이 처음 켜질 때 읽는 파일에 다음을 추가하고 source하면...!
export PATH=/usr/local/gcc-6.3.0/bin:$PATH
이제 gcc-6.3.0을 입력하면 gnu gcc가 실행된다.
그냥 gcc로 gnu gcc를 실행하려면 아까 gcc configure에서 suffix 옵션을 주지 않고 진행하거나, alias를 걸어주면 될 듯 하다.
alias gcc=gcc-6.3.0
아..근데 gprof가 원래 맥에서 안되는거였나보다..
어디선가 돌아다니다가 clang에서 안되는거라고 잘못읽어서 뻘짓한거같다...
어쩐지 -pg 옵션을 줘도 gmon.out이 안나오더라...ㅠㅠ