본문 바로가기

전체 글

StarLark 언어로 만들어 보는 기본 예제 MD5 파일 생성하기 개요 이번 게시글에서는 StarLark 언어를 사용해 md5 파일 생성하는 예제를 구현한다. 본 예제를 통해 사용자 정의 rule를 만들고, rule 기능을 수행하는 implementation function를 구현한다. 풀어야 할 과제 다음과 같은 파일로 구성된다. main.cc 파일의 md5 해쉬값을 생성할 것이다. .bazelrc BUILD.bazel main.cc make_md5_binary.bzl MODULE.bazelconsole 창에 아래 명령어를 입력하면 윈도우 환경에서 해쉬값을 얻어낼 수 있다. [윈도우] certutil -hashfile main.cc md5 [윈도우] bash.exe -c "md5sum main.cc" [우분투] md5sum main.cc결과 화면 CMD> certut.. 더보기
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 파일을 생성.. 더보기
윈도우 사용자(user) 폴더 이름만 변경하기 개요 외국에서 만든 프로그램을 설치하는 과정에서 윈도우 사용자 폴더가 영어가 아니라, 설치가 불가능한 경우가 있다. 본인의 경우, Open3D, bazelisk 설치 과정에서 실패가 발생했다. 문제의 원인을 찾다보니 바로 윈도우 사용자 폴더 이름이 영어가 아니라서 발생한 문제였다. 기존 작업용 윈도우를 새로 설치할 수도 없어서, 영어 이름 계정을 추가해 임시 방편으로 해결했다. 비 작업용 컴퓨터는 윈도우를 영문 계정으로 새로 설치했다. 잊을만 하면 발생하는 비슷한 문제를 해결하기 위한 방법으로 "윈도우 사용자 폴더 이름만 딱 영어로 바꿀 방법"을 찾았다. 앞으로 설치될 프로그램에게는 문제가 없지만, 실제 사용자 폴더만 변경하기 때문에, 이전 폴더 이름을 내부 정보로 사용하는 다른 프로그램이 비정상으로 작.. 더보기
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 도입을 유도하고 있습니다. 즉, 새로운 의존성 설계 모델을 이해하는데 도움이 됩니다. 또한 많은 기존 빌드 시스템이 이전 방식으로 운영되고 있습니다. 예제에 사용할 폴더 구조 이해하기 폴.. 더보기