FreeBSD 포트에서 GCC14에 Ada 지원을 추가하여 패키지 빌드하기
최종 수정일:
이 가이드는 FreeBSD의 lang/gcc14 포트를 수정하여 Ada 언어 지원을 활성화하고, 컴파일하여 최종적으로 설치 가능한 패키지 파일을 생성하는 전체 과정을 설명합니다.
이 과정은 부트스트래핑(bootstrapping)을 필요로 합니다. 즉, GCC 14의 Ada 프론트엔드(GNAT)를 빌드하기 위해 시스템에 이미 작동하는 Ada 컴파일러가 설치되어 있어야 합니다.
1단계: 부트스트랩 컴파일러 설치
우선, GCC14를 빌드하는 데 사용할 부트스트랩용으로 컴파일러 gnat13을 설치합니다. 이 과정이 없으면 GCC14의 Ada 프론트엔드 컴파일이 실패합니다.
sudo pkg install gnat13
2단계: 환경 변수 설정
빌드 시스템이 시스템의 다른 GCC보다 방금 설치한 gnat13의 컴파일러를 먼저 찾도록 PATH 환경 변수의 맨 앞에 gnat13의 경로를 추가합니다.
# 현재 셸 세션에 gnat13 경로 추가
export PATH=/usr/local/gnat13/bin:$PATH
# PATH가 올바르게 설정되었는지 확인
echo $PATH
# 출력 예: /usr/local/gnat13/bin:/sbin:/bin:/usr/sbin:/usr/bin...
CC 및 CXX 환경 변수를 gcc, g++로 설정합니다.
export CC=gcc
export CXX=g++
3단계: 포트 파일 수정
lang/gcc14 포트 디렉터리로 이동하여 Ada 관련 파일들이 패키지에 포함하도록 관련 파일들을 수정합니다.
cd /usr/ports/lang/gcc14
다음 diff 내용을 참고하여 Makefile, pkg-descr, pkg-plist 세 개의 파일을 수정합니다.
diff --git a/lang/gcc14/Makefile b/lang/gcc14/Makefile
index 3f2d7cf484..89ffefc12e 100644
--- a/lang/gcc14/Makefile
+++ b/lang/gcc14/Makefile
@@ -3,7 +3,7 @@ PORTVERSION= 14.2.0
PORTREVISION= 4
CATEGORIES= lang
MASTER_SITES= GCC
-PKGNAMESUFFIX= ${SUFFIX}
+PKGNAMESUFFIX= ${SUFFIX}-ada
MAINTAINER= salvadore@FreeBSD.org
COMMENT= GNU Compiler Collection 14
@@ -80,7 +80,7 @@ CONFIGURE_TARGET= x86_64-portbld-${OPSYS:tl}${OSREL}
CONFIGURE_ARGS+= --with-abi=elfv2
.endif
-LANGUAGES= c,c++,objc,fortran
+LANGUAGES= c,c++,objc,fortran,ada
.if ${ARCH} != i386 && !empty(PORT_OPTIONS:M*BOOTSTRAP)
LANGUAGES:= ${LANGUAGES},jit
.endif
@@ -134,6 +134,9 @@ INFO= gcc${SUFFIX}/cpp \
gcc${SUFFIX}/gccinstall \
gcc${SUFFIX}/gccint \
gcc${SUFFIX}/gfortran \
+ gcc${SUFFIX}/gnat-style \
+ gcc${SUFFIX}/gnat_rm \
+ gcc${SUFFIX}/gnat_ugn \
gcc${SUFFIX}/libgccjit \
gcc${SUFFIX}/libgomp
# Release tarballs (as opposed to snapshots) always carry this.
diff --git a/lang/gcc14/pkg-descr b/lang/gcc14/pkg-descr
index 4802e1f26c..5987959593 100644
--- a/lang/gcc14/pkg-descr
+++ b/lang/gcc14/pkg-descr
@@ -1,3 +1,3 @@
GCC, the GNU Compiler Collection, supports a number of languages.
-This port installs the C, C++, and Fortran front ends as gcc14, g++14,
-and gfortran14, respectively.
+This port installs the C, C++, Fortran, and Ada front ends as gcc14, g++14,
+gfortran14, and gnat14 respectively.
diff --git a/lang/gcc14/pkg-plist b/lang/gcc14/pkg-plist
index 8dcc98c6dd..26c9ba393d 100644
--- a/lang/gcc14/pkg-plist
+++ b/lang/gcc14/pkg-plist
@@ -17,6 +17,16 @@ bin/gcov%%SUFFIX%%
bin/gcov-dump%%SUFFIX%%
bin/gcov-tool%%SUFFIX%%
bin/gfortran%%SUFFIX%%
+bin/gnat%%SUFFIX%%
+bin/gnatbind%%SUFFIX%%
+bin/gnatchop%%SUFFIX%%
+bin/gnatclean%%SUFFIX%%
+bin/gnatkr%%SUFFIX%%
+bin/gnatlink%%SUFFIX%%
+bin/gnatls%%SUFFIX%%
+bin/gnatmake%%SUFFIX%%
+bin/gnatname%%SUFFIX%%
+bin/gnatprep%%SUFFIX%%
bin/lto-dump%%SUFFIX%%
include/gcc%%SUFFIX%%/ISO_Fortran_binding.h
share/man/man1/cpp%%SUFFIX%%.1.gz
4단계: 컴파일 및 패키징
모든 파일 수정이 완료되었으므로, make package 명령을 사용하여 컴파일과 패키징을 진행합니다.
# 컴파일 및 패키지 생성을 동시에 진행
make package
- 컴파일 시간: 이 과정은 시스템 사양에 따라 수십 분에서 수 시간까지 소요될 수 있습니다.
make동작 방식: 만약 소스 코드가 컴파일되지 않은 상태라면,make package는 자동으로 컴파일(build) 단계를 먼저 실행한 후 패키지를 생성합니다.
5단계: 패키지 확인, 설치 및 검증
컴파일이 완료되면, 직접 빌드한 패키지를 시스템에 설치하고 올바르게 적용되었는지 확인하는 단계입니다.
빌드 결과물 확인: 패키지 파일 검증
먼저, 패키지 파일이 올바르게 생성되었는지 확인합니다.
생성된 패키지는 포트 디렉터리 아래의 work/pkg/에 위치합니다.
ls -l work/pkg/
gcc14-14.2.0_4.pkg 와 같은 이름의 파일이 보일 것입니다.
설치하기 전에, 패키지 안에 gnat 관련 파일들이 실제로 포함되었는지 다음 명령어로 확인할 수 있습니다. 이는 빌드가 성공적으로 Ada를 포함했는지 검증하는 효과적인 방법입니다.
pkg info -l -F work/pkg/gcc14-14.2.0_4.pkg | grep gnat
/usr/local/bin/gnat14
/usr/local/bin/gnatbind14
/usr/local/bin/gnatchop14
/usr/local/bin/gnatclean14
/usr/local/bin/gnatkr14
/usr/local/bin/gnatlink14
/usr/local/bin/gnatls14
/usr/local/bin/gnatmake14
/usr/local/bin/gnatname14
/usr/local/bin/gnatprep14
/usr/local/lib/gcc14/gcc/x86_64-portbld-freebsd14.3/14.2.0/adainclude/gnat.ads
/usr/local/lib/gcc14/gcc/x86_64-portbld-freebsd14.3/14.2.0/adalib/libgnat.a
/usr/local/lib/gcc14/gcc/x86_64-portbld-freebsd14.3/14.2.0/adalib/libgnat-14.so
/usr/local/lib/gcc14/gcc/x86_64-portbld-freebsd14.3/14.2.0/adalib/gnat.ali
/usr/local/lib/gcc14/gcc/x86_64-portbld-freebsd14.3/14.2.0/adalib/libgnat.so
/usr/local/lib/gcc14/gcc/x86_64-portbld-freebsd14.3/14.2.0/adalib/libgnat_pic.a
/usr/local/libexec/gcc14/gcc/x86_64-portbld-freebsd14.3/14.2.0/gnat1
/usr/local/share/info/gcc14/gnat-style.info
/usr/local/share/info/gcc14/gnat_rm.info
/usr/local/share/info/gcc14/gnat_ugn.info
명령어 실행 시 위에 나온 것처럼 .../bin/gnat14, .../bin/gnatmake14 와 같은 경로들이 출력된다면, Ada 구성 요소가 올바르게 포함된 것입니다.
설치 옵션: make reinstall 과 pkg add
시스템에 패키지를 설치하는 방법은 두 가지가 있습니다. 대부분의 경우, 첫 번째 방법인 make reinstall을 권장합니다.
-
방법 1:
make reinstall사용상황: FreeBSD 시스템에는 다른 여러 프로그램이
gcc14에 의존하고 있어, 이미gcc14가 설치되어 있을 가능성이 매우 높습니다. 이 경우,make install명령어는 기존 패키지와의 충돌로 인해 실패합니다.해결책:
make reinstall명령어는 기존에 설치된gcc14를 먼저 안전하게 제거한 후, 우리가 새로 빌드한 Ada 지원 버전을 그 자리에 설치해 줍니다. 이 명령어는 제거와 설치를 자동으로 처리하므로 절차가 단순합니다.# 기존 패키지를 제거하고 새로 빌드한 버전으로 다시 설치 make reinstall -
방법 2:
pkg add사용 (수동 설치 및 보관용)용도: 이 방법은 생성된
.pkg파일을 다른 시스템으로 이전하거나 백업용으로 보관하는 경우에 사용됩니다.# pkg add 명령어로 직접 설치 (root 권한 필요) $ sudo pkg add ./work/pkg/gcc14-14.2.0_4.pkg Installing gcc14-14.2.0_4... the most recent version of gcc14-14.2.0_4 is already installed이 방법 역시 시스템에
gcc14가 이미 설치되어 있다면 실패할 수 있습니다. 이 경우,-f(force) 옵션을 사용하여 기존에 설치된 패키지를 강제로 덮어쓸 수 있습니다.$ sudo pkg add -f work/pkg/gcc14-14.2.0_4.pkg Installing gcc14-14.2.0_4... package gcc14 is already installed, forced install
최종 설치 검증
설치가 완료된 후, 터미널을 새로 열어 실행한 뒤 Ada 컴파일러가 올바르게 인식되는지 최종 확인합니다.
# gnat 버전 확인
gnat14 --version
GNAT 14.2.0
Copyright 1996-2024, Free Software Foundation, Inc.
To list Ada build switches use --help-ada
List of available commands
gnat bind gnatbind14
gnat chop gnatchop14
gnat clean gnatclean14
gnat compile gnatmake14 -f -u -c
gnat check gnatcheck14
gnat elim gnatelim14
gnat krunch gnatkr14
gnat link gnatlink14
gnat list gnatls14
gnat make gnatmake14
gnat metric gnatmetric14
gnat name gnatname14
gnat preprocess gnatprep14
gnat pretty gnatpp14
gnat stack gnatstack14
gnat stub gnatstub14
gnat test gnattest14
# gcc 상세 정보 확인
gcc14 -v
Using built-in specs.
COLLECT_GCC=gcc14
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc14/gcc/x86_64-portbld-freebsd14.3/14.2.0/lto-wrapper
Target: x86_64-portbld-freebsd14.3
Configured with: /usr/ports/lang/gcc14/work/gcc-14.2.0/configure --disable-multilib --without-isl --with-build-config=bootstrap-debug --disable-nls --disable-libssp --enable-gnu-indirect-function --enable-host-shared --enable-plugin --libdir=/usr/local/lib/gcc14 --libexecdir=/usr/local/libexec/gcc14 --program-suffix=14 --with-as=/usr/local/bin/as --with-gmp=/usr/local --with-gxx-include-dir=/usr/local/lib/gcc14/include/c++/ --with-gxx-libcxx-include-dir=/usr/include/c++/v1 --with-ld=/usr/local/bin/ld --with-pkgversion='FreeBSD Ports Collection' --with-system-zlib --without-zstd --enable-languages=c,c++,objc,fortran,jit,ada --prefix=/usr/local --localstatedir=/var --mandir=/usr/local/share/man --infodir=/usr/local/share/info/gcc14 --build=x86_64-portbld-freebsd14.3
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 14.2.0 (FreeBSD Ports Collection)
gcc14 -v 명령어의 출력 결과에 있는 Configured with: 항목에서 --enable-languages=...ada... 와 같이 ada가 포함된 것을 확인하면 빌드가 올바르게 완료된 것입니다.