GNU Fortran과 GCC

GNU Fortran과 GCC

GNU Fortran이 GCC(GNU Compiler Collection) 안에서 어떤 구조로 동작하는지를 설명하는 문서예요. 컴파일러가 소스 파일을 어떻게 처리하고, gcc 드라이버와 f951 프론트엔드 프로그램이 어떤 관계인지, 또 어떤 파일 확장자가 고정/자유 형식으로 해석되는지가 핵심이에요.

출처: GNU Fortran and GCC (The GNU Fortran Compiler)

본문

GNU Fortran은 GCC, 즉 _GNU Compiler Collection_의 일부예요. GCC는 여러 언어를 위한 프론트엔드(front end)들의 모음인데, 각 프론트엔드는 소스 코드를 언어와 무관한 형태인 **GENERIC**으로 변환해요. 이 GENERIC은 공통의 미들엔드(middle end)가 최적화를 처리하고, 그다음 서로 다른 컴퓨터 아키텍처·운영체제용 코드를 만드는 백엔드(back end) 모음 중 하나로 넘어가요.

기능적으로는 드라이버 프로그램(gcc)이 컴파일러의 명령줄 인터페이스를 담당하면서 구현돼요. gcc는 소스 코드의 각 파일에 대해 해당 언어의 프론트엔드 프로그램(Fortran의 경우 f951)을 호출하고, 이어서 어셈블러와 링커를 호출해 컴파일 결과물을 만들어요. Fortran 언어 지원이 켜진 GCC에서는 gcc.f, .for, .ftn, .f90, .f95, .f03, .f08 확장자를 Fortran 소스로 인식하고 그에 맞게 컴파일해요. 또 gfortran 드라이버 프로그램도 제공되는데, 이건 gcc와 동일하되 컴파일된 프로그램에 Fortran 런타임 라이브러리를 자동으로 링크해 준다는 점만 달라요.

  • .f, .for, .fpp, .ftn, .F, .FOR, .FPP, .FTN 확장자를 가진 소스 파일은 고정 형식(fixed form) 으로 취급돼요.
  • .f90, .f95, .f03, .f08, .F90, .F95, .F03, .F08 확장자를 가진 소스 파일은 자유 형식(free form) 으로 취급돼요.
  • 두 형식 모두 대문자 버전은 전처리(preprocessing)를 거쳐요. 소문자 .fpp 확장자 파일도 전처리를 거쳐요.

이 매뉴얼은 주로 언어의 문법과 의미론을 다루는 Fortran 프론트엔드를 대상으로 문서화해요. 최적화 패스와 백엔드 코드 생성과 관련된 GCC의 측면은 GCC 매뉴얼에 문서화돼 있어요. Using the GNU Compiler Collection (GCC)의 소개를 참고하면 돼요. 두 매뉴얼이 합쳐졌을 때 GNU Fortran 컴파일러에 대한 완전한 참조가 돼요.

더 알아보기

  • 같은 확장자의 대문자 버전은 전처리가 켜져 있다는 점이 실무에서 자주 맞닥뜨리는 차이예요. 예를 들어 .f는 전처리 없이, .F는 전처리와 함께 컴파일돼요.
  • gfortran 드라이버는 gcc와 동일하지만 Fortran 런타임을 자동으로 링크해 준다는 점이 핵심 차이예요.
  • 소스 형식 판단은 파일 확장자로 이뤄지지만, -ffree-form/-ffixed-form 옵션으로 명시적으로 재정의할 수도 있어요.