blob: e378429f1eef1a319202a50de45b7c09d9dee88d [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# 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("
#include<fcntl.h>
#include<unistd.h>
int main(int,char*[]){
int f = open(\"/x/y\", O_RDONLY);
char buf[100];
return pread(f, buf, 100, 1000) == 0;
}"
HAS_PREAD
)
CHECK_CXX_SOURCE_COMPILES("
#include<time.h>
int main(int,char*[]){
struct tm time2020;
return !strptime(\"2020-02-02 12:34:56\", \"%Y-%m-%d %H:%M:%S\", &time2020);
}"
HAS_STRPTIME
)
CHECK_CXX_SOURCE_COMPILES("
int main(){
int a;
return __builtin_add_overflow(1, 2, &a);
}"
HAS_BUILTIN_OVERFLOW_CHECK
)
CHECK_CXX_SOURCE_COMPILES("
#ifdef __clang__
#pragma clang diagnostic push
#pragma clang diagnostic ignored \"-Wdeprecated\"
#pragma clang diagnostic pop
#elif defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored \"-Wdeprecated\"
#pragma GCC diagnostic pop
#elif defined(_MSC_VER)
#pragma warning( push )
#pragma warning( disable : 4996 )
#pragma warning( pop )
#else
unknownCompiler!
#endif
int main(int, char *[]) {}"
HAS_DIAGNOSTIC_PUSH
)
CHECK_CXX_SOURCE_COMPILES("
#include<cmath>
int main(int, char *[]) {
return std::isnan(1.0f);
}"
HAS_STD_ISNAN
)
CHECK_CXX_SOURCE_COMPILES("
#include<string>
int main(int, char *[]) {
double d = 5;
std::to_string(d);
}"
HAS_DOUBLE_TO_STRING
)
CHECK_CXX_SOURCE_COMPILES("
#include<cstdint>
#include<string>
int main(int, char *[]) {
int64_t d = 5;
std::to_string(d);
}"
HAS_INT64_TO_STRING
)
INCLUDE(CheckCXXSourceRuns)
CHECK_CXX_SOURCE_RUNS("
#include<time.h>
int main(int, char *[]) {
time_t t = -14210715; // 1969-07-20 12:34:45
struct tm *ptm = gmtime(&t);
return !(ptm && ptm->tm_year == 69);
}"
HAS_PRE_1970
)
CHECK_CXX_SOURCE_RUNS("
#include<stdlib.h>
#include<time.h>
int main(int, char *[]) {
setenv(\"TZ\", \"America/Los_Angeles\", 1);
tzset();
struct tm time2037;
struct tm time2038;
strptime(\"2037-05-05 12:34:56\", \"%Y-%m-%d %H:%M:%S\", &time2037);
strptime(\"2038-05-05 12:34:56\", \"%Y-%m-%d %H:%M:%S\", &time2038);
return (mktime(&time2038) - mktime(&time2037)) <= 31500000;
}"
HAS_POST_2038
)
set(CMAKE_REQUIRED_INCLUDES ${ZLIB_INCLUDE_DIR})
set(CMAKE_REQUIRED_LIBRARIES orc_zlib)
CHECK_CXX_SOURCE_COMPILES("
#define Z_PREFIX
#include<zlib.h>
z_stream strm;
int main(int, char *[]) {
deflateReset(&strm);
}"
NEEDS_Z_PREFIX
)
configure_file (
"Adaptor.hh.in"
"${CMAKE_CURRENT_BINARY_DIR}/Adaptor.hh"
)
add_custom_command(OUTPUT orc_proto.pb.h orc_proto.pb.cc
COMMAND ${PROTOBUF_EXECUTABLE}
-I ../../orc-format_ep-prefix/src/orc-format_ep/src/main/proto/orc/proto
--cpp_out="${CMAKE_CURRENT_BINARY_DIR}"
../../orc-format_ep-prefix/src/orc-format_ep/src/main/proto/orc/proto/orc_proto.proto
)
set(SOURCE_FILES
"${CMAKE_CURRENT_BINARY_DIR}/Adaptor.hh"
orc_proto.pb.h
io/InputStream.cc
io/OutputStream.cc
io/Cache.cc
sargs/ExpressionTree.cc
sargs/Literal.cc
sargs/PredicateLeaf.cc
sargs/SargsApplier.cc
sargs/SearchArgument.cc
sargs/TruthValue.cc
wrap/orc-proto-wrapper.cc
Adaptor.cc
BlockBuffer.cc
BloomFilter.cc
BpackingDefault.cc
ByteRLE.cc
ColumnPrinter.cc
ColumnReader.cc
ColumnWriter.cc
Common.cc
Compression.cc
ConvertColumnReader.cc
CpuInfoUtil.cc
Exceptions.cc
Int128.cc
LzoDecompressor.cc
MemoryPool.cc
Murmur3.cc
OrcFile.cc
Reader.cc
RLEv1.cc
RLEV2Util.cc
RleDecoderV2.cc
RleEncoderV2.cc
RLE.cc
SchemaEvolution.cc
Statistics.cc
StripeStream.cc
Timezone.cc
TypeImpl.cc
Vector.cc
Writer.cc)
if(BUILD_LIBHDFSPP)
set(SOURCE_FILES ${SOURCE_FILES} OrcHdfsFile.cc)
endif(BUILD_LIBHDFSPP)
if(BUILD_ENABLE_AVX512)
set(SOURCE_FILES
${SOURCE_FILES}
BpackingAvx512.cc)
endif(BUILD_ENABLE_AVX512)
add_library (orc STATIC ${SOURCE_FILES})
target_link_libraries (orc
INTERFACE
${ORC_INSTALL_INTERFACE_TARGETS}
PRIVATE
$<BUILD_INTERFACE:orc::protobuf>
$<BUILD_INTERFACE:orc::zlib>
$<BUILD_INTERFACE:orc::snappy>
$<BUILD_INTERFACE:orc::lz4>
$<BUILD_INTERFACE:orc::zstd>
$<BUILD_INTERFACE:${LIBHDFSPP_LIBRARIES}>
)
target_include_directories (orc
INTERFACE
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
PUBLIC
$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/c++/include>
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/c++/include>
PRIVATE
${CMAKE_CURRENT_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}
${LIBHDFSPP_INCLUDE_DIR}
)
if (BUILD_LIBHDFSPP)
target_compile_definitions(orc PUBLIC -DBUILD_LIBHDFSPP)
endif (BUILD_LIBHDFSPP)
if (BUILD_CPP_ENABLE_METRICS)
message(STATUS "Enable the metrics collection")
target_compile_definitions(orc PUBLIC ENABLE_METRICS=1)
else ()
message(STATUS "Disable the metrics collection")
target_compile_definitions(orc PUBLIC ENABLE_METRICS=0)
endif ()
add_dependencies(orc orc-format_ep)
install(TARGETS orc EXPORT orc_targets)
install(EXPORT orc_targets
DESTINATION ${ORC_INSTALL_CMAKE_DIR}
NAMESPACE "orc::"
FILE "orcTargets.cmake")