mirror of
https://github.com/apache/impala.git
synced 2025-12-19 18:12:08 -05:00
Change the build to allow debug and release builds to coexist.
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -4,6 +4,7 @@ thirdparty
|
||||
cscope.files
|
||||
cscope.out
|
||||
org.eclipse.jdt.core.prefs
|
||||
hive_benchmark_results.txt
|
||||
|
||||
pprof.out
|
||||
|
||||
|
||||
1
be/.gitignore
vendored
1
be/.gitignore
vendored
@@ -2,5 +2,4 @@
|
||||
|
||||
build
|
||||
generated-sources
|
||||
bin/results.txt
|
||||
|
||||
|
||||
@@ -5,6 +5,13 @@ cmake_minimum_required(VERSION 2.6)
|
||||
# generate CTest input files
|
||||
enable_testing()
|
||||
|
||||
# Setting this enables compiling for assembly output. To compile to assembly:
|
||||
# 1. cd into the directory containing the source file
|
||||
# 2. 'make help' will list the assembly file targets (i.e. <srcfile.s>
|
||||
# 3. 'make <srcfile>.s' to build the assembly for that file. The file is built
|
||||
# to CMakeFiles/<currentdir>.dir/<srcfile>.s
|
||||
PROJECT(ASSEMBLER)
|
||||
|
||||
# compiler flags for different build types (run 'cmake -DCMAKE_BUILD_TYPE=<type> .')
|
||||
# For all builds:
|
||||
# -msse4.2: Enable sse4.2 compiler intrinsics.
|
||||
@@ -48,6 +55,11 @@ else()
|
||||
message(FATAL_ERROR "Unknown build type: ${CMAKE_BUILD_TYPE}")
|
||||
endif ()
|
||||
|
||||
# Adding -fverboase-asm creates better annotated assembly. This
|
||||
# doesn't seem to affect when building the binary.
|
||||
# TODO: is it possible to have specify different build flags for assembly?
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fverbose-asm")
|
||||
|
||||
Message(${CMAKE_CXX_FLAGS})
|
||||
|
||||
# setup doc generation with Doxygen
|
||||
@@ -88,6 +100,13 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/generated-sources)
|
||||
# allow linking of static libs into dynamic lib
|
||||
add_definitions(-fPIC)
|
||||
|
||||
# set compile output directory
|
||||
if ("${CMAKE_BUILD_TYPE}" STREQUAL "DEBUG")
|
||||
set(BUILD_OUTPUT_ROOT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/build/debug/")
|
||||
else()
|
||||
set(BUILD_OUTPUT_ROOT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/build/release/")
|
||||
endif()
|
||||
|
||||
# compile these subdirs using their own CMakeLists.txt
|
||||
add_subdirectory(src/common)
|
||||
add_subdirectory(src/exec)
|
||||
@@ -115,8 +134,8 @@ link_directories(
|
||||
set(BUILD_SHARED_LIBS OFF)
|
||||
|
||||
# where to put generated libraries
|
||||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/build/")
|
||||
set(ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/build/")
|
||||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${BUILD_OUTPUT_ROOT_DIRECTORY}")
|
||||
set(ARCHIVE_OUTPUT_DIRECTORY "${BUILD_OUTPUT_ROOT_DIRECTORY}")
|
||||
|
||||
# where to put generated binaries
|
||||
set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/build/")
|
||||
set(EXECUTABLE_OUTPUT_PATH "${BUILD_OUTPUT_ROOT_DIRECTORY}")
|
||||
|
||||
@@ -8,8 +8,8 @@ import os
|
||||
import re
|
||||
import sys
|
||||
|
||||
query_cmd = 'build/service/runquery -profile_output_file=""'
|
||||
reference_result_file = 'bin/results.txt'
|
||||
query_cmd = 'build/release/service/runquery -profile_output_file=""'
|
||||
reference_result_file = 'hive_benchmark_results.txt'
|
||||
result_single_regex = 'returned (\d*) rows? in (\d*).(\d*) s'
|
||||
result_multiple_regex = 'returned (\d*) rows? in (\d*).(\d*) s with stddev (\d*).(\d*)'
|
||||
|
||||
@@ -39,7 +39,8 @@ def parse_reference_results():
|
||||
try:
|
||||
results = {}
|
||||
current_result = {}
|
||||
f = open(reference_result_file)
|
||||
full_path = os.environ['IMPALA_HOME'] + "/" + reference_result_file
|
||||
f = open(full_path)
|
||||
for line in f:
|
||||
line = line.strip()
|
||||
if line.startswith("Query:"):
|
||||
@@ -128,10 +129,10 @@ def run_query(reference_results, output, query, prime_buffer_cache, iterations):
|
||||
if reference_avg != 0:
|
||||
if avg_time < reference_avg:
|
||||
diff = (reference_avg - avg_time) / reference_avg * 100
|
||||
print " Avg Time: %fs (+%s%.2f%%%s)" % (avg_time, GREEN, diff, END)
|
||||
print " Avg Time: %fs (-%s%.2f%%%s)" % (avg_time, GREEN, diff, END)
|
||||
else:
|
||||
diff = (avg_time - reference_avg) / reference_avg * 100
|
||||
print " Avg Time: %fs (-%s%.2f%%%s)" % (avg_time, RED, diff, END)
|
||||
print " Avg Time: %fs (+%s%.2f%%%s)" % (avg_time, RED, diff, END)
|
||||
else:
|
||||
print " Avg Time: %fs" % (avg_time)
|
||||
|
||||
@@ -151,9 +152,9 @@ reference_results = parse_reference_results()
|
||||
# flag regressions. How do we reconcile the fact we are running on different machines?
|
||||
queries = [
|
||||
["select count(field) from grep1gb where field like '%xyz%'", 5, 5],
|
||||
["select pageRank, pageURL from rankings where pageRank > 10 order by pageRank limit 100", 5, 5],
|
||||
["select uv.sourceip, avg(r.pagerank), sum(uv.adrevenue) as totalrevenue from uservisits uv join rankings r on (r.pageurl = uv.desturl) where uv.visitdate > '1999-01-01' and uv.visitdate < '2000-01-01' group by uv.sourceip order by totalrevenue desc limit 1", 5, 5],
|
||||
["select sourceIP, SUM(adRevenue) FROM uservisits GROUP by sourceIP order by SUM(adRevenue) desc limit 10", 5, 5],
|
||||
["select pageRank, pageURL from rankings where pageRank > 10 order by pageRank limit 100", 0, 5],
|
||||
["select count(field) from grep10gb where field like '%xyz%'", 0, 1]
|
||||
]
|
||||
|
||||
@@ -161,5 +162,5 @@ output = ""
|
||||
for query in queries:
|
||||
output = run_query(reference_results, output, query[0], query[1], query[2])
|
||||
|
||||
print "\nCopy and paste below to %s/%s to update the reference results:" % (os.environ['IMPALA_BE_DIR'], reference_result_file)
|
||||
print "\nCopy and paste below to %s/%s to update the reference results:" % (os.environ['IMPALA_HOME'], reference_result_file)
|
||||
print output
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# Copyright (c) 2011 Cloudera, Inc. All rights reserved.
|
||||
|
||||
# where to put generated libraries
|
||||
set(LIBRARY_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/be/build/thrift")
|
||||
set(LIBRARY_OUTPUT_PATH "${BUILD_OUTPUT_ROOT_DIRECTORY}/thrift")
|
||||
|
||||
# where to put generated binaries
|
||||
set(EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/be/build/thrift")
|
||||
set(EXECUTABLE_OUTPUT_PATH "${BUILD_OUTPUT_ROOT_DIRECTORY}/thrift")
|
||||
|
||||
set(SRC_FILES
|
||||
ImpalaBackendService.cpp
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# Copyright (c) 2011 Cloudera, Inc. All rights reserved.
|
||||
|
||||
# where to put generated libraries
|
||||
set(LIBRARY_OUTPUT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/build/opcode")
|
||||
set(LIBRARY_OUTPUT_PATH "${BUILD_OUTPUT_ROOT_DIRECTORY}/opcode")
|
||||
|
||||
# where to put generated binaries
|
||||
set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/build/opcode")
|
||||
set(EXECUTABLE_OUTPUT_PATH "${BUILD_OUTPUT_ROOT_DIRECTORY}/opcode")
|
||||
|
||||
set(SRC_FILES
|
||||
functions.cc
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
# Copyright (c) 2011 Cloudera, Inc. All rights reserved.
|
||||
|
||||
message (STATUS "Common ${BUILD_OUTPUT_ROOT_DIRECTORY}")
|
||||
# where to put generated libraries
|
||||
set(LIBRARY_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/be/build/common")
|
||||
set(LIBRARY_OUTPUT_PATH "${BUILD_OUTPUT_ROOT_DIRECTORY}/common")
|
||||
|
||||
# where to put generated binaries
|
||||
set(EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/be/build/common")
|
||||
set(EXECUTABLE_OUTPUT_PATH "${BUILD_OUTPUT_ROOT_DIRECTORY}/common")
|
||||
|
||||
add_library(Common
|
||||
status.cc
|
||||
|
||||
@@ -3,10 +3,10 @@
|
||||
cmake_minimum_required(VERSION 2.6)
|
||||
|
||||
# where to put generated libraries
|
||||
set(LIBRARY_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/be/build/exec")
|
||||
set(LIBRARY_OUTPUT_PATH "${BUILD_OUTPUT_ROOT_DIRECTORY}/exec")
|
||||
|
||||
# where to put generated binaries
|
||||
set(EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/be/build/exec")
|
||||
set(EXECUTABLE_OUTPUT_PATH "${BUILD_OUTPUT_ROOT_DIRECTORY}/exec")
|
||||
|
||||
add_library(Exec STATIC
|
||||
aggregation-node.cc
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# Copyright (c) 2011 Cloudera, Inc. All rights reserved.
|
||||
|
||||
# where to put generated libraries
|
||||
set(LIBRARY_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/be/build/exprs")
|
||||
set(LIBRARY_OUTPUT_PATH "${BUILD_OUTPUT_ROOT_DIRECTORY}/exprs")
|
||||
|
||||
# where to put generated binaries
|
||||
set(EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/be/build/exprs")
|
||||
set(EXECUTABLE_OUTPUT_PATH "${BUILD_OUTPUT_ROOT_DIRECTORY}/exprs")
|
||||
|
||||
add_library(Exprs
|
||||
agg-expr.cc
|
||||
@@ -58,4 +58,4 @@ target_link_libraries(expr-test
|
||||
${Boost_LIBRARIES}
|
||||
)
|
||||
|
||||
add_test(expr-test ${CMAKE_SOURCE_DIR}/be/build/exprs/expr-test)
|
||||
add_test(expr-test ${BUILD_OUTPUT_ROOT_DIRECTORY}/exprs/expr-test)
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# Copyright (c) 2011 Cloudera, Inc. All rights reserved.
|
||||
|
||||
# where to put generated libraries
|
||||
set(LIBRARY_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/be/build/runtime")
|
||||
set(LIBRARY_OUTPUT_PATH "${BUILD_OUTPUT_ROOT_DIRECTORY}/runtime")
|
||||
|
||||
# where to put generated binaries
|
||||
set(EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/be/build/runtime")
|
||||
set(EXECUTABLE_OUTPUT_PATH "${BUILD_OUTPUT_ROOT_DIRECTORY}/runtime")
|
||||
|
||||
# add .cc files and uncomment line
|
||||
add_library(Runtime STATIC
|
||||
@@ -91,7 +91,7 @@ target_link_libraries(data-stream-test
|
||||
${Boost_LIBRARIES}
|
||||
)
|
||||
|
||||
add_test(mem-pool-test ${CMAKE_SOURCE_DIR}/be/build/runtime/mem-pool-test)
|
||||
add_test(free-list-test ${CMAKE_SOURCE_DIR}/be/build/runtime/free-list-test)
|
||||
add_test(string-buffer-test ${CMAKE_SOURCE_DIR}/be/build/runtime/string-buffer-test)
|
||||
add_test(data-stream-test ${CMAKE_SOURCE_DIR}/be/build/runtime/data-stream-test)
|
||||
add_test(mem-pool-test ${BUILD_OUTPUT_ROOT_DIRECTORY}/runtime/mem-pool-test)
|
||||
add_test(free-list-test ${BUILD_OUTPUT_ROOT_DIRECTORY}/runtime/free-list-test)
|
||||
add_test(string-buffer-test ${BUILD_OUTPUT_ROOT_DIRECTORY}/runtime/string-buffer-test)
|
||||
add_test(data-stream-test ${BUILD_OUTPUT_ROOT_DIRECTORY}/runtime/data-stream-test)
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# Copyright (c) 2011 Cloudera, Inc. All rights reserved.
|
||||
|
||||
# where to put generated libraries
|
||||
set(LIBRARY_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/be/build/service")
|
||||
set(LIBRARY_OUTPUT_PATH "${BUILD_OUTPUT_ROOT_DIRECTORY}/service")
|
||||
|
||||
# where to put generated binaries
|
||||
set(EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/be/build/service")
|
||||
set(EXECUTABLE_OUTPUT_PATH "${BUILD_OUTPUT_ROOT_DIRECTORY}/service")
|
||||
|
||||
add_library(Service
|
||||
backend-service.cc
|
||||
|
||||
@@ -3,10 +3,10 @@
|
||||
cmake_minimum_required(VERSION 2.6)
|
||||
|
||||
# where to put generated libraries
|
||||
set(LIBRARY_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/be/build/testutil")
|
||||
set(LIBRARY_OUTPUT_PATH "${BUILD_OUTPUT_ROOT_DIRECTORY}/testutil")
|
||||
|
||||
# where to put generated binaries
|
||||
set(EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/be/build/testutil")
|
||||
set(EXECUTABLE_OUTPUT_PATH "${BUILD_OUTPUT_ROOT_DIRECTORY}/testutil")
|
||||
|
||||
add_library(TestUtil STATIC
|
||||
query-executor.cc
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# Copyright (c) 2011 Cloudera, Inc. All rights reserved.
|
||||
|
||||
# where to put generated libraries
|
||||
set(LIBRARY_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/be/build/util")
|
||||
set(LIBRARY_OUTPUT_PATH "${BUILD_OUTPUT_ROOT_DIRECTORY}/util")
|
||||
|
||||
# where to put generated binaries
|
||||
set(EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/be/build/util")
|
||||
set(EXECUTABLE_OUTPUT_PATH "${BUILD_OUTPUT_ROOT_DIRECTORY}/util")
|
||||
|
||||
add_library(Util
|
||||
cpu-info.cc
|
||||
@@ -31,5 +31,5 @@ target_link_libraries(perf-counters-test
|
||||
${Boost_LIBRARIES}
|
||||
)
|
||||
|
||||
add_test(perf-counters-test ${CMAKE_SOURCE_DIR}/be/build/util/perf-counters-test)
|
||||
add_test(perf-counters-test ${BUILD_OUTPUT_ROOT_DIRECTORY}/util/perf-counters-test)
|
||||
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
cd $IMPALA_HOME
|
||||
cmake -DCMAKE_BUILD_TYPE=Debug .
|
||||
make clean && make
|
||||
make clean
|
||||
|
||||
cd $IMPALA_HOME/common/function-registry
|
||||
make
|
||||
cd $IMPALA_HOME/common/thrift
|
||||
make
|
||||
cd $IMPALA_BE_DIR
|
||||
make -j
|
||||
|
||||
@@ -3,17 +3,31 @@ cd $IMPALA_HOME
|
||||
|
||||
# build with profile gen enabled
|
||||
cmake -DCMAKE_BUILD_TYPE=PROFILE_GEN .
|
||||
make clean && make
|
||||
make clean
|
||||
cd $IMPALA_HOME/common/function-registry
|
||||
make
|
||||
cd $IMPALA_HOME/common/thrift
|
||||
make
|
||||
cd $IMPALA_BE_DIR
|
||||
make -j
|
||||
cd $IMPALA_HOME
|
||||
|
||||
# Run sample queries - outputs .gcda files
|
||||
# TODO: determine if the PGO output is cumulative. I couldn't find any documentation about this
|
||||
be/build/service/runquery -query="select count(field) from grep1gb where field like '%xyz%'" -profile_output_file=""
|
||||
be/build/service/runquery -query="select sourceIP, SUM(adRevenue) FROM uservisits GROUP by sourceIP order by SUM(adRevenue) desc limit 10" -profile_output_file=""
|
||||
be/build/service/runquery -query="select uv.sourceip, avg(r.pagerank), sum(uv.adrevenue) as totalrevenue from uservisits uv join rankings r on (r.pageurl = uv.desturl) where uv.visitdate > '1999-01-01' and uv.visitdate < '2000-01-01' group by uv.sourceip order by totalrevenue desc limit 1" -profile_output_file=""
|
||||
be/build/release/service/runquery -query="select count(field) from grep1gb where field like '%xyz%'" -profile_output_file=""
|
||||
be/build/release/service/runquery -query="select sourceIP, SUM(adRevenue) FROM uservisits GROUP by sourceIP order by SUM(adRevenue) desc limit 10" -profile_output_file=""
|
||||
be/build/release/service/runquery -query="select uv.sourceip, avg(r.pagerank), sum(uv.adrevenue) as totalrevenue from uservisits uv join rankings r on (r.pageurl = uv.desturl) where uv.visitdate > '1999-01-01' and uv.visitdate < '2000-01-01' group by uv.sourceip order by totalrevenue desc limit 1" -profile_output_file=""
|
||||
|
||||
# Build again using the PGO data
|
||||
cmake -DCMAKE_BUILD_TYPE=PROFILE_BUILD .
|
||||
make clean && make
|
||||
make clean
|
||||
cd $IMPALA_HOME/common/function-registry
|
||||
make
|
||||
cd $IMPALA_HOME/common/thrift
|
||||
make
|
||||
cd $IMPALA_BE_DIR
|
||||
make -j
|
||||
cd $IMPALA_HOME
|
||||
|
||||
# Remove all the PGO intermediates and set build to release. This seems to be the most
|
||||
# convenient workflow. Otherwise, changing one src file after a PGO build causes many warnings
|
||||
|
||||
@@ -249,7 +249,7 @@
|
||||
<configuration>
|
||||
<redirectTestOutputToFile>true</redirectTestOutputToFile>
|
||||
<systemPropertyVariables>
|
||||
<java.library.path>${java.library.path}:${project.basedir}/../be/build/service</java.library.path>
|
||||
<java.library.path>${java.library.path}:${project.basedir}/../be/build/debug/service:${project.basedir}/../be/build/release/service</java.library.path>
|
||||
</systemPropertyVariables>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
Reference in New Issue
Block a user