ci(amd64/clang/msan): fix msan errors #59
					 11 changed files with 710 additions and 322 deletions
				
			
		
							
								
								
									
										289
									
								
								.drone.yml
									
										
									
									
									
								
							
							
						
						
									
										289
									
								
								.drone.yml
									
										
									
									
									
								
							| 
						 | 
					@ -1,42 +1,42 @@
 | 
				
			||||||
---
 | 
					# ---
 | 
				
			||||||
kind: pipeline
 | 
					# kind: pipeline
 | 
				
			||||||
type: exec
 | 
					# type: exec
 | 
				
			||||||
name: amd64 — msvc
 | 
					# name: amd64 — msvc
 | 
				
			||||||
trigger:
 | 
					# trigger:
 | 
				
			||||||
  branch:
 | 
					#   branch:
 | 
				
			||||||
  - main
 | 
					#   - main
 | 
				
			||||||
platform:
 | 
					# platform:
 | 
				
			||||||
  os: windows
 | 
					#   os: windows
 | 
				
			||||||
  arch: amd64
 | 
					#   arch: amd64
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
steps:
 | 
					# steps:
 | 
				
			||||||
- name: unit tests
 | 
					# - name: unit tests
 | 
				
			||||||
  shell: powershell
 | 
					#   shell: powershell
 | 
				
			||||||
  commands: 
 | 
					#   commands: 
 | 
				
			||||||
    - ./tools/ci/amd64/msvc/unit_tests.ps1
 | 
					#     - ./tools/ci/amd64/msvc/unit_tests.ps1
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
---
 | 
					# ---
 | 
				
			||||||
kind: pipeline
 | 
					# kind: pipeline
 | 
				
			||||||
type: docker
 | 
					# type: docker
 | 
				
			||||||
name: amd64 — gcc
 | 
					# name: amd64 — gcc
 | 
				
			||||||
trigger:
 | 
					# trigger:
 | 
				
			||||||
  branch:
 | 
					#   branch:
 | 
				
			||||||
  - main
 | 
					#   - main
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
steps:
 | 
					# steps:
 | 
				
			||||||
- name: unit tests
 | 
					# - name: unit tests
 | 
				
			||||||
  image: ci:latest
 | 
					#   image: ci:latest
 | 
				
			||||||
  pull: if-not-exists
 | 
					#   pull: if-not-exists
 | 
				
			||||||
  commands:
 | 
					#   commands:
 | 
				
			||||||
    - ./tools/ci/amd64/gcc/unit_tests.sh
 | 
					#     - ./tools/ci/amd64/gcc/unit_tests.sh
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
- name: valgrind
 | 
					# - name: valgrind
 | 
				
			||||||
  image: ci:latest
 | 
					#   image: ci:latest
 | 
				
			||||||
  pull: if-not-exists
 | 
					#   pull: if-not-exists
 | 
				
			||||||
  commands:
 | 
					#   commands:
 | 
				
			||||||
    - ./tools/ci/amd64/gcc/valgrind.sh
 | 
					#     - ./tools/ci/amd64/gcc/valgrind.sh
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
---
 | 
					# ---
 | 
				
			||||||
kind: pipeline
 | 
					kind: pipeline
 | 
				
			||||||
type: docker
 | 
					type: docker
 | 
				
			||||||
name: amd64 — clang
 | 
					name: amd64 — clang
 | 
				
			||||||
| 
						 | 
					@ -45,113 +45,114 @@ trigger:
 | 
				
			||||||
  - main
 | 
					  - main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
steps:
 | 
					steps:
 | 
				
			||||||
- name: code coverage
 | 
					# - name: code coverage
 | 
				
			||||||
  image: ci:latest
 | 
					#   image: ci:latest
 | 
				
			||||||
  pull: if-not-exists
 | 
					#   pull: if-not-exists
 | 
				
			||||||
  environment:
 | 
					#   environment:
 | 
				
			||||||
    CODECOV_TOKEN:
 | 
					#     CODECOV_TOKEN:
 | 
				
			||||||
      from_secret: CODECOV_TOKEN 
 | 
					#       from_secret: CODECOV_TOKEN 
 | 
				
			||||||
  commands:
 | 
					#   commands:
 | 
				
			||||||
    - ./tools/ci/amd64/clang/coverage.sh
 | 
					#     - ./tools/ci/amd64/clang/coverage.sh
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
- name: leak sanitizer
 | 
					# - name: leak sanitizer
 | 
				
			||||||
  image: ci:latest
 | 
					#   image: ci:latest
 | 
				
			||||||
  pull: if-not-exists
 | 
					#   pull: if-not-exists
 | 
				
			||||||
  commands:
 | 
					#   commands:
 | 
				
			||||||
    - ./tools/ci/amd64/clang/lsan.sh
 | 
					#     - ./tools/ci/amd64/clang/lsan.sh
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
- name: memory sanitizer
 | 
					- name: memory sanitizer
 | 
				
			||||||
  image: ci:latest
 | 
					  image: ci:latest
 | 
				
			||||||
  pull: if-not-exists
 | 
					  pull: if-not-exists
 | 
				
			||||||
  commands:
 | 
					  commands:
 | 
				
			||||||
    - ./tools/ci/amd64/clang/msan.sh
 | 
					    - ./tools/ci/amd64/clang/msan.sh
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
---
 | 
					# ---
 | 
				
			||||||
kind: pipeline
 | 
					# kind: pipeline
 | 
				
			||||||
type: docker
 | 
					# type: docker
 | 
				
			||||||
name: static analysis
 | 
					# name: static analysis
 | 
				
			||||||
trigger:
 | 
					# trigger:
 | 
				
			||||||
  branch:
 | 
					#   branch:
 | 
				
			||||||
  - main
 | 
					#   - main
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
steps:
 | 
					# steps:
 | 
				
			||||||
- name: clang tidy
 | 
					# - name: clang tidy
 | 
				
			||||||
  image: ci:latest
 | 
					#   image: ci:latest
 | 
				
			||||||
  pull: if-not-exists
 | 
					#   pull: if-not-exists
 | 
				
			||||||
  privileged: true
 | 
					#   privileged: true
 | 
				
			||||||
  commands:
 | 
					#   commands:
 | 
				
			||||||
    - ./tools/ci/static_analysis/clang_tidy.sh
 | 
					#     - ./tools/ci/static_analysis/clang_tidy.sh
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
- name: shell check
 | 
					# - name: shell check
 | 
				
			||||||
  image: ci:latest
 | 
					#   image: ci:latest
 | 
				
			||||||
  pull: if-not-exists
 | 
					#   pull: if-not-exists
 | 
				
			||||||
  commands:
 | 
					#   commands:
 | 
				
			||||||
    - ./tools/ci/static_analysis/shell_check.sh
 | 
					#     - ./tools/ci/static_analysis/shell_check.sh
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
- name: clang format
 | 
					# - name: clang format
 | 
				
			||||||
  image: ci:latest
 | 
					#   image: ci:latest
 | 
				
			||||||
  pull: if-not-exists
 | 
					#   pull: if-not-exists
 | 
				
			||||||
  commands:
 | 
					#   commands:
 | 
				
			||||||
    - ./tools/ci/static_analysis/clang_format.sh
 | 
					#     - ./tools/ci/static_analysis/clang_format.sh
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
- name: cmake format
 | 
					# - name: cmake format
 | 
				
			||||||
  image: ci:latest
 | 
					#   image: ci:latest
 | 
				
			||||||
  pull: if-not-exists
 | 
					#   pull: if-not-exists
 | 
				
			||||||
  commands:
 | 
					#   commands:
 | 
				
			||||||
    - ./tools/ci/static_analysis/cmake_format.sh
 | 
					#     - ./tools/ci/static_analysis/cmake_format.sh
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
- name: shell format
 | 
					# - name: shell format
 | 
				
			||||||
  image: ci:latest
 | 
					#   image: ci:latest
 | 
				
			||||||
  pull: if-not-exists
 | 
					#   pull: if-not-exists
 | 
				
			||||||
  commands:
 | 
					#   commands:
 | 
				
			||||||
    - ./tools/ci/static_analysis/shell_format.sh
 | 
					#     - ./tools/ci/static_analysis/shell_format.sh
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
---
 | 
					# ---
 | 
				
			||||||
kind: pipeline
 | 
					# kind: pipeline
 | 
				
			||||||
type: docker 
 | 
					# type: docker 
 | 
				
			||||||
name: documentation — development
 | 
					# name: documentation — development
 | 
				
			||||||
node:
 | 
					# node:
 | 
				
			||||||
  environment: ryali
 | 
					#   environment: ryali
 | 
				
			||||||
trigger:
 | 
					# trigger:
 | 
				
			||||||
  branch:
 | 
					#   branch:
 | 
				
			||||||
  - main
 | 
					#   - main
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
steps:
 | 
					# steps:
 | 
				
			||||||
