diff --git a/CMakeLists.txt b/CMakeLists.txt index e37676441ac97..11de5b7397ad6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -387,8 +387,8 @@ install(FILES ${CMAKE_BINARY_DIR}/etc/gitinfo.txt DESTINATION ${CMAKE_INSTALL_SY #---Recurse into the given subdirectories. This does not actually cause another cmake executable # to run. The same process will walk through the project's entire directory structure. +add_subdirectory (builtins/zip) # hard coded C builtin for core/zip add_subdirectory (core) -add_subdirectory (builtins/zip) # hard coded builtin for core/zip add_subdirectory (math) add_subdirectory (hist) add_subdirectory (tree) diff --git a/README/ReleaseNotes/v642/index.md b/README/ReleaseNotes/v642/index.md index 7a16b865e42e2..522d8b2122e47 100644 --- a/README/ReleaseNotes/v642/index.md +++ b/README/ReleaseNotes/v642/index.md @@ -10,8 +10,6 @@ For more information, see: [http://root.cern](http://root.cern) -The following people have contributed to this new version: - The following people have contributed to this new version: Bertrand Bellenot, CERN/EP-SFT,\ @@ -69,6 +67,7 @@ Users are encouraged to export their models to ONNX and use the retained ONNX pa * Support for the AIX operating system has been removed from the codebase. This support has not been tested since the late v5 releases and the LLVM JIT is not yet supporting AIX. * The headers Htypes.h and Gtypes.h that were deprecated in ROOT 6.20 will now emit warnings and will be fully removed in ROOT 6.44. * The header GLConstants.h is no longer part of ROOT installed headers. +* The headers `ZipLZMA.h`, `ZipZSTD.h` and `ZipLZ4.h` are no longer part of ROOT installed headers. Use instead `RZip.h` methods. * The `ROOT::Math::ParamFunctionBase`, `ROOT::Math::ParamFunctorHandler` and `ROOT::Math::ParamMemFunHandler` classes in `Math/ParamFunctor.h` are removed, together with the `ParamFunctor::GetImpl()` and `ParamFunctor::SetFunction()` methods that exposed them. They implemented the type erasure that `ParamFunctor` now gets from `std::function`, mirroring what was already done for `ROOT::Math::Functor`. Constructing and calling a `ParamFunctor` is unchanged, except that the constructor from an object and one of its member functions now takes a plain pointer to the object instead of anything dereferenceable, so smart pointers are no longer accepted there. ## Build System diff --git a/builtins/zip/CMakeLists.txt b/builtins/zip/CMakeLists.txt index c01f3c2159689..4f324b128d75b 100644 --- a/builtins/zip/CMakeLists.txt +++ b/builtins/zip/CMakeLists.txt @@ -4,12 +4,42 @@ # For the licensing terms see $ROOTSYS/LICENSE. # For the list of contributors see $ROOTSYS/README/CREDITS. -target_sources(Core PRIVATE +add_library(ROOTzip STATIC) +target_sources(ROOTzip PUBLIC Bits.h # was renamed from Bits.c at https://github.com/root-project/root/commit/3b2f05c8ddf1001cc8eb05ad60b07b10af6ac293#diff-ff111e76990c56e7019ed0d837f1f615e280dc679ed393200c4f75b61094c5b7 and later split back to Bits.c in https://github.com/root-project/root/commit/25d5805abac4d408554e99aec6e49b8a671a2d96 Tailor.h # forked from 1993: zip 2.0 (https://github.com/root-project/root/blob/852600061bcacd9b255d44f6312c96b6b1e00a2d/zip/inc/Tailor.h vs https://github.com/pmqs/Info-ZIP-Family-Tree-for-Zip/blob/d25ed515bc56fae136b635d764ce8b363041aef5/tailor.h) ZIP.h # forked from 1993: zip 2.0 (https://github.com/root-project/root/blob/852600061bcacd9b255d44f6312c96b6b1e00a2d/zip/inc/ZIP.h vs https://github.com/pmqs/Info-ZIP-Family-Tree-for-Zip/blob/d25ed515bc56fae136b635d764ce8b363041aef5/zip.h) +PRIVATE Bits.c # forked from 1993: zip 2.0 (https://github.com/root-project/root/blob/852600061bcacd9b255d44f6312c96b6b1e00a2d/zip/src/Bits.c vs https://github.com/pmqs/Info-ZIP-Family-Tree-for-Zip/blob/d25ed515bc56fae136b635d764ce8b363041aef5/bits.c) ZDeflate.c # forked from 1993: zip 2.0 (https://github.com/root-project/root/blob/852600061bcacd9b255d44f6312c96b6b1e00a2d/zip/src/Deflate.c vs https://github.com/pmqs/Info-ZIP-Family-Tree-for-Zip/blob/d25ed515bc56fae136b635d764ce8b363041aef5/deflate.c) ZInflate.c # forked from 1994: version c14o / unzip-5.12 (https://github.com/root-project/root/blob/852600061bcacd9b255d44f6312c96b6b1e00a2d/zip/src/Inflate.c vs https://github.com/freebsd/freebsd-src/commit/37c32e9f3a0dc8ba9d0b7cd06742502dcba1b457 or https://stuff.mit.edu/afs/sipb.mit.edu/project/sipbsrc/i386_nbsd1/unzip-5.12/inflate.c) ZTrees.c # forked from 1993: zip 2.0 (https://github.com/root-project/root/blob/852600061bcacd9b255d44f6312c96b6b1e00a2d/zip/src/Trees.c vs https://github.com/pmqs/Info-ZIP-Family-Tree-for-Zip/blob/d25ed515bc56fae136b635d764ce8b363041aef5/trees.c) + ZipLZMA.c # ROOT + ZipLZMA.h # ROOT, public + ZipLZ4.c # ROOT + ZipLZ4.h # ROOT, public + ZipZSTD.cxx # ROOT + ZipZSTD.h # ROOT, public ) + +include(CheckSourceCompiles) +check_source_compiles(CXX " +#if !defined(__linux) && defined(__linux__) && !defined(linux) && !(defined(__CYGWIN__) && defined(__GNUC__)) +#error \"This is not Linux\" +#endif +int main() { return 0; } +" IS_LINUX) +add_library(ROOTtls INTERFACE) +target_sources(ROOTtls PUBLIC ${CMAKE_SOURCE_DIR}/core/foundation/inc) # TODO move to builtins directory +target_compile_definitions(ROOTtls INTERFACE +$<$:R__HAS_PTHREAD> +$<$:R__LINUX> +$<$:R__FBSD> +$<$:R__WIN32> +$<$:R__SOLARIS> +) +target_include_directories(ROOTtls INTERFACE ${CMAKE_SOURCE_DIR}/core/foundation/inc) # TODO move to builtins. could be instead a fileSET. + +target_include_directories(ROOTzip PUBLIC .) +target_link_libraries(ROOTzip PRIVATE xxHash::xxHash LibLZMA::LibLZMA LZ4::LZ4 ZSTD::ZSTD ZLIB::ZLIB ROOTtls) +set_target_properties(ROOTzip PROPERTIES POSITION_INDEPENDENT_CODE ON) diff --git a/builtins/zip/ZInflate.c b/builtins/zip/ZInflate.c index 844240a6dc2eb..ce4ab7ea0ff66 100644 --- a/builtins/zip/ZInflate.c +++ b/builtins/zip/ZInflate.c @@ -4,7 +4,7 @@ #include #include -#ifdef WIN32 +#ifdef _WIN32 #define __STDC__ 1 #endif #ifdef __MWERKS__ @@ -18,7 +18,6 @@ static const int qflag = 0; #include "zlib.h" -#include "RConfigure.h" #include "ZipLZMA.h" #include "ZipLZ4.h" diff --git a/core/lz4/src/ZipLZ4.cxx b/builtins/zip/ZipLZ4.c similarity index 92% rename from core/lz4/src/ZipLZ4.cxx rename to builtins/zip/ZipLZ4.c index 6fdafb851f5ba..3fb9829f0e9f1 100644 --- a/core/lz4/src/ZipLZ4.cxx +++ b/builtins/zip/ZipLZ4.c @@ -9,13 +9,12 @@ *************************************************************************/ #include "ZipLZ4.h" +#include "unlikely.h" -#include "ROOT/RConfig.hxx" - -#include -#include -#include -#include +#include +#include +#include +#include #include #include #include @@ -79,7 +78,7 @@ void R__zipLZ4(int cxlevel, int *srcsize, const char *src, int *tgtsize, char *t tgt[8] = (char)((in_size >> 16) & 0xff); // Write out checksum. - XXH64_canonicalFromHash(reinterpret_cast(tgt + kChecksumOffset), checksumResult); + XXH64_canonicalFromHash((XXH64_canonical_t *)(tgt + kChecksumOffset), checksumResult); *irep = (int)returnStatus + kHeaderSize; } @@ -110,8 +109,7 @@ void R__unzipLZ4(int *srcsize, const unsigned char *src, int *tgtsize, unsigned // what size of chunks does interleaving (avoiding two fetches from RAM) improve enough for the // extra function call costs? NOTE that ROOT limits the buffer size to 16MB. XXH64_hash_t checksumResult = XXH64(src + kHeaderSize, inputBufferSize, 0); - XXH64_hash_t checksumFromFile = - XXH64_hashFromCanonical(reinterpret_cast(src + kChecksumOffset)); + XXH64_hash_t checksumFromFile = XXH64_hashFromCanonical((const XXH64_canonical_t *)(src + kChecksumOffset)); if (R__unlikely(checksumFromFile != checksumResult)) { fprintf( diff --git a/core/lz4/inc/ZipLZ4.h b/builtins/zip/ZipLZ4.h similarity index 100% rename from core/lz4/inc/ZipLZ4.h rename to builtins/zip/ZipLZ4.h diff --git a/core/lzma/src/ZipLZMA.c b/builtins/zip/ZipLZMA.c similarity index 100% rename from core/lzma/src/ZipLZMA.c rename to builtins/zip/ZipLZMA.c diff --git a/core/lzma/inc/ZipLZMA.h b/builtins/zip/ZipLZMA.h similarity index 100% rename from core/lzma/inc/ZipLZMA.h rename to builtins/zip/ZipLZMA.h diff --git a/core/zstd/src/ZipZSTD.cxx b/builtins/zip/ZipZSTD.cxx similarity index 99% rename from core/zstd/src/ZipZSTD.cxx rename to builtins/zip/ZipZSTD.cxx index a9b6f61dfd080..27d54c8db32e3 100644 --- a/core/zstd/src/ZipZSTD.cxx +++ b/builtins/zip/ZipZSTD.cxx @@ -9,8 +9,7 @@ *************************************************************************/ #include "ZipZSTD.h" - -#include "ROOT/RConfig.hxx" +#include "unlikely.h" #include "zdict.h" #include diff --git a/core/zstd/inc/ZipZSTD.h b/builtins/zip/ZipZSTD.h similarity index 100% rename from core/zstd/inc/ZipZSTD.h rename to builtins/zip/ZipZSTD.h diff --git a/builtins/zip/unlikely.h b/builtins/zip/unlikely.h new file mode 100644 index 0000000000000..6fdd810169b1e --- /dev/null +++ b/builtins/zip/unlikely.h @@ -0,0 +1,25 @@ +#ifndef R__unlikely_h +#define R__unlikely_h + +/*---- unlikely / likely expressions -----------------------------------------*/ +// These are meant to use in cases like: +// if (R__unlikely(expression)) { ... } +// in performance-critical sections. R__unlikely / R__likely provide hints to +// the compiler code generation to heavily optimize one side of a conditional, +// causing the other branch to have a heavy performance cost. +// +// It is best to use this for conditionals that test for rare error cases or +// backward compatibility code. + +#if (__GNUC__ >= 3) || defined(__INTEL_COMPILER) +#if !defined(R__unlikely) +#define R__unlikely(expr) __builtin_expect(!!(expr), 0) +#endif +#if !defined(R__likely) +#define R__likely(expr) __builtin_expect(!!(expr), 1) +#endif +#else +#define R__unlikely(expr) expr +#define R__likely(expr) expr +#endif +#endif diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt index 3d2069d3d1d38..7e450f06c219d 100644 --- a/core/CMakeLists.txt +++ b/core/CMakeLists.txt @@ -78,9 +78,6 @@ add_subdirectory(textinput) add_subdirectory(thread) add_subdirectory(utils) add_subdirectory(zip) -add_subdirectory(lzma) -add_subdirectory(lz4) -add_subdirectory(zstd) add_subdirectory(macosx) add_subdirectory(unix) diff --git a/core/foundation/inc/ThreadLocalStorage.h b/core/foundation/inc/ThreadLocalStorage.h index 3332b392cb02f..00b8d3e76ac5f 100644 --- a/core/foundation/inc/ThreadLocalStorage.h +++ b/core/foundation/inc/ThreadLocalStorage.h @@ -57,14 +57,6 @@ #include -#ifdef __cplusplus -#include "RtypesCore.h" -#endif - -#include - -#include "RConfigure.h" - #if defined(R__MACOSX) # if defined(__clang__) && defined(MAC_OS_X_VERSION_10_7) && (defined(__x86_64__) || defined(__i386__)) # define R__HAS___THREAD @@ -81,7 +73,7 @@ #if defined(R__WIN32) # define R__HAS_DECLSPEC_THREAD #endif -#if defined(R__FBSD) +#if defined(R__FBSD) && !defined(R__HAS_PTHREAD) # define R__HAS_PTHREAD #endif @@ -130,10 +122,10 @@ template T &TTHREAD_TLS_INIT() { TTHREAD_TLS(T*) ptr = NULL; - TTHREAD_TLS(Bool_t) isInit(kFALSE); + TTHREAD_TLS(bool) isInit(false); if (!isInit) { ptr = new T; - isInit = kTRUE; + isInit = true; } return *ptr; } @@ -141,10 +133,10 @@ T &TTHREAD_TLS_INIT() { template Array &TTHREAD_TLS_INIT_ARRAY() { TTHREAD_TLS(Array*) ptr = NULL; - TTHREAD_TLS(Bool_t) isInit(kFALSE); + TTHREAD_TLS(bool) isInit(false); if (!isInit) { ptr = new Array[sizeof(Array)/sizeof(T)]; - isInit = kTRUE; + isInit = true; } return *ptr; } @@ -152,10 +144,10 @@ Array &TTHREAD_TLS_INIT_ARRAY() { template T &TTHREAD_TLS_INIT(ArgType arg) { TTHREAD_TLS(T*) ptr = NULL; - TTHREAD_TLS(Bool_t) isInit(kFALSE); + TTHREAD_TLS(bool) isInit(false); if (!isInit) { ptr = new T(arg); - isInit = kTRUE; + isInit = true; } return *ptr; } diff --git a/core/lz4/CMakeLists.txt b/core/lz4/CMakeLists.txt deleted file mode 100644 index ca23f250b59e1..0000000000000 --- a/core/lz4/CMakeLists.txt +++ /dev/null @@ -1,13 +0,0 @@ -# Copyright (C) 1995-2019, Rene Brun and Fons Rademakers. -# All rights reserved. -# -# For the licensing terms see $ROOTSYS/LICENSE. -# For the list of contributors see $ROOTSYS/README/CREDITS. - -target_sources(Core PRIVATE src/ZipLZ4.cxx) -target_link_libraries(Core PRIVATE xxHash::xxHash LZ4::LZ4) -target_include_directories(Core PUBLIC - $ -) - -ROOT_INSTALL_HEADERS() diff --git a/core/lzma/CMakeLists.txt b/core/lzma/CMakeLists.txt deleted file mode 100644 index f19eec364cb8d..0000000000000 --- a/core/lzma/CMakeLists.txt +++ /dev/null @@ -1,17 +0,0 @@ -# Copyright (C) 1995-2019, Rene Brun and Fons Rademakers. -# All rights reserved. -# -# For the licensing terms see $ROOTSYS/LICENSE. -# For the list of contributors see $ROOTSYS/README/CREDITS. - -############################################################################ -# CMakeLists.txt file for building ROOT core/lzma package -############################################################################ - -target_sources(Core PRIVATE src/ZipLZMA.c) - -target_link_libraries(Core PRIVATE LibLZMA::LibLZMA) - -target_include_directories(Core PUBLIC $) - -ROOT_INSTALL_HEADERS() diff --git a/core/zip/CMakeLists.txt b/core/zip/CMakeLists.txt index 70716436263b8..078505ad67c7b 100644 --- a/core/zip/CMakeLists.txt +++ b/core/zip/CMakeLists.txt @@ -9,8 +9,7 @@ target_sources(Core PRIVATE src/RZip.cxx ) -target_link_libraries(Core PRIVATE ZLIB::ZLIB) -target_include_directories(Core PRIVATE ../../builtins/zip) +target_link_libraries(Core PRIVATE ZLIB::ZLIB ROOTzip) target_include_directories(Core PUBLIC $ diff --git a/core/zstd/CMakeLists.txt b/core/zstd/CMakeLists.txt deleted file mode 100644 index 899fcc8dbd3e7..0000000000000 --- a/core/zstd/CMakeLists.txt +++ /dev/null @@ -1,11 +0,0 @@ -############################################################################ -# CMakeLists.txt file for building ROOT core/zstd package -############################################################################ - -target_sources(Core PRIVATE src/ZipZSTD.cxx) - -target_link_libraries(Core PRIVATE ZSTD::ZSTD) - -target_include_directories(Core PUBLIC $) - -ROOT_INSTALL_HEADERS()