mirror of
				https://github.com/Ed94/gencpp.git
				synced 2025-10-31 06:50:53 -07:00 
			
		
		
		
	Compare commits
	
		
			2 Commits
		
	
	
		
			b5cf633e98
			...
			96ffca3094
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 96ffca3094 | |||
| 967a044637 | 
							
								
								
									
										3
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
								
							| @@ -56,7 +56,8 @@ | |||||||
| 		"new": "cpp", | 		"new": "cpp", | ||||||
| 		"typeinfo": "cpp", | 		"typeinfo": "cpp", | ||||||
| 		"unordered_map": "cpp", | 		"unordered_map": "cpp", | ||||||
| 		"xstddef": "cpp" | 		"xstddef": "cpp", | ||||||
|  | 		"gen_singleheader.h": "c" | ||||||
| 	}, | 	}, | ||||||
| 	"C_Cpp.intelliSenseEngineFallback": "disabled", | 	"C_Cpp.intelliSenseEngineFallback": "disabled", | ||||||
| 	"mesonbuild.configureOnOpen": true, | 	"mesonbuild.configureOnOpen": true, | ||||||
|   | |||||||
| @@ -7,7 +7,7 @@ | |||||||
|  |  | ||||||
| #if GEN_COMPILER_MSVC | #if GEN_COMPILER_MSVC | ||||||
|     #ifdef GEN_DYN_LINK |     #ifdef GEN_DYN_LINK | ||||||
|         #ifdef GEN_EXPORTS |         #ifdef GEN_DYN_EXPORT | ||||||
|             #define GEN_API __declspec(dllexport) |             #define GEN_API __declspec(dllexport) | ||||||
|         #else |         #else | ||||||
|             #define GEN_API __declspec(dllimport) |             #define GEN_API __declspec(dllimport) | ||||||
|   | |||||||
| @@ -641,7 +641,7 @@ do                          \ | |||||||
| 						if ( array_token->Front == array_entry ) | 						if ( array_token->Front == array_entry ) | ||||||
| 							array_token->Front = next; | 							array_token->Front = next; | ||||||
|  |  | ||||||
| 							parser_types.append(array_entry); | 						parser_types.append(array_entry); | ||||||
| 						continue_for = false; | 						continue_for = false; | ||||||
| 					} | 					} | ||||||
| 					break; | 					break; | ||||||
|   | |||||||
| @@ -350,6 +350,8 @@ word CodeVar,            gen_CodeVar | |||||||
|  |  | ||||||
| // Code Interface | // Code Interface | ||||||
|  |  | ||||||
|  | word Context, gen_Context | ||||||
|  |  | ||||||
| namespace code_, gen_code_ | namespace code_, gen_code_ | ||||||
|  |  | ||||||
| word Code_Global,  gen_Code_Global | word Code_Global,  gen_Code_Global | ||||||
|   | |||||||
							
								
								
									
										3
									
								
								gen_c_library/gen_c_lib.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								gen_c_library/gen_c_lib.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | |||||||