- name: build and deploy
 | 
					# - name: build and deploy
 | 
				
			||||||
  image: documentation:latest
 | 
					#   image: documentation:latest
 | 
				
			||||||
  pull: if-not-exists
 | 
					#   pull: if-not-exists
 | 
				
			||||||
  commands:
 | 
					#   commands:
 | 
				
			||||||
    - pwd
 | 
					#     - pwd
 | 
				
			||||||
    - cd docs
 | 
					#     - cd docs
 | 
				
			||||||
    - mkdir generated
 | 
					#     - mkdir generated
 | 
				
			||||||
    - touch generated/changelogs.rst
 | 
					#     - touch generated/changelogs.rst
 | 
				
			||||||
    - touch generated/api.rst
 | 
					#     - touch generated/api.rst
 | 
				
			||||||
    - sphinx-build -M html . .
 | 
					#     - sphinx-build -M html . .
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
    - rm -rf /light_docs_dev/*
 | 
					#     - rm -rf /light_docs_dev/*
 | 
				
			||||||
    - mv ./html/* /light_docs_dev/
 | 
					#     - mv ./html/* /light_docs_dev/
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
---
 | 
					# ---
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
kind: pipeline
 | 
					# kind: pipeline
 | 
				
			||||||
type: docker
 | 
					# type: docker
 | 
				
			||||||
name: documentation — production
 | 
					# name: documentation — production
 | 
				
			||||||
node:
 | 
					# node:
 | 
				
			||||||
  environment: ryali
 | 
					#   environment: ryali
 | 
				
			||||||
trigger:
 | 
					# trigger:
 | 
				
			||||||
  event:
 | 
					#   event:
 | 
				
			||||||
  - tag
 | 
					#   - tag
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
steps:
 | 
					# steps:
 | 
				
			||||||
- name: build and deploy
 | 
					# - name: build and deploy
 | 
				
			||||||
  image: documentation:latest
 | 
					#   image: documentation:latest
 | 
				
			||||||
  pull: if-not-exists
 | 
					#   pull: if-not-exists
 | 
				
			||||||
  commands:
 | 
					#   commands:
 | 
				
			||||||
    - cd docs
 | 
					#     - cd docs
 | 
				
			||||||
    - mkdir generated
 | 
					#     - mkdir generated
 | 
				
			||||||
    - touch generated/changelogs.rst
 | 
					#     - touch generated/changelogs.rst
 | 
				
			||||||
    - touch generated/api.rst
 | 
					#     - touch generated/api.rst
 | 
				
			||||||
    - sphinx-build -M html . .
 | 
					#     - sphinx-build -M html . .
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
    - rm -rf /light_docs/*
 | 
					#     - rm -rf /light_docs/*
 | 
				
			||||||
    - mv ./html/* /light_docs/
 | 
					#     - mv ./html/* /light_docs/
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,18 +2,25 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace lt::assets {
 | 
					namespace lt::assets {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					constexpr auto total_metadata_size =         //
 | 
				
			||||||
 | 
					    sizeof(AssetMetadata::type)              //
 | 
				
			||||||
 | 
					    + sizeof(AssetMetadata::version)         //
 | 
				
			||||||
 | 
					    + sizeof(ShaderAsset::Metadata::type)    //
 | 
				
			||||||
 | 
					    + sizeof(BlobMetadata::tag)              //
 | 
				
			||||||
 | 
					    + sizeof(BlobMetadata::offset)           //
 | 
				
			||||||
 | 
					    + sizeof(BlobMetadata::compression_type) //
 | 
				
			||||||
 | 
					    + sizeof(BlobMetadata::compressed_size)  //
 | 
				
			||||||
 | 
					    + sizeof(BlobMetadata::uncompressed_size);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ShaderAsset::ShaderAsset(const std::filesystem::path &path): m_stream(path)
 | 
					ShaderAsset::ShaderAsset(const std::filesystem::path &path): m_stream(path)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	constexpr auto total_metadata_size = //
 | 
					 | 
				
			||||||
	    sizeof(AssetMetadata)            //
 | 
					 | 
				
			||||||
	    + sizeof(Metadata)               //
 | 
					 | 
				
			||||||
	    + sizeof(BlobMetadata);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	ensure(m_stream.is_open(), "Failed to open shader asset at: {}", path.string());
 | 
						ensure(m_stream.is_open(), "Failed to open shader asset at: {}", path.string());
 | 
				
			||||||
 | 
						const auto read = [this](auto &field) {
 | 
				
			||||||
 | 
							m_stream.read(std::bit_cast<char *>(&field), sizeof(field));
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	m_stream.seekg(0, std::ifstream::end);
 | 
						m_stream.seekg(0, std::ifstream::end);
 | 
				
			||||||
	const auto file_size = static_cast<size_t>(m_stream.tellg());
 | 
						const auto file_size = static_cast<size_t>(m_stream.tellg());
 | 
				
			||||||
 | 
					 | 
				
			||||||
	ensure(
 | 
						ensure(
 | 
				
			||||||
	    file_size > total_metadata_size,
 | 
						    file_size > total_metadata_size,
 | 
				
			||||||
	    "Failed to open shader asset at: {}, file smaller than metadata: {} < {}",
 | 
						    "Failed to open shader asset at: {}, file smaller than metadata: {} < {}",
 | 
				
			||||||
| 
						 | 
					@ -22,12 +29,15 @@ ShaderAsset::ShaderAsset(const std::filesystem::path &path): m_stream(path)
 | 
				
			||||||
	    file_size
 | 
						    file_size
 | 
				
			||||||
	);
 | 
						);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// NOLINTBEGIN(cppcoreguidelines-pro-type-cstyle-cast)
 | 
					 | 
				
			||||||
	m_stream.seekg(0, std::ifstream::beg);
 | 
						m_stream.seekg(0, std::ifstream::beg);
 | 
				
			||||||
	m_stream.read((char *)&m_asset_metadata, sizeof(m_asset_metadata));
 | 
						read(m_asset_metadata.type);
 | 
				
			||||||
	m_stream.read((char *)&m_metadata, sizeof(m_metadata));
 | 
						read(m_asset_metadata.version);
 | 
				
			||||||
	m_stream.read((char *)&m_code_blob_metadata, sizeof(m_code_blob_metadata));
 | 
						read(m_metadata.type);
 | 
				
			||||||
	// NOLINTEND(cppcoreguidelines-pro-type-cstyle-cast)
 | 
						read(m_code_blob_metadata.tag);
 | 
				
			||||||
 | 
						read(m_code_blob_metadata.offset);
 | 
				
			||||||
 | 
						read(m_code_blob_metadata.compression_type);
 | 
				
			||||||
 | 
						read(m_code_blob_metadata.compressed_size);
 | 
				
			||||||
 | 
						read(m_code_blob_metadata.uncompressed_size);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ensure(
 | 
						ensure(
 | 
				
			||||||
	    m_asset_metadata.type == asset_type_identifier,
 | 
						    m_asset_metadata.type == asset_type_identifier,
 | 
				
			||||||
| 
						 | 
					@ -69,4 +79,70 @@ ShaderAsset::ShaderAsset(const std::filesystem::path &path): m_stream(path)
 | 
				
			||||||
	);
 | 
						);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* static */ void ShaderAsset::pack(
 | 
				
			||||||
 | 
					    const std::filesystem::path &destination,
 | 
				
			||||||
 | 
					    AssetMetadata asset_metadata,
 | 
				
			||||||
 | 
					    Metadata metadata,
 | 
				
			||||||
 | 
					    Blob code_blob
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						auto stream = std::ofstream {
 | 
				
			||||||
 | 
							destination,
 | 
				
			||||||
 | 
							std::ios::binary | std::ios::trunc,
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						const auto code_blob_metadata = BlobMetadata {
 | 
				
			||||||
 | 
							.tag = std::to_underlying(BlobTag::code),
 | 
				
			||||||
 | 
							.offset = total_metadata_size,
 | 
				
			||||||
 | 
							.compression_type = CompressionType::none,
 | 
				
			||||||
 | 
							.compressed_size = code_blob.size(),
 | 
				
			||||||
 | 
							.uncompressed_size = code_blob.size(),
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ensure(stream.is_open(), "Failed to pack shader asset to {}", destination.string());
 | 
				
			||||||
 | 
						const auto write = [&stream](auto &field) {
 | 
				
			||||||
 | 
							stream.write(std::bit_cast<char *>(&field), sizeof(field));
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
						write(asset_metadata.type);
 | 
				
			||||||
 | 
						write(asset_metadata.version);
 | 
				
			||||||
 | 
						write(metadata.type);
 | 
				
			||||||
 | 
						write(code_blob_metadata.tag);
 | 
				
			||||||
 | 
						write(code_blob_metadata.offset);
 | 
				
			||||||
 | 
						write(code_blob_metadata.compression_type);
 | 
				
			||||||
 | 
						write(code_blob_metadata.compressed_size);
 | 
				
			||||||
 | 
						write(code_blob_metadata.uncompressed_size);
 | 
				
			||||||
 | 
						stream.write(std::bit_cast<char *>(code_blob.data()), static_cast<long long>(code_blob.size()));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ShaderAsset::unpack_to(BlobTag tag, std::span<std::byte> destination) const
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						ensure(tag == BlobTag::code, "Invalid blob tag for shader asset: {}", std::to_underlying(tag));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ensure(
 | 
				
			||||||
 | 
						    destination.size() >= m_code_blob_metadata.uncompressed_size,
 | 
				
			||||||
 | 
						    "Failed to unpack shader blob {} to destination ({}) of size {} since it's smaller "
 | 
				
			||||||
 | 
						    "than the blobl's uncompressed size: {}",
 | 
				
			||||||
 | 
						    std::to_underlying(tag),
 | 
				
			||||||
 | 
						    std::bit_cast<size_t>(destination.data()),
 | 
				
			||||||
 | 
						    destination.size(),
 | 
				
			||||||
 | 
						    m_code_blob_metadata.uncompressed_size
 | 
				
			||||||
 | 
						);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						m_stream.seekg(static_cast<long long>(m_code_blob_metadata.offset));
 | 
				
			||||||
 | 
						m_stream.read(
 | 
				
			||||||
 | 
						    std::bit_cast<char *>(destination.data()),
 | 
				
			||||||
 | 
						    static_cast<long long>(m_code_blob_metadata.uncompressed_size)
 | 
				
			||||||
 | 
						);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[nodiscard]] auto ShaderAsset::unpack(BlobTag tag) const -> Blob
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						ensure(tag == BlobTag::code, "Invalid blob tag for shader asset: {}", std::to_underlying(tag));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						auto blob = Blob(m_code_blob_metadata.uncompressed_size);
 | 
				
			||||||
 | 
						unpack_to(tag, blob);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return blob;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
} // namespace lt::assets
 | 
					} // namespace lt::assets
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -40,10 +40,15 @@ Suite packing = "shader_pack"_suite = [] {
 | 
				
			||||||
			dummy_blob.emplace_back(static_cast<std::byte>(idx));
 | 
								dummy_blob.emplace_back(static_cast<std::byte>(idx));
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		const auto expected_size =          //
 | 
							const auto expected_size =                    //
 | 
				
			||||||
		    sizeof(AssetMetadata)           //
 | 
							    sizeof(AssetMetadata::type)               //
 | 
				
			||||||
		    + sizeof(ShaderAsset::Metadata) //
 | 
							    + sizeof(AssetMetadata::version)          //
 | 
				
			||||||
		    + sizeof(BlobMetadata)          //
 | 
							    + sizeof(ShaderAsset::Metadata::type)     //
 | 
				
			||||||
 | 
							    + sizeof(BlobMetadata::tag)               //
 | 
				
			||||||
 | 
							    + sizeof(BlobMetadata::offset)            //
 | 
				
			||||||
 | 
							    + sizeof(BlobMetadata::compression_type)  //
 | 
				
			||||||
 | 
							    + sizeof(BlobMetadata::compressed_size)   //
 | 
				
			||||||
 | 
							    + sizeof(BlobMetadata::uncompressed_size) //
 | 
				
			||||||
		    + dummy_blob.size();
 | 
							    + dummy_blob.size();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ShaderAsset::pack(
 | 
							ShaderAsset::pack(
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -32,33 +32,14 @@ public:
 | 
				
			||||||
	    AssetMetadata asset_metadata,
 | 
						    AssetMetadata asset_metadata,
 | 
				
			||||||
	    Metadata metadata,
 | 
						    Metadata metadata,
 | 
				
			||||||
	    Blob code_blob
 | 
						    Blob code_blob
 | 
				
			||||||
	)
 | 
						);
 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		auto stream = std::ofstream {
 | 
					 | 
				
			||||||
			destination,
 | 
					 | 
				
			||||||
			std::ios::binary | std::ios::trunc,
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
		ensure(stream.is_open(), "Failed to pack shader asset to {}", destination.string());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		// NOLINTBEGIN(cppcoreguidelines-pro-type-cstyle-cast)
 | 
					 | 
				
			||||||
		stream.write((char *)&asset_metadata, sizeof(asset_metadata));
 | 
					 | 
				
			||||||
		stream.write((char *)&metadata, sizeof(metadata));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		auto code_blob_metadata = BlobMetadata {
 | 
					 | 
				
			||||||
			.tag = std::to_underlying(BlobTag::code),
 | 
					 | 
				
			||||||
			.offset = static_cast<size_t>(stream.tellp()) + sizeof(BlobMetadata),
 | 
					 | 
				
			||||||
			.compression_type = CompressionType::none,
 | 
					 | 
				
			||||||
			.compressed_size = code_blob.size(),
 | 
					 | 
				
			||||||
			.uncompressed_size = code_blob.size(),
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
		stream.write((char *)&code_blob_metadata, sizeof(BlobMetadata));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		stream.write((char *)code_blob.data(), static_cast<long long>(code_blob.size()));
 | 
					 | 
				
			||||||
		// NOLINTEND(cppcoreguidelines-pro-type-cstyle-cast)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ShaderAsset(const std::filesystem::path &path);
 | 
						ShaderAsset(const std::filesystem::path &path);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						void unpack_to(BlobTag tag, std::span<std::byte> destination) const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						[[nodiscard]] auto unpack(BlobTag tag) const -> Blob;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	[[nodiscard]] auto get_asset_metadata() const -> const AssetMetadata &
 | 
						[[nodiscard]] auto get_asset_metadata() const -> const AssetMetadata &
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		return m_asset_metadata;
 | 
							return m_asset_metadata;
 | 
				
			||||||
| 
						 | 
					@ -80,45 +61,6 @@ public:
 | 
				
			||||||
		return m_code_blob_metadata;
 | 
							return m_code_blob_metadata;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	void unpack_to(BlobTag tag, std::span<std::byte> destination) const
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		ensure(
 | 
					 | 
				
			||||||
		    tag == BlobTag::code,
 | 
					 | 
				
			||||||
		    "Invalid blob tag for shader asset: {}",
 | 
					 | 
				
			||||||
		    std::to_underlying(tag)
 | 
					 | 
				
			||||||
		);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		ensure(
 | 
					 | 
				
			||||||
		    destination.size() >= m_code_blob_metadata.uncompressed_size,
 | 
					 | 
				
			||||||
		    "Failed to unpack shader blob {} to destination ({}) of size {} since it's smaller "
 | 
					 | 
				
			||||||
		    "than the blobl's uncompressed size: {}",
 | 
					 | 
				
			||||||
		    std::to_underlying(tag),
 | 
					 | 
				
			||||||
		    (size_t)(destination.data()), // NOLINT(cppcoreguidelines-pro-type-cstyle-cast)
 | 
					 | 
				
			||||||
		    destination.size(),
 | 
					 | 
				
			||||||
		    m_code_blob_metadata.uncompressed_size
 | 
					 | 
				
			||||||
		);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		m_stream.seekg(static_cast<long long>(m_code_blob_metadata.offset));
 | 
					 | 
				
			||||||
		m_stream.read(
 | 
					 | 
				
			||||||
		    (char *)destination.data(), // NOLINT(cppcoreguidelines-pro-type-cstyle-cast)
 | 
					 | 
				
			||||||
		    static_cast<long long>(m_code_blob_metadata.uncompressed_size)
 | 
					 | 
				
			||||||
		);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	[[nodiscard]] auto unpack(BlobTag tag) const -> Blob
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		ensure(
 | 
					 | 
				
			||||||
		    tag == BlobTag::code,
 | 
					 | 
				
			||||||
		    "Invalid blob tag for shader asset: {}",
 | 
					 | 
				
			||||||
		    std::to_underlying(tag)
 | 
					 | 
				
			||||||
		);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		auto blob = Blob(m_code_blob_metadata.uncompressed_size);
 | 
					 | 
				
			||||||
		unpack_to(tag, blob);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		return blob;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
	AssetMetadata m_asset_metadata {};
 | 
						AssetMetadata m_asset_metadata {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -217,6 +217,7 @@ void Instance::initialize_instance()
 | 
				
			||||||
		vkc(vk_enumerate_instance_extension_properties(nullptr, &count, nullptr));
 | 
							vkc(vk_enumerate_instance_extension_properties(nullptr, &count, nullptr));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		auto extensions = std::vector<VkExtensionProperties>(count);
 | 
							auto extensions = std::vector<VkExtensionProperties>(count);
 | 
				
			||||||
 | 
							memset(extensions.data(), 0, extensions.size() * sizeof(VkExtensionProperties));
 | 
				
			||||||
		vkc(vk_enumerate_instance_extension_properties(nullptr, &count, extensions.data()));
 | 
							vkc(vk_enumerate_instance_extension_properties(nullptr, &count, extensions.data()));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// log_inf("Available vulkan instance extensions:");
 | 
							// log_inf("Available vulkan instance extensions:");
 | 
				
			||||||
| 
						 | 
					@ -232,7 +233,7 @@ void Instance::initialize_instance()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void Instance::load_library()
 | 
					void Instance::load_library()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	constexpr auto runtime_loader_flags = RTLD_NOW | RTLD_DEEPBIND | RTLD_LOCAL | RTLD_NODELETE;
 | 
						constexpr auto runtime_loader_flags = RTLD_NOW | RTLD_LOCAL | RTLD_NODELETE;
 | 
				
			||||||
	library = dlopen("libvulkan.so.1", runtime_loader_flags);
 | 
						library = dlopen("libvulkan.so.1", runtime_loader_flags);
 | 
				
			||||||
	if (!library)
 | 
						if (!library)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -75,7 +75,6 @@ private:
 | 
				
			||||||
	void load_instance_functions();
 | 
						void load_instance_functions();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	void load_device_functions_impl(VkDevice device);
 | 
						void load_device_functions_impl(VkDevice device);
 | 
				
			||||||
 | 
					 | 
				
			||||||
	VkInstance m_instance = VK_NULL_HANDLE;
 | 
						VkInstance m_instance = VK_NULL_HANDLE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	VkAllocationCallbacks *m_allocator = nullptr;
 | 
						VkAllocationCallbacks *m_allocator = nullptr;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -11,14 +11,18 @@
 | 
				
			||||||
#include <X11/keysym.h>
 | 
					#include <X11/keysym.h>
 | 
				
			||||||
#include <X11/keysymdef.h>
 | 
					#include <X11/keysymdef.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace lt::surface {
 | 
					namespace lt::surface {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
template<int EventType>
 | 
					template<int EventType>
 | 
				
			||||||
int XEventTypeEquals(Display *, XEvent *event, XPointer winptr)
 | 
					auto XEventTypeEquals(Display *display, XEvent *event, char *winptr) -> int
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						std::ignore = display;
 | 
				
			||||||
	return (
 | 
						return (
 | 
				
			||||||
	    event->type == EventType
 | 
						    event->type == EventType
 | 
				
			||||||
	    && *(reinterpret_cast<Window *>(winptr)) == reinterpret_cast<XAnyEvent *>(event)->window
 | 
						    && *(std::bit_cast<const Window *>(winptr))
 | 
				
			||||||
 | 
						           == std::bit_cast<const XAnyEvent *>(event)->window
 | 
				
			||||||
	);
 | 
						);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -160,7 +164,7 @@ try
 | 
				
			||||||
	XSetWMProtocols(display, main_window, &surface.m_native_data.wm_delete_message, 1);
 | 
						XSetWMProtocols(display, main_window, &surface.m_native_data.wm_delete_message, 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// code to remove decoration
 | 
						// code to remove decoration
 | 
				
			||||||
	auto hints = std::array<unsigned char, 5> { 2, 0, 0, 0, 0 };
 | 
						auto hints = std::array<const unsigned char, 5> { 2, 0, 0, 0, 0 };
 | 
				
			||||||
	const auto motif_hints = XInternAtom(display, "_MOTIF_WM_HINTS", False);
 | 
						const auto motif_hints = XInternAtom(display, "_MOTIF_WM_HINTS", False);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	XChangeProperty(
 | 
						XChangeProperty(
 | 
				
			||||||
| 
						 | 
					@ -340,7 +344,7 @@ void System::modify_resolution(SurfaceComponent &surface, const ModifyResolution
 | 
				
			||||||
	// XResizeWindow(display, window, width, height);
 | 
						// XResizeWindow(display, window, width, height);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// get baseline serial number for X requests generated from XResizeWindow
 | 
						// get baseline serial number for X requests generated from XResizeWindow
 | 
				
			||||||
	uint64_t serial = NextRequest(display);
 | 
						auto serial = NextRequest(display);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// request a new window size from the X server
 | 
						// request a new window size from the X server
 | 
				
			||||||
	XResizeWindow(display, window, static_cast<uint32_t>(width), static_cast<uint32_t>(height));
 | 
						XResizeWindow(display, window, static_cast<uint32_t>(width), static_cast<uint32_t>(height));
 | 
				
			||||||
| 
						 | 
					@ -396,7 +400,7 @@ void System::modify_position(SurfaceComponent &surface, const ModifyPositionRequ
 | 
				
			||||||
	const auto &[x, y] = request.position;
 | 
						const auto &[x, y] = request.position;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// get baseline serial number for X requests generated from XResizeWindow
 | 
						// get baseline serial number for X requests generated from XResizeWindow
 | 
				
			||||||
	uint64_t serial = NextRequest(display);
 | 
						auto serial = NextRequest(display);
 | 
				
			||||||
	XMoveWindow(display, window, static_cast<int>(x), static_cast<int>(y));
 | 
						XMoveWindow(display, window, static_cast<int>(x), static_cast<int>(y));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// flush output queue and wait for X server to processes the request
 | 
						// flush output queue and wait for X server to processes the request
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -16,7 +16,6 @@ using test::expect_eq;
 | 
				
			||||||
using test::expect_ne;
 | 
					using test::expect_ne;
 | 
				
			||||||
using test::expect_not_nullptr;
 | 
					using test::expect_not_nullptr;
 | 
				
			||||||
using test::expect_throw;
 | 
					using test::expect_throw;
 | 
				
			||||||
using test::expect_true;
 | 
					 | 
				
			||||||
using test::Suite;
 | 
					using test::Suite;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[[nodiscard]] auto tick_info() -> app::TickInfo
 | 
					[[nodiscard]] auto tick_info() -> app::TickInfo
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,99 +1,447 @@
 | 
				
			||||||
FROM archlinux:latest
 | 
					FROM archlinux:latest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Configurations ##
 | 
				
			||||||
 | 
					RUN \
 | 
				
			||||||
 | 
					mkdir /msan \
 | 
				
			||||||
 | 
					&& echo 'src:*' > /msan/ignorelist_all_sources \
 | 
				
			||||||
 | 
					&& sed -i 's/^#ParallelDownloads = .*/ParallelDownloads = 8/' /etc/pacman.conf \
 | 
				
			||||||
 | 
					&& echo 'NoExtract = usr/share/{man,doc,info}/*' >> /etc/pacman.conf
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Packages ##
 | 
					## Packages ##
 | 
				
			||||||
RUN \
 | 
					RUN \
 | 
				
			||||||
sed -i 's/^#ParallelDownloads = .*/ParallelDownloads = 8/' /etc/pacman.conf \
 | 
					pacman -Syyu --noconfirm --needed --disable-download-timeout \
 | 
				
			||||||
&& echo 'NoExtract = usr/share/{man,doc,info}/*' >> /etc/pacman.conf \
 | 
					    afl++ \
 | 
				
			||||||
&& pacman -Syyu --noconfirm --needed --disable-download-timeout \
 | 
					    afl-utils \
 | 
				
			||||||
afl++ \
 | 
					    base-devel \
 | 
				
			||||||
afl-utils \
 | 
					    bash \
 | 
				
			||||||
base-devel \
 | 
					    cbindgen \
 | 
				
			||||||
bash \
 | 
					    clang \
 | 
				
			||||||
clang \
 | 
					    cmake \
 | 
				
			||||||
cmake \
 | 
					    curl \
 | 
				
			||||||
curl \
 | 
					    debuginfod \
 | 
				
			||||||
expat \
 | 
					    directx-headers \
 | 
				
			||||||
gcc \
 | 
					    elfutils \
 | 
				
			||||||
gdb \
 | 
					    expat \
 | 
				
			||||||
git \
 | 
					    gcc \
 | 
				
			||||||
glm \
 | 
					    gcc-libs \
 | 
				
			||||||
libc++ \
 | 
					    gdb \
 | 
				
			||||||
libinput \
 | 
					    git \
 | 
				
			||||||
libpciaccess \
 | 
					    glibc \
 | 
				
			||||||
libpng \
 | 
					    glm \
 | 
				
			||||||
libunwind \
 | 
					    glslang \
 | 
				
			||||||
libx11 \
 | 
					    libc++ \
 | 
				
			||||||
libxcb \
 | 
					    libclc \
 | 
				
			||||||
libxcursor \
 | 
					    libdrm \
 | 
				
			||||||
libxi \
 | 
					    libelf \
 | 
				
			||||||
libxinerama \
 | 
					    libglvnd \
 | 
				
			||||||
libxpresent \
 | 
					    libinput \
 | 
				
			||||||
libxrandr \
 | 
					    libpciaccess \
 | 
				
			||||||
lz4 \
 | 
					    libpng \
 | 
				
			||||||
mesa \
 | 
					    libunwind \
 | 
				
			||||||
mold \
 | 
					    libva \
 | 
				
			||||||
ninja \
 | 
					    libx11 \
 | 
				
			||||||
python \
 | 
					    libxcb \
 | 
				
			||||||
python-distlib \
 | 
					    libxdamage \
 | 
				
			||||||
python-distutils-extra \
 | 
					    libxext \
 | 
				
			||||||
python-jsonschema \
 | 
					    libxfixes \
 | 
				
			||||||
qt5-base \
 | 
					    libxi \
 | 
				
			||||||
qt6-base \
 | 
					    libxinerama \
 | 
				
			||||||
valgrind \
 | 
					    libxml2 \
 | 
				
			||||||
vulkan-headers \
 | 
					    libxpresent \
 | 
				
			||||||
vulkan-icd-loader \
 | 
					    libxrandr \
 | 
				
			||||||
vulkan-tools \
 | 
					    libxshmfence \
 | 
				
			||||||
vulkan-validation-layers \
 | 
					    libxxf86vm \
 | 
				
			||||||
wayland \
 | 
					    lm_sensors \
 | 
				
			||||||
wayland-protocols \
 | 
					    llvm \
 | 
				
			||||||
wget \
 | 
					    lz4 \
 | 
				
			||||||
xcb-util \
 | 
					    meson \
 | 
				
			||||||
xcb-util-cursor \
 | 
					    mold \
 | 
				
			||||||
xcb-util-keysyms \
 | 
					    ninja \
 | 
				
			||||||
xcb-util-wm \
 | 
					    python \
 | 
				
			||||||
xorg-server-xvfb \
 | 
					    python-distlib \
 | 
				
			||||||
xorg-util-macros \
 | 
					    python-distutils-extra \
 | 
				
			||||||
xtrans \
 | 
					    python-jsonschema \
 | 
				
			||||||
zlib \
 | 
					    python-mako \
 | 
				
			||||||
zstd \
 | 
					    python-packaging \
 | 
				
			||||||
 | 
					    python-ply \
 | 
				
			||||||
 | 
					    python-pyaml \
 | 
				
			||||||
 | 
					    qt5-base \
 | 
				
			||||||
 | 
					    qt6-base \
 | 
				
			||||||
 | 
					    rust \
 | 
				
			||||||
 | 
					    rust-bindgen \
 | 
				
			||||||
 | 
					    spirv-llvm-translator \
 | 
				
			||||||
 | 
					    spirv-tools \
 | 
				
			||||||
 | 
					    systemd-libs \
 | 
				
			||||||
 | 
					    valgrind \
 | 
				
			||||||
 | 
					    vulkan-headers \
 | 
				
			||||||
 | 
					    vulkan-icd-loader \
 | 
				
			||||||
 | 
					    vulkan-tools \
 | 
				
			||||||
 | 
					    vulkan-validation-layers \
 | 
				
			||||||
 | 
					    wayland \
 | 
				
			||||||
 | 
					    wayland-protocols \
 | 
				
			||||||
 | 
					    wget \
 | 
				
			||||||
 | 
					    xcb-proto \
 | 
				
			||||||
 | 
					    xcb-util \
 | 
				
			||||||
 | 
					    xcb-util-cursor \
 | 
				
			||||||
 | 
					    xcb-util-keysyms \
 | 
				
			||||||
 | 
					    xcb-util-wm \
 | 
				
			||||||
 | 
					    xorg-server-xvfb \
 | 
				
			||||||
 | 
					    xorg-util-macros \
 | 
				
			||||||
 | 
					    xorgproto \
 | 
				
			||||||
 | 
					    xtrans \
 | 
				
			||||||
 | 
					    zlib \
 | 
				
			||||||
 | 
					    zstd \
 | 
				
			||||||
&& pacman -Scc --noconfirm
 | 
					&& pacman -Scc --noconfirm
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Sanitizers ##
 | 
					## Libc++ ##
 | 
				
			||||||
RUN \
 | 
					RUN \
 | 
				
			||||||
git clone --depth=1 https://github.com/llvm/llvm-project.git -b llvmorg-20.1.8 \
 | 
					git clone \
 | 
				
			||||||
&& mkdir llvm-project/build-lsan llvm-project/build-msan \
 | 
					    --branch llvmorg-20.1.8 \
 | 
				
			||||||
 | 
					    --depth=1 \
 | 
				
			||||||
 | 
					    https://github.com/llvm/llvm-project.git
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RUN git clone \
 | 
				
			||||||
 | 
					    --branch='25.2'\
 | 
				
			||||||
 | 
					    --depth=1 \
 | 
				
			||||||
 | 
					    https://gitlab.freedesktop.org/mesa/mesa.git
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RUN wget https://x.org/releases/individual/lib/libxcb-1.17.0.tar.xz
 | 
				
			||||||
 | 
					RUN wget https://x.org/releases/individual/lib/libX11-1.8.12.tar.xz
 | 
				
			||||||
 | 
					RUN wget 'https://sdk.lunarg.com/sdk/download/1.4.328.1/linux/vulkansdk-linux-x86_64-1.4.328.1.tar.xz'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RUN cd llvm-project/ \
 | 
				
			||||||
\
 | 
					\
 | 
				
			||||||
&& cd llvm-project/build-lsan \
 | 
					&& cmake \
 | 
				
			||||||
&& cmake -G Ninja \
 | 
					    -S ./runtimes \
 | 
				
			||||||
  -DCMAKE_BUILD_TYPE=Release \
 | 
					    -B ./build-lsan \
 | 
				
			||||||
  -DCMAKE_LINKER_TYPE="MOLD" \
 | 
					    -G Ninja \
 | 
				
			||||||
  -DCMAKE_INSTALL_PREFIX=/libcxx_lsan \
 | 
					    -D CMAKE_LINKER_TYPE="MOLD" \
 | 
				
			||||||
  -DCMAKE_C_COMPILER=clang \
 | 
					    -D CMAKE_BUILD_TYPE=Release \
 | 
				
			||||||
  -DCMAKE_CXX_COMPILER=clang++ \
 | 
					    -D CMAKE_INSTALL_PREFIX=/libcxx_lsan \
 | 
				
			||||||
  -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" \
 | 
					    -D CMAKE_C_COMPILER=$(which clang) \
 | 
				
			||||||
  -DLLVM_ENABLE_PIC=ON \
 | 
					    -D CMAKE_CXX_COMPILER=$(which clang++) \
 | 
				
			||||||
  -DLIBCXX_INSTALL_MODULES=ON \
 | 
					    -D LLVM_ENABLE_PROJECTS="clang;compiler-rt" \
 | 
				
			||||||
  -DLIBCXXABI_USE_LLVM_UNWINDER=OFF \
 | 
					    -D LLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" \
 | 
				
			||||||
  -DLLVM_USE_SANITIZER=Leaks \
 | 
					    -D LLVM_TARGETS_TO_BUILD="X86;SPIRV" \
 | 
				
			||||||
  ../runtimes \
 | 
					    -D LLVM_ENABLE_PIC=ON \
 | 
				
			||||||
&& ninja cxx cxxabi \
 | 
					    -D LIBCXX_INSTALL_MODULES=ON \
 | 
				
			||||||
&& ninja install-cxx install-cxxabi \
 | 
					    -D LIBCXXABI_USE_LLVM_UNWINDER=OFF \
 | 
				
			||||||
 | 
					    -D LLVM_USE_SANITIZER=Leaks \
 | 
				
			||||||
 | 
					    -D LLVM_USE_LINKER="MOLD" \
 | 
				
			||||||
 | 
					&& cd ./build-lsan/ && ninja cxx cxxabi && ninja install-cxx install-cxxabi && cd ../ \
 | 
				
			||||||
\
 | 
					\
 | 
				
			||||||
&& cd ../build-msan \
 | 
					&& cmake \
 | 
				
			||||||
&& cmake -G Ninja \
 | 
					    -S ./runtimes \
 | 
				
			||||||
  -DCMAKE_BUILD_TYPE=Release \
 | 
					    -B ./build-msan \
 | 
				
			||||||
  -DCMAKE_LINKER_TYPE="MOLD" \
 | 
					    -G Ninja \
 | 
				
			||||||
  -DCMAKE_INSTALL_PREFIX=/libcxx_msan \
 | 
					    -D CMAKE_LINKER_TYPE="MOLD" \
 | 
				
			||||||
  -DCMAKE_C_COMPILER=clang \
 | 
					    -D CMAKE_BUILD_TYPE=Release \
 | 
				
			||||||
  -DCMAKE_CXX_COMPILER=clang++ \
 | 
					    -D CMAKE_INSTALL_PREFIX=/libcxx_msan \
 | 
				
			||||||
  -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" \
 | 
					    -D CMAKE_C_COMPILER=$(which clang) \
 | 
				
			||||||
  -DLLVM_ENABLE_PIC=ON \
 | 
					    -D CMAKE_CXX_COMPILER=$(which clang++) \
 | 
				
			||||||
  -DLIBCXX_INSTALL_MODULES=ON \
 | 
					    -D LLVM_ENABLE_PROJECTS="clang;compiler-rt" \
 | 
				
			||||||
  -DLIBCXXABI_USE_LLVM_UNWINDER=OFF \
 | 
					    -D LLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" \
 | 
				
			||||||
  -DLLVM_USE_SANITIZER=MemoryWithOrigins \
 | 
					    -D LLVM_TARGETS_TO_BUILD="X86;SPIRV" \
 | 
				
			||||||
  ../runtimes \
 | 
					    -D LLVM_ENABLE_PIC=ON \
 | 
				
			||||||
&& ninja cxx cxxabi \
 | 
					    -D LIBCXX_INSTALL_MODULES=ON \
 | 
				
			||||||
&& ninja install-cxx install-cxxabi \
 | 
					    -D LIBCXXABI_USE_LLVM_UNWINDER=OFF \
 | 
				
			||||||
 | 
					    -D LLVM_USE_SANITIZER=MemoryWithOrigins \
 | 
				
			||||||
 | 
					    -D LLVM_USE_LINKER="MOLD" \
 | 
				
			||||||
 | 
					&& cd ./build-msan/ && ninja cxx cxxabi && ninja install-cxx install-cxxabi && cd ../
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RUN cd llvm-project/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## libxcb ##
 | 
				
			||||||
 | 
					RUN \
 | 
				
			||||||
 | 
					tar xf libxcb-1.17.0.tar.xz  \
 | 
				
			||||||
 | 
					&& cd libxcb-1.17.0  \
 | 
				
			||||||
 | 
					&& export CC=clang \
 | 
				
			||||||
 | 
					&& export CFLAGS=" \
 | 
				
			||||||
 | 
					    -fsanitize=memory \
 | 
				
			||||||
 | 
					    -fsanitize-memory-track-origins \
 | 
				
			||||||
 | 
					    -fsanitize-ignorelist=/msan/ignorelist_all_sources \
 | 
				
			||||||
 | 
					    -fno-omit-frame-pointer \
 | 
				
			||||||
 | 
					    -g \
 | 
				
			||||||
 | 
					    -fPIC" \
 | 
				
			||||||
 | 
					&& export LDFLAGS=" \
 | 
				
			||||||
 | 
					    -fsanitize=memory \
 | 
				
			||||||
 | 
					    -fsanitize-memory-track-origins \
 | 
				
			||||||
 | 
					    -fsanitize-ignorelist=/msan/ignorelist_all_sources \
 | 
				
			||||||
 | 
					    -fno-omit-frame-pointer \
 | 
				
			||||||
 | 
					    -g \
 | 
				
			||||||
 | 
					    -fPIC" \
 | 
				
			||||||
 | 
					&& ./configure \
 | 
				
			||||||
 | 
					    --prefix=/msan \
 | 
				
			||||||
 | 
					    --disable-static \
 | 
				
			||||||
 | 
					    --without-doxygen \
 | 
				
			||||||
 | 
					&& make && make install \
 | 
				
			||||||
 | 
					&& cd .. && rm -rf libxcb-1.17.0 libxcb-1.17.0.tar.xz
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## libx11 ##
 | 
				
			||||||
 | 
					RUN \
 | 
				
			||||||
 | 
					tar xf libX11-1.8.12.tar.xz  \
 | 
				
			||||||
 | 
					&& cd libX11-1.8.12  \
 | 
				
			||||||
 | 
					&& export CC=clang \
 | 
				
			||||||
 | 
					&& export CFLAGS=" \
 | 
				
			||||||
 | 
					-fsanitize=memory \
 | 
				
			||||||
 | 
					-fsanitize-memory-track-origins \
 | 
				
			||||||
 | 
					-fsanitize-ignorelist=/msan/ignorelist_all_sources \
 | 
				
			||||||
 | 
					-fno-omit-frame-pointer \
 | 
				
			||||||
 | 
					-g \
 | 
				
			||||||
 | 
					-fPIC" \
 | 
				
			||||||
 | 
					&& export LDFLAGS=" \
 | 
				
			||||||
 | 
					-fsanitize=memory \
 | 
				
			||||||
 | 
					-fsanitize-memory-track-origins \
 | 
				
			||||||
 | 
					-fsanitize-ignorelist=/msan/ignorelist_all_sources \
 | 
				
			||||||
 | 
					-fno-omit-frame-pointer \
 | 
				
			||||||
 | 
					-g \
 | 
				
			||||||
 | 
					-fPIC" \
 | 
				
			||||||
 | 
					&& export PKG_CONFIG_PATH=/msan/lib/pkgconfig:$PKG_CONFIG_PATH \
 | 
				
			||||||
 | 
					&& ./configure \
 | 
				
			||||||
 | 
					    --prefix=/msan \
 | 
				
			||||||
 | 
					    --disable-static \
 | 
				
			||||||
 | 
					&& make && make install \
 | 
				
			||||||
 | 
					&& cd .. && rm -rf libX11-1.8.12 libX11-1.8.12.tar.xz
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Vulkan SDK ##
 | 
				
			||||||
 | 
					RUN \
 | 
				
			||||||
 | 
					tar xf 'vulkansdk-linux-x86_64-1.4.328.1.tar.xz' \
 | 
				
			||||||
 | 
					&& cd /1.4.328.1 \
 | 
				
			||||||
 | 
					&& chmod +x ./vulkansdk \
 | 
				
			||||||
 | 
					&& chmod +x ./setup-env.sh \
 | 
				
			||||||
 | 
					&& export CC="$(which clang)" \
 | 
				
			||||||
 | 
					&& export CXX="$(which clang++)" \
 | 
				
			||||||
 | 
					&& export CXXFLAGS="\
 | 
				
			||||||
 | 
					        -fsanitize=memory \
 | 
				
			||||||
 | 
					        -fsanitize-memory-track-origins \
 | 
				
			||||||
 | 
					        -fsanitize-ignorelist=/msan/ignorelist_all_sources \
 | 
				
			||||||
 | 
					        -fno-omit-frame-pointer \
 | 
				
			||||||
 | 
					        -g \
 | 
				
			||||||
 | 
					        -std=c++23 \
 | 
				
			||||||
 | 
					        -nostdinc++ \
 | 
				
			||||||
 | 
					        -isystem /libcxx_msan/include/c++/v1/"\
 | 
				
			||||||
 | 
					&& export CFLAGS="\
 | 
				
			||||||
 | 
					        -fsanitize=memory \
 | 
				
			||||||
 | 
					        -fsanitize-memory-track-origins \
 | 
				
			||||||
 | 
					        -fno-omit-frame-pointer \
 | 
				
			||||||
 | 
					        -g" \
 | 
				
			||||||
 | 
					&& export LDFLAGS="\
 | 
				
			||||||
 | 
					    -fsanitize=memory \
 | 
				
			||||||
 | 
					    -fsanitize-memory-track-origins \
 | 
				
			||||||
 | 
					    -fsanitize-ignorelist=/msan/ignorelist_all_sources \
 | 
				
			||||||
 | 
					    -g \
 | 
				
			||||||
 | 
					    -std=c++23 \
 | 
				
			||||||
 | 
					    -L/msan/lib -Wl,-rpath,/msan/lib \
 | 
				
			||||||
 | 
					    -L/libcxx_msan/lib -Wl,-rpath,/libcxx_msan/lib \
 | 
				
			||||||
 | 
					    -lc++ \
 | 
				
			||||||
 | 
					    -lc++abi" \
 | 
				
			||||||
 | 
					&& ./vulkansdk \
 | 
				
			||||||
 | 
					    --debug \
 | 
				
			||||||
 | 
					    --skip-installing-deps \
 | 
				
			||||||
 | 
					    --numjobs `nproc` \
 | 
				
			||||||
 | 
					    vulkan-loader \
 | 
				
			||||||
 | 
					    spirv-tools
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Mesa ##
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RUN \
 | 
				
			||||||
 | 
					export build_llvm=/build-llvm \
 | 
				
			||||||
 | 
					&& export build_path=/b_llvm_normal \
 | 
				
			||||||
 | 
					&& export repo=/llvm-project \
 | 
				
			||||||
\
 | 
					\
 | 
				
			||||||
&& cd ../.. \
 | 
					&& cmake \
 | 
				
			||||||
&& rm -rf llvm-project
 | 
					    -S $repo/llvm \
 | 
				
			||||||
 | 
					    -G Ninja \
 | 
				
			||||||
 | 
					    -B $build_path \
 | 
				
			||||||
 | 
					    -D CMAKE_BUILD_TYPE=Release \
 | 
				
			||||||
 | 
					    -D LLVM_ENABLE_PROJECTS="clang;lld;compiler-rt" \
 | 
				
			||||||
 | 
					    -D CMAKE_C_COMPILER=$(which clang) \
 | 
				
			||||||
 | 
					    -D CMAKE_CXX_COMPILER=$(which clang++) \
 | 
				
			||||||
 | 
					    -D CMAKE_INSTALL_PREFIX=/opt/llvm-normal \
 | 
				
			||||||
 | 
					&& ninja -C $build_path install
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RUN \
 | 
				
			||||||
 | 
					export CXXFLAGS="\
 | 
				
			||||||
 | 
					        -fsanitize=memory \
 | 
				
			||||||
 | 
					        -fsanitize-memory-track-origins \
 | 
				
			||||||
 | 
					        -fsanitize-ignorelist=/msan/ignorelist_all_sources \
 | 
				
			||||||
 | 
					        -fno-omit-frame-pointer \
 | 
				
			||||||
 | 
					        -g \
 | 
				
			||||||
 | 
					        -std=c++23 \
 | 
				
			||||||
 | 
					        -nostdinc++ \
 | 
				
			||||||
 | 
					        -isystem /libcxx_msan/include/c++/v1/"\
 | 
				
			||||||
 | 
					&& export CFLAGS="\
 | 
				
			||||||
 | 
					        -fsanitize=memory \
 | 
				
			||||||
 | 
					        -fsanitize-memory-track-origins \
 | 
				
			||||||
 | 
					        -fno-omit-frame-pointer \
 | 
				
			||||||
 | 
					        -g" \
 | 
				
			||||||
 | 
					&& export LDFLAGS="\
 | 
				
			||||||
 | 
					    -fsanitize=memory \
 | 
				
			||||||
 | 
					    -fsanitize-memory-track-origins \
 | 
				
			||||||
 | 
					    -fsanitize-ignorelist=/msan/ignorelist_all_sources \
 | 
				
			||||||
 | 
					    -g \
 | 
				
			||||||
 | 
					    -std=c++23 \
 | 
				
			||||||
 | 
					    -L/msan/lib -Wl,-rpath,/msan/lib \
 | 
				
			||||||
 | 
					    -L/libcxx_msan/lib -Wl,-rpath,/libcxx_msan/lib \
 | 
				
			||||||
 | 
					    -lc++ \
 | 
				
			||||||
 | 
					    -lc++abi" \
 | 
				
			||||||
 | 
					&& export build_path=/b_llvm_msan \
 | 
				
			||||||
 | 
					&& export repo=/llvm-project \
 | 
				
			||||||
 | 
					\
 | 
				
			||||||
 | 
					&& cmake \
 | 
				
			||||||
 | 
					    -S $repo/llvm \
 | 
				
			||||||
 | 
					    -G Ninja \
 | 
				
			||||||
 | 
					    -B $build_path \
 | 
				
			||||||
 | 
					    -D CMAKE_BUILD_TYPE=Release \
 | 
				
			||||||
 | 
					    -D LLVM_ENABLE_PROJECTS="clang;lld" \
 | 
				
			||||||
 | 
					    -D LLVM_TARGETS_TO_BUILD="X86;SPIRV" \
 | 
				
			||||||
 | 
					    -D LLVM_ENABLE_PIC=ON \
 | 
				
			||||||
 | 
					    -D LLVM_NATIVE_TOOL_DIR=/opt/llvm-normal/bin/ \
 | 
				
			||||||
 | 
					    -D LLVM_USE_SANITIZER=MemoryWithOrigins \
 | 
				
			||||||
 | 
					    -D LLVM_TABLEGEN=/opt/llvm-normal/bin/llvm-tblgen \
 | 
				
			||||||
 | 
					    -D LLVM_CONFIG_PATH=/opt/llvm-normal/bin/llvm-config \
 | 
				
			||||||
 | 
					    -D CMAKE_C_COMPILER=/opt/llvm-normal/bin/clang \
 | 
				
			||||||
 | 
					    -D CMAKE_CXX_COMPILER=/opt/llvm-normal/bin/clang++ \
 | 
				
			||||||
 | 
					    -D CMAKE_INSTALL_PREFIX=/opt/llvm-msan \
 | 
				
			||||||
 | 
					&& ninja -C $build_path install
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# && cmake \
 | 
				
			||||||
 | 
					#     -G Ninja \
 | 
				
			||||||
 | 
					#     -S $llvm/llvm \
 | 
				
			||||||
 | 
					#     -B $build_llvm \
 | 
				
			||||||
 | 
					#     -D LLVM_INSTALL_UTILS=ON \
 | 
				
			||||||
 | 
					#     -D CMAKE_INSTALL_PREFIX=$installprefix \
 | 
				
			||||||
 | 
					#     -D CMAKE_BUILD_TYPE=Release \
 | 
				
			||||||
 | 
					#     -D LLVM_TARGETS_TO_BUILD="X86;SPIRV" \
 | 
				
			||||||
 | 
					#     -D CMAKE_C_COMPILER=$(which clang) \
 | 
				
			||||||
 | 
					#     -D CMAKE_CXX_COMPILER=$(which clang++) \
 | 
				
			||||||
 | 
					# \
 | 
				
			||||||
 | 
					#     -D LLVM_USE_SANITIZER=MemoryWithOrigins \
 | 
				
			||||||
 | 
					#     -D LIBCXXABI_USE_LLVM_UNWINDER=OFF \
 | 
				
			||||||
 | 
					# \
 | 
				
			||||||
 | 
					# && ninja -C $build_llvm install
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# && cmake  \
 | 
				
			||||||
 | 
					#     -G Ninja  \
 | 
				
			||||||
 | 
					#     -S $llvm/clang  \
 | 
				
			||||||
 | 
					#     -B $build_clang \
 | 
				
			||||||
 | 
					#     -D LLVM_EXTERNAL_LIT=$build_llvm/utils/lit \
 | 
				
			||||||
 | 
					#     -D LLVM_ROOT=$installprefix \
 | 
				
			||||||
 | 
					# \
 | 
				
			||||||
 | 
					# && ninja -C $build_clang
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RUN \
 | 
				
			||||||
 | 
					cd /mesa \
 | 
				
			||||||
 | 
					&& export CXX='clang++' \
 | 
				
			||||||
 | 
					&& export CC='clang' \
 | 
				
			||||||
 | 
					&& export CFLAGS="-fsanitize=memory  -fsanitize-memory-track-origins  -fno-omit-frame-pointer  -g" \
 | 
				
			||||||
 | 
					&& export CXXFLAGS="-fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer -g -nostdinc++ -isystem /libcxx_msan/include/c++/v1/" \
 | 
				
			||||||
 | 
					&& export LDFLAGS="-fsanitize=memory -fsanitize-memory-track-origins -g -L/libcxx_msan/lib -Wl,-rpath,/libcxx_msan/lib -L/msan/lib -Wl,-rpath,/msan/lib -lc++ -lc++abi"  \
 | 
				
			||||||
 | 
					&& export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH" \
 | 
				
			||||||
 | 
					&& meson setup ./ _build \
 | 
				
			||||||
 | 
					    -D build-tests=false  \
 | 
				
			||||||
 | 
					    -D enable-glcpp-tests=false  \
 | 
				
			||||||
 | 
					    -D build-radv-tests=false  \
 | 
				
			||||||
 | 
					    -D build-aco-tests=false  \
 | 
				
			||||||
 | 
					    -D install-intel-gpu-tests=false  \
 | 
				
			||||||
 | 
					    -D gallium-mediafoundation-test=false  \
 | 
				
			||||||
 | 
					    -D android-libbacktrace=disabled  \
 | 
				
			||||||
 | 
					    -D split-debug=disabled  \
 | 
				
			||||||
 | 
					    -D b_ndebug=true  \
 | 
				
			||||||
 | 
					    -D b_lto=false  \
 | 
				
			||||||
 | 
					    -D egl=enabled  \
 | 
				
			||||||
 | 
					    -D gallium-drivers=r300,r600,radeonsi,nouveau,virgl,svga,softpipe,llvmpipe,i915,iris,crocus,zink  \
 | 
				
			||||||
 | 
					    -D gallium-extra-hud=true  \
 | 
				
			||||||
 | 
					    -D gallium-rusticl=true  \
 | 
				
			||||||
 | 
					    -D gallium-va=enabled  \
 | 
				
			||||||
 | 
					    -D gbm=enabled  \
 | 
				
			||||||
 | 
					    -D gles1=disabled  \
 | 
				
			||||||
 | 
					    -D gles2=enabled  \
 | 
				
			||||||
 | 
					    -D glvnd=enabled  \
 | 
				
			||||||
 | 
					    -D glx=dri  \
 | 
				
			||||||
 | 
					    -D libunwind=enabled  \
 | 
				
			||||||
 | 
					    -D llvm=enabled  \
 | 
				
			||||||
 | 
					    -D lmsensors=disabled  \
 | 
				
			||||||
 | 
					    -D microsoft-clc=disabled  \
 | 
				
			||||||
 | 
					    -D platforms=x11,wayland  \
 | 
				
			||||||
 | 
					    -D valgrind=disabled  \
 | 
				
			||||||
 | 
					    -D video-codecs=all  \
 | 
				
			||||||
 | 
					    -D vulkan-drivers=amd,intel,intel_hasvk,swrast,virtio,nouveau  \
 | 
				
			||||||
 | 
					    -D vulkan-layers=device-select,intel-nullhw,overlay  \
 | 
				
			||||||
 | 
					    -D tools=''  \
 | 
				
			||||||
 | 
					    -D zstd=enabled  \
 | 
				
			||||||
 | 
					    -D buildtype=plain  \
 | 
				
			||||||
 | 
					    -D prefix=/usr  \
 | 
				
			||||||
 | 
					    -D sysconfdir=/etc  \
 | 
				
			||||||
 | 
					    --wrap-mode=nofallback  \
 | 
				
			||||||
 | 
					    --force-fallback-for=syn,paste,rustc-hash  \
 | 
				
			||||||
 | 
					&& ninja -C _build
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# RUN cd mesa/ \
 | 
				
			||||||
 | 
					# && source '/1.4.328.1/setup-env.sh' \
 | 
				
			||||||
 | 
					# && export CXX='clang++' \
 | 
				
			||||||
 | 
					# && export CC='clang' \
 | 
				
			||||||
 | 
					# && export CFLAGS="\
 | 
				
			||||||
 | 
					#         -fsanitize=memory \
 | 
				
			||||||
 | 
					#         -fsanitize-memory-track-origins \
 | 
				
			||||||
 | 
					#         -fno-omit-frame-pointer \
 | 
				
			||||||
 | 
					#         -g" \
 | 
				
			||||||
 | 
					# && export CXXFLAGS="\
 | 
				
			||||||
 | 
					#         -fsanitize=memory \
 | 
				
			||||||
 | 
					#         -fsanitize-memory-track-origins \
 | 
				
			||||||
 | 
					#         -fno-omit-frame-pointer \
 | 
				
			||||||
 | 
					#         -g \
 | 
				
			||||||
 | 
					#         -nostdinc++ \
 | 
				
			||||||
 | 
					#         -isystem /libcxx_msan/include/c++/v1/"\
 | 
				
			||||||
 | 
					# && export LDFLAGS="\
 | 
				
			||||||
 | 
					#     -fsanitize=memory \
 | 
				
			||||||
 | 
					#     -fsanitize-memory-track-origins \
 | 
				
			||||||
 | 
					#     -g \
 | 
				
			||||||
 | 
					#     -L/libcxx_msan/lib -Wl,-rpath,/libcxx_msan/lib \
 | 
				
			||||||
 | 
					#     -L/msan/lib -Wl,-rpath,/msan/lib \
 | 
				
			||||||
 | 
					#     -lc++ \
 | 
				
			||||||
 | 
					#     -lc++abi" \
 | 
				
			||||||
 | 
					# && meson setup ./ _build  \
 | 
				
			||||||
 | 
					#     -D build-tests=false \
 | 
				
			||||||
 | 
					#     -D enable-glcpp-tests=false \
 | 
				
			||||||
 | 
					#     -D build-radv-tests=false \
 | 
				
			||||||
 | 
					#     -D build-aco-tests=false \
 | 
				
			||||||
 | 
					#     -D install-intel-gpu-tests=false \
 | 
				
			||||||
 | 
					#     -D gallium-mediafoundation-test=false \
 | 
				
			||||||
 | 
					#     -D android-libbacktrace=disabled \
 | 
				
			||||||
 | 
					#     -D split-debug=disabled \
 | 
				
			||||||
 | 
					#     -D b_ndebug=true \
 | 
				
			||||||
 | 
					#     -D b_lto=false \
 | 
				
			||||||
 | 
					#     -D egl=enabled \
 | 
				
			||||||
 | 
					#     -D gallium-drivers=r300,r600,radeonsi,nouveau,virgl,svga,softpipe,llvmpipe,i915,iris,crocus,zink \
 | 
				
			||||||
 | 
					#     -D gallium-extra-hud=true \
 | 
				
			||||||
 | 
					#     -D gallium-rusticl=true \
 | 
				
			||||||
 | 
					#     -D gallium-va=enabled \
 | 
				
			||||||
 | 
					#     -D gbm=enabled \
 | 
				
			||||||
 | 
					#     -D gles1=disabled \
 | 
				
			||||||
 | 
					#     -D gles2=enabled \
 | 
				
			||||||
 | 
					#     -D glvnd=enabled \
 | 
				
			||||||
 | 
					#     -D glx=dri \
 | 
				
			||||||
 | 
					#     -D libunwind=enabled \
 | 
				
			||||||
 | 
					#     -D llvm=enabled \
 | 
				
			||||||
 | 
					#     -D lmsensors=disabled \
 | 
				
			||||||
 | 
					#     -D microsoft-clc=disabled \
 | 
				
			||||||
 | 
					#     -D platforms=x11,wayland \
 | 
				
			||||||
 | 
					#     -D valgrind=disabled \
 | 
				
			||||||
 | 
					#     -D video-codecs=all \
 | 
				
			||||||
 | 
					#     -D vulkan-drivers=amd,intel,intel_hasvk,swrast,virtio,nouveau \
 | 
				
			||||||
 | 
					#     -D vulkan-layers=device-select,intel-nullhw,overlay \
 | 
				
			||||||
 | 
					#     -D tools='' \
 | 
				
			||||||
 | 
					#     -D zstd=enabled \
 | 
				
			||||||
 | 
					#     -D buildtype=plain \
 | 
				
			||||||
 | 
					#     -D prefix=/usr \
 | 
				
			||||||
 | 
					#     -D sysconfdir=/etc \
 | 
				
			||||||
 | 
					#     --wrap-mode=nofallback \
 | 
				
			||||||
 | 
					#     --force-fallback-for=syn,paste,rustc-hash \
 | 
				
			||||||
 | 
					# && ninja -C _build
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,6 +3,8 @@
 | 
				
			||||||
set -euo pipefail
 | 
					set -euo pipefail
 | 
				
			||||||
cd "$(git rev-parse --show-toplevel)/"
 | 
					cd "$(git rev-parse --show-toplevel)/"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					source '/1.4.328.1/setup-env.sh'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CC=$(which clang)
 | 
					CC=$(which clang)
 | 
				
			||||||
export CC
 | 
					export CC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,6 +14,12 @@ export CXX
 | 
				
			||||||
DISPLAY=:99
 | 
					DISPLAY=:99
 | 
				
			||||||
export DISPLAY
 | 
					export DISPLAY
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PKG_CONFIG_PATH="/msan/lib/pkgconfig:${PKG_CONFIG_PATH}"
 | 
				
			||||||
 | 
					export PKG_CONFIG_PATH
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					VK_ICD_FILENAMES='/usr/share/vulkan/icd.d/lvp_icd.x86_64.json'
 | 
				
			||||||
 | 
					export VK_ICD_FILENAMES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Xvfb :99 -screen 0 1024x768x16 &
 | 
					Xvfb :99 -screen 0 1024x768x16 &
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cmake \
 | 
					cmake \
 | 
				
			||||||
| 
						 | 
					@ -32,10 +40,12 @@ cmake \
 | 
				
			||||||
    -D CMAKE_EXE_LINKER_FLAGS=" \
 | 
					    -D CMAKE_EXE_LINKER_FLAGS=" \
 | 
				
			||||||
-fsanitize=memory \
 | 
					-fsanitize=memory \
 | 
				
			||||||
-fsanitize-memory-track-origins \
 | 
					-fsanitize-memory-track-origins \
 | 
				
			||||||
-L/libcxx_msan/lib \
 | 
					-g \
 | 
				
			||||||
 | 
					-std=c++23 \
 | 
				
			||||||
 | 
					-L/msan/lib -Wl,-rpath,/msan/lib \
 | 
				
			||||||
 | 
					-L/libcxx_msan/lib -Wl,-rpath,/libcxx_msan/lib \
 | 
				
			||||||
-lc++ \
 | 
					-lc++ \
 | 
				
			||||||
-lc++abi \
 | 
					-lc++abi"
 | 
				
			||||||
-Wl,-rpath,/libcxx_msan/lib"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
cmake --build ./build -j"$(nproc)"
 | 
					cmake --build ./build -j"$(nproc)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										3
									
								
								tools/ci/amd64/clang/msan.supp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								tools/ci/amd64/clang/msan.supp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,3 @@
 | 
				
			||||||
 | 
					src:*
 | 
				
			||||||
 | 
					obj:*
 | 
				
			||||||
 | 
					fun:*
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue