From a7ff5daec854b648fa46fe74b91529d0cb02813d Mon Sep 17 00:00:00 2001
From: Guilherme Amadio <amadio@cern.ch>
Date: Thu, 15 Feb 2018 17:38:13 +0100
Subject: [PATCH] Use new xxHash and LZ4 builtins

---
 builtins/lz4/CMakeLists.txt                 |  5 +-
 cmake/modules/SearchInstalledSoftware.cmake | 73 +++++----------------
 core/CMakeLists.txt                         |  4 +-
 core/lz4/CMakeLists.txt                     | 26 ++------
 4 files changed, 29 insertions(+), 79 deletions(-)

diff --git a/builtins/lz4/CMakeLists.txt b/builtins/lz4/CMakeLists.txt
index 04ba944d715..b900957fc3d 100644
--- a/builtins/lz4/CMakeLists.txt
+++ b/builtins/lz4/CMakeLists.txt
@@ -1,5 +1,7 @@
 project(LZ4 C)
 
+find_package(xxHash REQUIRED)
+
 set(LZ4_PUBLIC_HEADERS
   lz4.h
   lz4frame.h
@@ -34,8 +36,9 @@ set(LZ4_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR} CACHE INTERNAL "")
 set(LZ4_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} CACHE INTERNAL "")
 
 add_library(lz4 STATIC ${LZ4_PUBLIC_HEADERS} ${LZ4_PRIVATE_HEADERS} ${LZ4_SOURCES})
-target_include_directories(lz4 INTERFACE $<BUILD_INTERFACE:${LZ4_INCLUDE_DIR}>)
 target_compile_options(lz4 PRIVATE -fvisibility=hidden)
+target_include_directories(lz4 INTERFACE $<BUILD_INTERFACE:${LZ4_INCLUDE_DIR}>)
+target_link_libraries(lz4 PRIVATE xxHash::xxHash)
 
 add_library(LZ4::LZ4 ALIAS lz4)
 
diff --git a/cmake/modules/SearchInstalledSoftware.cmake b/cmake/modules/SearchInstalledSoftware.cmake
index 9859882049f..a33ebd75de6 100644
--- a/cmake/modules/SearchInstalledSoftware.cmake
+++ b/cmake/modules/SearchInstalledSoftware.cmake
@@ -209,73 +209,36 @@ if(builtin_lzma)
   endif()
 endif()
 
+#---Check for xxHash-----------------------------------------------------------------
+if(NOT builtin_xxhash)
+  message(STATUS "Looking for xxHash")
+  find_package(xxHash)
+  if(NOT xxHash_FOUND)
+    message(STATUS "xxHash not found. Switching on builtin_xxhash option")
+    set(builtin_xxhash ON CACHE BOOL "" FORCE)
+  endif()
+endif()
+
+if(builtin_xxhash)
+  list(APPEND ROOT_BUILTINS xxHash)
+  add_subdirectory(builtins/xxhash)
+endif()
 
 #---Check for LZ4--------------------------------------------------------------------
 if(NOT builtin_lz4)
   message(STATUS "Looking for LZ4")
   find_package(LZ4)
-  if(LZ4_FOUND)
-  else()
+  if(NOT LZ4_FOUND)
     message(STATUS "LZ4 not found. Switching on builtin_lz4 option")
     set(builtin_lz4 ON CACHE BOOL "" FORCE)
   endif()
 endif()
-# Note: the above if-statement may change the value of builtin_lz4 to ON.
+
 if(builtin_lz4)
