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
 )
 

Reply via email to