Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[CBRD-25784] Support Clang and GCC-14 Compilers #5766

Open
wants to merge 4 commits into
base: develop
Choose a base branch
from

Conversation

vimkim
Copy link
Contributor

@vimkim vimkim commented Jan 4, 2025

http://jira.cubrid.org/browse/CBRD-25784

Purpose


새로운 컴파일러 CLANG 14 및 18 버전에 대한 지원을 추가하여 개발자의 생산성을 향상시키고자 합니다. CLANG은 더 명확한 에러 메시지, 빠른 컴파일 속도, 향상된 정적 분석 도구를 제공하는 장점이 있습니다.

또한, 발생하는 컴파일 문제를 해결하는 과정에서 GCC/G++14의 빌드 실패 문제도 동시에 해결되었습니다.

Implementation


  1. CMakeLists.txt 수정

    • gcc만 허용하던 컴파일러 체크 로직에 CLANG 컴파일러 조건 추가
  2. flashback.h 수정

  3. xasl_stream.hpp 수정

    • stx_restore 함수에 누락된 static 키워드 추가하여 함수 선언과 정의의 일관성 확보

Remarks


  • CLANG 14 및 18 버전에서 성공적으로 컴파일 되는 것을 확인
  • 기존 gcc 컴파일러 지원은 그대로 유지
  • 모든 기존 테스트 케이스 통과 확인
  • 컴파일러 호환성을 위한 최소한의 코드 수정으로 안정성 확보

테스트 환경 1

OS: Ubuntu jammy 22.04 x86_64
Kernel: Linux 5.15.167.4-microsoft-standard-WSL2
Ubuntu clang version 14.0.0-1ubuntu1.1
Target: x86_64-pc-linux-gnu

테스트 환경 2

OS: Arch Linux x86_64
Kernel: Linux 6.12.8-arch1-1
clang version 18.1.8
Target: x86_64-pc-linux-gnu

테스트 환경 3

OS: Rocky Linux 8.10 x86_64
Kernel: Linux 3.10.0-1160.31.1.el7.x86_64
clang version 18.1.8 (Red Hat 18.1.8-1.module+el8.10.0+1875+4f0b06db)
Target: x86_64-redhat-linux-gnu

Remarks

이 PR은 CUBRID의 기존 컴파일 에러를 해결하여 최신 GCC/G++14 컴파일러로의 빌드를 가능하게 합니다.

#5243

기존 PR #5243을 통해 GCC 8에서 GCC 11, 13까지 컴파일 지원이 확장되었으나, GCC 14에서는 Clang과 유사한 컴파일 에러가 발생했었습니다. 이번 PR을 통해 해당 문제가 해결되어 최신 GCC/G++ 14 컴파일러로도 CUBRID를 성공적으로 빌드할 수 있게 되었습니다.

CMakeLists.txt Outdated
Comment on lines 256 to 258
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
else()
message(FATAL_ERROR "We currently do not support ${CMAKE_CXX_COMPILER_ID} compiler")
Copy link
Contributor Author

@vimkim vimkim Jan 6, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

큐브리드 CMake 파일 컨벤션 상, elseif 조건이 추가되면 else() 괄호 안을 공백 으로 변경해 작성하는 것으로 보임.

Comment on lines 96 to 98
template <typename T>
void stx_restore (THREAD_ENTRY *thread_p, char *&ptr, T *&target);
static void stx_restore (THREAD_ENTRY *thread_p, char *&ptr, T *&target);

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

image
같은 파일 121번째 줄, stx_restore의 function definition에는 static이 명시되어 있음.
그러나 function declaration 에는 static이 없어 최신 컴파일러 버전에서 오류로 인식됨.

@vimkim vimkim requested a review from hgryoo January 6, 2025 02:23
@vimkim vimkim marked this pull request as ready for review January 7, 2025 00:57
@hornetmj
Copy link
Contributor

@vimkim build.sh을 이용할 때 컴파일러를 지정할 수 있나요? 해당 기능 역시 정리되어 이슈에 기술되면 좋겠습니다.

@vimkim vimkim changed the title [CBRD-25784] Support Clang Compiler [CBRD-25784] Support Clang and GCC-14 Compiler Jan 14, 2025
@vimkim vimkim changed the title [CBRD-25784] Support Clang and GCC-14 Compiler [CBRD-25784] Support Clang and GCC-14 Compilers Jan 14, 2025
@vimkim
Copy link
Contributor Author

vimkim commented Jan 14, 2025

@vimkim build.sh을 이용할 때 컴파일러를 지정할 수 있나요? 해당 기능 역시 정리되어 이슈에 기술되면 좋겠습니다.

build.sh에서 컴파일러 지정 방법

현재는 다음 명령어로 clang 컴파일러를 사용한 빌드가 가능합니다:

CFLAGS='-Wno-int-conversion -Wno-implicit-function-declaration -w' \
CXXFLAGS='-Wno-c++11-narrowing -Wno-non-pod-varargs -w' \
CC=clang CXX=clang++ \
./build.sh -m debug build

현재 상황 설명

  • 최신 컴파일러에서 일부 경고(warning)가 오류(error)로 격상되었습니다
  • 이러한 오류들은 -w 옵션만으로는 비활성화할 수 없어 개별 플래그로 명시해야 합니다
  • 현재는 표준적인 방식은 아니지만, 위 명령어로 빌드가 가능합니다

개선 계획

코드 분석 결과, 대부분의 문제가 간단히 해결 가능한 것으로 확인되었습니다. 버그 수정 후에는 다음과 같이 간단한 명령어로도 빌드가 가능해질 예정입니다:

CFLAGS='-Wno-int-conversion' CC=clang CXX=clang++ ./build.sh -m debug build

@hornetmj
Copy link
Contributor

@vimkim 다음과 같이 제공된다면 사용자 입장에서 보다 편리하게 사용할 수 있을 것 같습니다.

  1. build.sh --complier 옵션(가칭) 제공
    • build.sh # gcc default
    • build.sh --complier=gcc
    • build.sh --complier=clang # default clang 버전
      • clang 설정 시 build.sh 내부에서 필요한 환경변수 설정
    • build.sh --complier=clang14
    • build.sh --complier=clang18
  2. build.sh -h
    • --complier 옵션에 대한 help 메시지 제공

@vimkim vimkim self-assigned this Jan 20, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants