mirror of
				https://github.com/Ed94/gencpp.git
				synced 2025-10-30 14:30:53 -07:00 
			
		
		
		
	Some initial boostrapping of new visual ast aux project
This commit is contained in:
		
							
								
								
									
										6
									
								
								.vscode/c_cpp_properties.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.vscode/c_cpp_properties.json
									
									
									
									
										vendored
									
									
								
							| @@ -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", | ||||
|   | ||||
							
								
								
									
										
											BIN
										
									
								
								project/auxillary/vis_ast/binaries/vis_ast.exe
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								project/auxillary/vis_ast/binaries/vis_ast.exe
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										107
									
								
								project/auxillary/vis_ast/build.ps1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								project/auxillary/vis_ast/build.ps1
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||
							
								
								
									
										0
									
								
								project/auxillary/vis_ast/clean.ps1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								project/auxillary/vis_ast/clean.ps1
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										24
									
								
								project/auxillary/vis_ast/code/platform/macros.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								project/auxillary/vis_ast/code/platform/macros.hpp
									
									
									
									
									
										Normal file
									
								
							| @@ -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 ) ) | ||||
							
								
								
									
										9
									
								
								project/auxillary/vis_ast/code/platform/vendor/arch.hpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								project/auxillary/vis_ast/code/platform/vendor/arch.hpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -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 | ||||
							
								
								
									
										21
									
								
								project/auxillary/vis_ast/code/platform/vendor/compiler.hpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								project/auxillary/vis_ast/code/platform/vendor/compiler.hpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -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 | ||||
							
								
								
									
										34
									
								
								project/auxillary/vis_ast/code/platform/vendor/compiler_ignores.hpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								project/auxillary/vis_ast/code/platform/vendor/compiler_ignores.hpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -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 | ||||
							
								
								
									
										21
									
								
								project/auxillary/vis_ast/code/platform/vendor/os.hpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								project/auxillary/vis_ast/code/platform/vendor/os.hpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -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 | ||||
							
								
								
									
										10
									
								
								project/auxillary/vis_ast/code/vis_ast_windows.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								project/auxillary/vis_ast/code/vis_ast_windows.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -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" | ||||
							
								
								
									
										10
									
								
								project/auxillary/vis_ast/readme.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								project/auxillary/vis_ast/readme.md
									
									
									
									
									
										Normal file
									
								
							| @@ -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. | ||||
							
								
								
									
										0
									
								
								project/auxillary/vis_ast/rebuild.ps1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								project/auxillary/vis_ast/rebuild.ps1
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										28
									
								
								project/auxillary/vis_ast/update_deps.ps1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								project/auxillary/vis_ast/update_deps.ps1
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||
|  | ||||
| @@ -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 | ||||
| @@ -30,6 +31,7 @@ Push-Location $path_root | ||||
| if ( $args ) { $args | ForEach-Object { | ||||
| 	switch ($_){ | ||||
| 		{ $_ -in $vendors }   { $vendor       = $_; break } | ||||
| 		"verbose"			  { $verbose      = $true } | ||||
| 		"release"             { $release      = $true } | ||||
| 		"debug"               { $release      = $false } | ||||
| 		"bootstrap"           { $bootstrap    = $true } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user