[compiler-rt] r309405 - [sanitizer tests CMake] Factor out CMake logic for compiling sanitizer tests
George Karpenkov via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 28 12:53:07 PDT 2017
Looking into this, for now can’t reproduce on my linux machine.
> On Jul 28, 2017, at 12:28 PM, Kostya Serebryany <kcc at google.com> wrote:
>
> Looks like this made the sanitizer bot sad:
> http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux/builds/3107 <http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux/builds/3107>
> -- Builtin supported architectures: i386;i686;x86_64
> CMake Error at projects/compiler-rt/lib/msan/tests/CMakeLists.txt:88 (msan_compile):
> msan_compile Macro invoked with incorrect arguments for macro named:
> msan_compile
> Call Stack (most recent call first):
> projects/compiler-rt/lib/msan/tests/CMakeLists.txt:134 (add_msan_tests_for_arch)
>
>
> -- Linker detection: GNU Gold
> -- Linker detection: GNU Gold
>
> On Fri, Jul 28, 2017 at 10:32 AM, George Karpenkov via llvm-commits <llvm-commits at lists.llvm.org <mailto:llvm-commits at lists.llvm.org>> wrote:
> Author: george.karpenkov
> Date: Fri Jul 28 10:32:37 2017
> New Revision: 309405
>
> URL: http://llvm.org/viewvc/llvm-project?rev=309405&view=rev <http://llvm.org/viewvc/llvm-project?rev=309405&view=rev>
> Log:
> [sanitizer tests CMake] Factor out CMake logic for compiling sanitizer tests
>
> Currently there's a large amount of CMake logic duplication for
> compiling sanitizer tests.
> If we add more sanitizers, the duplication will get even worse.
>
> This change factors out common compilation commands into a macro
> available to all sanitizers.
>
> Modified:
> compiler-rt/trunk/cmake/Modules/CompilerRTCompile.cmake
> compiler-rt/trunk/lib/asan/tests/CMakeLists.txt
> compiler-rt/trunk/lib/msan/tests/CMakeLists.txt
> compiler-rt/trunk/lib/tsan/tests/CMakeLists.txt
> compiler-rt/trunk/lib/xray/tests/CMakeLists.txt
>
> Modified: compiler-rt/trunk/cmake/Modules/CompilerRTCompile.cmake
> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/cmake/Modules/CompilerRTCompile.cmake?rev=309405&r1=309404&r2=309405&view=diff <http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/cmake/Modules/CompilerRTCompile.cmake?rev=309405&r1=309404&r2=309405&view=diff>
> ==============================================================================
> --- compiler-rt/trunk/cmake/Modules/CompilerRTCompile.cmake (original)
> +++ compiler-rt/trunk/cmake/Modules/CompilerRTCompile.cmake Fri Jul 28 10:32:37 2017
> @@ -24,6 +24,41 @@ function(translate_msvc_cflags out_flags
> set(${out_flags} "${clang_flags}" PARENT_SCOPE)
> endfunction()
>
> +# Compile a sanitizer test with a freshly built clang
> +# for a given architecture, adding the result to the object list.
> +# - obj_list: output list of objects, populated by path
> +# of the generated object file.
> +# - source: source file of a test.
> +# - arch: architecture to compile for.
> +# sanitizer_test_compile(<obj_list> <source> <arch>
> +# KIND <custom namespace>
> +# COMPILE_DEPS <list of compile-time dependencies>
> +# DEPS <list of dependencies>
> +# CFLAGS <list of flags>
> +# )
> +macro(sanitizer_test_compile obj_list source arch)
> + cmake_parse_arguments(TEST
> + "" "" "KIND;COMPILE_DEPS;DEPS;CFLAGS" ${ARGN})
> + get_filename_component(basename ${source} NAME)
> + if(CMAKE_CONFIGURATION_TYPES)
> + set(output_obj
> + "${CMAKE_CFG_INTDIR}/${obj_list}.${basename}.${arch}${TEST_KIND}.o")
> + else()
> + set(output_obj "${obj_list}.${basename}.${arch}${TEST_KIND}.o")
> + endif()
> +
> + # Write out architecture-specific flags into TARGET_CFLAGS variable.
> + get_target_flags_for_arch(${arch} TARGET_CFLAGS)
> + set(COMPILE_DEPS ${TEST_COMPILE_DEPS})
> + if(NOT COMPILER_RT_STANDALONE_BUILD)
> + list(APPEND COMPILE_DEPS ${TEST_DEPS})
> + endif()
> + clang_compile(${output_obj} ${source}
> + CFLAGS ${TEST_CFLAGS} ${TARGET_CFLAGS}
> + DEPS ${TEST_COMPILE_DEPS})
> + list(APPEND ${obj_list} ${output_obj})
> +endmacro()
> +
> # Compile a source into an object file with COMPILER_RT_TEST_COMPILER using
> # a provided compile flags and dependenices.
> # clang_compile(<object> <source>
>
> Modified: compiler-rt/trunk/lib/asan/tests/CMakeLists.txt
> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/tests/CMakeLists.txt?rev=309405&r1=309404&r2=309405&view=diff <http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/tests/CMakeLists.txt?rev=309405&r1=309404&r2=309405&view=diff>
> ==============================================================================
> --- compiler-rt/trunk/lib/asan/tests/CMakeLists.txt (original)
> +++ compiler-rt/trunk/lib/asan/tests/CMakeLists.txt Fri Jul 28 10:32:37 2017
> @@ -125,20 +125,14 @@ append_list_if(COMPILER_RT_HAS_LIBLOG lo
> # NDK r10 requires -latomic almost always.
> append_list_if(ANDROID atomic ASAN_UNITTEST_NOINST_LIBS)
>
> -# Compile source for the given architecture, using compiler
> -# options in ${ARGN}, and add it to the object list.
> macro(asan_compile obj_list source arch kind)
> - get_filename_component(basename ${source} NAME)
> - set(output_obj "${CMAKE_CFG_RESOLVED_INTDIR}${obj_list}.${basename}.${arch}${kind}.o")
> - get_target_flags_for_arch(${arch} TARGET_CFLAGS)
> - set(COMPILE_DEPS ${ASAN_UNITTEST_HEADERS} ${ASAN_BLACKLIST_FILE})
> - if(NOT COMPILER_RT_STANDALONE_BUILD)
> - list(APPEND COMPILE_DEPS gtest asan)
> - endif()
> - clang_compile(${output_obj} ${source}
> - CFLAGS ${ARGN} ${TARGET_CFLAGS}
> - DEPS ${COMPILE_DEPS})
> - list(APPEND ${obj_list} ${output_obj})
> + cmake_parse_arguments(ASAN_TEST "" "" "CFLAGS" ${ARGN})
> + sanitizer_test_compile(${obj_list} ${source} ${arch}
> + KIND ${kind}
> + COMPILE_DEPS ${ASAN_UNITTEST_HEADERS} ${ASAN_BLACKLIST_FILE}
> + DEPS gtest asan
> + CFLAGS ${ASAN_TEST_CFLAGS}
> + )
> endmacro()
>
> # Link ASan unit test for a given architecture from a set
> @@ -200,17 +194,17 @@ set(ASAN_BENCHMARKS_SOURCES
> asan_benchmarks_test.cc)
>
> # Adds ASan unit tests and benchmarks for architecture.
> -macro(add_asan_tests_for_arch_and_kind arch kind)
> +macro(add_asan_tests_for_arch_and_kind arch kind cflags)
> # Instrumented tests.
> set(ASAN_INST_TEST_OBJECTS)
> foreach(src ${ASAN_INST_TEST_SOURCES})
> asan_compile(ASAN_INST_TEST_OBJECTS ${src} ${arch} ${kind}
> - ${ASAN_UNITTEST_INSTRUMENTED_CFLAGS} ${ARGN})
> + CFLAGS ${ASAN_UNITTEST_INSTRUMENTED_CFLAGS} ${cflags})
> endforeach()
> if (APPLE)
> # Add Mac-specific helper.
> asan_compile(ASAN_INST_TEST_OBJECTS asan_mac_test_helpers.mm <http://asan_mac_test_helpers.mm/> ${arch} ${kind}
> - ${ASAN_UNITTEST_INSTRUMENTED_CFLAGS} -ObjC ${ARGN})
> + CFLAGS ${ASAN_UNITTEST_INSTRUMENTED_CFLAGS} -ObjC ${cflags})
> endif()
>
> if (MSVC)
> @@ -219,7 +213,7 @@ macro(add_asan_tests_for_arch_and_kind a
> set(ASAN_INST_DYNAMIC_TEST_OBJECTS)
> foreach(src ${ASAN_INST_TEST_SOURCES})
> asan_compile(ASAN_INST_DYNAMIC_TEST_OBJECTS ${src} ${arch} ${kind}
> - ${ASAN_UNITTEST_INSTRUMENTED_CFLAGS} -D_MT -D_DLL ${ARGN})
> + CFLAGS ${ASAN_UNITTEST_INSTRUMENTED_CFLAGS} -D_MT -D_DLL ${cflags})
> endforeach()
> # Clang links the static CRT by default. Override that to use the dynamic
> # CRT.
> @@ -276,7 +270,7 @@ macro(add_asan_tests_for_arch_and_kind a
> set(ASAN_NOINST_TEST_OBJECTS)
> foreach(src ${ASAN_NOINST_TEST_SOURCES})
> asan_compile(ASAN_NOINST_TEST_OBJECTS ${src} ${arch} ${kind}
> - ${ASAN_UNITTEST_COMMON_CFLAGS} ${ARGN})
> + CFLAGS ${ASAN_UNITTEST_COMMON_CFLAGS} ${cflags})
> endforeach()
> add_asan_test(AsanUnitTests "Asan-${arch}${kind}-Noinst-Test"
> ${arch} ${kind} SUBDIR "default"
> @@ -288,7 +282,7 @@ macro(add_asan_tests_for_arch_and_kind a
> set(ASAN_BENCHMARKS_OBJECTS)
> foreach(src ${ASAN_BENCHMARKS_SOURCES})
> asan_compile(ASAN_BENCHMARKS_OBJECTS ${src} ${arch} ${kind}
> - ${ASAN_UNITTEST_INSTRUMENTED_CFLAGS} ${ARGN})
> + CFLAGS ${ASAN_UNITTEST_INSTRUMENTED_CFLAGS} ${cflags})
> endforeach()
> add_asan_test(AsanBenchmarks "Asan-${arch}${kind}-Benchmark"
> ${arch} ${kind} SUBDIR "default"
> @@ -302,9 +296,9 @@ if(COMPILER_RT_CAN_EXECUTE_TESTS AND NOT
> darwin_filter_host_archs(ASAN_SUPPORTED_ARCH ASAN_TEST_ARCH)
> endif()
> foreach(arch ${ASAN_TEST_ARCH})
> - add_asan_tests_for_arch_and_kind(${arch} "-inline")
> + add_asan_tests_for_arch_and_kind(${arch} "-inline" "")
> add_asan_tests_for_arch_and_kind(${arch} "-with-calls"
> - -mllvm -asan-instrumentation-with-call-threshold=0)
> + "-mllvm;-asan-instrumentation-with-call-threshold=0")
> endforeach()
> endif()
>
>
> Modified: compiler-rt/trunk/lib/msan/tests/CMakeLists.txt
> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/tests/CMakeLists.txt?rev=309405&r1=309404&r2=309405&view=diff <http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/msan/tests/CMakeLists.txt?rev=309405&r1=309404&r2=309405&view=diff>
> ==============================================================================
> --- compiler-rt/trunk/lib/msan/tests/CMakeLists.txt (original)
> +++ compiler-rt/trunk/lib/msan/tests/CMakeLists.txt Fri Jul 28 10:32:37 2017
> @@ -53,20 +53,14 @@ set(MSAN_UNITTEST_LINK_FLAGS
>
> append_list_if(COMPILER_RT_HAS_LIBDL -ldl MSAN_UNITTEST_LINK_FLAGS)
>
> -# Compile source for the given architecture, using compiler
> -# options in ${ARGN}, and add it to the object list.
> -macro(msan_compile obj_list source arch kind)
> - get_filename_component(basename ${source} NAME)
> - set(output_obj "${basename}.${arch}${kind}.o")
> - get_target_flags_for_arch(${arch} TARGET_CFLAGS)
> - set(COMPILE_DEPS ${MSAN_UNITTEST_HEADERS})
> - if(NOT COMPILER_RT_STANDALONE_BUILD)
> - list(APPEND COMPILE_DEPS gtest msan)
> - endif()
> - clang_compile(${output_obj} ${source}
> - CFLAGS ${ARGN} ${TARGET_CFLAGS}
> - DEPS ${COMPILE_DEPS})
> - list(APPEND ${obj_list} ${output_obj})
> +macro(msan_compile obj_list source arch kind cflags)
> + sanitizer_test_compile(
> + ${obj_list} ${source} ${arch}
> + KIND ${kind}
> + COMPILE_DEPS ${MSAN_UNITTEST_HEADERS}
> + DEPS gtest msan
> + CFLAGS ${MSAN_UNITTEST_INSTRUMENTED_CFLAGS} ${cflags}
> + )
> endmacro()
>
> macro(msan_link_shared so_list so_name arch kind)
> @@ -88,23 +82,22 @@ add_custom_target(MsanUnitTests)
> set_target_properties(MsanUnitTests PROPERTIES FOLDER "MSan unit tests")
>
> # Adds MSan unit tests and benchmarks for architecture.
> -macro(add_msan_tests_for_arch arch kind)
> +macro(add_msan_tests_for_arch arch kind cflags)
> # Build gtest instrumented with MSan.
> set(MSAN_INST_GTEST)
> - msan_compile(MSAN_INST_GTEST ${COMPILER_RT_GTEST_SOURCE} ${arch} "${kind}"
> - ${MSAN_UNITTEST_INSTRUMENTED_CFLAGS} ${ARGN})
> + msan_compile(MSAN_INST_GTEST ${COMPILER_RT_GTEST_SOURCE} ${arch} ${kind}
> + "${cflags}")
>
> # Instrumented tests.
> set(MSAN_INST_TEST_OBJECTS)
> foreach (SOURCE ${MSAN_UNITTEST_SOURCES})
> - msan_compile(MSAN_INST_TEST_OBJECTS ${SOURCE} ${arch} "${kind}"
> - ${MSAN_UNITTEST_INSTRUMENTED_CFLAGS} ${ARGN})
> + msan_compile(MSAN_INST_TEST_OBJECTS ${SOURCE} ${arch} "${kind}" "${cflags}")
> endforeach(SOURCE)
>
> # Instrumented loadable module objects.
> set(MSAN_INST_LOADABLE_OBJECTS)
> msan_compile(MSAN_INST_LOADABLE_OBJECTS ${MSAN_LOADABLE_SOURCE} ${arch} "${kind}"
> - ${MSAN_UNITTEST_INSTRUMENTED_CFLAGS} "-fPIC" ${ARGN})
> + "-fPIC;${cflags}")
>
> # Instrumented loadable library tests.
> set(MSAN_LOADABLE_SO)
> @@ -138,8 +131,8 @@ if(COMPILER_RT_CAN_EXECUTE_TESTS AND COM
> CFLAGS ${MSAN_LIBCXX_CFLAGS} ${TARGET_CFLAGS})
> set(MSAN_LIBCXX_SO ${LIBCXX_PREFIX}/lib/libc++.so)
>
> - add_msan_tests_for_arch(${arch} "")
> + add_msan_tests_for_arch(${arch} "" "")
> add_msan_tests_for_arch(${arch} "-with-call"
> - -mllvm -msan-instrumentation-with-call-threshold=0)
> + "-mllvm;-msan-instrumentation-with-call-threshold=0")
> endforeach()
> endif()
>
> Modified: compiler-rt/trunk/lib/tsan/tests/CMakeLists.txt
> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/tests/CMakeLists.txt?rev=309405&r1=309404&r2=309405&view=diff <http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/tests/CMakeLists.txt?rev=309405&r1=309404&r2=309405&view=diff>
> ==============================================================================
> --- compiler-rt/trunk/lib/tsan/tests/CMakeLists.txt (original)
> +++ compiler-rt/trunk/lib/tsan/tests/CMakeLists.txt Fri Jul 28 10:32:37 2017
> @@ -23,21 +23,6 @@ foreach (header ${TSAN_HEADERS})
> list(APPEND TSAN_RTL_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/../${header})
> endforeach()
>
> -# tsan_compile(obj_list, source, arch, {headers})
> -macro(tsan_compile obj_list source arch)
> - get_filename_component(basename ${source} NAME)
> - set(output_obj "${basename}.${arch}.o")
> - get_target_flags_for_arch(${arch} TARGET_CFLAGS)
> - set(COMPILE_DEPS ${TSAN_RTL_HEADERS} ${ARGN})
> - if(NOT COMPILER_RT_STANDALONE_BUILD)
> - list(APPEND COMPILE_DEPS gtest tsan)
> - endif()
> - clang_compile(${output_obj} ${source}
> - CFLAGS ${TSAN_UNITTEST_CFLAGS} ${TARGET_CFLAGS}
> - DEPS ${COMPILE_DEPS})
> - list(APPEND ${obj_list} ${output_obj})
> -endmacro()
> -
> macro(add_tsan_unittest testname)
> set(TSAN_TEST_ARCH ${TSAN_SUPPORTED_ARCH})
> if(APPLE)
> @@ -48,7 +33,12 @@ macro(add_tsan_unittest testname)
> cmake_parse_arguments(TEST "" "" "SOURCES;HEADERS" ${ARGN})
> set(TEST_OBJECTS)
> foreach(SOURCE ${TEST_SOURCES} ${COMPILER_RT_GTEST_SOURCE})
> - tsan_compile(TEST_OBJECTS ${SOURCE} ${arch} ${TEST_HEADERS})
> + sanitizer_test_compile(
> + TEST_OBJECTS ${SOURCE} ${arch}
> + COMPILE_DEPS ${TSAN_RTL_HEADERS} ${TEST_HEADERS}
> + DEPS gtest tsan
> + CFLAGS ${TSAN_UNITTEST_CFLAGS}
> + )
> endforeach()
> get_target_flags_for_arch(${arch} TARGET_LINK_FLAGS)
> set(TEST_DEPS ${TEST_OBJECTS})
>
> Modified: compiler-rt/trunk/lib/xray/tests/CMakeLists.txt
> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/xray/tests/CMakeLists.txt?rev=309405&r1=309404&r2=309405&view=diff <http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/xray/tests/CMakeLists.txt?rev=309405&r1=309404&r2=309405&view=diff>
> ==============================================================================
> --- compiler-rt/trunk/lib/xray/tests/CMakeLists.txt (original)
> +++ compiler-rt/trunk/lib/xray/tests/CMakeLists.txt Fri Jul 28 10:32:37 2017
> @@ -11,19 +11,6 @@ set(XRAY_UNITTEST_CFLAGS
> -I${COMPILER_RT_SOURCE_DIR}/lib/xray
> -I${COMPILER_RT_SOURCE_DIR}/lib)
>
> -macro(xray_compile obj_list source arch)
> - get_filename_component(basename ${source} NAME)
> - set(output_obj "${basename}.${arch}.o")
> - get_target_flags_for_arch(${arch} TARGET_CFLAGS)
> - if(NOT COMPILER_RT_STANDALONE_BUILD)
> - list(APPEND COMPILE_DEPS gtest_main xray)
> - endif()
> - clang_compile(${output_obj} ${source}
> - CFLAGS ${XRAY_UNITTEST_CFLAGS} ${TARGET_CFLAGS}
> - DEPS ${COMPILE_DEPS})
> - list(APPEND ${obj_list} ${output_obj})
> -endmacro()
> -
> macro(add_xray_unittest testname)
> set(XRAY_TEST_ARCH ${XRAY_SUPPORTED_ARCH})
> if (APPLE)
> @@ -34,7 +21,9 @@ macro(add_xray_unittest testname)
> cmake_parse_arguments(TEST "" "" "SOURCES;HEADERS" ${ARGN})
> set(TEST_OBJECTS)
> foreach(SOURCE ${TEST_SOURCES} ${COMPILER_RT_GTEST_SOURCE})
> - xray_compile(TEST_OBJECTS ${SOURCE} ${arch} ${TEST_HEADERS})
> + sanitizer_test_compile(TEST_OBJECTS ${SOURCE} ${arch}
> + DEPS gtest_main xray
> + CFLAGS ${XRAY_UNITTEST_CFLAGS})
> endforeach()
> get_target_flags_for_arch(${arch} TARGET_LINK_FLAGS)
> set(TEST_DEPS ${TEST_OBJECTS})
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org <mailto:llvm-commits at lists.llvm.org>
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170728/e223a5c5/attachment-0001.html>
More information about the llvm-commits
mailing list