diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json index f2775d2..6e9762e 100644 --- a/.vscode/c_cpp_properties.json +++ b/.vscode/c_cpp_properties.json @@ -12,7 +12,8 @@ "GEN_TIME", "GEN_IMPLEMENTATION", // "GEN_DONT_USE_NAMESPACE" - "GEN_INTELLISENSE_DIRECTIVES" + "GEN_INTELLISENSE_DIRECTIVES", + "INTELLISENSE_DIRECTIVES" ], "windowsSdkVersion": "10.0.19041.0", "compilerPath": "C:/Program Files/Microsoft Visual Studio/2022/Professional/VC/Tools/MSVC/14.29.30133/bin/HostX64/x64/cl.exe", @@ -31,7 +32,8 @@ "GEN_TIME", "GEN_IMPLEMENTATION", // "GEN_DONT_USE_NAMESPACE" - "GEN_INTELLISENSE_DIRECTIVES" + "GEN_INTELLISENSE_DIRECTIVES", + "INTELLISENSE_DIRECTIVES" ], "windowsSdkVersion": "10.0.19041.0", "compilerPath": "C:/Users/Ed/scoop/apps/llvm/current/bin/clang++.exe", diff --git a/project/auxillary/vis_ast/binaries/vis_ast.exe b/project/auxillary/vis_ast/binaries/vis_ast.exe new file mode 100644 index 0000000..3b8ce58 Binary files /dev/null and b/project/auxillary/vis_ast/binaries/vis_ast.exe differ diff --git a/project/auxillary/vis_ast/build.ps1 b/project/auxillary/vis_ast/build.ps1 new file mode 100644 index 0000000..a18aaf7 --- /dev/null +++ b/project/auxillary/vis_ast/build.ps1 @@ -0,0 +1,107 @@ +Clear-Host + +$path_root = git rev-parse --show-toplevel +$path_scripts = Join-Path $path_root 'scripts' + +$target_arch = Join-Path $path_scripts 'helpers/target_arch.psm1' +$devshell = Join-Path $path_scripts 'helpers/devshell.ps1' +$format_cpp = Join-Path $path_scripts 'helpers/format_cpp.psm1' +$incremental_checks = Join-Path $path_scripts 'helpers/incremental_checks.ps1' +$vendor_toolchain = Join-Path $path_scripts 'helpers/vendor_toolchain.ps1' +$update_deps = Join-Path $path_scripts 'update_deps.ps1' + +$path_project = Join-Path $path_root 'project' +$path_aux = Join-Path $path_project 'auxillary' +$path_vis_root = Join-Path $path_aux 'vis_ast' +$path_binaries = Join-Path $path_vis_root 'binaries' +$path_build = Join-Path $path_vis_root 'build' +$path_code = Join-Path $path_vis_root 'code' +$path_win32 = Join-Path $path_code 'win32' + +Import-Module $target_arch +Import-Module $format_cpp + +#region Arguments +$vendor = $null +$optimize = $null +$debug = $null +$analysis = $false +$dev = $false +$verbose = $null +$platform = $null +$module_specified = $false + +[array] $vendors = @( "clang", "msvc" ) + +# This is a really lazy way of parsing the args, could use actual params down the line... + +if ( $args ) { $args | ForEach-Object { +switch ($_){ + { $_ -in $vendors } { $vendor = $_; break } + "optimize" { $optimize = $true } + "debug" { $debug = $true } + "analysis" { $analysis = $true } + "dev" { $dev = $true } + "verbose" { $verbose = $true } + "platform" { $platform = $true; $module_specified = $true } +} +}} +#endregion Argument + +if ( -not $module_specified ) +{ + $platform = $true +} + +# Load up toolchain configuraion +. $vendor_toolchain +. $incremental_checks + +write-host "Building Vis AST with $vendor" + +if ( (Test-Path $path_build) -eq $false ) { + New-Item $path_build -ItemType Directory +} + +if ( (Test-Path $path_binaries) -eq $false ) { + New-Item $path_binaries -ItemType Directory +} + +$includes = @( + $paht_code +) + +# Microsoft +$lib_gdi32 = 'Gdi32.lib' +$lib_xinput = 'Xinput.lib' +$lib_user32 = 'User32.lib' +$lib_winmm = 'Winmm.lib' + +$stack_size = 1024 * 1024 * 4 + +$compiler_args = @( + ($flag_define + 'UNICODE'), + ($flag_define + '_UNICODE') + ( $flag_define + 'INTELLISENSE_DIRECTIVES=0'), + # ($flag_set_stack_size + $stack_size) + $flag_wall + $flag_warnings_as_errors + $flag_optimize_intrinsics +) + +if ( $dev ) { + $compiler_args += ( $flag_define + 'Build_Development=1' ) +} +else { + $compiler_args += ( $flag_define + 'Build_Development=0' ) +} + +$linker_args = @( + $flag_link_win_subsystem_windows, + $flag_link_optiiize_references +) + +$unit = join-path $path_code 'vis_ast_windows.cpp' +$executable = join-path $path_binaries 'vis_ast.exe' + +$build_result = build-simple $path_build $includes $compiler_args $linker_args $unit $executable diff --git a/project/auxillary/vis_ast/clean.ps1 b/project/auxillary/vis_ast/clean.ps1 new file mode 100644 index 0000000..e69de29 diff --git a/project/auxillary/vis_ast/code/platform/macros.hpp b/project/auxillary/vis_ast/code/platform/macros.hpp new file mode 100644 index 0000000..656bb0d --- /dev/null +++ b/project/auxillary/vis_ast/code/platform/macros.hpp @@ -0,0 +1,24 @@ +#if INTELLISENSE_DIRECTIVES +#include "vendor/compiler.hpp" +#endif + +#define global static // Global variables +#define internal static // Internal linkage +#define local_persist static // Local Persisting variables + +#define api_c extern "C" + +#define ccast( type, value ) ( const_cast< type >( (value) ) ) +#define pcast( type, value ) ( * reinterpret_cast< type* >( & ( value ) ) ) +#define rcast( type, value ) reinterpret_cast< type >( value ) +#define scast( type, value ) static_cast< type >( value ) + +#define do_once() for ( local_persist b32 once = true; once; once = false ) +#define stmt( ... ) do { __VA_ARGS__; } while ( 0 ) + +#define array_count( array ) ( sizeof( array ) / sizeof( ( array )[0] ) ) + +#define kilobytes( x ) ( ( x ) * ( s64 )( 1024 ) ) +#define megabytes( x ) ( kilobytes( x ) * ( s64 )( 1024 ) ) +#define gigabytes( x ) ( megabytes( x ) * ( s64 )( 1024 ) ) +#define terabytes( x ) ( gigabytes( x ) * ( s64 )( 1024 ) ) diff --git a/project/auxillary/vis_ast/code/platform/vendor/arch.hpp b/project/auxillary/vis_ast/code/platform/vendor/arch.hpp new file mode 100644 index 0000000..2fb194f --- /dev/null +++ b/project/auxillary/vis_ast/code/platform/vendor/arch.hpp @@ -0,0 +1,9 @@ +/* Platform architecture */ + +#if defined( _WIN64 ) || defined( __x86_64__ ) || defined( _M_X64 ) || defined( __64BIT__ ) || defined( __powerpc64__ ) || defined( __ppc64__ ) || defined( __aarch64__ ) +# ifndef ARCH_64_BIT +# define ARCH_64_BIT 1 +# endif +#else +# error A 32-bit architecture is not supported +#endif diff --git a/project/auxillary/vis_ast/code/platform/vendor/compiler.hpp b/project/auxillary/vis_ast/code/platform/vendor/compiler.hpp new file mode 100644 index 0000000..45244c6 --- /dev/null +++ b/project/auxillary/vis_ast/code/platform/vendor/compiler.hpp @@ -0,0 +1,21 @@ +// Platform compiler + +#if defined( _MSC_VER ) +# define Compiler_MSVC 1 +#elif defined( __clang__ ) +# define Compiler_Clang 1 +#else +# error "Unknown compiler" +#endif + +#if defined( __has_attribute ) +# define HAS_ATTRIBUTE( attribute ) __has_attribute( attribute ) +#else +# define HAS_ATTRIBUTE( attribute ) ( 0 ) +#endif + +#ifdef Compiler_Clang +# define compiler_decorated_func_name __PRETTY_NAME__ +#elif defined(Compiler_MSVC) +# define compiler_decorated_func_name __FUNCDNAME__ +#endif diff --git a/project/auxillary/vis_ast/code/platform/vendor/compiler_ignores.hpp b/project/auxillary/vis_ast/code/platform/vendor/compiler_ignores.hpp new file mode 100644 index 0000000..c73f782 --- /dev/null +++ b/project/auxillary/vis_ast/code/platform/vendor/compiler_ignores.hpp @@ -0,0 +1,34 @@ +#pragma once +#if INTELLISENSE_DIRECTIVES +#include "compiler.hpp" +#endif + +#ifdef Compiler_MSVC +#pragma warning( disable: 4201 ) // Support for non-standard nameless struct or union extesnion +#pragma warning( disable: 4100 ) // Support for unreferenced formal parameters +#pragma warning( disable: 4800 ) // Support implicit conversion to bools +#pragma warning( disable: 4365 ) // Support for signed/unsigned mismatch auto-conversion +#pragma warning( disable: 4189 ) // Support for unused variables +#pragma warning( disable: 4514 ) // Support for unused inline functions +#pragma warning( disable: 4505 ) // Support for unused static functions +#pragma warning( disable: 5045 ) // Compiler will insert Spectre mitigation for memory load if /Qspectre switch specified +#pragma warning( disable: 5264 ) // Support for 'const' variables unused +#pragma warning( disable: 4820 ) // Support auto-adding padding to structs +#pragma warning( disable: 4711 ) // Support automatic inline expansion +#pragma warning( disable: 4710 ) // Support automatic inline expansion +#pragma warning( disable: 4805 ) // Support comparisons of s32 to bool. +#pragma warning( disable: 5246 ) // Support for initialization of subobject without braces. +#endif + +#ifdef Compiler_Clang +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunused-const-variable" +#pragma clang diagnostic ignored "-Wswitch" +#pragma clang diagnostic ignored "-Wunused-variable" +#pragma clang diagnostic ignored "-Wunused-local-typedef" +#pragma clang diagnostic ignored "-Wunknown-pragmas" +#pragma clang diagnostic ignored "-Wvarargs" +#pragma clang diagnostic ignored "-Wunused-function" +#pragma clang diagnostic ignored "-Wunused-but-set-variable" +#pragma clang diagnostic ignored "-Wmissing-braces" +#endif diff --git a/project/auxillary/vis_ast/code/platform/vendor/os.hpp b/project/auxillary/vis_ast/code/platform/vendor/os.hpp new file mode 100644 index 0000000..e754a18 --- /dev/null +++ b/project/auxillary/vis_ast/code/platform/vendor/os.hpp @@ -0,0 +1,21 @@ +// Platform OS detection + +#if defined( _WIN32 ) || defined( _WIN64 ) +# ifndef System_Windows +# define System_Windows 1 +# endif +#elif defined( __APPLE__ ) && defined( __MACH__ ) +# ifndef System_MacOS +# define System_MacOS 1 +# endif +#elif defined( __unix__ ) +# if defined( __linux__ ) +# ifndef System_Linux +# define System_linux 1 +# endif +# else +# error This UNIX operating system is not supported +# endif +#else +# error This operating system is not supported +#endif diff --git a/project/auxillary/vis_ast/code/vis_ast_windows.cpp b/project/auxillary/vis_ast/code/vis_ast_windows.cpp new file mode 100644 index 0000000..5ff9902 --- /dev/null +++ b/project/auxillary/vis_ast/code/vis_ast_windows.cpp @@ -0,0 +1,10 @@ +#include "platform/vendor/arch.hpp" +#include "platform/vendor/compiler.hpp" +#include "platform/vendor/compiler_ignores.hpp" +#include "platform/vendor/os.hpp" + +#include "platform/macros.hpp" + +#include "platform/win32/types.hpp" + +#include "platform/win32/launch.cpp" diff --git a/project/auxillary/vis_ast/readme.md b/project/auxillary/vis_ast/readme.md new file mode 100644 index 0000000..c866943 --- /dev/null +++ b/project/auxillary/vis_ast/readme.md @@ -0,0 +1,10 @@ +# Vis AST + +AST visualizer for gencpp + +This is a early start to creating frontend tooling for c/c++ using gencpp as a core component. +I'll be exploring creating an AST explorer for this library with raylib as the graphical & general platform vendor for dependencies that go beyond the scope of gencpp. + +For now I'll have its build script in this file, however it will heavily rely on gencpp's helper scripts. + +Whatever sort of UX tooling I setup for this will be reused for the other tools I'll be creating for gencpp. diff --git a/project/auxillary/vis_ast/rebuild.ps1 b/project/auxillary/vis_ast/rebuild.ps1 new file mode 100644 index 0000000..e69de29 diff --git a/project/auxillary/vis_ast/update_deps.ps1 b/project/auxillary/vis_ast/update_deps.ps1 new file mode 100644 index 0000000..9d30eff --- /dev/null +++ b/project/auxillary/vis_ast/update_deps.ps1 @@ -0,0 +1,28 @@ +$path_root = git rev-parse --show-toplevel +$path_project = Join-Path $path_root 'project' +$path_aux = Join-Path $path_project 'auxillary' +$path_vis_root = Join-Path $path_aux 'vis_ast' +$path_binaries = Join-Path $path_vis_root 'binaries' +$path_build = Join-Path $path_vis_root 'build' +$path_code = Join-Path $path_vis_root 'code' +$path_win32 = Join-Path $path_code 'win32' + +$path_deps = Join-Path $path_vis_root 'dependencies' +$path_temp = Join-Path $path_deps 'temp' + +# Clear out the current content first +if (Test-Path $path_deps) { + Remove-Item $path_deps -Recurse -Force + New-Item -ItemType Directory -Path $path_deps +} +New-Item -ItemType Directory -Path $path_temp + +if ( -not (Test-Path $path_binaries) ) { + New-Item -ItemType Directory -Path $path_binaries +} + +$url_raylib_zip = 'https://github.com/raysan5/raylib/archive/refs/heads/master.zip' +$path_raylib_zip = join-path $path_temp 'raylib.zip' + +invoke-webrequest -uri $url_raylib_zip -outfile $path_raylib_zip + diff --git a/scripts/build.ci.ps1 b/scripts/build.ci.ps1 index b7522c8..dcca73b 100644 --- a/scripts/build.ci.ps1 +++ b/scripts/build.ci.ps1 @@ -19,6 +19,7 @@ Push-Location $path_root #region Arguments $vendor = $null $release = $null + $verbose = $false [bool] $bootstrap = $false [bool] $singleheader = $false [bool] $test = $false @@ -29,7 +30,8 @@ Push-Location $path_root if ( $args ) { $args | ForEach-Object { switch ($_){ - { $_ -in $vendors } { $vendor = $_; break } + { $_ -in $vendors } { $vendor = $_; break } + "verbose" { $verbose = $true } "release" { $release = $true } "debug" { $release = $false } "bootstrap" { $bootstrap = $true }