Compare commits
	
		
			No commits in common. "ec5483d13fc25e2a795d830332aadfc0ac74e9f2" and "b393cbb31c929240e6171d351e19158a557a3fd8" have entirely different histories.
		
	
	
		
			ec5483d13f
			...
			b393cbb31c
		
	
		
					 37 changed files with 451 additions and 429 deletions
				
			
		
							
								
								
									
										18
									
								
								.drone.yml
									
										
									
									
									
								
							
							
						
						
									
										18
									
								
								.drone.yml
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -82,30 +82,12 @@ steps:
 | 
			
		|||
  commands:
 | 
			
		||||
    - ./tools/ci/static_analysis/clang_tidy.sh
 | 
			
		||||
 | 
			
		||||
- name: shell check
 | 
			
		||||
  image: ci:latest
 | 
			
		||||
  pull: if-not-exists
 | 
			
		||||
  commands:
 | 
			
		||||
    - ./tools/ci/static_analysis/shell_check.sh
 | 
			
		||||
 | 
			
		||||
- name: clang format
 | 
			
		||||
  image: ci:latest 
 | 
			
		||||
  pull: if-not-exists
 | 
			
		||||
  commands:
 | 
			
		||||
    - ./tools/ci/static_analysis/clang_format.sh
 | 
			
		||||
 | 
			
		||||
- name: cmake format
 | 
			
		||||
  image: ci:latest
 | 
			
		||||
  pull: if-not-exists
 | 
			
		||||
  commands:
 | 
			
		||||
    - ./tools/ci/static_analysis/cmake_format.sh
 | 
			
		||||
 | 
			
		||||
- name: shell format
 | 
			
		||||
  image: ci:latest
 | 
			
		||||
  pull: if-not-exists
 | 
			
		||||
  commands:
 | 
			
		||||
    - ./tools/ci/static_analysis/shell_format.sh
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
kind: pipeline
 | 
			
		||||
type: docker 
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,2 @@
 | 
			
		|||
add_library_module(app application.cpp)
 | 
			
		||||
target_link_libraries(
 | 
			
		||||
    app
 | 
			
		||||
    PUBLIC memory
 | 
			
		||||
    PRIVATE lt_debug)
 | 
			
		||||
target_link_libraries(app PUBLIC memory PRIVATE lt_debug)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,18 @@
 | 
			
		|||
add_library_module(libasset_baker bakers.cpp)
 | 
			
		||||
target_link_libraries(libasset_baker PUBLIC assets logger lt_debug tbb)
 | 
			
		||||
add_test_module(libasset_baker bakers.test.cpp)
 | 
			
		||||
add_library_module(libasset_baker
 | 
			
		||||
    bakers.cpp
 | 
			
		||||
)
 | 
			
		||||
target_link_libraries(libasset_baker
 | 
			
		||||
PUBLIC
 | 
			
		||||
    assets
 | 
			
		||||
    logger
 | 
			
		||||
    lt_debug
 | 
			
		||||
    tbb
 | 
			
		||||
)
 | 
			
		||||
add_test_module(libasset_baker 
 | 
			
		||||
    bakers.test.cpp
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
add_executable_module(asset_baker entrypoint/baker.cpp)
 | 
			
		||||
add_executable_module(asset_baker
 | 
			
		||||
    entrypoint/baker.cpp
 | 
			
		||||
)
 | 
			
		||||
target_link_libraries(asset_baker PRIVATE libasset_baker)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,2 +1,7 @@
 | 
			
		|||
#include <asset_baker/bakers.hpp>
 | 
			
		||||
#include <test/test.hpp>
 | 
			
		||||
 | 
			
		||||
using ::lt::test::Case;
 | 
			
		||||
using ::lt::test::Suite;
 | 
			
		||||
 | 
			
		||||
// TODO(Light): add asset baking tests!
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,14 @@
 | 
			
		|||
add_library_module(assets shader.cpp)
 | 
			
		||||
add_library_module(assets 
 | 
			
		||||
    shader.cpp
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
target_link_libraries(assets PUBLIC logger lt_debug)
 | 
			
		||||
target_link_libraries(
 | 
			
		||||
assets 
 | 
			
		||||
PUBLIC
 | 
			
		||||
logger 
 | 
			
		||||
lt_debug
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
add_test_module(assets shader.test.cpp)
 | 
			
		||||
add_test_module(assets
 | 
			
		||||
    shader.test.cpp
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,3 @@
 | 
			
		|||
add_library_module(lt_debug instrumentor.cpp)
 | 
			
		||||
target_link_libraries(lt_debug PUBLIC logger)
 | 
			
		||||
target_precompile_headers(lt_debug PUBLIC
 | 
			
		||||
                          ${CMAKE_CURRENT_SOURCE_DIR}/private/pch.hpp)
 | 
			
		||||
target_precompile_headers(lt_debug PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/private/pch.hpp)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,6 +8,7 @@ using lt::test::expect_unreachable;
 | 
			
		|||
using lt::test::Suite;
 | 
			
		||||
 | 
			
		||||
using lt::test::expect_eq;
 | 
			
		||||
using lt::test::expect_ne;
 | 
			
		||||
 | 
			
		||||
using lt::test::expect_false;
 | 
			
		||||
using lt::test::expect_true;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,9 +1,21 @@
 | 
			
		|||
add_library_module(libmirror)
 | 
			
		||||
target_link_libraries(libmirror INTERFACE app time input surface renderer)
 | 
			
		||||
add_library_module(libmirror 
 | 
			
		||||
)
 | 
			
		||||
target_link_libraries(
 | 
			
		||||
  libmirror
 | 
			
		||||
  INTERFACE
 | 
			
		||||
  app
 | 
			
		||||
  time
 | 
			
		||||
  input 
 | 
			
		||||
  surface
 | 
			
		||||
  renderer
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
add_test_module(
 | 
			
		||||
    libmirror layers/editor_layer.test.cpp panels/asset_browser.test.cpp
 | 
			
		||||
    panels/properties.test.cpp panels/scene_hierarchy.test.cpp)
 | 
			
		||||
add_test_module(libmirror 
 | 
			
		||||
    layers/editor_layer.test.cpp
 | 
			
		||||
    panels/asset_browser.test.cpp
 | 
			
		||||
    panels/properties.test.cpp
 | 
			
		||||
    panels/scene_hierarchy.test.cpp
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
add_executable_module(mirror entrypoint/mirror.cpp)
 | 
			
		||||
target_link_libraries(mirror PRIVATE libmirror input)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,10 +24,6 @@ void renderer_callback(
 | 
			
		|||
    std::any &user_data
 | 
			
		||||
)
 | 
			
		||||
{
 | 
			
		||||
	std::ignore = message_severity;
 | 
			
		||||
	std::ignore = message_type;
 | 
			
		||||
	std::ignore = user_data;
 | 
			
		||||
 | 
			
		||||
	log_dbg("RENDERER CALLBACK: {}", data.message);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -208,6 +204,7 @@ public:
 | 
			
		|||
		);
 | 
			
		||||
 | 
			
		||||
		auto entity = ecs::Entity { m_editor_registry, m_window };
 | 
			
		||||
		memory::Ref<app::SystemStats> system_stats = nullptr;
 | 
			
		||||
 | 
			
		||||
		m_renderer_system = std::make_shared<renderer::System>(renderer::System::CreateInfo {
 | 
			
		||||
		    .config = { .target_api = renderer::Api::vulkan, .max_frames_in_flight = 3u },
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
add_library_module(
 | 
			
		||||
    renderer
 | 
			
		||||
add_library_module(renderer
 | 
			
		||||
    system.cpp
 | 
			
		||||
 | 
			
		||||
    # Vulkan - backend
 | 
			
		||||
    backend/vk/messenger.cpp
 | 
			
		||||
    backend/vk/context/device.cpp
 | 
			
		||||
| 
						 | 
				
			
			@ -18,17 +18,27 @@ add_library_module(
 | 
			
		|||
    frontend/context/surface.cpp
 | 
			
		||||
    frontend/context/swapchain.cpp
 | 
			
		||||
    frontend/renderer/renderer.cpp
 | 
			
		||||
    frontend/renderer/pass.cpp)
 | 
			
		||||
    frontend/renderer/pass.cpp
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
target_link_libraries(
 | 
			
		||||
    renderer
 | 
			
		||||
    PUBLIC app ecs memory assets time bitwise
 | 
			
		||||
    PRIVATE surface pthread)
 | 
			
		||||
target_link_libraries(renderer
 | 
			
		||||
PUBLIC 
 | 
			
		||||
    app 
 | 
			
		||||
    ecs
 | 
			
		||||
    memory
 | 
			
		||||
    assets
 | 
			
		||||
    time
 | 
			
		||||
    bitwise
 | 
			
		||||
PRIVATE
 | 
			
		||||
    surface
 | 
			
		||||
    pthread
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
add_test_module(
 | 
			
		||||
    renderer
 | 
			
		||||
add_test_module(renderer 
 | 
			
		||||
    test/utils.cpp
 | 
			
		||||
 | 
			
		||||
    system.test.cpp
 | 
			
		||||
 | 
			
		||||
    # general backend tests through the frontend
 | 
			
		||||
    frontend/messenger.test.cpp
 | 
			
		||||
    frontend/context/surface.test.cpp
 | 
			
		||||
| 
						 | 
				
			
			@ -36,9 +46,17 @@ add_test_module(
 | 
			
		|||
    frontend/context/swapchain.test.cpp
 | 
			
		||||
    frontend/renderer/pass.test.cpp
 | 
			
		||||
    frontend/renderer/renderer.test.cpp
 | 
			
		||||
 | 
			
		||||
    # backend specific tests -- vk
 | 
			
		||||
    backend/vk/context/instance.test.cpp
 | 
			
		||||
    # backend specific tests -- dx backend specific tests -- mt
 | 
			
		||||
 | 
			
		||||
    # backend specific tests -- dx
 | 
			
		||||
 | 
			
		||||
    # backend specific tests -- mt
 | 
			
		||||
) 
 | 
			
		||||
 | 
			
		||||
target_link_libraries(renderer_tests PRIVATE surface pthread)
 | 
			
		||||
target_link_libraries(renderer_tests
 | 
			
		||||
PRIVATE
 | 
			
		||||
    surface
 | 
			
		||||
    pthread
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,8 +10,7 @@ Pass::Pass(
 | 
			
		|||
    const lt::assets::ShaderAsset &vertex_shader,
 | 
			
		||||
    const lt::assets::ShaderAsset &fragment_shader
 | 
			
		||||
)
 | 
			
		||||
    : m_device(static_cast<Device *>(device))
 | 
			
		||||
    , m_layout(m_device->create_pipeline_layout(
 | 
			
		||||
    : m_device(static_cast<Device *>(device)), m_layout(m_device->create_pipeline_layout(
 | 
			
		||||
	    VkPipelineLayoutCreateInfo {
 | 
			
		||||
	        .sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,
 | 
			
		||||
	        .setLayoutCount = 0u,
 | 
			
		||||
| 
						 | 
				
			
			@ -113,6 +112,7 @@ Pass::Pass(
 | 
			
		|||
	};
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
	auto attachment_description = VkAttachmentDescription {
 | 
			
		||||
		.format = static_cast<Swapchain *>(swapchain)->get_format(),
 | 
			
		||||
		.samples = VK_SAMPLE_COUNT_1_BIT,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -46,7 +46,8 @@ System::System(CreateInfo info)
 | 
			
		|||
	) };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
System::~System() = default;
 | 
			
		||||
System::~System()
 | 
			
		||||
= default;
 | 
			
		||||
 | 
			
		||||
void System::on_register()
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,2 @@
 | 
			
		|||
add_library(std INTERFACE)
 | 
			
		||||
target_precompile_headers(std INTERFACE
 | 
			
		||||
                          ${CMAKE_CURRENT_SOURCE_DIR}/public/pch.hpp)
 | 
			
		||||
target_precompile_headers(std INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/public/pch.hpp)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,6 +14,7 @@
 | 
			
		|||
#include <cfenv>
 | 
			
		||||
#include <cfloat>
 | 
			
		||||
#include <cinttypes>
 | 
			
		||||
#include <ciso646>
 | 
			
		||||
#include <climits>
 | 
			
		||||
#include <clocale>
 | 
			
		||||
#include <cmath>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,10 +7,17 @@ else(WIN32)
 | 
			
		|||
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
target_link_libraries(
 | 
			
		||||
    surface
 | 
			
		||||
    PUBLIC ecs app math memory tbb
 | 
			
		||||
    PRIVATE logger lt_debug time)
 | 
			
		||||
target_link_libraries(surface PUBLIC 
 | 
			
		||||
    ecs
 | 
			
		||||
    app
 | 
			
		||||
    math
 | 
			
		||||
    memory
 | 
			
		||||
    tbb
 | 
			
		||||
    PRIVATE
 | 
			
		||||
    logger 
 | 
			
		||||
    lt_debug
 | 
			
		||||
    time
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
add_test_module(surface system.test.cpp)
 | 
			
		||||
add_fuzz_module(surface system.fuzz.cpp)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,7 +4,10 @@
 | 
			
		|||
 | 
			
		||||
namespace lt::surface {
 | 
			
		||||
 | 
			
		||||
System::System(memory::Ref<ecs::Registry> registry, memory::Ref<app::EventMediator> event_mediator)
 | 
			
		||||
System::System(
 | 
			
		||||
    memory::Ref<ecs::Registry> registry,
 | 
			
		||||
    memory::Ref<app::EventMediator> event_mediator
 | 
			
		||||
)
 | 
			
		||||
    : m_registry(std::move(registry))
 | 
			
		||||
    , m_event_mediator(std::move(event_mediator))
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										38
									
								
								modules/test.sh
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										38
									
								
								modules/test.sh
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,38 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
find . -type f \( -name "*.cpp" -o -name "*.hpp" \) -print0 | while IFS= read -r -d '' file; do
 | 
			
		||||
  scope=false
 | 
			
		||||
  ref=false
 | 
			
		||||
  if grep -Eq "Scope\s*<" "$file"; then
 | 
			
		||||
    scope=true
 | 
			
		||||
    sed -i -E 's/(Scope)(\s*<)/memory::\1\2/g' "$file"
 | 
			
		||||
  fi
 | 
			
		||||
  if grep -Eq "Ref\s*<" "$file"; then
 | 
			
		||||
    ref=true
 | 
			
		||||
    sed -i -E 's/(Ref)(\s*<)/memory::\1\2/g' "$file"
 | 
			
		||||
  fi
 | 
			
		||||
  if grep -Eq "\bcreate_scope\b" "$file"; then
 | 
			
		||||
    scope=true
 | 
			
		||||
    sed -i -E 's/\b(create_scope)\b/memory::\1/g' "$file"
 | 
			
		||||
  fi
 | 
			
		||||
  if grep -Eq "\bcreate_ref\b" "$file"; then
 | 
			
		||||
    ref=true
 | 
			
		||||
    sed -i -E 's/\b(create_ref)\b/memory::\1/g' "$file"
 | 
			
		||||
  fi
 | 
			
		||||
  if $scope || $ref; then
 | 
			
		||||
    includes=""
 | 
			
		||||
    $scope && includes+="#include <memory/scope.hpp>\n"
 | 
			
		||||
    $ref && includes+="#include <memory/reference.hpp>\n"
 | 
			
		||||
    tmp=$(mktemp)
 | 
			
		||||
    if [[ "$file" =~ \.hpp$ ]] && pragma_line=$(grep -En -m1 '^#pragma once' "$file" | cut -d: -f1); then
 | 
			
		||||
      insert_line=$((pragma_line + 2))
 | 
			
		||||
    else
 | 
			
		||||
      insert_line=1
 | 
			
		||||
    fi
 | 
			
		||||
    head -n $((insert_line - 1)) "$file" > "$tmp"
 | 
			
		||||
    echo -e "$includes" >> "$tmp"
 | 
			
		||||
    tail -n +$insert_line "$file" >> "$tmp"
 | 
			
		||||
    mv "$tmp" "$file"
 | 
			
		||||
    clang-format -i "$file"
 | 
			
		||||
  fi
 | 
			
		||||
done
 | 
			
		||||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
add_library_module(test test.cpp entrypoint.cpp)
 | 
			
		||||
add_library_module(fuzz_test test.cpp fuzz.cpp)
 | 
			
		||||
 | 
			
		||||
target_link_libraries(test PUBLIC tbb logger)
 | 
			
		||||
target_link_libraries(fuzz_test PUBLIC tbb logger)
 | 
			
		||||
target_link_libraries(test PUBLIC tbb)
 | 
			
		||||
target_link_libraries(fuzz_test PUBLIC tbb)
 | 
			
		||||
 | 
			
		||||
add_test_module(test test.test.cpp)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,3 @@
 | 
			
		|||
#include <logger/logger.hpp>
 | 
			
		||||
#include <test/test.hpp>
 | 
			
		||||
 | 
			
		||||
using namespace ::lt::test;
 | 
			
		||||
| 
						 | 
				
			
			@ -85,14 +84,14 @@ try
 | 
			
		|||
}
 | 
			
		||||
catch (const std::exception &exp)
 | 
			
		||||
{
 | 
			
		||||
	log_crt("Terminated due to uncaught exception:");
 | 
			
		||||
	log_crt("\twhat: {}", exp.what());
 | 
			
		||||
	std::println("Terminated due to uncaught exception:");
 | 
			
		||||
	std::println("\twhat: {}", exp.what());
 | 
			
		||||
 | 
			
		||||
	return EXIT_FAILURE;
 | 
			
		||||
}
 | 
			
		||||
catch (...)
 | 
			
		||||
{
 | 
			
		||||
	log_crt("Terminated due to uncaught non-std exception!");
 | 
			
		||||
	std::println("Terminated due to uncaught non-std exception!");
 | 
			
		||||
 | 
			
		||||
	return EXIT_FAILURE;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,4 @@
 | 
			
		|||
add_library_module(time timer.cpp)
 | 
			
		||||
target_link_libraries(time PUBLIC tbb)
 | 
			
		||||
add_test_module(time timer.test.cpp)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,6 +4,7 @@
 | 
			
		|||
#include <ui/ui.hpp>
 | 
			
		||||
 | 
			
		||||
#ifdef LIGHT_PLATFORM_WINDOWS
 | 
			
		||||
	#include <renderer/dx/shared_context.hpp>
 | 
			
		||||
	#include <renderer/dx/user_interface.hpp>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -13,6 +14,7 @@
 | 
			
		|||
#include <input/events/keyboard.hpp>
 | 
			
		||||
#include <input/events/mouse.hpp>
 | 
			
		||||
#include <input/key_codes.hpp>
 | 
			
		||||
#include <renderer/graphics_context.hpp>
 | 
			
		||||
#include <utility>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -25,7 +27,8 @@ namespace lt {
 | 
			
		|||
 | 
			
		||||
UserInterface *UserInterface::s_context = nullptr;
 | 
			
		||||
 | 
			
		||||
auto UserInterface::create(memory::Ref<SharedContext> sharedContext) -> memory::Scope<UserInterface>
 | 
			
		||||
auto UserInterface::create(memory::Ref<SharedContext> sharedContext)
 | 
			
		||||
    -> memory::Scope<UserInterface>
 | 
			
		||||
{
 | 
			
		||||
	auto scopeUserInterface = memory::Scope<UserInterface> { nullptr };
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,7 +11,8 @@ class SharedContext;
 | 
			
		|||
class UserInterface
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	static auto create(memory::Ref<SharedContext> sharedContext) -> memory::Scope<UserInterface>;
 | 
			
		||||
	static auto create(memory::Ref<SharedContext> sharedContext)
 | 
			
		||||
	    -> memory::Scope<UserInterface>;
 | 
			
		||||
 | 
			
		||||
	static void dockspace_begin();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,37 +1,29 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -euo pipefail
 | 
			
		||||
cd "$(git rev-parse --show-toplevel)/"
 | 
			
		||||
 | 
			
		||||
CC=$(which clang)
 | 
			
		||||
export CC
 | 
			
		||||
 | 
			
		||||
CXX=$(which clang++)
 | 
			
		||||
export CXX
 | 
			
		||||
 | 
			
		||||
DISPLAY=:99
 | 
			
		||||
export DISPLAY
 | 
			
		||||
set -e
 | 
			
		||||
cd $(git rev-parse --show-toplevel)/
 | 
			
		||||
rm -rf ./build && mkdir build/
 | 
			
		||||
 | 
			
		||||
Xvfb :99 -screen 0 1024x768x16 &
 | 
			
		||||
export CXX=$(which clang++)
 | 
			
		||||
export CC=$(which clang)
 | 
			
		||||
export DISPLAY=:99
 | 
			
		||||
 | 
			
		||||
cmake \
 | 
			
		||||
    -S . \
 | 
			
		||||
cmake . \
 | 
			
		||||
-Bbuild \
 | 
			
		||||
-GNinja \
 | 
			
		||||
-DCMAKE_LINKER_TYPE=MOLD \
 | 
			
		||||
-DENABLE_UNIT_TESTS=ON \
 | 
			
		||||
-DENABLE_LLVM_COVERAGE=ON \
 | 
			
		||||
-DCMAKE_BUILD_TYPE=Release \
 | 
			
		||||
    -D CMAKE_CXX_FLAGS="-std=c++23 -stdlib=libc++ -g -fno-omit-frame-pointer"
 | 
			
		||||
 | 
			
		||||
cmake --build ./build -j"$(nproc)"
 | 
			
		||||
-DCMAKE_CXX_FLAGS="-std=c++23 -stdlib=libc++ -g -fno-omit-frame-pointer" \
 | 
			
		||||
&& cmake --build ./build -j `nproc`
 | 
			
		||||
 | 
			
		||||
mkdir -p ./build/coverage/ 
 | 
			
		||||
while IFS= read -r -d '' test; do
 | 
			
		||||
    LLVM_PROFILE_FILE="./build/coverage/$(basename "$(dirname "$test")").profraw"
 | 
			
		||||
    export LLVM_PROFILE_FILE
 | 
			
		||||
for test in $(find ./build -type f -name '*_tests' -executable); do
 | 
			
		||||
    export LLVM_PROFILE_FILE="./build/coverage/$(basename "$(dirname "$test")").profraw";
 | 
			
		||||
    echo ${LLVM_PROFILE_FILE} >> ./build/coverage/list;
 | 
			
		||||
 | 
			
		||||
    echo "${LLVM_PROFILE_FILE}" >>./build/coverage/list
 | 
			
		||||
    gdb \
 | 
			
		||||
    --return-child-result \
 | 
			
		||||
    -ex='set confirm off' \
 | 
			
		||||
| 
						 | 
				
			
			@ -41,16 +33,15 @@ while IFS= read -r -d '' test; do
 | 
			
		|||
    -ex='quit' \
 | 
			
		||||
    -q \
 | 
			
		||||
    "$test"
 | 
			
		||||
done < <(find ./build -type f -name '*_tests' -executable -print0)
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
llvm-profdata merge --input-files './build/coverage/list' -o "./build/coverage/merged.profdata" 
 | 
			
		||||
find ./build/modules -type f -name "*.profraw" -exec rm -fv {} +
 | 
			
		||||
 | 
			
		||||
LLVM_COV_SHOW=$(
 | 
			
		||||
    llvm-cov show \
 | 
			
		||||
LLVM_COV_SHOW=$(llvm-cov show \
 | 
			
		||||
        -instr-profile='./build/coverage/merged.profdata' \
 | 
			
		||||
        "$(find ./build -type f -name '*_tests' -executable -exec printf -- '-object %s ' {} \;)" \
 | 
			
		||||
        "$(find ./build -type f -name '*\.a' -exec printf -- '-object %s ' {} \;)" \
 | 
			
		||||
        $(find ./build -type f -name '*_tests' -executable -exec printf -- '-object %s ' {} \;) \
 | 
			
		||||
        $(find ./build -type f -name '*\.a' -exec printf -- '-object %s ' {} \;) \
 | 
			
		||||
        -ignore-filename-regex='\.test\.cpp$' \
 | 
			
		||||
        -ignore-filename-regex='\.fuzz\.cpp$'
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,32 +1,20 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -euo pipefail
 | 
			
		||||
cd "$(git rev-parse --show-toplevel)/"
 | 
			
		||||
 | 
			
		||||
CC=$(which clang)
 | 
			
		||||
export CC
 | 
			
		||||
 | 
			
		||||
CXX=$(which clang++)
 | 
			
		||||
export CXX
 | 
			
		||||
 | 
			
		||||
DISPLAY=:99
 | 
			
		||||
export DISPLAY
 | 
			
		||||
 | 
			
		||||
LSAN_OPTIONS="suppressions=$(git rev-parse --show-toplevel)/tools/ci/amd64/clang/lsan.supp:fast_unwind_on_malloc=0:verbosity=1:report_objects=1"
 | 
			
		||||
export LSAN_OPTIONS
 | 
			
		||||
 | 
			
		||||
LSAN_SYMBOLIZER_PATH="$(which llvm-symbolizer)"
 | 
			
		||||
export LSAN_SYMBOLIZER_PATH
 | 
			
		||||
set -e
 | 
			
		||||
cd $(git rev-parse --show-toplevel)/
 | 
			
		||||
rm -rf ./build && mkdir build/
 | 
			
		||||
 | 
			
		||||
Xvfb :99 -screen 0 1024x768x16 &
 | 
			
		||||
export CXX=$(which clang++)
 | 
			
		||||
export CC=$(which clang)
 | 
			
		||||
export DISPLAY=:99
 | 
			
		||||
 | 
			
		||||
cmake \
 | 
			
		||||
    -S . \
 | 
			
		||||
cmake . \
 | 
			
		||||
-Bbuild \
 | 
			
		||||
-GNinja \
 | 
			
		||||
-DCMAKE_LINKER_TYPE=MOLD \
 | 
			
		||||
-DENABLE_UNIT_TESTS=ON \
 | 
			
		||||
    -D CMAKE_BUILD_TYPE=Release \
 | 
			
		||||
-DCMAKE_BUILD_TYPE=Debug \
 | 
			
		||||
-DCMAKE_CXX_FLAGS=" \
 | 
			
		||||
-fsanitize=leak \
 | 
			
		||||
-fno-common \
 | 
			
		||||
| 
						 | 
				
			
			@ -40,11 +28,12 @@ cmake \
 | 
			
		|||
-L/libcxx_lsan/lib \
 | 
			
		||||
-lc++ \
 | 
			
		||||
-lc++abi \
 | 
			
		||||
-Wl,-rpath,/libcxx_lsan/lib"
 | 
			
		||||
-Wl,-rpath,/libcxx_lsan/lib" \
 | 
			
		||||
&& cmake --build ./build --target='renderer_tests' -j`nproc`
 | 
			
		||||
 | 
			
		||||
cmake --build ./build --target='renderer_tests' -j"$(nproc)"
 | 
			
		||||
 | 
			
		||||
while IFS= read -r -d '' test; do
 | 
			
		||||
export LSAN_OPTIONS="suppressions=$(git rev-parse --show-toplevel)/tools/ci/amd64/clang/lsan.supp:fast_unwind_on_malloc=0:verbosity=1:report_objects=1"
 | 
			
		||||
export LSAN_SYMBOLIZER_PATH="$(which llvm-symbolizer)"
 | 
			
		||||
for test in $(find ./build -type f -name '*_tests' -executable); do
 | 
			
		||||
    echo "Running $test"
 | 
			
		||||
    "$test"
 | 
			
		||||
done < <(find ./build -type f -name '*_tests' -executable -print0)
 | 
			
		||||
done
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,21 +1,15 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -euo pipefail
 | 
			
		||||
cd "$(git rev-parse --show-toplevel)/"
 | 
			
		||||
 | 
			
		||||
CC=$(which clang)
 | 
			
		||||
export CC
 | 
			
		||||
 | 
			
		||||
CXX=$(which clang++)
 | 
			
		||||
export CXX
 | 
			
		||||
 | 
			
		||||
DISPLAY=:99
 | 
			
		||||
export DISPLAY
 | 
			
		||||
set -e
 | 
			
		||||
cd $(git rev-parse --show-toplevel)/
 | 
			
		||||
rm -rf ./build && mkdir build/
 | 
			
		||||
 | 
			
		||||
Xvfb :99 -screen 0 1024x768x16 &
 | 
			
		||||
export CXX=$(which clang++)
 | 
			
		||||
export CC=$(which clang)
 | 
			
		||||
export DISPLAY=:99
 | 
			
		||||
 | 
			
		||||
cmake \
 | 
			
		||||
    -S . \
 | 
			
		||||
cmake . \
 | 
			
		||||
-Bbuild \
 | 
			
		||||
-GNinja \
 | 
			
		||||
-DCMAKE_LINKER_TYPE=MOLD \
 | 
			
		||||
| 
						 | 
				
			
			@ -35,11 +29,10 @@ cmake \
 | 
			
		|||
-L/libcxx_msan/lib \
 | 
			
		||||
-lc++ \
 | 
			
		||||
-lc++abi \
 | 
			
		||||
-Wl,-rpath,/libcxx_msan/lib"
 | 
			
		||||
-Wl,-rpath,/libcxx_msan/lib" \
 | 
			
		||||
&& cmake --build ./build -j`nproc`
 | 
			
		||||
 | 
			
		||||
cmake --build ./build -j"$(nproc)"
 | 
			
		||||
 | 
			
		||||
while IFS= read -r -d '' test; do
 | 
			
		||||
for test in $(find ./build -type f -name '*_tests' -executable); do
 | 
			
		||||
  echo "Running $test"
 | 
			
		||||
  "$test"
 | 
			
		||||
done < <(find ./build -type f -name '*_tests' -executable -print0)
 | 
			
		||||
done
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,32 +1,25 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -euo pipefail
 | 
			
		||||
cd "$(git rev-parse --show-toplevel)/"
 | 
			
		||||
 | 
			
		||||
CC=$(which gcc)
 | 
			
		||||
export CC
 | 
			
		||||
 | 
			
		||||
CXX=$(which g++)
 | 
			
		||||
export CXX
 | 
			
		||||
 | 
			
		||||
DISPLAY=:99
 | 
			
		||||
export DISPLAY
 | 
			
		||||
set -e
 | 
			
		||||
cd $(git rev-parse --show-toplevel)/
 | 
			
		||||
rm -rf ./build && mkdir build/
 | 
			
		||||
 | 
			
		||||
Xvfb :99 -screen 0 1024x768x16 &
 | 
			
		||||
export CXX=$(which g++)
 | 
			
		||||
export CC=$(which gcc)
 | 
			
		||||
export DISPLAY=:99
 | 
			
		||||
 | 
			
		||||
# gcc uses libstdc++ by default
 | 
			
		||||
cmake \
 | 
			
		||||
    -S . \
 | 
			
		||||
cmake . \
 | 
			
		||||
-Bbuild \
 | 
			
		||||
-GNinja \
 | 
			
		||||
-DCMAKE_LINKER_TYPE=MOLD \
 | 
			
		||||
-DENABLE_UNIT_TESTS=ON \
 | 
			
		||||
-DCMAKE_BUILD_TYPE=Release \
 | 
			
		||||
    -D CMAKE_CXX_FLAGS="-std=c++23 -g -fno-omit-frame-pointer"
 | 
			
		||||
-DCMAKE_CXX_FLAGS="-std=c++23 -g -fno-omit-frame-pointer" \
 | 
			
		||||
&& cmake --build ./build -j `nproc`
 | 
			
		||||
 | 
			
		||||
cmake --build ./build -j"$(nproc)"
 | 
			
		||||
 | 
			
		||||
while IFS= read -r -d '' test; do
 | 
			
		||||
for test in $(find ./build -type f -name '*_tests' -executable); do
 | 
			
		||||
    echo "Running $test"
 | 
			
		||||
    gdb \
 | 
			
		||||
    --return-child-result \
 | 
			
		||||
| 
						 | 
				
			
			@ -37,5 +30,4 @@ while IFS= read -r -d '' test; do
 | 
			
		|||
    -ex='quit' \
 | 
			
		||||
    -q \
 | 
			
		||||
    "$test"
 | 
			
		||||
 | 
			
		||||
done < <(find ./build -type f -name '*_tests' -executable -print0)
 | 
			
		||||
done
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,37 +1,28 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -euo pipefail
 | 
			
		||||
cd "$(git rev-parse --show-toplevel)/"
 | 
			
		||||
export DEBUGINFOD_URLS="https://debuginfod.archlinux.org/"
 | 
			
		||||
 | 
			
		||||
CC=$(which gcc)
 | 
			
		||||
export CC
 | 
			
		||||
 | 
			
		||||
CXX=$(which g++)
 | 
			
		||||
export CXX
 | 
			
		||||
 | 
			
		||||
DISPLAY=:99
 | 
			
		||||
export DISPLAY
 | 
			
		||||
 | 
			
		||||
DEBUGINFOD_URLS="https://debuginfod.archlinux.org/"
 | 
			
		||||
export DEBUGINFOD_URLS
 | 
			
		||||
set -e
 | 
			
		||||
cd $(git rev-parse --show-toplevel)/
 | 
			
		||||
rm -rf ./build && mkdir build/
 | 
			
		||||
 | 
			
		||||
Xvfb :99 -screen 0 1024x768x16 &
 | 
			
		||||
export CXX=$(which g++)
 | 
			
		||||
export CC=$(which gcc)
 | 
			
		||||
export DISPLAY=:99
 | 
			
		||||
 | 
			
		||||
# gcc uses libstdc++ by default
 | 
			
		||||
cmake \
 | 
			
		||||
    -S . \
 | 
			
		||||
cmake . \
 | 
			
		||||
-Bbuild \
 | 
			
		||||
-GNinja \
 | 
			
		||||
-DCMAKE_LINKER_TYPE=MOLD \
 | 
			
		||||
-DENABLE_UNIT_TESTS=ON \
 | 
			
		||||
-DCMAKE_BUILD_TYPE=Release \
 | 
			
		||||
    -D CMAKE_CXX_FLAGS="-std=c++23 -fno-omit-frame-pointer -fno-common -g"
 | 
			
		||||
-DCMAKE_CXX_FLAGS="-std=c++23 -fno-omit-frame-pointer -fno-common -g" \
 | 
			
		||||
&& cmake --build ./build -j `nproc`
 | 
			
		||||
 | 
			
		||||
cmake --build ./build -j"$(nproc)"
 | 
			
		||||
 | 
			
		||||
while IFS= read -r -d '' test; do
 | 
			
		||||
for test in $(find ./build -type f -name '*_tests' -executable); do
 | 
			
		||||
    echo "Running $test"
 | 
			
		||||
 | 
			
		||||
    valgrind \
 | 
			
		||||
    --leak-check=full \
 | 
			
		||||
    --show-leak-kinds=all \
 | 
			
		||||
| 
						 | 
				
			
			@ -40,6 +31,5 @@ while IFS= read -r -d '' test; do
 | 
			
		|||
    --num-callers=50 \
 | 
			
		||||
    --gen-suppressions=all \
 | 
			
		||||
    --suppressions='./tools/ci/amd64/gcc/valgrind.supp' \
 | 
			
		||||
        --error-exitcode=255 "${test}" || exit 1
 | 
			
		||||
 | 
			
		||||
done < <(find ./build -type f -name '*_tests' -executable -print0)
 | 
			
		||||
    --error-exitcode=255 ${test} || exit 1
 | 
			
		||||
done
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,19 +1,19 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -euo pipefail
 | 
			
		||||
cd "$(git rev-parse --show-toplevel)/"
 | 
			
		||||
set -e
 | 
			
		||||
cd $(git rev-parse --show-toplevel)/
 | 
			
		||||
 | 
			
		||||
has_fomatting_issues=0
 | 
			
		||||
while IFS= read -r -d '' file; do
 | 
			
		||||
for file in $(find ./modules -name '*.?pp'); do
 | 
			
		||||
  echo "Checking format for $file"
 | 
			
		||||
 | 
			
		||||
  if ! clang-format --dry-run --Werror "$file"; then
 | 
			
		||||
    echo "❌ Formatting issue detected in $file"
 | 
			
		||||
    has_fomatting_issues=1
 | 
			
		||||
  fi
 | 
			
		||||
done < <(find ./modules -name '*.?pp' -print0)
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
if [ "$has_fomatting_issues" -eq 0 ]; then
 | 
			
		||||
  echo "✅ All files are properly formatted! Well done! ^~^"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
exit ${has_fomatting_issues}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,22 +1,17 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -euo pipefail
 | 
			
		||||
cd "$(git rev-parse --show-toplevel)/"
 | 
			
		||||
set -e
 | 
			
		||||
cd $(git rev-parse --show-toplevel)/
 | 
			
		||||
rm -rf ./build && mkdir build/ && cd build
 | 
			
		||||
 | 
			
		||||
CC=$(which clang)
 | 
			
		||||
export CC
 | 
			
		||||
export CC=$(which clang)
 | 
			
		||||
export CXX=$(which clang++)
 | 
			
		||||
 | 
			
		||||
CXX=$(which clang++)
 | 
			
		||||
export CXX
 | 
			
		||||
 | 
			
		||||
cmake \
 | 
			
		||||
    -S . \
 | 
			
		||||
    -B build \
 | 
			
		||||
cmake .. \
 | 
			
		||||
-G Ninja \
 | 
			
		||||
-DCMAKE_LINKER_TYPE=MOLD \
 | 
			
		||||
-DENABLE_UNIT_TESTS=ON \
 | 
			
		||||
-DENABLE_STATIC_ANALYSIS=ON \
 | 
			
		||||
-DCMAKE_BUILD_TYPE=Release \
 | 
			
		||||
    -D CMAKE_CXX_FLAGS="-std=c++23 -stdlib=libc++"
 | 
			
		||||
 | 
			
		||||
cmake --build . -j"$(nproc)"
 | 
			
		||||
-DCMAKE_CXX_FLAGS="-std=c++23 -stdlib=libc++" \
 | 
			
		||||
&& cmake --build . -j `nproc`
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,19 +0,0 @@
 | 
			
		|||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
set -euo pipefail
 | 
			
		||||
cd "$(git rev-parse --show-toplevel)/"
 | 
			
		||||
 | 
			
		||||
has_formatting_issues=0
 | 
			
		||||
while IFS= read -r -d '' file; do
 | 
			
		||||
    echo "Checking format for $file"
 | 
			
		||||
 | 
			
		||||
    if ! cmake-format --check "$file"; then
 | 
			
		||||
        echo "❌ Formatting issue detected in $file"
 | 
			
		||||
        has_formatting_issues=1
 | 
			
		||||
    fi
 | 
			
		||||
done < <(find ./modules ./tools/cmake -type f \( -name 'CMakeLists.txt' -o -name '*.cmake' \) -print0)
 | 
			
		||||
 | 
			
		||||
if [ "$has_formatting_issues" -ne 0 ]; then
 | 
			
		||||
    echo "✅ All files are properly formatted! Well done! ^~^"
 | 
			
		||||
fi
 | 
			
		||||
exit ${has_formatting_issues}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,19 +0,0 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -euo pipefail
 | 
			
		||||
cd "$(git rev-parse --show-toplevel)/"
 | 
			
		||||
 | 
			
		||||
has_shellcheck_issues=0
 | 
			
		||||
while IFS= read -r -d '' file; do
 | 
			
		||||
    echo "Checking shell script $file"
 | 
			
		||||
 | 
			
		||||
    if ! shellcheck "$file"; then
 | 
			
		||||
        echo "❌ Shellcheck issue detected in $file"
 | 
			
		||||
        has_shellcheck_issues=1
 | 
			
		||||
    fi
 | 
			
		||||
done < <(find ./modules ./tools -name '*.sh' -print0)
 | 
			
		||||
 | 
			
		||||
if [ "$has_shellcheck_issues" -eq 0 ]; then
 | 
			
		||||
    echo "✅ All files are properly shellchecked! Well done! ^~^"
 | 
			
		||||
fi
 | 
			
		||||
exit ${has_shellcheck_issues}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,19 +0,0 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -euo pipefail
 | 
			
		||||
cd "$(git rev-parse --show-toplevel)/"
 | 
			
		||||
 | 
			
		||||
has_fomatting_issues=0
 | 
			
		||||
while IFS= read -r -d '' file; do
 | 
			
		||||
    echo "Checking format for $file"
 | 
			
		||||
 | 
			
		||||
    if ! shfmt -i 4 -ci -d "$file"; then
 | 
			
		||||
        echo "❌ Formatting issue detected in $file"
 | 
			
		||||
        has_fomatting_issues=1
 | 
			
		||||
    fi
 | 
			
		||||
done < <(find ./modules ./tools -name '*.sh' -print0)
 | 
			
		||||
 | 
			
		||||
if [ "$has_fomatting_issues" -eq 0 ]; then
 | 
			
		||||
    echo "✅ All files are properly formatted! Well done! ^~^"
 | 
			
		||||
fi
 | 
			
		||||
exit ${has_fomatting_issues}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,8 +1,11 @@
 | 
			
		|||
function (add_library_module libname)
 | 
			
		||||
    set(PUBLIC_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/public_includes")
 | 
			
		||||
    file(MAKE_DIRECTORY "${PUBLIC_INCLUDE_DIR}")
 | 
			
		||||
    file(CREATE_LINK "${CMAKE_CURRENT_SOURCE_DIR}/public/"
 | 
			
		||||
         "${PUBLIC_INCLUDE_DIR}/${libname}" SYMBOLIC)
 | 
			
		||||
    file(CREATE_LINK
 | 
			
		||||
        "${CMAKE_CURRENT_SOURCE_DIR}/public/"
 | 
			
		||||
        "${PUBLIC_INCLUDE_DIR}/${libname}"
 | 
			
		||||
        SYMBOLIC
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    if ("${ARGN}" STREQUAL "") # Header only library
 | 
			
		||||
        message("Adding INTERFACE library ${libname}")
 | 
			
		||||
| 
						 | 
				
			
			@ -23,13 +26,16 @@ function(add_library_module libname)
 | 
			
		|||
 | 
			
		||||
        set(PRIVATE_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/private_includes")
 | 
			
		||||
        file(MAKE_DIRECTORY "${PRIVATE_INCLUDE_DIR}")
 | 
			
		||||
        file(CREATE_LINK "${CMAKE_CURRENT_SOURCE_DIR}/private/"
 | 
			
		||||
             "${PRIVATE_INCLUDE_DIR}/${libname}" SYMBOLIC)
 | 
			
		||||
        file(CREATE_LINK
 | 
			
		||||
            "${CMAKE_CURRENT_SOURCE_DIR}/private/"
 | 
			
		||||
            "${PRIVATE_INCLUDE_DIR}/${libname}"
 | 
			
		||||
            SYMBOLIC
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        target_include_directories(
 | 
			
		||||
            ${libname}
 | 
			
		||||
        target_include_directories(${libname} 
 | 
			
		||||
            PUBLIC ${PUBLIC_INCLUDE_DIR}
 | 
			
		||||
            PRIVATE ${PRIVATE_INCLUDE_DIR})
 | 
			
		||||
            PRIVATE ${PRIVATE_INCLUDE_DIR}
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        target_link_libraries(${libname} PUBLIC std)
 | 
			
		||||
    endif ()
 | 
			
		||||
| 
						 | 
				
			
			@ -47,17 +53,22 @@ function(add_executable_module exename)
 | 
			
		|||
 | 
			
		||||
    set(PUBLIC_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/public_includes")
 | 
			
		||||
    file(MAKE_DIRECTORY "${PUBLIC_INCLUDE_DIR}")
 | 
			
		||||
    file(CREATE_LINK "${CMAKE_CURRENT_SOURCE_DIR}/public/"
 | 
			
		||||
         "${PUBLIC_INCLUDE_DIR}/${exename}" SYMBOLIC)
 | 
			
		||||
    file(CREATE_LINK
 | 
			
		||||
        "${CMAKE_CURRENT_SOURCE_DIR}/public/"
 | 
			
		||||
        "${PUBLIC_INCLUDE_DIR}/${exename}"
 | 
			
		||||
        SYMBOLIC
 | 
			
		||||
    )
 | 
			
		||||
    set(PRIVATE_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/private_includes")
 | 
			
		||||
    file(MAKE_DIRECTORY "${PRIVATE_INCLUDE_DIR}")
 | 
			
		||||
    file(CREATE_LINK "${CMAKE_CURRENT_SOURCE_DIR}/private/"
 | 
			
		||||
         "${PRIVATE_INCLUDE_DIR}${exename}" SYMBOLIC)
 | 
			
		||||
    file(CREATE_LINK
 | 
			
		||||
        "${CMAKE_CURRENT_SOURCE_DIR}/private/"
 | 
			
		||||
        "${PRIVATE_INCLUDE_DIR}${exename}"
 | 
			
		||||
        SYMBOLIC
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    add_executable(${exename} ${source_files})
 | 
			
		||||
    target_link_libraries(${exename} PRIVATE std)
 | 
			
		||||
    target_include_directories(${exename} PRIVATE ${PUBLIC_INCLUDE_DIR}
 | 
			
		||||
                                                  ${PRIVATE_INCLUDE_DIR})
 | 
			
		||||
    target_include_directories(${exename} PRIVATE ${PUBLIC_INCLUDE_DIR} ${PRIVATE_INCLUDE_DIR})
 | 
			
		||||
endfunction ()
 | 
			
		||||
 | 
			
		||||
function (add_test_module target_lib_name)
 | 
			
		||||
| 
						 | 
				
			
			@ -71,26 +82,29 @@ function(add_test_module target_lib_name)
 | 
			
		|||
        list(APPEND source_files "${source_directory}/${source_file}")
 | 
			
		||||
    endforeach ()
 | 
			
		||||
 | 
			
		||||
    message(
 | 
			
		||||
        "Adding test executable ${target_lib_name}_tests with source files: ${source_files}"
 | 
			
		||||
    )
 | 
			
		||||
    message("Adding test executable ${target_lib_name}_tests with source files: ${source_files}")
 | 
			
		||||
 | 
			
		||||
    set(PUBLIC_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/public_includes")
 | 
			
		||||
    file(MAKE_DIRECTORY "${PUBLIC_INCLUDE_DIR}")
 | 
			
		||||
    file(CREATE_LINK "${CMAKE_CURRENT_SOURCE_DIR}/public/"
 | 
			
		||||
         "${PUBLIC_INCLUDE_DIR}/${target_lib_name}" SYMBOLIC)
 | 
			
		||||
    file(CREATE_LINK
 | 
			
		||||
        "${CMAKE_CURRENT_SOURCE_DIR}/public/"
 | 
			
		||||
        "${PUBLIC_INCLUDE_DIR}/${target_lib_name}"
 | 
			
		||||
        SYMBOLIC
 | 
			
		||||
    )
 | 
			
		||||
    set(PRIVATE_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/private_includes")
 | 
			
		||||
    file(MAKE_DIRECTORY "${PRIVATE_INCLUDE_DIR}")
 | 
			
		||||
    file(CREATE_LINK "${CMAKE_CURRENT_SOURCE_DIR}/private/"
 | 
			
		||||
         "${PRIVATE_INCLUDE_DIR}/${target_lib_name}" SYMBOLIC)
 | 
			
		||||
    file(CREATE_LINK
 | 
			
		||||
        "${CMAKE_CURRENT_SOURCE_DIR}/private/"
 | 
			
		||||
        "${PRIVATE_INCLUDE_DIR}/${target_lib_name}"
 | 
			
		||||
        SYMBOLIC
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    add_executable(${target_lib_name}_tests ${source_files})
 | 
			
		||||
    target_link_libraries(${target_lib_name}_tests PRIVATE ${target_lib_name}
 | 
			
		||||
                                                           std test)
 | 
			
		||||
    target_include_directories(
 | 
			
		||||
        ${target_lib_name}_tests
 | 
			
		||||
    target_link_libraries(${target_lib_name}_tests PRIVATE ${target_lib_name} std test)
 | 
			
		||||
    target_include_directories(${target_lib_name}_tests
 | 
			
		||||
        PRIVATE ${PUBLIC_INCLUDE_DIR}
 | 
			
		||||
        PRIVATE ${PRIVATE_INCLUDE_DIR})
 | 
			
		||||
        PRIVATE ${PRIVATE_INCLUDE_DIR}
 | 
			
		||||
    )
 | 
			
		||||
endfunction ()
 | 
			
		||||
 | 
			
		||||
function (add_fuzz_module target_lib_name)
 | 
			
		||||
| 
						 | 
				
			
			@ -104,28 +118,31 @@ function(add_fuzz_module target_lib_name)
 | 
			
		|||
        list(APPEND source_files "${source_directory}/${source_file}")
 | 
			
		||||
    endforeach ()
 | 
			
		||||
 | 
			
		||||
    message(
 | 
			
		||||
        "Adding fuzz executable ${target_lib_name}_fuzz with source files: ${source_files}"
 | 
			
		||||
    )
 | 
			
		||||
    message("Adding fuzz executable ${target_lib_name}_fuzz with source files: ${source_files}")
 | 
			
		||||
 | 
			
		||||
    set(PUBLIC_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/public_includes")
 | 
			
		||||
    file(MAKE_DIRECTORY "${PUBLIC_INCLUDE_DIR}")
 | 
			
		||||
    file(CREATE_LINK "${CMAKE_CURRENT_SOURCE_DIR}/public/"
 | 
			
		||||
         "${PUBLIC_INCLUDE_DIR}/${target_lib_name}" SYMBOLIC)
 | 
			
		||||
    file(CREATE_LINK
 | 
			
		||||
        "${CMAKE_CURRENT_SOURCE_DIR}/public/"
 | 
			
		||||
        "${PUBLIC_INCLUDE_DIR}/${target_lib_name}"
 | 
			
		||||
        SYMBOLIC
 | 
			
		||||
    )
 | 
			
		||||
    set(PRIVATE_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/private_includes")
 | 
			
		||||
    file(MAKE_DIRECTORY "${PRIVATE_INCLUDE_DIR}")
 | 
			
		||||
    file(CREATE_LINK "${CMAKE_CURRENT_SOURCE_DIR}/private/"
 | 
			
		||||
         "${PRIVATE_INCLUDE_DIR}/${target_lib_name}" SYMBOLIC)
 | 
			
		||||
    file(CREATE_LINK
 | 
			
		||||
        "${CMAKE_CURRENT_SOURCE_DIR}/private/"
 | 
			
		||||
        "${PRIVATE_INCLUDE_DIR}/${target_lib_name}"
 | 
			
		||||
        SYMBOLIC
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    add_executable(${target_lib_name}_fuzz ${source_files})
 | 
			
		||||
    target_link_libraries(${target_lib_name}_fuzz PRIVATE ${target_lib_name}
 | 
			
		||||
                                                          std fuzz_test)
 | 
			
		||||
    target_link_libraries(${target_lib_name}_fuzz PRIVATE ${target_lib_name} std fuzz_test)
 | 
			
		||||
    target_link_options(${target_lib_name}_fuzz PRIVATE -fsanitize=fuzzer)
 | 
			
		||||
    target_compile_options(${target_lib_name}_fuzz PRIVATE -fsanitize=fuzzer)
 | 
			
		||||
    target_include_directories(
 | 
			
		||||
        ${target_lib_name}_fuzz
 | 
			
		||||
    target_include_directories(${target_lib_name}_fuzz
 | 
			
		||||
        PRIVATE ${PUBLIC_INCLUDE_DIR}
 | 
			
		||||
        PRIVATE ${PRIVATE_INCLUDE_DIR})
 | 
			
		||||
        PRIVATE ${PRIVATE_INCLUDE_DIR}
 | 
			
		||||
    )
 | 
			
		||||
endfunction ()
 | 
			
		||||
 | 
			
		||||
function (add_option option help)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,39 +1,30 @@
 | 
			
		|||
add_option(ENABLE_UNIT_TESTS "Enables the building of the unit test modules")
 | 
			
		||||
add_option(ENABLE_FUZZ_TESTS "Enables the building of the fuzz test modules")
 | 
			
		||||
add_option(ENABLE_STATIC_ANALYSIS
 | 
			
		||||
           "Makes the clang-tidy checks mandatory for compilation")
 | 
			
		||||
add_option(ENABLE_LLVM_COVERAGE
 | 
			
		||||
           "Enables the code coverage instrumentation for clang")
 | 
			
		||||
add_option(ENABLE_STATIC_ANALYSIS "Makes the clang-tidy checks mandatory for compilation")
 | 
			
		||||
add_option(ENABLE_LLVM_COVERAGE "Enables the code coverage instrumentation for clang")
 | 
			
		||||
 | 
			
		||||
if (ENABLE_STATIC_ANALYSIS)
 | 
			
		||||
    set(CMAKE_CXX_CLANG_TIDY
 | 
			
		||||
        "clang-tidy;--warnings-as-errors=*;--allow-no-checks")
 | 
			
		||||
    set(CMAKE_CXX_CLANG_TIDY "clang-tidy;--warnings-as-errors=*;--allow-no-checks")
 | 
			
		||||
endif ()
 | 
			
		||||
 | 
			
		||||
if(ENABLE_LLVM_COVERAGE)
 | 
			
		||||
    include(CheckCXXSourceCompiles)
 | 
			
		||||
 | 
			
		||||
    if (NOT "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
 | 
			
		||||
        message(
 | 
			
		||||
            FATAL_ERROR "ENABLE_LLVM_COVERAGE only supports the clang compiler")
 | 
			
		||||
        message(FATAL_ERROR "ENABLE_LLVM_COVERAGE only supports the clang compiler")
 | 
			
		||||
    endif ()
 | 
			
		||||
 | 
			
		||||
    # Check for libc++
 | 
			
		||||
    check_cxx_source_compiles(
 | 
			
		||||
        "
 | 
			
		||||
    check_cxx_source_compiles("
 | 
			
		||||
        #include <string>
 | 
			
		||||
        #ifdef _LIBCPP_VERSION
 | 
			
		||||
        int main() { return 0; }
 | 
			
		||||
        #else
 | 
			
		||||
        #error Not using libc++
 | 
			
		||||
        #endif
 | 
			
		||||
    "
 | 
			
		||||
        USING_LIBCXX)
 | 
			
		||||
    " USING_LIBCXX)
 | 
			
		||||
    if(NOT USING_LIBCXX)
 | 
			
		||||
        message(
 | 
			
		||||
            FATAL_ERROR
 | 
			
		||||
                "ENABLE_LLVM_COVERAGE requires libc++, please compile with -stdlib=libc++"
 | 
			
		||||
        )
 | 
			
		||||
        message(FATAL_ERROR "ENABLE_LLVM_COVERAGE requires libc++, please compile with -stdlib=libc++")
 | 
			
		||||
    endif()
 | 
			
		||||
 | 
			
		||||
    add_compile_options(-fprofile-instr-generate -fcoverage-mapping)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										36
									
								
								tools/scripts/build_ci_images.sh
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										36
									
								
								tools/scripts/build_ci_images.sh
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,36 @@
 | 
			
		|||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
CI_DIR="$(git rev-parse --show-toplevel)/tools/ci/"
 | 
			
		||||
 | 
			
		||||
echo "===========[ amd64_clang ]==========="]
 | 
			
		||||
echo "==> Building amd64_clang_coverage..."
 | 
			
		||||
docker build -t amd64_clang_coverage -f $CI_DIR/amd64/clang/coverage.dockerfile .
 | 
			
		||||
echo "...DONE <=="
 | 
			
		||||
 | 
			
		||||
echo "==> Building amd64_clang_lsan..."
 | 
			
		||||
docker build -t amd64_clang_lsan -f $CI_DIR/amd64/clang/lsan.dockerfile .
 | 
			
		||||
echo "...DONE <=="
 | 
			
		||||
 | 
			
		||||
echo "==> Building image: amd64_clang_msan"
 | 
			
		||||
docker build -t amd64_clang_msan -f $CI_DIR/amd64/clang/msan.dockerfile .
 | 
			
		||||
echo "...DONE <=="
 | 
			
		||||
 | 
			
		||||
echo "==> Building image: clang_format"
 | 
			
		||||
docker build -t clang_format -f $CI_DIR/static_analysis/clang_format.dockerfile .
 | 
			
		||||
echo "...DONE <=="
 | 
			
		||||
 | 
			
		||||
echo "==> Building image: static_analysis"
 | 
			
		||||
docker build -t clang_tidy -f $CI_DIR/static_analysis/clang_tidy.dockerfile .
 | 
			
		||||
echo "...DONE <=="
 | 
			
		||||
 | 
			
		||||
echo "===========[ amd64_gcc ]==========="]
 | 
			
		||||
echo "==> Building image: amd64_gcc_unit_tests"
 | 
			
		||||
docker build -t amd64_gcc_unit_tests -f $CI_DIR/amd64/gcc/unit_tests.dockerfile .
 | 
			
		||||
echo "...DONE <=="
 | 
			
		||||
 | 
			
		||||
echo "==> Building image: amd64_gcc_valgrind"
 | 
			
		||||
docker build -t amd64_gcc_valgrind -f $CI_DIR/amd64/gcc/valgrind.dockerfile .
 | 
			
		||||
echo "...DONE <=="
 | 
			
		||||
 | 
			
		||||
echo "WOOOOOOOOOOOOOOOOH!!! DONE :D"
 | 
			
		||||
		Loading…
	
	Add table
		
		Reference in a new issue