본문 바로가기

building system

NASM으로 asm 파일을 컴파일해 사용하는 bazel 빌드 예제 개요 bazel centry registry에 nasm를 빌드할 수 있는 환경이 이미 구축되어 있다. bzlMod를 활용하면 nasm를 컴파일하고, 결과 파일을 가져와 asm 파일을 컴파일 한 결과물과 c++ 소스를 결합해 최종 샘플을 구성할 수 있다. 풀어야 할 과제 asm 파일 컴파일 환경을 구축하는 것이 가장 큰 풀어야 할 과제다. 이미 이전 게시글에서 나머지 문제는 해결한 경험이 있다. │ .bazelrc │ MODULE.bazel │ └─project BUILD.bazel hello.asm main.cchello.asm 파일 보기 아래 asm 소스는 윈도우 64비트 환경에서 사용할 수 있는 소스다. 외부 참조로 printf 함수를 사용하고, printf 인자로 lea 레지스터에 있는 메모리 주소.. 더보기
bzlMod 기반 GoogleTest 기본 예제 구현하기 개요 이번 게시글에서는 새로운 의존성 모델인 bzlMod는 BCR(Bazel Centeral Registry)를 중심으로 다양한 라이브러리에 접근할 수 있도록 설계했다. 이미 많은 라이브러리를 사용할 수 있고, 빠른 속도로 다양한 라이브러리를 추가하고 있다. 그 중에 GoogleTest 라이브러리를 사용해 unittest 기본 예제를 만들어보는 것이 목표다. 실제 구체적인 GTest에 대한 구체적인 사용법은 관련 사이트를 통해 얻어낼 수 있고, 여기서는 단순히 unittest 빌드 시스템 구축이 목표다. 풀어야 할 문제 폴더 구조는 아래와 같다. maic.cc 파일을 컴파일할 수 있도록 나머지 파일 내용을 완성하는 것이 풀어야 할 문제다. │ .bazelrc │ MODULE.bazel │ └─projec.. 더보기
새로운 의존성 설계 bzlMod 기본 예제 구현하기 개요 bazel 6.3 이후로 bazel 개발팀은 새로운 의존성 설계 모델인 bzlMod 사용을 권장하고 있고, 가까운 미래에 기존 방식을 완전히 대체할 예정이다. 이전 게시글, 모두 바로 이전 설계 모델 기반으로 설명한 내용이다. 이번 예제를 통해, 새로운 의존성 설계 모델인 bzlMod를 이해하도록 해보자. 풀어야 할 과제 전체 폴더 구조는 아래와 같다. 일단 기존 방식과 다른 점은 빌드 시스템의 맨 상단에 있어야 할 WORKSPACE 파일이 없다. 대신 MODULE.bazel 파일이 기존 WORKSPACE 파일의 역할을 대신한다. 단순히 이름만 바뀐 것이 아니라, 내부에 사용할 수 있는 rule 규약도 다르다. 그리고 무엇보다 중요한 부분은 bazel-central-registry(BCR)라는 re.. 더보기
http_archive/git_repository 기반 bazel 예제 구현하기 개요 이전 게시글에서는 github에 있는 bazel_skylib를 git으로 다운 받았다. 다운받은 파일의 맨 상위에 WORKSPACE과 BUILD 파일이 있어서 또 다른 bazel 기반 프로젝트임을 인식하고 local_repository를 통해 외부 의존성을 걸어 사용했다. 이번 게시글에서는 bazel에서 기본 제공하는 '@bazel-tool' repository의 웹 다운로드, git 다운로드 기능을 사용해 컴파일과 동시에 필요한 repository를 자동 구성하고, 나머지 컴파일 연산을 진행하는 다소 흥미로운 샘플이다. 최종 결과물은 main.exe 파일과 c.jpg 파일을 같은 경로에 제공하고, main.exe를 실행하면 같은 경로에 있는 c.jpg를 압축해 c.zip 파일을 생성.. 더보기
bazel-skylib를 로컬 의존성으로 사용한 예제 구현하기 개요 bazel 빌드 시스템은 Python 언어의 일부 기능을 기반으로 빌드 시스템을 자체 개발한 Skylark 언어로 확장한다. bazel 빌드 시스템을 설치하면, Skylark 언어로 개발한 기본 라이브러리를 @bazel-tool repository로 제공한다. 이번 시간에는 @bazel-tool를 사용하기 이전에, 같은 팀이 개발한 bazel-skylib를 다운받아 외부 의존성으로 사용하는 방법을 언급하려 한다. @bazel-tool에서 제공하는 기능을 활용해 bazel-skylib를 다운받고, @ bazel-skylib repository를 구성하고 외부 라이브러리로 사용하는 예제는 연이어 오는 다음 게시글 내용이다. 풀어야 할 과제. 초기 시작 단계의 폴더 구성은 아래와 같다. my 폴더 하부에.. 더보기
외부 의존성이 있는 bazel 기본 예제 구현하기 개요 bazel 5.0 이후에 bzlMod라고 부르는 새로운 형태의 외부 의존성 설계 모델이 bazel에 도입되었고, bazel 설계팀에서 "bazel의 미래"라고 언급했습니다. 우리가 가야 할 방향은 최종적으로 bzlMod 기반으로 전체 빌드 시스템을 구축하는 것입니다. 우선 새로운 의존성 설계 모델을 곧바로 도입하기 전에, 이전 설계 모델 예제를 먼저 소개합니다. 본인이 판단하기에 작은 단위 빌드 시스템을 구축할 때 여전히 도움이 되고, 새로운 의존성 설계 모델은 기존 설계 모델을 변형함으로써 자연스럽게 bzlMod 도입을 유도하고 있습니다. 즉, 새로운 의존성 설계 모델을 이해하는데 도움이 됩니다. 또한 많은 기존 빌드 시스템이 이전 방식으로 운영되고 있습니다. 예제에 사용할 폴더 구조 이해하기 폴.. 더보기
bazel 빌드시스템 설치하기 개요 bazel 빌드 시스템은 빠른 업데이트 전략을 사용한다. major version를 매년 한 단계씩 버전업하고, minor version를 매달 한단계식 버전업하고 있다. 따라서 우리가 설치할 bazel 빌드 시스템 버전은 최신 빌드 버전을 자동화 해주는 bazelisk 프로그램이 적당하다. 빌드하는 과정에서 업로드된 최신 버전이 존재하면 설치하고 빌드를 수행한다. 설치하기 별도로 제공하는 설치 프로그램보다 console 프로그램으로 설치하길 권장한다. console 프로그램을 통한 설치가 더 안정적이고, 추가 작업도 필요없어 깔끔하다. 빌드 시스템을 설치하기 전에 git 프로그램을 console 프로그램으로 설치해주길 권한다. 너무나 당연한 내용이지만, 최소한 하나 이상의 C++ 컴파일러가 설치되.. 더보기