This is an automated email from the ASF dual-hosted git repository.
dongjoon pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/orc.git
The following commit(s) were added to refs/heads/main by this push:
new 7674f4335 ORC-2008: [C++] Simplify CMake script
7674f4335 is described below
commit 7674f4335d2124af5fab178e55a838b03035011e
Author: Gang Wu <[email protected]>
AuthorDate: Thu Sep 25 22:52:45 2025 -0700
ORC-2008: [C++] Simplify CMake script
### What changes were proposed in this pull request?
- Remove unnecessary compiler checks.
- Consolidate CMake compile options.
- Improve include header settings.
### Why are the changes needed?
Current CMake script is a little bit messy and hard to understand.
### How was this patch tested?
Tested it locally and all CIs should pass.
### Was this patch authored or co-authored using generative AI tooling?
No
Closes #2414 from wgtmac/simplify_cmake.
Authored-by: Gang Wu <[email protected]>
Signed-off-by: Dongjoon Hyun <[email protected]>
---
CMakeLists.txt | 56 +++------------------------------
c++/src/CMakeLists.txt | 8 +++--
c++/test/CMakeLists.txt | 11 -------
cmake_modules/CheckSourceCompiles.cmake | 2 --
cmake_modules/ThirdpartyToolchain.cmake | 2 ++
tools/src/CMakeLists.txt | 14 ++-------
tools/test/CMakeLists.txt | 6 ----
7 files changed, 15 insertions(+), 84 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5931e3553..9044afb08 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -102,69 +102,23 @@ SET(CPACK_GENERATOR "TGZ")
SET(CPACK_PACKAGE_VENDOR "Apache ORC")
SET(CPACK_PACKAGE_CONTACT "Apache ORC <[email protected]>")
-INCLUDE(CPack)
-INCLUDE(ExternalProject)
-
+# Compiler specific flags
+set(CMAKE_CXX_STANDARD 17)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
if (BUILD_POSITION_INDEPENDENT_LIB)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
endif ()
-
-#
-# Compiler specific flags
-#
-# This ensures that things like c++17 get passed correctly
-if(NOT DEFINED CMAKE_CXX_STANDARD)
- set(CMAKE_CXX_STANDARD 17)
-elseif(${CMAKE_CXX_STANDARD} VERSION_LESS 17)
- message(FATAL_ERROR "Cannot set a CMAKE_CXX_STANDARD smaller than 17")
-endif()
-# We require a C++17 compliant compiler
-set(CMAKE_CXX_STANDARD_REQUIRED ON)
if (NOT MSVC)
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g -fno-omit-frame-pointer")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 -g -DNDEBUG -fno-omit-frame-pointer")
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")
endif ()
message(STATUS "compiler ${CMAKE_CXX_COMPILER_ID} version
${CMAKE_CXX_COMPILER_VERSION}")
-if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
- if (CMAKE_CXX_COMPILER_VERSION STREQUAL "" OR CMAKE_CXX_COMPILER_VERSION
VERSION_LESS "5.0")
- message(FATAL_ERROR "A c++17-compliant compiler is required, please use at
least Clang 5")
- else ()
- set (CXX17_FLAGS "-std=c++17")
- endif ()
- set (WARN_FLAGS "-Wall -Wextra")
- if (STOP_BUILD_ON_WARNING)
- set (WARN_FLAGS "${WARN_FLAGS} -Werror")
- endif ()
-elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
- if (CMAKE_CXX_COMPILER_VERSION STREQUAL "" OR CMAKE_CXX_COMPILER_VERSION
VERSION_LESS "5.0")
- message(FATAL_ERROR "A c++17-compliant compiler is required, please use at
least GCC 5")
- else ()
- set (CXX17_FLAGS "-std=c++17")
- endif ()
- set (WARN_FLAGS "-Wall -Wextra")
- if (STOP_BUILD_ON_WARNING)
- set (WARN_FLAGS "${WARN_FLAGS} -Werror")
- endif ()
-elseif (MSVC)
- include(CheckCXXCompilerFlag)
- CHECK_CXX_COMPILER_FLAG("/std:c++17" CPP17_FLAG_SUPPORTED)
- if (CPP17_FLAG_SUPPORTED)
- add_compile_options("/std:c++17")
- else ()
- message(FATAL_ERROR "A c++17-compliant compiler is required")
- endif ()
- add_definitions (-D_SCL_SECURE_NO_WARNINGS)
- add_definitions (-D_CRT_SECURE_NO_WARNINGS)
- add_definitions (-D_CRT_NONSTDC_NO_DEPRECATE) # The POSIX name for this item
is deprecated
- set (WARN_FLAGS "${WARN_FLAGS} -wd4521") # multiple copy constructors
specified
- set (WARN_FLAGS "${WARN_FLAGS} -wd4146") # unary minus operator applied to
unsigned type, result still unsigned
-endif ()
-# Include sanitizer configuration
-INCLUDE(OrcSanitizers)
enable_testing()
+INCLUDE(CPack)
+INCLUDE(OrcSanitizers)
INCLUDE(GNUInstallDirs) # Put it before ThirdpartyToolchain to make
CMAKE_INSTALL_LIBDIR available.
if (ORC_PACKAGE_KIND STREQUAL "vcpkg")
diff --git a/c++/src/CMakeLists.txt b/c++/src/CMakeLists.txt
index ae93e67d6..8cfc33dda 100644
--- a/c++/src/CMakeLists.txt
+++ b/c++/src/CMakeLists.txt
@@ -15,8 +15,6 @@
# specific language governing permissions and limitations
# under the License.
-set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX17_FLAGS} ${WARN_FLAGS}")
-
INCLUDE(CheckCXXSourceCompiles)
CHECK_CXX_SOURCE_COMPILES("
@@ -223,12 +221,18 @@ target_include_directories (orc
PUBLIC
$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/c++/include>
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/c++/include>
+ $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/c++/src>
+ $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/c++/src>
PRIVATE
${CMAKE_CURRENT_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}
${LIBHDFSPP_INCLUDE_DIR}
)
+if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL
"GNU")
+ target_compile_options(orc PRIVATE -Wall -Wextra
$<$<BOOL:${STOP_BUILD_ON_WARNING}>:-Werror>)
+endif ()
+
if (BUILD_LIBHDFSPP)
target_compile_definitions(orc PUBLIC -DBUILD_LIBHDFSPP)
endif (BUILD_LIBHDFSPP)
diff --git a/c++/test/CMakeLists.txt b/c++/test/CMakeLists.txt
index 3261fedde..374cb45b2 100644
--- a/c++/test/CMakeLists.txt
+++ b/c++/test/CMakeLists.txt
@@ -15,15 +15,6 @@
# specific language governing permissions and limitations
# under the License.
-set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX17_FLAGS} ${WARN_FLAGS}")
-
-add_library (orc-test-include INTERFACE)
-target_include_directories (orc-test-include INTERFACE
- ${PROJECT_BINARY_DIR}/c++/include
- ${PROJECT_BINARY_DIR}/c++/src
- ${PROJECT_SOURCE_DIR}/c++/src
-)
-
if(BUILD_ENABLE_AVX512)
set(SIMD_TEST_SRCS TestRleVectorDecoder.cc)
endif(BUILD_ENABLE_AVX512)
@@ -77,7 +68,6 @@ target_link_libraries (orc-test
orc::zlib
orc::gtest
orc::gmock
- orc-test-include
)
add_executable (create-test-files
@@ -87,7 +77,6 @@ add_executable (create-test-files
target_link_libraries (create-test-files
orc
orc::protobuf
- orc-test-include
)
if (TEST_VALGRIND_MEMCHECK)
diff --git a/cmake_modules/CheckSourceCompiles.cmake
b/cmake_modules/CheckSourceCompiles.cmake
index 374af9297..d2095395e 100644
--- a/cmake_modules/CheckSourceCompiles.cmake
+++ b/cmake_modules/CheckSourceCompiles.cmake
@@ -15,8 +15,6 @@
# specific language governing permissions and limitations
# under the License.
-set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX17_FLAGS} ${WARN_FLAGS}")
-
INCLUDE(CheckCXXSourceCompiles)
CHECK_CXX_SOURCE_COMPILES("
diff --git a/cmake_modules/ThirdpartyToolchain.cmake
b/cmake_modules/ThirdpartyToolchain.cmake
index 8841c2c34..37c3311ec 100644
--- a/cmake_modules/ThirdpartyToolchain.cmake
+++ b/cmake_modules/ThirdpartyToolchain.cmake
@@ -15,6 +15,8 @@
# specific language governing permissions and limitations
# under the License.
+INCLUDE(ExternalProject)
+
set(ORC_VENDOR_DEPENDENCIES)
set(ORC_SYSTEM_DEPENDENCIES)
set(ORC_INSTALL_INTERFACE_TARGETS)
diff --git a/tools/src/CMakeLists.txt b/tools/src/CMakeLists.txt
index d247f900e..81e2da6f1 100644
--- a/tools/src/CMakeLists.txt
+++ b/tools/src/CMakeLists.txt
@@ -34,19 +34,9 @@
# executable can just be removed, as it looks like it was written for testing
# alone.
-set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g ${CXX17_FLAGS} ${WARN_FLAGS}")
-
add_library (orc-tools-common INTERFACE)
-target_include_directories (orc-tools-common INTERFACE
- ${PROJECT_BINARY_DIR}/c++/include
- ${PROJECT_BINARY_DIR}/c++/src
- ${PROJECT_SOURCE_DIR}/c++/include
- ${PROJECT_SOURCE_DIR}/c++/src
-)
-target_link_libraries (orc-tools-common INTERFACE
- orc
- ${CMAKE_THREAD_LIBS_INIT}
-)
+target_compile_options(orc-tools-common INTERFACE -g)
+target_link_libraries (orc-tools-common INTERFACE orc
${CMAKE_THREAD_LIBS_INIT})
add_executable (orc-contents
FileContents.cc
diff --git a/tools/test/CMakeLists.txt b/tools/test/CMakeLists.txt
index 39a6782bd..202ddb2e0 100644
--- a/tools/test/CMakeLists.txt
+++ b/tools/test/CMakeLists.txt
@@ -15,8 +15,6 @@
# specific language governing permissions and limitations
# under the License.
-set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX17_FLAGS} ${WARN_FLAGS}")
-
add_executable (tool-test
gzip.cc
TestCSVFileImport.cc
@@ -38,10 +36,6 @@ target_link_libraries (tool-test
)
target_include_directories(tool-test PRIVATE
- ${PROJECT_BINARY_DIR}/c++/include
- ${PROJECT_BINARY_DIR}/c++/src
- ${PROJECT_SOURCE_DIR}/c++/include
- ${PROJECT_SOURCE_DIR}/c++/src
${PROJECT_SOURCE_DIR}/tools-c++/src
)