Skip to content

Commit 50da5cc

Browse files
[Tool] Enable default-toolchain with CMake (StarRocks#70290)
Signed-off-by: alvin-celerdata <alvin.zhao@celerdata.com>
1 parent d623015 commit 50da5cc

File tree

6 files changed

+132
-4
lines changed

6 files changed

+132
-4
lines changed

be/CMakeLists.txt

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,53 @@
1717

1818
cmake_minimum_required(VERSION 3.16)
1919

20+
set(STARROCKS_PRECONFIG_MODE "AUTO" CACHE STRING "Preconfigure bootstrap mode: AUTO, ON, or OFF")
21+
set_property(CACHE STARROCKS_PRECONFIG_MODE PROPERTY STRINGS AUTO ON OFF)
22+
set(STARROCKS_PRECONFIG_MODE_NORMALIZED "${STARROCKS_PRECONFIG_MODE}")
23+
string(TOUPPER "${STARROCKS_PRECONFIG_MODE_NORMALIZED}" STARROCKS_PRECONFIG_MODE_NORMALIZED)
24+
25+
set(STARROCKS_HAS_CMAKE_COMPILER_OVERRIDE OFF)
26+
if ((DEFINED CMAKE_C_COMPILER AND NOT "${CMAKE_C_COMPILER}" STREQUAL "") OR
27+
(DEFINED CMAKE_CXX_COMPILER AND NOT "${CMAKE_CXX_COMPILER}" STREQUAL ""))
28+
set(STARROCKS_HAS_CMAKE_COMPILER_OVERRIDE ON)
29+
endif()
30+
31+
set(STARROCKS_USE_PRECONFIG OFF)
32+
if (STARROCKS_PRECONFIG_MODE_NORMALIZED STREQUAL "ON")
33+
set(STARROCKS_USE_PRECONFIG ON)
34+
elseif (STARROCKS_PRECONFIG_MODE_NORMALIZED STREQUAL "AUTO")
35+
if (NOT DEFINED ENV{STARROCKS_HOME} OR "$ENV{STARROCKS_HOME}" STREQUAL "" OR
36+
NOT DEFINED ENV{STARROCKS_THIRDPARTY} OR "$ENV{STARROCKS_THIRDPARTY}" STREQUAL "" OR
37+
((NOT STARROCKS_HAS_CMAKE_COMPILER_OVERRIDE) AND
38+
(((NOT DEFINED ENV{CC} OR "$ENV{CC}" STREQUAL "") OR
39+
(NOT DEFINED ENV{CXX} OR "$ENV{CXX}" STREQUAL "")) AND
40+
(NOT DEFINED ENV{STARROCKS_GCC_HOME} OR "$ENV{STARROCKS_GCC_HOME}" STREQUAL "") AND
41+
(NOT DEFINED ENV{STARROCKS_LLVM_HOME} OR "$ENV{STARROCKS_LLVM_HOME}" STREQUAL ""))))
42+
set(STARROCKS_USE_PRECONFIG ON)
43+
endif()
44+
elseif (NOT STARROCKS_PRECONFIG_MODE_NORMALIZED STREQUAL "OFF")
45+
message(FATAL_ERROR
46+
"Invalid STARROCKS_PRECONFIG_MODE='${STARROCKS_PRECONFIG_MODE}'. Expected AUTO, ON, or OFF.")
47+
endif()
48+
49+
if (STARROCKS_USE_PRECONFIG)
50+
include("${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/BootstrapEnv.cmake")
51+
endif()
52+
2053
# set CMAKE_C_COMPILER, this must set before project command
21-
if (DEFINED ENV{CC} AND DEFINED ENV{CXX})
54+
if (STARROCKS_HAS_CMAKE_COMPILER_OVERRIDE)
55+
elseif (DEFINED ENV{CC} AND NOT "$ENV{CC}" STREQUAL "" AND DEFINED ENV{CXX} AND NOT "$ENV{CXX}" STREQUAL "")
2256
set(CMAKE_C_COMPILER "$ENV{CC}")
2357
set(CMAKE_CXX_COMPILER "$ENV{CXX}")
24-
elseif (DEFINED ENV{STARROCKS_GCC_HOME})
58+
elseif (DEFINED ENV{STARROCKS_GCC_HOME} AND NOT "$ENV{STARROCKS_GCC_HOME}" STREQUAL "")
2559
# prefer GCC
2660
set(CMAKE_C_COMPILER "$ENV{STARROCKS_GCC_HOME}/bin/gcc")
2761
set(CMAKE_CXX_COMPILER "$ENV{STARROCKS_GCC_HOME}/bin/g++")
28-
elseif (DEFINED ENV{STARROCKS_LLVM_HOME})
62+
elseif (DEFINED ENV{STARROCKS_LLVM_HOME} AND NOT "$ENV{STARROCKS_LLVM_HOME}" STREQUAL "")
2963
set(CMAKE_C_COMPILER "$ENV{STARROCKS_LLVM_HOME}/bin/clang")
3064
set(CMAKE_CXX_COMPILER "$ENV{STARROCKS_LLVM_HOME}/bin/clang++")
3165
else()
32-
message(FATAL_ERROR "STARROCKS_GCC_HOME environment variable is not set")
66+
message(FATAL_ERROR "Neither STARROCKS_GCC_HOME nor STARROCKS_LLVM_HOME environment variable is set")
3367
endif()
3468

3569
# disable pkgconfig searching libraries, all libraries are static imported
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# Copyright 2021-present StarRocks, Inc. All rights reserved.
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# https://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
set(STARROCKS_DARWIN_THIRDPARTY "${STARROCKS_HOME_DIR}/thirdparty")
16+
set(STARROCKS_DARWIN_LLVM_HOME "/opt/homebrew/opt/llvm")
17+
18+
starrocks_set_env_default(STARROCKS_HOME "${STARROCKS_HOME_DIR}" "repo root")
19+
starrocks_set_env_default(STARROCKS_THIRDPARTY "${STARROCKS_DARWIN_THIRDPARTY}" "repo-local thirdparty")
20+
21+
if (NOT STARROCKS_HAS_CMAKE_COMPILER_OVERRIDE AND EXISTS "${STARROCKS_DARWIN_LLVM_HOME}/bin/clang")
22+
starrocks_set_env_default(STARROCKS_LLVM_HOME "${STARROCKS_DARWIN_LLVM_HOME}" "Homebrew LLVM")
23+
endif()
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# Copyright 2021-present StarRocks, Inc. All rights reserved.
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# https://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
execute_process(COMMAND uname -s
16+
OUTPUT_VARIABLE STARROCKS_HOST_SYSTEM_NAME
17+
OUTPUT_STRIP_TRAILING_WHITESPACE)
18+
execute_process(COMMAND uname -m
19+
OUTPUT_VARIABLE STARROCKS_HOST_SYSTEM_PROCESSOR
20+
OUTPUT_STRIP_TRAILING_WHITESPACE)
21+
22+
get_filename_component(STARROCKS_BE_DIR "${CMAKE_CURRENT_LIST_DIR}/.." ABSOLUTE)
23+
get_filename_component(STARROCKS_HOME_DIR "${STARROCKS_BE_DIR}/.." ABSOLUTE)
24+
25+
macro(starrocks_set_env_default ENV_NAME ENV_VALUE ENV_REASON)
26+
if (NOT DEFINED ENV{${ENV_NAME}} OR "$ENV{${ENV_NAME}}" STREQUAL "")
27+
set(ENV{${ENV_NAME}} "${ENV_VALUE}")
28+
message(STATUS "Preconfig default: ${ENV_NAME}=${ENV_VALUE} (${ENV_REASON})")
29+
endif()
30+
endmacro()
31+
32+
if (STARROCKS_HOST_SYSTEM_NAME STREQUAL "Darwin" AND STARROCKS_HOST_SYSTEM_PROCESSOR STREQUAL "arm64")
33+
include("${CMAKE_CURRENT_LIST_DIR}/BootstrapDarwinEnv.cmake")
34+
elseif (STARROCKS_HOST_SYSTEM_NAME STREQUAL "Linux")
35+
include("${CMAKE_CURRENT_LIST_DIR}/BootstrapLinuxEnv.cmake")
36+
endif()
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# Copyright 2021-present StarRocks, Inc. All rights reserved.
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# https://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
set(STARROCKS_LINUX_THIRDPARTY "${STARROCKS_HOME_DIR}/thirdparty")
16+
set(STARROCKS_LINUX_THIRDPARTY_REASON "repo-local thirdparty")
17+
if (EXISTS "/var/local/thirdparty/installed")
18+
set(STARROCKS_LINUX_THIRDPARTY "/var/local/thirdparty")
19+
set(STARROCKS_LINUX_THIRDPARTY_REASON "shared /var/local/thirdparty")
20+
endif()
21+
22+
starrocks_set_env_default(STARROCKS_HOME "${STARROCKS_HOME_DIR}" "repo root")
23+
starrocks_set_env_default(STARROCKS_THIRDPARTY "${STARROCKS_LINUX_THIRDPARTY}" "${STARROCKS_LINUX_THIRDPARTY_REASON}")
24+
25+
find_program(STARROCKS_LINUX_GCC_EXECUTABLE NAMES gcc)
26+
if (NOT STARROCKS_HAS_CMAKE_COMPILER_OVERRIDE AND STARROCKS_LINUX_GCC_EXECUTABLE)
27+
get_filename_component(STARROCKS_LINUX_GCC_EXECUTABLE_REALPATH "${STARROCKS_LINUX_GCC_EXECUTABLE}" REALPATH)
28+
get_filename_component(STARROCKS_LINUX_GCC_BIN_DIR "${STARROCKS_LINUX_GCC_EXECUTABLE_REALPATH}" DIRECTORY)
29+
get_filename_component(STARROCKS_LINUX_GCC_HOME "${STARROCKS_LINUX_GCC_BIN_DIR}/.." ABSOLUTE)
30+
if (EXISTS "${STARROCKS_LINUX_GCC_HOME}/bin/gcc" AND EXISTS "${STARROCKS_LINUX_GCC_HOME}/bin/g++")
31+
starrocks_set_env_default(STARROCKS_GCC_HOME "${STARROCKS_LINUX_GCC_HOME}" "system GCC")
32+
endif()
33+
endif()

build.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -527,6 +527,7 @@ if [ ${BUILD_BE} -eq 1 ] || [ ${BUILD_FORMAT_LIB} -eq 1 ] ; then
527527

528528

529529
${CMAKE_CMD} -G "${CMAKE_GENERATOR}" \
530+
-DSTARROCKS_PRECONFIG_MODE=OFF \
530531
-DSTARROCKS_THIRDPARTY=${STARROCKS_THIRDPARTY} \
531532
-DSTARROCKS_HOME=${STARROCKS_HOME} \
532533
-DSTARLET_INSTALL_DIR=${STARLET_INSTALL_DIR} \

run-be-ut.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,7 @@ fi
264264

265265
cd ${CMAKE_BUILD_DIR}
266266
${CMAKE_CMD} -G "${CMAKE_GENERATOR}" \
267+
-DSTARROCKS_PRECONFIG_MODE=OFF \
267268
-DSTARROCKS_THIRDPARTY=${STARROCKS_THIRDPARTY}\
268269
-DSTARROCKS_HOME=${STARROCKS_HOME} \
269270
-DCMAKE_CXX_COMPILER_LAUNCHER=$CCACHE \

0 commit comments

Comments
 (0)