Support MemorySanitizer builds with CMake
Bug: b/155148722
Change-Id: Ic7cbd90f696d3a59a11a9fb54fcdef6325b99197
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/49168
Reviewed-by: Antonio Maiorano <amaiorano@google.com>
Kokoro-Result: kokoro <noreply+kokoro@google.com>
Tested-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9dd2808..c50fc2b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -339,8 +339,10 @@
macro(set_linker_flag FLAG)
if(${ARGC} GREATER 1)
set(CMAKE_EXE_LINKER_FLAGS_${ARGV1} "${CMAKE_EXE_LINKER_FLAGS_${ARGV1}} ${FLAG}")
+ set(CMAKE_SHARED_LINKER_FLAGS_${ARGV1} "${CMAKE_EXE_LINKER_FLAGS_${ARGV1}} ${FLAG}")
else()
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${FLAG}")
+ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${FLAG}")
endif()
endmacro()
@@ -508,8 +510,23 @@
set_cpp_flag("-fomit-frame-pointer" RELEASE)
if(SWIFTSHADER_MSAN)
+ if(NOT DEFINED ENV{SWIFTSHADER_MSAN_INSTRUMENTED_LIBCXX_PATH})
+
+ message(FATAL_ERROR " \n"
+ " MemorySanitizer usage requires an instrumented build of libc++.\n"
+ " Set the SWIFTSHADER_MSAN_INSTRUMENTED_LIBCXX_PATH environment variable to the\n"
+ " build output path. See\n"
+ " https://github.com/google/sanitizers/wiki/MemorySanitizerLibcxxHowTo#instrumented-libc\n"
+ " for details on how to build an MSan instrumented libc++.")
+ endif()
+
set_cpp_flag("-fsanitize=memory")
set_linker_flag("-fsanitize=memory")
+ set_cpp_flag("-stdlib=libc++")
+ set_linker_flag("-L$ENV{SWIFTSHADER_MSAN_INSTRUMENTED_LIBCXX_PATH}/lib")
+ set_cpp_flag("-I$ENV{SWIFTSHADER_MSAN_INSTRUMENTED_LIBCXX_PATH}/include")
+ set_cpp_flag("-I$ENV{SWIFTSHADER_MSAN_INSTRUMENTED_LIBCXX_PATH}/include/c++/v1")
+ set_linker_flag("-Wl,-rpath,$ENV{SWIFTSHADER_MSAN_INSTRUMENTED_LIBCXX_PATH}/lib")
elseif(SWIFTSHADER_ASAN)
set_cpp_flag("-fsanitize=address")
set_linker_flag("-fsanitize=address")