-  set(lz4_version v1.7.5)
-  message(STATUS "Building LZ4 version ${lz4_version} included in ROOT itself")
-  if(CMAKE_CXX_COMPILER_ID STREQUAL Clang)
-    set(LZ4_CFLAGS "-Wno-format-nonliteral")
-  elseif( CMAKE_CXX_COMPILER_ID STREQUAL Intel)
-    set(LZ4_CFLAGS "-wd188 -wd181 -wd1292 -wd10006 -wd10156 -wd2259 -wd981 -wd128 -wd3179")
-  elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
-    set(LZ4_CFLAGS "/Zl")
-  endif()
-  set(LZ4_URL ${lcgpackages}/lz4-${lz4_version}.tar.gz)
-  set(LZ4_LIBRARIES ${CMAKE_BINARY_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}lz4${CMAKE_STATIC_LIBRARY_SUFFIX})
-  if(CMAKE_MINIMUM_REQUIRED_VERSION VERSION_GREATER 3.6.99)
-    message(WARNING "Obsoleted code needs to be removed since the the minimal required version of CMake make it useless")
-  endif()
-  if(CMAKE_VERSION VERSION_LESS 3.7.0)
-    ExternalProject_Add(
-      LZ4
-      URL ${LZ4_URL}
-      URL_HASH SHA256=0190cacd63022ccb86f44fa5041dc6c3804407ad61550ca21c382827319e7e7e
-      INSTALL_DIR ${CMAKE_BINARY_DIR}
-      CONFIGURE_COMMAND ${CMAKE_COMMAND} 
-                -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-                -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
-                -DCMAKE_OSX_SYSROOT=${CMAKE_OSX_SYSROOT}
-                -DCMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}
-                -DBUILD_SHARED_LIBS=OFF
-                -DCMAKE_INSTALL_LIBDIR=lib
-                -G${CMAKE_GENERATOR}
-                <SOURCE_DIR>/contrib/cmake_unofficial
-      BUILD_COMMAND ${CMAKE_COMMAND} --build .
-      INSTALL_COMMAND ${CMAKE_COMMAND} -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR> -P cmake_install.cmake
-      LOG_DOWNLOAD 1 LOG_CONFIGURE 1 LOG_BUILD 1 LOG_INSTALL 1 BUILD_IN_SOURCE 1
-      BUILD_BYPRODUCTS ${LZ4_LIBRARIES})
-  else()
-    ExternalProject_Add(
-      LZ4
-      URL ${LZ4_URL}
-      URL_HASH SHA256=0190cacd63022ccb86f44fa5041dc6c3804407ad61550ca21c382827319e7e7e
-      INSTALL_DIR ${CMAKE_BINARY_DIR}
-      SOURCE_SUBDIR contrib/cmake_unofficial
-      CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
-                -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-                -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
-                -DCMAKE_OSX_SYSROOT=${CMAKE_OSX_SYSROOT}
-                -DCMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}
-                -DBUILD_SHARED_LIBS=OFF
-                -DCMAKE_INSTALL_LIBDIR=lib
-      LOG_DOWNLOAD 1 LOG_CONFIGURE 1 LOG_BUILD 1 LOG_INSTALL 1 BUILD_IN_SOURCE 1
-      BUILD_BYPRODUCTS ${LZ4_LIBRARIES})
-  endif()
-  set(LZ4_INCLUDE_DIR ${CMAKE_BINARY_DIR}/include)
+  list(APPEND ROOT_BUILTINS LZ4)
+  add_subdirectory(builtins/lz4)
 endif()
 
-
 #---Check for X11 which is mandatory lib on Unix--------------------------------------
 if(x11)
   message(STATUS "Looking for X11")
diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt
index b69e8201f10..fe85287a7b2 100644
--- a/core/CMakeLists.txt
+++ b/core/CMakeLists.txt
@@ -114,9 +114,9 @@ add_subdirectory(rootcling_stage1)
 ROOT_LINKER_LIBRARY(Core
                     $<TARGET_OBJECTS:BaseTROOT>
                     ${objectlibs}
-                    LIBRARIES ${PCRE_LIBRARIES} ${LZMA_LIBRARIES} ${LZ4_LIBRARIES} ZLIB::ZLIB
+                    LIBRARIES ${PCRE_LIBRARIES} ${LZMA_LIBRARIES} xxHash::xxHash LZ4::LZ4 ZLIB::ZLIB
                               ${CMAKE_DL_LIBS} ${CMAKE_THREAD_LIBS_INIT} ${corelinklibs}
-                    BUILTINS PCRE LZMA LZ4)
+                    BUILTINS PCRE LZMA)
 
 if(cling)
   add_dependencies(Core CLING)
diff --git a/core/lz4/CMakeLists.txt b/core/lz4/CMakeLists.txt
index 665b7e7ca36..ef742978e68 100644
--- a/core/lz4/CMakeLists.txt
+++ b/core/lz4/CMakeLists.txt
@@ -1,26 +1,10 @@
-############################################################################
-# CMakeLists.txt file for building ROOT core/lz4 package
-############################################################################
+find_package(LZ4 REQUIRED)
+find_package(xxHash REQUIRED)
 
-
-#---The builtin LZ4 library is built using the CMake ExternalProject standard module
-#   in cmake/modules/SearchInstalledSoftare.cmake
-
-#---Declare ZipLZ4 sources as part of libCore-------------------------------
-set(headers ${CMAKE_CURRENT_SOURCE_DIR}/inc/ZipLZ4.h)
-set(sources ${CMAKE_CURRENT_SOURCE_DIR}/src/ZipLZ4.cxx)
-
-
-foreach(dir ${LZ4_INCLUDE_DIR})
-	include_directories(${dir})
-endforeach()
+ROOT_GLOB_HEADERS(headers inc/ZipLZ4.h)
+ROOT_GLOB_SOURCES(sources src/ZipLZ4.cxx)
 
 ROOT_OBJECT_LIBRARY(Lz4 ${sources})
-target_compile_definitions(Lz4 PRIVATE ${LZ4_DEFINITIONS})
-
-if(builtin_lz4)
-  add_dependencies(Lz4 LZ4)
-endif()
+target_include_directories(Lz4 PRIVATE ${LZ4_INCLUDE_DIR} ${xxHash_INCLUDE_DIR})
 
 ROOT_INSTALL_HEADERS()
-install(FILES ${LZ4_headers} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
-- 
GitLab