From d5a4b7703350b114f2272c1fee00c820dc693a14 Mon Sep 17 00:00:00 2001 From: Ed_ Date: Tue, 24 Oct 2023 03:14:20 -0400 Subject: [PATCH] Some initial boostrapping of new visual ast aux project --- .vscode/c_cpp_properties.json | 6 +- .../auxillary/vis_ast/binaries/vis_ast.exe | Bin 0 -> 105472 bytes project/auxillary/vis_ast/build.ps1 | 107 ++++++++++++++++++ project/auxillary/vis_ast/clean.ps1 | 0 .../vis_ast/code/platform/macros.hpp | 24 ++++ .../vis_ast/code/platform/vendor/arch.hpp | 9 ++ .../vis_ast/code/platform/vendor/compiler.hpp | 21 ++++ .../code/platform/vendor/compiler_ignores.hpp | 34 ++++++ .../vis_ast/code/platform/vendor/os.hpp | 21 ++++ .../vis_ast/code/vis_ast_windows.cpp | 10 ++ project/auxillary/vis_ast/readme.md | 10 ++ project/auxillary/vis_ast/rebuild.ps1 | 0 project/auxillary/vis_ast/update_deps.ps1 | 28 +++++ scripts/build.ci.ps1 | 4 +- 14 files changed, 271 insertions(+), 3 deletions(-) create mode 100644 project/auxillary/vis_ast/binaries/vis_ast.exe create mode 100644 project/auxillary/vis_ast/build.ps1 create mode 100644 project/auxillary/vis_ast/clean.ps1 create mode 100644 project/auxillary/vis_ast/code/platform/macros.hpp create mode 100644 project/auxillary/vis_ast/code/platform/vendor/arch.hpp create mode 100644 project/auxillary/vis_ast/code/platform/vendor/compiler.hpp create mode 100644 project/auxillary/vis_ast/code/platform/vendor/compiler_ignores.hpp create mode 100644 project/auxillary/vis_ast/code/platform/vendor/os.hpp create mode 100644 project/auxillary/vis_ast/code/vis_ast_windows.cpp create mode 100644 project/auxillary/vis_ast/readme.md create mode 100644 project/auxillary/vis_ast/rebuild.ps1 create mode 100644 project/auxillary/vis_ast/update_deps.ps1 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 0000000000000000000000000000000000000000..3b8ce583ae4cfb5d57f717d0a8db516949a809e7 GIT binary patch literal 105472 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 (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 }