瀏覽代碼

Various Linux fixes
- ASAN
- Unaligned access with clang
- Warnings

Panagiotis Christopoulos Charitos 5 月之前
父節點
當前提交
db6d24ac1d
共有 6 個文件被更改,包括 14 次插入10 次删除
  1. 4 1
      AnKi/Config.h.cmake
  2. 1 1
      AnKi/Shaders/CMakeLists.txt
  3. 2 1
      AnKi/Util/Singleton.h
  4. 4 6
      CMakeLists.txt
  5. 1 1
      ThirdParty/ImGui/CMakeLists.txt
  6. 2 0
      Tools/SanitizerBlacklist.txt

+ 4 - 1
AnKi/Config.h.cmake

@@ -190,6 +190,7 @@
 #	define ANKI_PREFETCH_MEMORY(addr) __builtin_prefetch(addr)
 #	define ANKI_CHECK_FORMAT(fmtArgIdx, firstArgIdx) __attribute__((format(printf, fmtArgIdx + 1, firstArgIdx + 1))) // On methods you need to include "this"
 #	define ANKI_PURE __attribute__((pure))
+#	define ANKI_NO_SANITIZE __attribute__((no_sanitize("address")))
 #elif ANKI_COMPILER_MSVC
 #	define ANKI_RESTRICT
 #	define ANKI_FORCE_INLINE __forceinline
@@ -201,6 +202,7 @@
 #	define ANKI_PREFETCH_MEMORY(addr) (void)(addr)
 #	define ANKI_CHECK_FORMAT(fmtArgIdx, firstArgIdx)
 #	define ANKI_PURE
+#	define ANKI_NO_SANITIZE
 #else
 #	define ANKI_RESTRICT
 #	define ANKI_FORCE_INLINE
@@ -212,6 +214,7 @@
 #	define ANKI_PREFETCH_MEMORY(addr) (void)(addr)
 #	define ANKI_CHECK_FORMAT(fmtArgIdx, firstArgIdx)
 #	define ANKI_PURE
+#	define ANKI_NO_SANITIZE
 #endif
 
 namespace anki {
@@ -274,7 +277,7 @@ inline constexpr const char* kAnKiBuildConfigString =
 #endif
 
 // Constants
-#define ANKI_SAFE_ALIGNMENT 16
+#define ANKI_SAFE_ALIGNMENT 32
 #define ANKI_CACHE_LINE_SIZE 64
 
 // Misc

+ 1 - 1
AnKi/Shaders/CMakeLists.txt

@@ -67,7 +67,7 @@ foreach(prog_fname ${prog_fnames})
 
 	add_custom_command(
 		OUTPUT ${bin_fname}
-		COMMAND ${shader_compiler_bin} -o ${bin_fname} -j ${proc_count} -I "${CMAKE_CURRENT_SOURCE_DIR}/../.." ${extra_compiler_args} ${prog_fname}
+		COMMAND ${CMAKE_COMMAND} -E env "ASAN_OPTIONS=suppressions=${CMAKE_CURRENT_SOURCE_DIR}/../../Tools/SanitizerBlacklist.txt" "${CMAKE_BINARY_DIR}/Binaries/${shader_compiler_bin}" -o ${bin_fname} -j ${proc_count} -I "${CMAKE_CURRENT_SOURCE_DIR}/../.." ${extra_compiler_args} ${prog_fname}
 		DEPENDS ${shader_compiler_dep} ${prog_fname} ${deps}
 		COMMENT "Build ${prog_fname}")
 

+ 2 - 1
AnKi/Util/Singleton.h

@@ -5,6 +5,7 @@
 
 #pragma once
 
+#include "AnKi/Config.h"
 #include <AnKi/Util/StdTypes.h>
 #include <AnKi/Util/Assert.h>
 #include <utility>
@@ -60,7 +61,7 @@ public:
 	}
 
 private:
-	static U8 m_global[];
+	alignas(ANKI_SAFE_ALIGNMENT) static U8 m_global[];
 	static inline Bool m_initialized = false;
 };
 

+ 4 - 6
CMakeLists.txt

@@ -236,11 +236,6 @@ if(NOT MSVC)
 
 	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti")
 
-	if(ANKI_LTO)
-		add_compile_options(-flto)
-		set(LINKER_FLAGS "${LINKER_FLAGS} -flto ")
-	endif()
-
 	if(ANKI_STRIP)
 		set(LINKER_FLAGS "${LINKER_FLAGS} -s ")
 		add_compile_options(-s)
@@ -248,6 +243,7 @@ if(NOT MSVC)
 
 	if(ANKI_ADDRESS_SANITIZER)
 		add_compile_options(-fsanitize=address)
+		add_link_options(-fsanitize=address)
 	endif()
 
 	if(${CMAKE_BUILD_TYPE} STREQUAL "Release")
@@ -301,7 +297,9 @@ if(UNIX AND NOT APPLE)
 	endif()
 endif()
 
-set(CMAKE_INTERPROCEDURAL_OPTIMIZATION ON)
+if(ANKI_LTO)
+	set(CMAKE_INTERPROCEDURAL_OPTIMIZATION ON)
+endif()
 
 ################################################################################
 # Thirdparty                                                                   #

+ 1 - 1
ThirdParty/ImGui/CMakeLists.txt

@@ -5,7 +5,7 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR})
 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../..)
 include_directories(${CMAKE_CURRENT_BINARY_DIR}/../..)
 if(NOT MSVC)
-	add_compile_options(-std=c++20)
+	add_compile_options(-std=c++20 -Wno-nontrivial-memcall)
 else()
 	add_compile_options(/std:c++20)
 endif()

+ 2 - 0
Tools/SanitizerBlacklist.txt

@@ -0,0 +1,2 @@
+# Disable ASAN for DXC
+interceptor_via_lib:libdxcompiler.so