mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-20 00:30:49 +00:00
add libFuzzer build on 'libFuzzer' label, build produces artifacts
This commit is contained in:
parent
e03d6473ea
commit
46fa7dbb80
45
.github/workflows/pull_request.yml
vendored
45
.github/workflows/pull_request.yml
vendored
@ -5059,6 +5059,51 @@ jobs:
|
|||||||
docker ps --all --quiet | xargs --no-run-if-empty docker rm -f ||:
|
docker ps --all --quiet | xargs --no-run-if-empty docker rm -f ||:
|
||||||
sudo rm -fr "$TEMP_PATH"
|
sudo rm -fr "$TEMP_PATH"
|
||||||
#############################################################################################
|
#############################################################################################
|
||||||
|
#################################### libFuzzer build ########################################
|
||||||
|
#############################################################################################
|
||||||
|
BuilderFuzzers:
|
||||||
|
if: contains(github.event.pull_request.labels.*.name, 'libFuzzer')
|
||||||
|
needs: [DockerHubPush, FastTest, StyleCheck]
|
||||||
|
runs-on: [self-hosted, builder]
|
||||||
|
steps:
|
||||||
|
- name: Set envs
|
||||||
|
run: |
|
||||||
|
cat >> "$GITHUB_ENV" << 'EOF'
|
||||||
|
TEMP_PATH=${{runner.temp}}/build_check
|
||||||
|
IMAGES_PATH=${{runner.temp}}/images_path
|
||||||
|
REPO_COPY=${{runner.temp}}/build_check/ClickHouse
|
||||||
|
CACHES_PATH=${{runner.temp}}/../ccaches
|
||||||
|
BUILD_NAME=fuzzers
|
||||||
|
EOF
|
||||||
|
- name: Download changed images
|
||||||
|
uses: actions/download-artifact@v3
|
||||||
|
with:
|
||||||
|
name: changed_images
|
||||||
|
path: ${{ env.IMAGES_PATH }}
|
||||||
|
- name: Check out repository code
|
||||||
|
uses: ClickHouse/checkout@v1
|
||||||
|
with:
|
||||||
|
clear-repository: true
|
||||||
|
submodules: true
|
||||||
|
- name: Build
|
||||||
|
run: |
|
||||||
|
sudo rm -fr "$TEMP_PATH"
|
||||||
|
mkdir -p "$TEMP_PATH"
|
||||||
|
cp -r "$GITHUB_WORKSPACE" "$TEMP_PATH"
|
||||||
|
cd "$REPO_COPY/tests/ci" && python3 build_check.py "$BUILD_NAME"
|
||||||
|
- name: Upload build URLs to artifacts
|
||||||
|
if: ${{ success() || failure() }}
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: ${{ env.BUILD_URLS }}
|
||||||
|
path: ${{ env.TEMP_PATH }}/${{ env.BUILD_URLS }}.json
|
||||||
|
- name: Cleanup
|
||||||
|
if: always()
|
||||||
|
run: |
|
||||||
|
docker ps --quiet | xargs --no-run-if-empty docker kill ||:
|
||||||
|
docker ps --all --quiet | xargs --no-run-if-empty docker rm -f ||:
|
||||||
|
sudo rm -fr "$TEMP_PATH" "$CACHES_PATH"
|
||||||
|
#############################################################################################
|
||||||
###################################### JEPSEN TESTS #########################################
|
###################################### JEPSEN TESTS #########################################
|
||||||
#############################################################################################
|
#############################################################################################
|
||||||
Jepsen:
|
Jepsen:
|
||||||
|
@ -19,6 +19,7 @@ include (cmake/tools.cmake)
|
|||||||
include (cmake/ccache.cmake)
|
include (cmake/ccache.cmake)
|
||||||
include (cmake/clang_tidy.cmake)
|
include (cmake/clang_tidy.cmake)
|
||||||
include (cmake/git.cmake)
|
include (cmake/git.cmake)
|
||||||
|
include (cmake/utils.cmake)
|
||||||
|
|
||||||
# Ignore export() since we don't use it,
|
# Ignore export() since we don't use it,
|
||||||
# but it gets broken with a global targets via link_libraries()
|
# but it gets broken with a global targets via link_libraries()
|
||||||
@ -562,22 +563,6 @@ add_subdirectory (programs)
|
|||||||
add_subdirectory (tests)
|
add_subdirectory (tests)
|
||||||
add_subdirectory (utils)
|
add_subdirectory (utils)
|
||||||
|
|
||||||
# Function get_all_targets collects all targets recursively
|
|
||||||
function(get_all_targets var)
|
|
||||||
macro(get_all_targets_recursive targets dir)
|
|
||||||
get_property(subdirectories DIRECTORY ${dir} PROPERTY SUBDIRECTORIES)
|
|
||||||
foreach(subdir ${subdirectories})
|
|
||||||
get_all_targets_recursive(${targets} ${subdir})
|
|
||||||
endforeach()
|
|
||||||
get_property(current_targets DIRECTORY ${dir} PROPERTY BUILDSYSTEM_TARGETS)
|
|
||||||
list(APPEND ${targets} ${current_targets})
|
|
||||||
endmacro()
|
|
||||||
|
|
||||||
set(targets)
|
|
||||||
get_all_targets_recursive(targets ${CMAKE_CURRENT_SOURCE_DIR})
|
|
||||||
set(${var} ${targets} PARENT_SCOPE)
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
if (FUZZER)
|
if (FUZZER)
|
||||||
# Bundle fuzzers target
|
# Bundle fuzzers target
|
||||||
add_custom_target(fuzzers)
|
add_custom_target(fuzzers)
|
||||||
@ -592,11 +577,14 @@ if (FUZZER)
|
|||||||
# clickhouse fuzzer isn't working correctly
|
# clickhouse fuzzer isn't working correctly
|
||||||
# initial PR https://github.com/ClickHouse/ClickHouse/pull/27526
|
# initial PR https://github.com/ClickHouse/ClickHouse/pull/27526
|
||||||
#if (target MATCHES ".+_fuzzer" OR target STREQUAL "clickhouse")
|
#if (target MATCHES ".+_fuzzer" OR target STREQUAL "clickhouse")
|
||||||
if (target MATCHES ".+_fuzzer")
|
if (target_type STREQUAL "EXECUTABLE" AND target MATCHES ".+_fuzzer")
|
||||||
message(STATUS "${target} instrumented with fuzzer")
|
message(STATUS "${target} instrumented with fuzzer")
|
||||||
target_link_libraries(${target} PUBLIC ch_contrib::fuzzer)
|
target_link_libraries(${target} PUBLIC ch_contrib::fuzzer)
|
||||||
# Add to fuzzers bundle
|
# Add to fuzzers bundle
|
||||||
add_dependencies(fuzzers ${target})
|
add_dependencies(fuzzers ${target})
|
||||||
|
get_target_filename(${target} target_bin_name)
|
||||||
|
get_target_property(target_bin_dir ${target} BINARY_DIR)
|
||||||
|
add_custom_command(TARGET fuzzers POST_BUILD COMMAND mv "${target_bin_dir}/${target_bin_name}" "${CMAKE_CURRENT_BINARY_DIR}/programs/" VERBATIM)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
|
120
cmake/utils.cmake
Normal file
120
cmake/utils.cmake
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
# Useful stuff
|
||||||
|
|
||||||
|
# Function get_all_targets collects all targets recursively
|
||||||
|
function(get_all_targets outvar)
|
||||||
|
macro(get_all_targets_recursive targets dir)
|
||||||
|
get_property(subdirectories DIRECTORY ${dir} PROPERTY SUBDIRECTORIES)
|
||||||
|
foreach(subdir ${subdirectories})
|
||||||
|
get_all_targets_recursive(${targets} ${subdir})
|
||||||
|
endforeach()
|
||||||
|
get_property(current_targets DIRECTORY ${dir} PROPERTY BUILDSYSTEM_TARGETS)
|
||||||
|
list(APPEND ${targets} ${current_targets})
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
set(targets)
|
||||||
|
get_all_targets_recursive(targets ${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
set(${outvar} ${targets} PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
|
||||||
|
# Function get_target_filename calculates target's output file name
|
||||||
|
function(get_target_filename target outvar)
|
||||||
|
get_target_property(prop_type "${target}" TYPE)
|
||||||
|
get_target_property(prop_is_framework "${target}" FRAMEWORK)
|
||||||
|
get_target_property(prop_outname "${target}" OUTPUT_NAME)
|
||||||
|
get_target_property(prop_archive_outname "${target}" ARCHIVE_OUTPUT_NAME)
|
||||||
|
get_target_property(prop_library_outname "${target}" LIBRARY_OUTPUT_NAME)
|
||||||
|
get_target_property(prop_runtime_outname "${target}" RUNTIME_OUTPUT_NAME)
|
||||||
|
# message("prop_archive_outname: ${prop_archive_outname}")
|
||||||
|
# message("prop_library_outname: ${prop_library_outname}")
|
||||||
|
# message("prop_runtime_outname: ${prop_runtime_outname}")
|
||||||
|
if(DEFINED CMAKE_BUILD_TYPE)
|
||||||
|
get_target_property(prop_cfg_outname "${target}" "${OUTPUT_NAME}_${CMAKE_BUILD_TYPE}")
|
||||||
|
get_target_property(prop_archive_cfg_outname "${target}" "${ARCHIVE_OUTPUT_NAME}_${CMAKE_BUILD_TYPE}")
|
||||||
|
get_target_property(prop_library_cfg_outname "${target}" "${LIBRARY_OUTPUT_NAME}_${CMAKE_BUILD_TYPE}")
|
||||||
|
get_target_property(prop_runtime_cfg_outname "${target}" "${RUNTIME_OUTPUT_NAME}_${CMAKE_BUILD_TYPE}")
|
||||||
|
# message("prop_archive_cfg_outname: ${prop_archive_cfg_outname}")
|
||||||
|
# message("prop_library_cfg_outname: ${prop_library_cfg_outname}")
|
||||||
|
# message("prop_runtime_cfg_outname: ${prop_runtime_cfg_outname}")
|
||||||
|
if(NOT ("${prop_cfg_outname}" STREQUAL "prop_cfg_outname-NOTFOUND"))
|
||||||
|
set(prop_outname "${prop_cfg_outname}")
|
||||||
|
endif()
|
||||||
|
if(NOT ("${prop_archive_cfg_outname}" STREQUAL "prop_archive_cfg_outname-NOTFOUND"))
|
||||||
|
set(prop_archive_outname "${prop_archive_cfg_outname}")
|
||||||
|
endif()
|
||||||
|
if(NOT ("${prop_library_cfg_outname}" STREQUAL "prop_library_cfg_outname-NOTFOUND"))
|
||||||
|
set(prop_library_outname "${prop_library_cfg_outname}")
|
||||||
|
endif()
|
||||||
|
if(NOT ("${prop_runtime_cfg_outname}" STREQUAL "prop_runtime_cfg_outname-NOTFOUND"))
|
||||||
|
set(prop_runtime_outname "${prop_runtime_cfg_outname}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
set(outname "${target}")
|
||||||
|
if(NOT ("${prop_outname}" STREQUAL "prop_outname-NOTFOUND"))
|
||||||
|
set(outname "${prop_outname}")
|
||||||
|
endif()
|
||||||
|
if("${prop_is_framework}")
|
||||||
|
set(filename "${outname}")
|
||||||
|
elseif(prop_type STREQUAL "STATIC_LIBRARY")
|
||||||
|
if(NOT ("${prop_archive_outname}" STREQUAL "prop_archive_outname-NOTFOUND"))
|
||||||
|
set(outname "${prop_archive_outname}")
|
||||||
|
endif()
|
||||||
|
set(filename "${CMAKE_STATIC_LIBRARY_PREFIX}${outname}${CMAKE_STATIC_LIBRARY_SUFFIX}")
|
||||||
|
elseif(prop_type STREQUAL "MODULE_LIBRARY")
|
||||||
|
if(NOT ("${prop_library_outname}" STREQUAL "prop_library_outname-NOTFOUND"))
|
||||||
|
set(outname "${prop_library_outname}")
|
||||||
|
endif()
|
||||||
|
set(filename "${CMAKE_SHARED_MODULE_LIBRARY_PREFIX}${outname}${CMAKE_SHARED_MODULE_LIBRARY_SUFFIX}")
|
||||||
|
elseif(prop_type STREQUAL "SHARED_LIBRARY")
|
||||||
|
if(WIN32)
|
||||||
|
if(NOT ("${prop_runtime_outname}" STREQUAL "prop_runtime_outname-NOTFOUND"))
|
||||||
|
set(outname "${prop_runtime_outname}")
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
if(NOT ("${prop_library_outname}" STREQUAL "prop_library_outname-NOTFOUND"))
|
||||||
|
set(outname "${prop_library_outname}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
set(filename "${CMAKE_SHARED_LIBRARY_PREFIX}${outname}${CMAKE_SHARED_LIBRARY_SUFFIX}")
|
||||||
|
elseif(prop_type STREQUAL "EXECUTABLE")
|
||||||
|
if(NOT ("${prop_runtime_outname}" STREQUAL "prop_runtime_outname-NOTFOUND"))
|
||||||
|
set(outname "${prop_runtime_outname}")
|
||||||
|
endif()
|
||||||
|
set(filename "${CMAKE_EXECUTABLE_PREFIX}${outname}${CMAKE_EXECUTABLE_SUFFIX}")
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "target \"${target}\" is not of type STATIC_LIBRARY, MODULE_LIBRARY, SHARED_LIBRARY, or EXECUTABLE.")
|
||||||
|
endif()
|
||||||
|
set("${outvar}" "${filename}" PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
|
||||||
|
# Function get_cmake_properties returns list of all propreties that cmake supports
|
||||||
|
function(get_cmake_properties outvar)
|
||||||
|
execute_process(COMMAND cmake --help-property-list OUTPUT_VARIABLE cmake_properties)
|
||||||
|
# Convert command output into a CMake list
|
||||||
|
string(REGEX REPLACE ";" "\\\\;" cmake_properties "${cmake_properties}")
|
||||||
|
string(REGEX REPLACE "\n" ";" cmake_properties "${cmake_properties}")
|
||||||
|
list(REMOVE_DUPLICATES cmake_properties)
|
||||||
|
set("${outvar}" "${cmake_properties}" PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
# Function get_target_property_list returns list of all propreties set for target
|
||||||
|
function(get_target_property_list target outvar)
|
||||||
|
get_cmake_properties(cmake_property_list)
|
||||||
|
foreach(property ${cmake_property_list})
|
||||||
|
string(REPLACE "<CONFIG>" "${CMAKE_BUILD_TYPE}" property ${property})
|
||||||
|
|
||||||
|
# https://stackoverflow.com/questions/32197663/how-can-i-remove-the-the-location-property-may-not-be-read-from-target-error-i
|
||||||
|
if(property STREQUAL "LOCATION" OR property MATCHES "^LOCATION_" OR property MATCHES "_LOCATION$")
|
||||||
|
continue()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
get_property(was_set TARGET ${target} PROPERTY ${property} SET)
|
||||||
|
if(was_set)
|
||||||
|
get_target_property(value ${target} ${property})
|
||||||
|
string(REGEX REPLACE ";" "\\\\\\\\;" value "${value}")
|
||||||
|
list(APPEND outvar "${property} = ${value}")
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
set(${outvar} ${${outvar}} PARENT_SCOPE)
|
||||||
|
endfunction()
|
@ -97,11 +97,9 @@ if [ -n "$MAKE_DEB" ]; then
|
|||||||
bash -x /build/packages/build
|
bash -x /build/packages/build
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$BUILD_TARGET" != "fuzzers" ]; then
|
mv ./programs/clickhouse* /output || mv ./programs/*_fuzzer /output
|
||||||
mv ./programs/clickhouse* /output
|
|
||||||
[ -x ./programs/self-extracting/clickhouse ] && mv ./programs/self-extracting/clickhouse /output
|
[ -x ./programs/self-extracting/clickhouse ] && mv ./programs/self-extracting/clickhouse /output
|
||||||
mv ./src/unit_tests_dbms /output ||: # may not exist for some binary builds
|
mv ./src/unit_tests_dbms /output ||: # may not exist for some binary builds
|
||||||
fi
|
|
||||||
|
|
||||||
prepare_combined_output () {
|
prepare_combined_output () {
|
||||||
local OUTPUT
|
local OUTPUT
|
||||||
|
Loading…
Reference in New Issue
Block a user