|  | #define GEN_IMPLEMENTATION | ||||||
|  | #define GEN_DONT_ENFORCE_GEN_TIME_GUARD | ||||||
|  | #include "gen/gen_singleheader.h" | ||||||
| @@ -18,12 +18,12 @@ Push-Location $path_root | |||||||
|        $vendor       = $null |        $vendor       = $null | ||||||
|        $release      = $null |        $release      = $null | ||||||
| [bool] $verbose      = $false | [bool] $verbose      = $false | ||||||
| [bool] $shared       = $false |  | ||||||
| [bool] $dyn_link     = $false |  | ||||||
| [bool] $base         = $false | [bool] $base         = $false | ||||||
| [bool] $segmented    = $false | [bool] $segmented    = $false | ||||||
| [bool] $singleheader = $false | [bool] $singleheader = $false | ||||||
| [bool] $c_library    = $false | [bool] $c_lib        = $false | ||||||
|  | [bool] $c_lib_static = $false | ||||||
|  | [bool] $c_lib_dyn    = $false | ||||||
| [bool] $unreal       = $false | [bool] $unreal       = $false | ||||||
| [bool] $test         = $false | [bool] $test         = $false | ||||||
|  |  | ||||||
| @@ -37,12 +37,12 @@ if ( $args ) { $args | ForEach-Object { | |||||||
| 		"verbose"			  { $verbose      = $true } | 		"verbose"			  { $verbose      = $true } | ||||||
| 		"release"             { $release      = $true } | 		"release"             { $release      = $true } | ||||||
| 		"debug"               { $release      = $false } | 		"debug"               { $release      = $false } | ||||||
| 		"shared"              { $shared       = $true } |  | ||||||
| 		"dyn_link"            { $dyn_link     = $true } |  | ||||||
| 		"base"                { $base         = $true } | 		"base"                { $base         = $true } | ||||||
| 		"segmented"           { $segmented    = $true } | 		"segmented"           { $segmented    = $true } | ||||||
| 		"singleheader"        { $singleheader = $true } | 		"singleheader"        { $singleheader = $true } | ||||||
| 		"c_library"           { $c_library    = $true } | 		"c_lib"               { $c_lib        = $true } | ||||||
|  | 		"c_lib_static"        { $c_lib_static = $true } | ||||||
|  | 		"c_lib_dyn"           { $c_lib_dyn    = $true } | ||||||
| 		"unreal"              { $unreal       = $true } | 		"unreal"              { $unreal       = $true } | ||||||
| 		"test"                { $test         = $true } | 		"test"                { $test         = $true } | ||||||
| 	} | 	} | ||||||
| @@ -75,7 +75,9 @@ else { | |||||||
| $cannot_build =                     $base         -eq $false | $cannot_build =                     $base         -eq $false | ||||||
| $cannot_build = $cannot_build -and  $segmented    -eq $false | $cannot_build = $cannot_build -and  $segmented    -eq $false | ||||||
| $cannot_build = $cannot_build -and  $singleheader -eq $false | $cannot_build = $cannot_build -and  $singleheader -eq $false | ||||||
| $cannot_build = $cannot_build -and  $c_library    -eq $false | $cannot_build = $cannot_build -and  $c_lib        -eq $false | ||||||
|  | $cannot_build = $cannot_build -and  $c_lib_static -eq $false | ||||||
|  | $cannot_build = $cannot_build -and  $c_lib_dyn    -eq $false | ||||||
| $cannot_build = $cannot_build -and  $unreal       -eq $false | $cannot_build = $cannot_build -and  $unreal       -eq $false | ||||||
| $cannot_build = $cannot_build -and  $test         -eq $false | $cannot_build = $cannot_build -and  $test         -eq $false | ||||||
| if ( $cannot_build ) { | if ( $cannot_build ) { | ||||||
| @@ -213,7 +215,7 @@ if ( $singleheader ) | |||||||
| 	Pop-Location | 	Pop-Location | ||||||
| } | } | ||||||
|  |  | ||||||
| if ( $c_library ) | if ( $c_lib -or $c_lib_static -or $c_lib_dyn ) | ||||||
| { | { | ||||||
| 	$path_build = join-path $path_c_library build | 	$path_build = join-path $path_c_library build | ||||||
| 	$path_gen   = join-path $path_c_library gen | 	$path_gen   = join-path $path_c_library gen | ||||||
| @@ -249,34 +251,38 @@ if ( $c_library ) | |||||||
| 			write-host "`nc_library generator completed in $($time_taken.TotalMilliseconds) ms" | 			write-host "`nc_library generator completed in $($time_taken.TotalMilliseconds) ms" | ||||||
| 		} | 		} | ||||||
| 	Pop-Location | 	Pop-Location | ||||||
|  | } | ||||||
|  |  | ||||||
| 	$includes    = @( $path_c_library ) | if ( $c_lib_static ) | ||||||
| 	$unit       = join-path $path_c_library "gen.c" | { | ||||||
| 	$executable = join-path $path_build     "gen_c_library_test.exe" | 	$includes = @( $path_c_library ) | ||||||
|  | 	$unit     = join-path $path_c_library "gen_c_lib.c" | ||||||
|  | 	$path_lib = join-path $path_build     "gencpp_c11.lib" | ||||||
|  |  | ||||||
| 	if ($vendor -eq "clang") { | 	$compiler_args = @() | ||||||
| 		$compiler_args += '-x' | 	$compiler_args += $flag_all_c | ||||||
| 		$compiler_args += 'c' | 	$compiler_args += $flag_updated_cpp_macro | ||||||
| 		$compiler_args += '-std=c11' | 	$compiler_args += $flag_c11 | ||||||
| 	} elseif ($vendor -eq "msvc") { |  | ||||||
| 		$compiler_args += "/TC"       # Compile as C |  | ||||||
| 		$compiler_args += "/Zc:__cplusplus" # Fix __cplusplus macro |  | ||||||
| 		$compiler_args += "/std:c11" |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	$result = build-simple $path_build $includes $compiler_args $linker_args $unit $executable | 	$linker_args = @() | ||||||
|  | 	$result = build-simple $path_build $includes $compiler_args $linker_args $unit $path_lib | ||||||
|  | } | ||||||
|  |  | ||||||
| 	Push-Location $path_c_library | if ( $c_lib_dyn ) | ||||||
| 		if ( Test-Path( $executable ) ) { | { | ||||||
| 			write-host "`nRunning c_library test" | 	$includes = @( $path_c_library ) | ||||||
| 			$time_taken = Measure-Command { & $executable | 	$unit     = join-path $path_c_library "gen_c_lib.c" | ||||||
| 					| ForEach-Object { | 	$path_dll = join-path $path_build     "gencpp_c11.dll" | ||||||
| 						write-host `t $_ -ForegroundColor Green |   | ||||||
| 					} | 	$compiler_args = @() | ||||||
| 				} | 	$compiler_args += $flag_all_c | ||||||
| 			write-host "`nc_library generator completed in $($time_taken.TotalMilliseconds) ms" | 	$compiler_args += $flag_updated_cpp_macro | ||||||
| 		} | 	$compiler_args += $flag_c11 | ||||||
| 	Pop-Location | 	$compiler_args += ( $flag_define + 'GEN_DYN_LINK' ) | ||||||
|  | 	$compiler_args += ( $flag_define + 'GEN_DYN_EXPORT' ) | ||||||
|  |   | ||||||
|  | 	$linker_args = @() | ||||||
|  | 	$result = build-simple $path_build $includes $compiler_args $linker_args $unit $path_dll | ||||||
| } | } | ||||||
|  |  | ||||||
| if ( $unreal ) | if ( $unreal ) | ||||||
| @@ -319,47 +325,24 @@ if ( $unreal ) | |||||||
| 	. $refactor_unreal | 	. $refactor_unreal | ||||||
| } | } | ||||||
|  |  | ||||||
| # TODO(Ed): The unit testing needs a full rewrite | if ( $test ) | ||||||
| if ( $test -and $false ) |  | ||||||
| { | { | ||||||
| 	$path_gen          = join-path $path_test gen | 	$path_test_c_lib = join-path $path_test       c_library | ||||||
| 	$path_gen_build    = join-path $path_gen  build | 	$path_build      = join-path $path_test_c_lib build | ||||||
| 	$path_build        = join-path $path_test build |  | ||||||
| 	$path_original     = join-path $path_gen  original |  | ||||||
| 	$path_components   = join-path $path_original components |  | ||||||
| 	$path_dependencies = join-path $path_original dependencies |  | ||||||
| 	$path_helpers      = join-path $path_original helpers |  | ||||||
|  |  | ||||||
| 	if ( -not(Test-Path($path_build) )) { | 	if ( -not(Test-Path($path_build) )) { | ||||||
| 		New-Item -ItemType Directory -Path $path_build | 		New-Item -ItemType Directory -Path $path_build | ||||||
| 	} | 	} | ||||||
| 	if ( -not(Test-Path($path_gen) )) { |  | ||||||
| 		New-Item -ItemType Directory -Path $path_gen |  | ||||||
| 	} |  | ||||||
| 	if ( -not(Test-Path($path_gen_build) ))  { |  | ||||||
| 		New-Item -ItemType Directory -Path $path_gen_build |  | ||||||
| 	} |  | ||||||
| 	if ( -not(test-path $path_original)) { |  | ||||||
| 		new-item -ItemType Directory -Path $path_original |  | ||||||
| 	} |  | ||||||
| 	if ( -not(test-path $path_components)) { |  | ||||||
| 		new-item -ItemType Directory -Path $path_components |  | ||||||
| 	} |  | ||||||
| 	if ( -not(test-path $path_dependencies)) { |  | ||||||
| 		new-item -ItemType Directory -Path $path_dependencies |  | ||||||
| 	} |  | ||||||
| 	if ( -not(test-path $path_helpers)) { |  | ||||||
| 		new-item -ItemType Directory -Path $path_helpers |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	$path_bootstrap = join-path $path_project gen | 	$includes    = @( $path_c_library ) | ||||||
|  | 	$unit       = join-path $path_test_c_lib "gen.c" | ||||||
| 	$includes    = @( $path_bootstrap ) | 	$executable = join-path $path_build      "gen_c_library_test.exe" | ||||||
| 	$unit       = join-path $path_test  "test.cpp" |  | ||||||
| 	$executable = join-path $path_build "test.exe" |  | ||||||
|  |  | ||||||
| 	$compiler_args = @() | 	$compiler_args = @() | ||||||
| 	$compiler_args += ( $flag_define + 'GEN_TIME' ) | 	$compiler_args += ( $flag_define + 'GEN_TIME' ) | ||||||
|  | 	$compiler_args += $flag_all_c | ||||||
|  | 	$compiler_args += $flag_updated_cpp_macro | ||||||
|  | 	$compiler_args += $flag_c11 | ||||||
|  |  | ||||||
| 	$linker_args   = @( | 	$linker_args   = @( | ||||||
| 		$flag_link_win_subsystem_console | 		$flag_link_win_subsystem_console | ||||||
| @@ -367,16 +350,15 @@ if ( $test -and $false ) | |||||||
|  |  | ||||||
| 	$result = build-simple $path_build $includes $compiler_args $linker_args $unit $executable | 	$result = build-simple $path_build $includes $compiler_args $linker_args $unit $executable | ||||||
|  |  | ||||||
| 	Push-Location $path_test | 	Push-Location $path_test_c_lib | ||||||
| 		Write-Host $path_test |  | ||||||
| 		if ( Test-Path( $executable ) ) { | 		if ( Test-Path( $executable ) ) { | ||||||
| 			write-host "`nRunning test generator" | 			write-host "`nRunning c_library test" | ||||||
| 			$time_taken = Measure-Command { & $executable | 			$time_taken = Measure-Command { & $executable | ||||||
| 					| ForEach-Object { | 					| ForEach-Object { | ||||||
| 						write-host `t $_ -ForegroundColor Green | 						write-host `t $_ -ForegroundColor Green | ||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
| 			write-host "`nTest generator completed in $($time_taken.TotalMilliseconds) ms" | 			write-host "`nc_library generator completed in $($time_taken.TotalMilliseconds) ms" | ||||||
| 		} | 		} | ||||||
| 	Pop-Location | 	Pop-Location | ||||||
| } | } | ||||||
|   | |||||||
| @@ -22,6 +22,40 @@ if ( $dev ) { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | # Add new function for running lib.exe | ||||||
|  | function run-archiver | ||||||
|  | { | ||||||
|  |     param( $archiver, $library, $lib_args ) | ||||||
|  |  | ||||||
|  |     write-host "`Creating library $library" | ||||||
|  |     if ( $verbose ) { | ||||||
|  |         write-host "Lib manager config:" | ||||||
|  |         $lib_args | ForEach-Object { | ||||||
|  |             write-host $_ -ForegroundColor Cyan | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     $time_taken = Measure-Command { | ||||||
|  |         & $archiver $lib_args 2>&1 | ForEach-Object { | ||||||
|  |             $color = 'White' | ||||||
|  |             switch ($_){ | ||||||
|  |                 { $_ -match "error"   } { $color = 'Red'   ; break } | ||||||
|  |                 { $_ -match "warning" } { $color = 'Yellow'; break } | ||||||
|  |             } | ||||||
|  |             write-host `t $_ -ForegroundColor $color | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     if ( $LASTEXITCODE -eq 0 ) { | ||||||
|  |         write-host "$library creation finished in $($time_taken.TotalMilliseconds) ms`n" | ||||||
|  |         return $true | ||||||
|  |     } | ||||||
|  |     else { | ||||||
|  |         write-host "Library creation failed for $library`n" -ForegroundColor Red | ||||||
|  |         return $false | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
| function run-compiler | function run-compiler | ||||||
| { | { | ||||||
| 	param( $compiler, $unit, $compiler_args ) | 	param( $compiler, $unit, $compiler_args ) | ||||||
| @@ -95,7 +129,8 @@ function run-linker | |||||||
| if ( $vendor -match "clang" ) | if ( $vendor -match "clang" ) | ||||||
| { | { | ||||||
| 	# https://clang.llvm.org/docs/ClangCommandLineReference.html | 	# https://clang.llvm.org/docs/ClangCommandLineReference.html | ||||||
| 	$flag_all_c 					   = '-x c' | 	$flag_all_c 					   = @('-x', 'c') | ||||||
|  | 	$flag_c11                          = '-std=c11' | ||||||
| 	$flag_all_cpp                      = '-x c++' | 	$flag_all_cpp                      = '-x c++' | ||||||
| 	$flag_compile                      = '-c' | 	$flag_compile                      = '-c' | ||||||
| 	$flag_color_diagnostics            = '-fcolor-diagnostics' | 	$flag_color_diagnostics            = '-fcolor-diagnostics' | ||||||
| @@ -174,8 +209,8 @@ if ( $vendor -match "clang" ) | |||||||
| 		$map    = join-path $path_output (split-path $map    -Leaf) | 		$map    = join-path $path_output (split-path $map    -Leaf) | ||||||
|  |  | ||||||
| 		# This allows dll reloads at runtime to work (jankily, use below if not interested) | 		# This allows dll reloads at runtime to work (jankily, use below if not interested) | ||||||
| 		$pdb    = $binary -replace '\.(exe|dll)$', "_$(get-random).pdb" | 		# $pdb    = $binary -replace '\.(exe|dll)$', "_$(get-random).pdb" | ||||||
| 		# $pdb    = $binary -replace '\.(exe|dll)$', ".pdb" | 		$pdb    = $binary -replace '\.(exe|dll)$', ".pdb" | ||||||
|  |  | ||||||
| 		$compiler_args += @( | 		$compiler_args += @( | ||||||
| 			$flag_no_color_diagnostics, | 			$flag_no_color_diagnostics, | ||||||
| @@ -253,8 +288,8 @@ if ( $vendor -match "clang" ) | |||||||
| 		$map    = join-path $path_output (split-path $map    -Leaf) | 		$map    = join-path $path_output (split-path $map    -Leaf) | ||||||
|  |  | ||||||
| 		# This allows dll reloads at runtime to work (jankily, use below if not interested) | 		# This allows dll reloads at runtime to work (jankily, use below if not interested) | ||||||
| 		$pdb    = $binary -replace '\.(exe|dll)$', "_$(get-random).pdb" | 		# $pdb    = $binary -replace '\.(exe|dll)$', "_$(get-random).pdb" | ||||||
| 		# $pdb    = $binary -replace '\.(exe|dll)$', ".pdb" | 		$pdb    = $binary -replace '\.(exe|dll)$', ".pdb" | ||||||
|  |  | ||||||
| 		$compiler_args += @( | 		$compiler_args += @( | ||||||
| 			$flag_no_color_diagnostics, | 			$flag_no_color_diagnostics, | ||||||
| @@ -308,10 +343,22 @@ if ( $vendor -match "clang" ) | |||||||
| 			$linker_args += $_ + '.lib' | 			$linker_args += $_ + '.lib' | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  | 		# Check if output is a static library | ||||||
|  | 		# if ( $binary -match '\.lib$' ) | ||||||
|  | 		# { | ||||||
|  | 			# $lib_args  = @() | ||||||
|  | 			# $lib_args += $flag_nologo | ||||||
|  | 			# $lib_args += $flag_link_win_machine_64 | ||||||
|  | 			# $lib_args += ( $flag_link_win_path_output + $binary ) | ||||||
|  | 			# $lib_args += $object | ||||||
|  | 			# return run-archiver $archiver $binary $lib_args | ||||||
|  | 		# } | ||||||
|  |  | ||||||
| 		$linker_args += $object | 		$linker_args += $object | ||||||
| 		return run-linker $linker $binary $linker_args | 		return run-linker $linker $binary $linker_args | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	$archiver = 'llvm-ar' | ||||||
| 	$compiler = 'clang++' | 	$compiler = 'clang++' | ||||||
| 	$linker   = 'lld-link' | 	$linker   = 'lld-link' | ||||||
| } | } | ||||||
| @@ -320,6 +367,7 @@ if ( $vendor -match "msvc" ) | |||||||
| { | { | ||||||
| 	# https://learn.microsoft.com/en-us/cpp/build/reference/compiler-options-listed-by-category?view=msvc-170 | 	# https://learn.microsoft.com/en-us/cpp/build/reference/compiler-options-listed-by-category?view=msvc-170 | ||||||
| 	$flag_all_c 					  = '/TC' | 	$flag_all_c 					  = '/TC' | ||||||
|  | 	$flag_c11                         = '/std:c11' | ||||||
| 	$flag_all_cpp                     = '/TP' | 	$flag_all_cpp                     = '/TP' | ||||||
| 	$flag_compile			          = '/c' | 	$flag_compile			          = '/c' | ||||||
| 	$flag_debug                       = '/Zi' | 	$flag_debug                       = '/Zi' | ||||||
| @@ -332,6 +380,7 @@ if ( $vendor -match "msvc" ) | |||||||
| 	$flag_dll 				          = '/LD' | 	$flag_dll 				          = '/LD' | ||||||
| 	$flag_dll_debug 			      = '/LDd' | 	$flag_dll_debug 			      = '/LDd' | ||||||
| 	$flag_linker 		              = '/link' | 	$flag_linker 		              = '/link' | ||||||
|  | 	# $flag_link_lib                    = '/lib' | ||||||
| 	$flag_link_dll                    = '/DLL' | 	$flag_link_dll                    = '/DLL' | ||||||
| 	$flag_link_no_incremental 	      = '/INCREMENTAL:NO' | 	$flag_link_no_incremental 	      = '/INCREMENTAL:NO' | ||||||
| 	$flag_link_mapfile 				  = '/MAP:' | 	$flag_link_mapfile 				  = '/MAP:' | ||||||
| @@ -354,15 +403,17 @@ if ( $vendor -match "msvc" ) | |||||||
| 	$flag_optimized_debug_forceinline = '/d2Obforceinline' | 	$flag_optimized_debug_forceinline = '/d2Obforceinline' | ||||||
| 	$flag_optimized_debug			  = '/Zo' | 	$flag_optimized_debug			  = '/Zo' | ||||||
| 	$flag_ | 	$flag_ | ||||||
| 	$flag_out_name                    = '/OUT:' | 	# $flag_out_name                    = '/OUT:' | ||||||
| 	$flag_path_interm                 = '/Fo' | 	$flag_path_interm                 = '/Fo' | ||||||
| 	$flag_path_debug                  = '/Fd' | 	$flag_path_debug                  = '/Fd' | ||||||
| 	$flag_path_output                 = '/Fe' | 	$flag_path_output                 = '/Fe' | ||||||
| 	$flag_preprocess_conform          = '/Zc:preprocessor' | 	$flag_preprocess_conform          = '/Zc:preprocessor' | ||||||
|  | 	$flag_updated_cpp_macro           = "/Zc:__cplusplus" | ||||||
| 	$flag_set_stack_size			  = '/F' | 	$flag_set_stack_size			  = '/F' | ||||||
| 	$flag_syntax_only				  = '/Zs' | 	$flag_syntax_only				  = '/Zs' | ||||||
| 	$flag_wall 					      = '/Wall' | 	$flag_wall 					      = '/Wall' | ||||||
| 	$flag_warnings_as_errors 		  = '/WX' | 	$flag_warnings_as_errors 		  = '/WX' | ||||||
|  | 	$flag_lib_list                    = '/LIST' | ||||||
|  |  | ||||||
| 	function build | 	function build | ||||||
| 	{ | 	{ | ||||||
| @@ -374,8 +425,8 @@ if ( $vendor -match "msvc" ) | |||||||
| 		$map    = join-path $path_output (split-path $map    -Leaf) | 		$map    = join-path $path_output (split-path $map    -Leaf) | ||||||
|  |  | ||||||
| 		# This allows dll reloads at runtime to work (jankily, use below if not interested) | 		# This allows dll reloads at runtime to work (jankily, use below if not interested) | ||||||
| 		$pdb    = $binary -replace '\.(exe|dll)$', "_$(get-random).pdb" | 		# $pdb    = $binary -replace '\.(exe|dll)$', "_$(get-random).pdb" | ||||||
| 		# $pdb    = $binary -replace '\.(exe|dll)$', ".pdb" | 		$pdb    = $binary -replace '\.(exe|dll)$', ".pdb" | ||||||
|  |  | ||||||
| 		$compiler_args += @( | 		$compiler_args += @( | ||||||
| 			$flag_nologo, | 			$flag_nologo, | ||||||
| @@ -461,8 +512,8 @@ if ( $vendor -match "msvc" ) | |||||||
| 		$map    = join-path $path_output (split-path $map    -Leaf) | 		$map    = join-path $path_output (split-path $map    -Leaf) | ||||||
|  |  | ||||||
| 		# This allows dll reloads at runtime to work (jankily, use below if not interested) | 		# This allows dll reloads at runtime to work (jankily, use below if not interested) | ||||||
| 		$pdb    = $binary -replace '\.(exe|dll)$', "_$(get-random).pdb" | 		# $pdb    = $binary -replace '\.(exe|dll)$', "_$(get-random).pdb" | ||||||
| 		# $pdb    = $binary -replace '\.(exe|dll)$', ".pdb" | 		$pdb    = $binary -replace '\.(exe|dll)$', ".pdb" | ||||||
|  |  | ||||||
| 		$compiler_args += @( | 		$compiler_args += @( | ||||||
| 			$flag_nologo, | 			$flag_nologo, | ||||||
| @@ -508,6 +559,17 @@ if ( $vendor -match "msvc" ) | |||||||
| 			return $false; | 			return $false; | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  | 		# Check if output is a static library | ||||||
|  | 		if ( $binary -match '\.lib$' ) | ||||||
|  | 		{ | ||||||
|  | 			$lib_args  = @() | ||||||
|  | 			$lib_args += $flag_nologo | ||||||
|  | 			$lib_args += $flag_link_win_machine_64 | ||||||
|  | 			$lib_args += ( $flag_link_win_path_output + $binary ) | ||||||
|  | 			$lib_args += $object | ||||||
|  | 			return run-archiver $archiver $binary $lib_args | ||||||
|  | 		} | ||||||
|  |  | ||||||
| 		$linker_args += @( | 		$linker_args += @( | ||||||
| 			$flag_nologo, | 			$flag_nologo, | ||||||
| 			$flag_link_win_machine_64, | 			$flag_link_win_machine_64, | ||||||
| @@ -522,10 +584,19 @@ if ( $vendor -match "msvc" ) | |||||||
| 		else { | 		else { | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  | 		# Check if output is a dynamic library | ||||||
|  | 		if ( $binary -match '\.dll$' ) { | ||||||
|  | 			$linker_args += $flag_link_dll | ||||||
|  | 		} | ||||||
| 		$linker_args += $object | 		$linker_args += $object | ||||||
|  | 		# Write-Host "link args:" | ||||||
|  | 		# $linker_args | ForEach-Object { | ||||||
|  | 		# 	Write-Host "`t$_" -ForegroundColor Yellow | ||||||
|  | 		# } | ||||||
| 		return run-linker $linker $binary $linker_args | 		return run-linker $linker $binary $linker_args | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	$archiver = 'lib' | ||||||
| 	$compiler = 'cl' | 	$compiler = 'cl' | ||||||
| 	$linker   = 'link' | 	$linker   = 'link' | ||||||
| } | } | ||||||
|   | |||||||
| @@ -4,16 +4,14 @@ Import-Module $misc | |||||||
| $build = Join-Path $PSScriptRoot 'build.ci.ps1' | $build = Join-Path $PSScriptRoot 'build.ci.ps1' | ||||||
|  |  | ||||||
| if ( $IsWindows ) { | if ( $IsWindows ) { | ||||||
| 	& $build release msvc base segmented singleheader unreal c_library msvc debug | 	& $build release msvc debug base segmented singleheader unreal c_lib c_lib_static c_lib_dyn | ||||||
| } |  | ||||||
| else { |  | ||||||
| 	& $build release clang base segmented singleheader unreal c_library msvc debug |  | ||||||
| } | } | ||||||
|  |  | ||||||
| $path_root             = Get-ScriptRepoRoot | $path_root             = Get-ScriptRepoRoot | ||||||
| $path_docs			   = Join-Path $path_root          docs | $path_docs			   = Join-Path $path_root          docs | ||||||
| $path_base             = Join-Path $path_root          base | $path_base             = Join-Path $path_root          base | ||||||
| $path_c_library        = Join-Path $path_root          gen_c_library | $path_c_library        = Join-Path $path_root          gen_c_library | ||||||
|  | $path_c_library_build  = Join-Path $path_c_library     build | ||||||
| $path_c_library_gen    = Join-Path $path_c_library     gen | $path_c_library_gen    = Join-Path $path_c_library     gen | ||||||
| $path_segmented        = Join-Path $path_root          gen_segmented | $path_segmented        = Join-Path $path_root          gen_segmented | ||||||
| $path_segmented_gen    = Join-Path $path_segmented     gen | $path_segmented_gen    = Join-Path $path_segmented     gen | ||||||
| @@ -74,7 +72,7 @@ Remove-Item -Path $path_release_content -Recurse | |||||||
| prep-ReleaseContent | prep-ReleaseContent | ||||||
| Copy-Item        -Verbose -Path $path_c_library\Readme.md              -Destination $path_release_content | Copy-Item        -Verbose -Path $path_c_library\Readme.md              -Destination $path_release_content | ||||||
| Copy-Item        -Verbose -Path $path_c_library_gen\gen_singleheader.h -Destination $path_release_content\gen.h | Copy-Item        -Verbose -Path $path_c_library_gen\gen_singleheader.h -Destination $path_release_content\gen.h | ||||||
| Compress-Archive -Path $path_release_content\*                -DestinationPath $path_release\gencpp_c11_singleheader.zip -Force | Compress-Archive -Path $path_release_content\*                         -DestinationPath $path_release\gencpp_c11_singleheader.zip -Force | ||||||
| Remove-Item -Path $path_release_content -Recurse | Remove-Item -Path $path_release_content -Recurse | ||||||
|  |  | ||||||
| # C Library Segmented | # C Library Segmented | ||||||
| @@ -87,6 +85,20 @@ Copy-Item        -Verbose -Path $path_c_library_gen\gen.h     -Destination $path | |||||||
| Compress-Archive -Path $path_release_content\*       -DestinationPath $path_release\gencpp_c11_segmented.zip -Force | Compress-Archive -Path $path_release_content\*       -DestinationPath $path_release\gencpp_c11_segmented.zip -Force | ||||||
| Remove-Item -Path $path_release_content -Recurse | Remove-Item -Path $path_release_content -Recurse | ||||||
|  |  | ||||||
|  | # C Library Segmented | ||||||
|  | prep-ReleaseContent | ||||||
|  | Copy-Item        -Verbose -Path $path_c_library\Readme.md     -Destination $path_release_content | ||||||
|  | Copy-Item        -Verbose -Path $path_c_library_gen\gen.dep.c -Destination $path_release_content | ||||||
|  | Copy-Item        -Verbose -Path $path_c_library_gen\gen.dep.h -Destination $path_release_content | ||||||
|  | Copy-Item        -Verbose -Path $path_c_library_gen\gen.c     -Destination $path_release_content | ||||||
|  | Copy-Item        -Verbose -Path $path_c_library_gen\gen.h     -Destination $path_release_content | ||||||
|  | Compress-Archive -Path $path_release_content\*                -DestinationPath $path_release\gencpp_c11_segmented.zip -Force | ||||||
|  | Remove-Item -Path $path_release_content -Recurse | ||||||
|  |  | ||||||
|  | # C Lib Static & Dyanmic Libs | ||||||
|  | Copy-Item -Verbose -Path $path_c_library_build\gencpp_c11.lib -Destination $path_release | ||||||
|  | Copy-Item -Verbose -Path $path_c_library_build\gencpp_c11.dll -Destination $path_release | ||||||
|  |  | ||||||
| # Base | # Base | ||||||
|  |  | ||||||
| prep-ReleaseContent | prep-ReleaseContent | ||||||
|   | |||||||
| @@ -1,8 +1,9 @@ | |||||||
| #define GEN_IMPLEMENTATION | #define GEN_IMPLEMENTATION | ||||||
| #include "gen/gen_singleheader.h" | #include "gen/gen_singleheader.h" | ||||||
| 
 | 
 | ||||||
| int main() | int gen_main() | ||||||
| { | { | ||||||
| 	// init();
 | 	// init();
 | ||||||
| 	__debugbreak(); | 	__debugbreak(); | ||||||
|  | 	return 0; | ||||||
| } | } | ||||||
		Reference in New Issue
	
	Block a user