mirror of
https://github.com/Ed94/HandmadeHero.git
synced 2024-12-22 06:14:45 -08:00
WIP git stuff
This commit is contained in:
parent
008a99391d
commit
3458456798
@ -1,8 +1,11 @@
|
|||||||
#include <stdio.h>
|
#include "win32.h"
|
||||||
|
|
||||||
int main()
|
int CALLBACK WinMain(
|
||||||
|
HINSTANCE hInstance,
|
||||||
|
HINSTANCE hPrevInstance,
|
||||||
|
LPSTR lpCmdLine,
|
||||||
|
int nShowCmd
|
||||||
|
)
|
||||||
{
|
{
|
||||||
puts("Handmade Hero!");
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
6
project/platform/win32.h
Normal file
6
project/platform/win32.h
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
/*
|
||||||
|
Alternative header for windows.h
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "windows/windows_base.h"
|
||||||
|
|
392
project/platform/windows/windows_base.h
Normal file
392
project/platform/windows/windows_base.h
Normal file
@ -0,0 +1,392 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
|
* Copyright (c) Arvid Gerstmann. All rights reserved.
|
||||||
|
*/
|
||||||
|
#ifndef _WINDOWS_
|
||||||
|
#ifndef WINDOWS_BASE_H
|
||||||
|
#define WINDOWS_BASE_H
|
||||||
|
|
||||||
|
/* Disable all warnings */
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
#pragma warning(push, 0)
|
||||||
|
#endif
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* size_t */
|
||||||
|
/* #include <stddef.h> */
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Windows Version requirements: Vista
|
||||||
|
* See here for more information regarding this define:
|
||||||
|
* https://msdn.microsoft.com/en-us/library/aa383745(VS.85).aspx
|
||||||
|
*/
|
||||||
|
#ifndef _WIN32_WINNT
|
||||||
|
#define _WIN32_WINNT 0x0600
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Magic: */
|
||||||
|
#define _CRTALLOC(x) __declspec(allocate(x))
|
||||||
|
#define DECLSPEC_ALIGN(x) __declspec(align(x))
|
||||||
|
|
||||||
|
/* Basic Defines: */
|
||||||
|
#define NTAPI __stdcall
|
||||||
|
#define WINAPI __stdcall
|
||||||
|
#define APIENTRY __stdcall
|
||||||
|
#define CALLBACK __stdcall
|
||||||
|
#define TRUE (1)
|
||||||
|
#define FALSE (0)
|
||||||
|
#ifndef NULL
|
||||||
|
# ifdef __cplusplus
|
||||||
|
# define NULL __nullptr
|
||||||
|
# else
|
||||||
|
# define NULL ((void *)0)
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
#ifndef FORCEINLINE
|
||||||
|
#define FORCEINLINE __forceinline
|
||||||
|
#endif
|
||||||
|
#ifdef UNICODE
|
||||||
|
#define __TEXT(x) L ## x
|
||||||
|
#define TEXT(x) __TEXT(x)
|
||||||
|
#else
|
||||||
|
#define TEXT(x) x
|
||||||
|
#endif
|
||||||
|
#define PATH_MAX 260
|
||||||
|
#define MAX_PATH 260
|
||||||
|
|
||||||
|
#define MAKEWORD(a, b) \
|
||||||
|
((WORD)(((BYTE)(((DWORD_PTR)(a)) & 0xff)) | \
|
||||||
|
((WORD)((BYTE)(((DWORD_PTR)(b)) & 0xff))) << 8))
|
||||||
|
#define MAKELONG(a, b) \
|
||||||
|
((LONG)(((WORD)(((DWORD_PTR)(a)) & 0xffff)) | \
|
||||||
|
((DWORD)((WORD)(((DWORD_PTR)(b)) & 0xffff))) << 16))
|
||||||
|
#define LOWORD(l) ((WORD)(((DWORD_PTR)(l)) & 0xffff))
|
||||||
|
#define HIWORD(l) ((WORD)((((DWORD_PTR)(l)) >> 16) & 0xffff))
|
||||||
|
#define LOBYTE(w) ((BYTE)(((DWORD_PTR)(w)) & 0xff))
|
||||||
|
#define HIBYTE(w) ((BYTE)((((DWORD_PTR)(w)) >> 8) & 0xff))
|
||||||
|
|
||||||
|
#if !defined(_68K_) \
|
||||||
|
&& !defined(_MPPC_) \
|
||||||
|
&& !defined(_X86_) \
|
||||||
|
&& !defined(_IA64_) \
|
||||||
|
&& !defined(_AMD64_) \
|
||||||
|
&& defined(_M_AMD64)
|
||||||
|
#define _AMD64_
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Windows uses the `interface` define to create interfaces for both C and C++.
|
||||||
|
* Only the C version is defined here and not the C++ version.
|
||||||
|
* Both can be found in BaseTyps.h
|
||||||
|
*/
|
||||||
|
#define STDMETHODCALLTYPE __stdcall
|
||||||
|
#define STDMETHODVCALLTYPE __cdecl
|
||||||
|
#define STDAPICALLTYPE __stdcall
|
||||||
|
#define STDAPIVCALLTYPE __cdecl
|
||||||
|
|
||||||
|
#define interface struct
|
||||||
|
#define PURE
|
||||||
|
#define THIS_ INTERFACE * This,
|
||||||
|
#define THIS INTERFACE * This
|
||||||
|
#define STDMETHOD(method) HRESULT (STDMETHODCALLTYPE * method)
|
||||||
|
#define STDMETHOD_(type, method) type (STDMETHODCALLTYPE * method)
|
||||||
|
#define STDMETHODV(method) HRESULT (STDMETHODVCALLTYPE * method)
|
||||||
|
#define STDMETHODV_(type, method) type (STDMETHODVCALLTYPE * method)
|
||||||
|
|
||||||
|
#define IFACEMETHOD(method) __override STDMETHOD(method)
|
||||||
|
#define IFACEMETHOD_(type, method) __override STDMETHOD_(type,method)
|
||||||
|
#define IFACEMETHODV(method) __override STDMETHODV(method)
|
||||||
|
#define IFACEMETHODV_(type, method) __override STDMETHODV_(type,method)
|
||||||
|
|
||||||
|
#define BEGIN_INTERFACE
|
||||||
|
#define END_INTERFACE
|
||||||
|
|
||||||
|
#ifdef CONST_VTABLE
|
||||||
|
#undef CONST_VTBL
|
||||||
|
#define CONST_VTBL const
|
||||||
|
#define DECLARE_INTERFACE(iface) \
|
||||||
|
typedef interface iface { \
|
||||||
|
const struct iface##Vtbl * lpVtbl; \
|
||||||
|
} iface; \
|
||||||
|
typedef const struct iface##Vtbl iface##Vtbl; \
|
||||||
|
const struct iface##Vtbl
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#undef CONST_VTBL
|
||||||
|
#define CONST_VTBL
|
||||||
|
#define DECLARE_INTERFACE(iface) \
|
||||||
|
typedef interface iface { \
|
||||||
|
struct iface##Vtbl * lpVtbl; \
|
||||||
|
} iface; \
|
||||||
|
typedef struct iface##Vtbl iface##Vtbl; \
|
||||||
|
struct iface##Vtbl
|
||||||
|
|
||||||
|
#endif /* CONST_VTABLE */
|
||||||
|
|
||||||
|
#define DECLARE_INTERFACE_(iface, baseiface) DECLARE_INTERFACE(iface)
|
||||||
|
|
||||||
|
|
||||||
|
#define HRESULT_IS_WIN32(x) \
|
||||||
|
((((x) >> 16) & 0xFFFF) == 0x8)
|
||||||
|
#define HRESULT_IS_FAILURE(x) \
|
||||||
|
((((x) >> 31) & 0x1) == 0x1)
|
||||||
|
#define HRESULT_FACILITY(x) \
|
||||||
|
(((x) >> 16) & 0xFFFF)
|
||||||
|
#define HRESULT_CODE(x) \
|
||||||
|
((x) & 0xFFFF)
|
||||||
|
#define HRESULT_FROM_WIN32(x) \
|
||||||
|
(0x80070000 | (x))
|
||||||
|
|
||||||
|
|
||||||
|
/* ========================================================================== */
|
||||||
|
/* Basic Types: */
|
||||||
|
/* https://msdn.microsoft.com/en-us/library/windows/desktop/aa383751(v=vs.85).aspx */
|
||||||
|
/* ========================================================================== */
|
||||||
|
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
/* 1300 == VC 6.0 */
|
||||||
|
#if _MSC_VER < 1300
|
||||||
|
typedef signed char int8_t;
|
||||||
|
typedef unsigned char uint8_t;
|
||||||
|
typedef signed short int16_t;
|
||||||
|
typedef unsigned short uint16_t;
|
||||||
|
typedef signed int int32_t;
|
||||||
|
typedef unsigned int uint32_t;
|
||||||
|
#else
|
||||||
|
typedef signed __int8 int8_t;
|
||||||
|
typedef unsigned __int8 uint8_t;
|
||||||
|
typedef signed __int16 int16_t;
|
||||||
|
typedef unsigned __int16 uint16_t;
|
||||||
|
typedef signed __int32 int32_t;
|
||||||
|
typedef unsigned __int32 uint32_t;
|
||||||
|
#endif
|
||||||
|
typedef signed __int64 int64_t;
|
||||||
|
typedef unsigned __int64 uint64_t;
|
||||||
|
#else
|
||||||
|
#include <stdint.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
typedef int BOOL;
|
||||||
|
typedef char CHAR;
|
||||||
|
typedef short SHORT;
|
||||||
|
typedef int INT;
|
||||||
|
typedef long LONG;
|
||||||
|
typedef unsigned char UCHAR;
|
||||||
|
typedef unsigned short USHORT;
|
||||||
|
typedef unsigned int UINT;
|
||||||
|
typedef unsigned long ULONG;
|
||||||
|
typedef unsigned char BYTE;
|
||||||
|
typedef unsigned short WORD;
|
||||||
|
typedef float FLOAT;
|
||||||
|
typedef unsigned long DWORD;
|
||||||
|
#ifndef HAVE_WCHAR_T
|
||||||
|
#define HAVE_WCHAR_T
|
||||||
|
#if !defined(__cplusplus)
|
||||||
|
typedef unsigned short wchar_t;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
typedef wchar_t WCHAR;
|
||||||
|
typedef wchar_t * PWCHAR;
|
||||||
|
typedef WORD ATOM;
|
||||||
|
typedef unsigned int ULONG32;
|
||||||
|
typedef uint64_t DWORD64;
|
||||||
|
typedef uint64_t ULONG64;
|
||||||
|
typedef signed int INT32;
|
||||||
|
typedef signed __int64 INT64;
|
||||||
|
typedef uint64_t DWORDLONG;
|
||||||
|
|
||||||
|
typedef CHAR * PCHAR;
|
||||||
|
typedef ULONG * PULONG;
|
||||||
|
typedef BYTE * PBYTE;
|
||||||
|
typedef ULONG64 * PULONG64;
|
||||||
|
typedef DWORD64 * PDWORD64;
|
||||||
|
|
||||||
|
#if !defined(_M_IX86)
|
||||||
|
typedef int64_t LONGLONG;
|
||||||
|
typedef uint64_t ULONGLONG;
|
||||||
|
#else
|
||||||
|
typedef double LONGLONG;
|
||||||
|
typedef double ULONGLONG;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef void VOID;
|
||||||
|
typedef void * PVOID;
|
||||||
|
typedef void * LPVOID;
|
||||||
|
typedef BOOL * PBOOL;
|
||||||
|
typedef BOOL * LPBOOL;
|
||||||
|
typedef WORD * PWORD;
|
||||||
|
typedef LONG * PLONG;
|
||||||
|
typedef LONG * LPLONG;
|
||||||
|
typedef DWORD * PDWORD;
|
||||||
|
|
||||||
|
typedef LPVOID HANDLE;
|
||||||
|
typedef HANDLE HINSTANCE;
|
||||||
|
typedef HANDLE HWND;
|
||||||
|
typedef HINSTANCE HMODULE;
|
||||||
|
typedef HANDLE HDC;
|
||||||
|
typedef HANDLE HGLRC;
|
||||||
|
typedef HANDLE HMENU;
|
||||||
|
typedef HANDLE * PHANDLE;
|
||||||
|
typedef HANDLE * LPHANDLE;
|
||||||
|
|
||||||
|
#define DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ *name
|
||||||
|
|
||||||
|
typedef WCHAR * PWSTR;
|
||||||
|
typedef BYTE * LPBYTE;
|
||||||
|
typedef long * LPLONG;
|
||||||
|
typedef DWORD * LPDWORD;
|
||||||
|
typedef const void * LPCVOID;
|
||||||
|
|
||||||
|
#if defined(_WIN64)
|
||||||
|
typedef int64_t INT_PTR;
|
||||||
|
typedef int64_t LONG_PTR;
|
||||||
|
typedef uint64_t UINT_PTR;
|
||||||
|
typedef uint64_t ULONG_PTR;
|
||||||
|
#else
|
||||||
|
typedef int INT_PTR;
|
||||||
|
typedef long LONG_PTR;
|
||||||
|
typedef unsigned int UINT_PTR;
|
||||||
|
typedef unsigned long ULONG_PTR;
|
||||||
|
#endif
|
||||||
|
typedef ULONG_PTR DWORD_PTR;
|
||||||
|
typedef DWORD_PTR * PDWORD_PTR;
|
||||||
|
|
||||||
|
typedef ULONG_PTR SIZE_T;
|
||||||
|
typedef LONG_PTR SSIZE_T;
|
||||||
|
|
||||||
|
typedef CHAR * LPSTR;
|
||||||
|
typedef WCHAR * LPWSTR;
|
||||||
|
typedef const CHAR * LPCSTR;
|
||||||
|
typedef const WCHAR * LPCWSTR;
|
||||||
|
#if defined(UNICODE)
|
||||||
|
typedef WCHAR TCHAR;
|
||||||
|
typedef WCHAR TBYTE;
|
||||||
|
typedef LPCWSTR LPCTSTR;
|
||||||
|
typedef LPWSTR LPTSTR;
|
||||||
|
#else
|
||||||
|
typedef char TCHAR;
|
||||||
|
typedef unsigned char TBYTE;
|
||||||
|
typedef LPCSTR LPCTSTR;
|
||||||
|
typedef LPSTR LPTSTR;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define MINCHAR 0x80
|
||||||
|
#define MAXCHAR 0x7f
|
||||||
|
#define MINSHORT 0x8000
|
||||||
|
#define MAXSHORT 0x7fff
|
||||||
|
#define MINLONG 0x80000000
|
||||||
|
#define MAXLONG 0x7fffffff
|
||||||
|
#define MAXBYTE 0xff
|
||||||
|
#define MAXWORD 0xffff
|
||||||
|
#define MAXDWORD 0xffffffff
|
||||||
|
|
||||||
|
#if defined(_WIN64)
|
||||||
|
typedef INT_PTR (WINAPI *FARPROC)(void);
|
||||||
|
typedef INT_PTR (WINAPI *NEARPROC)(void);
|
||||||
|
typedef INT_PTR (WINAPI *PROC)(void);
|
||||||
|
#else
|
||||||
|
typedef int (WINAPI *FARPROC)(void);
|
||||||
|
typedef int (WINAPI *NEARPROC)(void);
|
||||||
|
typedef int (WINAPI *PROC)(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef DWORD ACCESS_MASK;
|
||||||
|
typedef ACCESS_MASK * PACCESS_MASK;
|
||||||
|
|
||||||
|
typedef HANDLE HICON;
|
||||||
|
typedef HANDLE HBRUSH;
|
||||||
|
typedef HICON HCURSOR;
|
||||||
|
|
||||||
|
typedef LONG HRESULT;
|
||||||
|
typedef LONG_PTR LRESULT;
|
||||||
|
typedef LONG_PTR LPARAM;
|
||||||
|
typedef UINT_PTR WPARAM;
|
||||||
|
|
||||||
|
typedef void * HGDIOBJ;
|
||||||
|
|
||||||
|
typedef HANDLE HKEY;
|
||||||
|
typedef HKEY * PHKEY;
|
||||||
|
typedef ACCESS_MASK REGSAM;
|
||||||
|
|
||||||
|
|
||||||
|
/* ========================================================================== */
|
||||||
|
/* Errors: */
|
||||||
|
/* ========================================================================== */
|
||||||
|
#define ERROR_SUCCESS 0L
|
||||||
|
#define ERROR_FILE_NOT_FOUND 2L
|
||||||
|
#define ERROR_PATH_NOT_FOUND 3L
|
||||||
|
#define ERROR_TOO_MANY_OPEN_FILES 4L
|
||||||
|
#define ERROR_ACCESS_DENIED 5L
|
||||||
|
#define ERROR_NO_MORE_FILES 18L
|
||||||
|
#define ERROR_SHARING_VIOLATION 32L
|
||||||
|
#define ERROR_FILE_EXISTS 80L
|
||||||
|
#define ERROR_INSUFFICIENT_BUFFER 122L
|
||||||
|
#define ERROR_ALREADY_EXISTS 183L
|
||||||
|
#define ERROR_MORE_DATA 234L
|
||||||
|
|
||||||
|
|
||||||
|
/* ========================================================================== */
|
||||||
|
/* Enums */
|
||||||
|
/* ========================================================================== */
|
||||||
|
/* DllMain Reason: */
|
||||||
|
#define DLL_PROCESS_ATTACH (1)
|
||||||
|
#define DLL_PROCESS_DETACH (0)
|
||||||
|
#define DLL_THREAD_ATTACH (2)
|
||||||
|
#define DLL_THREAD_DETACH (3)
|
||||||
|
|
||||||
|
|
||||||
|
/* ========================================================================== */
|
||||||
|
/* Structures: */
|
||||||
|
/* ========================================================================== */
|
||||||
|
typedef struct _SECURITY_ATTRIBUTES {
|
||||||
|
DWORD nLength;
|
||||||
|
LPVOID lpSecurityDescriptor;
|
||||||
|
BOOL bInheritHandle;
|
||||||
|
} SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;
|
||||||
|
|
||||||
|
typedef union _LARGE_INTEGER {
|
||||||
|
struct {
|
||||||
|
DWORD LowPart;
|
||||||
|
LONG HighPart;
|
||||||
|
};
|
||||||
|
struct {
|
||||||
|
DWORD LowPart;
|
||||||
|
LONG HighPart;
|
||||||
|
} u;
|
||||||
|
LONGLONG QuadPart;
|
||||||
|
} LARGE_INTEGER, *PLARGE_INTEGER;
|
||||||
|
|
||||||
|
typedef union _ULARGE_INTEGER {
|
||||||
|
struct {
|
||||||
|
DWORD LowPart;
|
||||||
|
DWORD HighPart;
|
||||||
|
};
|
||||||
|
struct {
|
||||||
|
DWORD LowPart;
|
||||||
|
DWORD HighPart;
|
||||||
|
} u;
|
||||||
|
ULONGLONG QuadPart;
|
||||||
|
} ULARGE_INTEGER, *PULARGE_INTEGER;
|
||||||
|
|
||||||
|
/* Filetime: */
|
||||||
|
typedef struct _FILETIME {
|
||||||
|
DWORD dwLowDateTime;
|
||||||
|
DWORD dwHighDateTime;
|
||||||
|
} FILETIME, *PFILETIME, *LPFILETIME;
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
/* Enable all warnings */
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
#pragma warning(pop)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* WINDOWS_BASE_H */
|
||||||
|
#endif /* _WINDOWS_ */
|
@ -149,13 +149,13 @@ if ( $vendor -match "clang" )
|
|||||||
|
|
||||||
function build-simple
|
function build-simple
|
||||||
{
|
{
|
||||||
param( $includes, $unit, $executable )
|
param( [array]$includes, [array]$compiler_args, [array]$linker_args, [string]$unit, [string]$executable )
|
||||||
Write-Host "build-simple: clang"
|
Write-Host "build-simple: clang"
|
||||||
|
|
||||||
$object = $executable -replace '\.exe', '.obj'
|
$object = $executable -replace '\.exe', '.obj'
|
||||||
$pdb = $executable -replace '\.exe', '.pdb'
|
$pdb = $executable -replace '\.exe', '.pdb'
|
||||||
|
|
||||||
$compiler_args = @(
|
$compiler_args += @(
|
||||||
$flag_no_color_diagnostics,
|
$flag_no_color_diagnostics,
|
||||||
$flag_target_arch, $target_arch,
|
$flag_target_arch, $target_arch,
|
||||||
$flag_wall,
|
$flag_wall,
|
||||||
@ -179,8 +179,7 @@ if ( $vendor -match "clang" )
|
|||||||
$compiler_args += $flag_compile, $unit
|
$compiler_args += $flag_compile, $unit
|
||||||
run-compiler $compiler $unit $compiler_args
|
run-compiler $compiler $unit $compiler_args
|
||||||
|
|
||||||
$linker_args = @(
|
$linker_args += @(
|
||||||
$flag_link_win_subsystem_console,
|
|
||||||
$flag_link_win_machine_64,
|
$flag_link_win_machine_64,
|
||||||
$( $flag_link_win_path_output + $executable )
|
$( $flag_link_win_path_output + $executable )
|
||||||
)
|
)
|
||||||
@ -206,37 +205,37 @@ if ( $vendor -match "clang" )
|
|||||||
if ( $vendor -match "msvc" )
|
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_compile = '/c'
|
$flag_compile = '/c'
|
||||||
$flag_debug = '/Zi'
|
$flag_debug = '/Zi'
|
||||||
$flag_define = '/D'
|
$flag_define = '/D'
|
||||||
$flag_include = '/I'
|
$flag_include = '/I'
|
||||||
$flag_full_src_path = '/FC'
|
$flag_full_src_path = '/FC'
|
||||||
$flag_nologo = '/nologo'
|
$flag_nologo = '/nologo'
|
||||||
$flag_dll = '/LD'
|
$flag_dll = '/LD'
|
||||||
$flag_dll_debug = '/LDd'
|
$flag_dll_debug = '/LDd'
|
||||||
$flag_linker = '/link'
|
$flag_linker = '/link'
|
||||||
$flag_link_debug = '/DEBUG'
|
$flag_link_win_debug = '/DEBUG'
|
||||||
$flag_link_pdb = '/PDB:'
|
$flag_link_win_pdb = '/PDB:'
|
||||||
$flag_link_machine_32 = '/MACHINE:X86'
|
$flag_link_win_machine_32 = '/MACHINE:X86'
|
||||||
$flag_link_machine_64 = '/MACHINE:X64'
|
$flag_link_win_machine_64 = '/MACHINE:X64'
|
||||||
$flag_link_path_output = '/OUT:'
|
$flag_link_win_path_output = '/OUT:'
|
||||||
$flag_link_rt_dll = '/MD'
|
$flag_link_win_rt_dll = '/MD'
|
||||||
$flag_link_rt_dll_debug = '/MDd'
|
$flag_link_win_rt_dll_debug = '/MDd'
|
||||||
$flag_link_rt_static = '/MT'
|
$flag_link_win_rt_static = '/MT'
|
||||||
$flag_link_rt_static_debug = '/MTd'
|
$flag_link_win_rt_static_debug = '/MTd'
|
||||||
$flag_link_subsystem_console = '/SUBSYSTEM:CONSOLE'
|
$flag_link_win_subsystem_console = '/SUBSYSTEM:CONSOLE'
|
||||||
$flag_link_subsystem_windows = '/SUBSYSTEM:WINDOWS'
|
$flag_link_win_subsystem_windows = '/SUBSYSTEM:WINDOWS'
|
||||||
$flag_no_optimization = '/Od'
|
$flag_no_optimization = '/Od'
|
||||||
$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'
|
||||||
|
|
||||||
# This works because this project uses a single unit to build
|
# This works because this project uses a single unit to build
|
||||||
function build-simple
|
function build-simple
|
||||||
{
|
{
|
||||||
param( [array]$includes, [array]$compiler_args, [string]$unit, [string]$executable )
|
param( [array]$includes, [array]$compiler_args, [array]$linker_args, [string]$unit, [string]$executable )
|
||||||
Write-Host "build-simple: msvc"
|
Write-Host "build-simple: msvc"
|
||||||
|
|
||||||
$object = $executable -replace '\.exe', '.obj'
|
$object = $executable -replace '\.exe', '.obj'
|
||||||
@ -245,33 +244,32 @@ if ( $vendor -match "msvc" )
|
|||||||
$compiler_args += @(
|
$compiler_args += @(
|
||||||
$flag_nologo,
|
$flag_nologo,
|
||||||
$flag_preprocess_conform,
|
$flag_preprocess_conform,
|
||||||
$flag_debug,
|
|
||||||
$flag_full_src_path,
|
$flag_full_src_path,
|
||||||
( $flag_path_interm + $path_build + '\' ),
|
( $flag_path_interm + $path_build + '\' ),
|
||||||
( $flag_path_output + $path_build + '\' )
|
( $flag_path_output + $path_build + '\' )
|
||||||
)
|
)
|
||||||
if ( $release -eq $false ) {
|
if ( $release -eq $false ) {
|
||||||
|
$compiler_args += $flag_debug
|
||||||
$compiler_args += ( $flag_define + 'Build_Debug' )
|
$compiler_args += ( $flag_define + 'Build_Debug' )
|
||||||
$compiler_args += ( $flag_path_debug + $path_build + '\' )
|
$compiler_args += ( $flag_path_debug + $path_build + '\' )
|
||||||
$compiler_args += $flag_link_rt_static_debug
|
$compiler_args += $flag_link_win_rt_static_debug
|
||||||
$compiler_args += $flag_no_optimization
|
$compiler_args += $flag_no_optimization
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$compiler_args += $flag_link_rt_static
|
$compiler_args += $flag_link_win_rt_static
|
||||||
}
|
}
|
||||||
$compiler_args += $includes | ForEach-Object { $flag_include + $_ }
|
$compiler_args += $includes | ForEach-Object { $flag_include + $_ }
|
||||||
$compiler_args += $flag_compile, $unit
|
$compiler_args += $flag_compile, $unit
|
||||||
run-compiler $compiler $unit $compiler_args
|
run-compiler $compiler $unit $compiler_args
|
||||||
|
|
||||||
$linker_args = @(
|
$linker_args += @(
|
||||||
$flag_nologo,
|
$flag_nologo,
|
||||||
$flag_link_machine_64,
|
$flag_link_win_machine_64,
|
||||||
$flag_link_subsystem_console,
|
( $flag_link_win_path_output + $executable )
|
||||||
( $flag_link_path_output + $executable )
|
|
||||||
)
|
)
|
||||||
if ( $release -eq $false ) {
|
if ( $release -eq $false ) {
|
||||||
$linker_args += $flag_link_debug
|
$linker_args += $flag_link_win_debug
|
||||||
$linker_args += $flag_link_pdb + $pdb
|
$linker_args += $flag_link_win_pdb + $pdb
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
}
|
}
|
||||||
@ -285,10 +283,11 @@ if ( $vendor -match "msvc" )
|
|||||||
}
|
}
|
||||||
#endregion Configuration
|
#endregion Configuration
|
||||||
|
|
||||||
$path_project = Join-Path $path_root 'project'
|
$path_project = Join-Path $path_root 'project'
|
||||||
$path_build = Join-Path $path_root 'build'
|
$path_build = Join-Path $path_root 'build'
|
||||||
$path_deps = Join-Path $path_project 'dependencies'
|
$path_deps = Join-Path $path_project 'dependencies'
|
||||||
$path_gen = Join-Path $path_project 'gen'
|
$path_gen = Join-Path $path_project 'gen'
|
||||||
|
$path_platform = Join-Path $path_project 'platform'
|
||||||
|
|
||||||
$update_deps = Join-Path $PSScriptRoot 'update_deps.ps1'
|
$update_deps = Join-Path $PSScriptRoot 'update_deps.ps1'
|
||||||
|
|
||||||
@ -301,20 +300,25 @@ if ( (Test-Path $path_deps) -eq $false ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$includes = @(
|
$includes = @(
|
||||||
$path_gen,
|
|
||||||
$path_project,
|
$path_project,
|
||||||
$path_deps
|
$path_gen,
|
||||||
|
$path_deps,
|
||||||
|
$path_platform
|
||||||
)
|
)
|
||||||
|
|
||||||
$compiler_args = @(
|
$compiler_args = @()
|
||||||
($flag_define + 'GEN_TIME')
|
$compiler_args += ( $flag_define + 'GEN_TIME' )
|
||||||
|
|
||||||
|
$linker_args = @(
|
||||||
|
$flag_link_win_subsystem_console
|
||||||
)
|
)
|
||||||
|
|
||||||
#region Handmade Generate
|
#region Handmade Generate
|
||||||
$unit = Join-Path $path_gen 'gen_handmade.cpp'
|
$unit = Join-Path $path_gen 'handmade_gen.cpp'
|
||||||
$executable = Join-Path $path_build 'gen_handmade.exe'
|
$executable = Join-Path $path_build 'handmade_gen.exe'
|
||||||
|
|
||||||
build-simple $includes $compiler_args $unit $executable
|
build-simple $includes $compiler_args $linker_args $unit $executable
|
||||||
|
write-host
|
||||||
|
|
||||||
& $executable
|
& $executable
|
||||||
write-host
|
write-host
|
||||||
@ -329,10 +333,13 @@ if ( $false ) {
|
|||||||
$unit = Join-Path $path_project 'handmade_win32.cpp'
|
$unit = Join-Path $path_project 'handmade_win32.cpp'
|
||||||
$executable = Join-Path $path_build 'handmade_win32.exe'
|
$executable = Join-Path $path_build 'handmade_win32.exe'
|
||||||
|
|
||||||
$compile_args = @(
|
$compiler_args = @()
|
||||||
|
|
||||||
|
$linker_args = @(
|
||||||
|
$flag_link_win_subsystem_windows
|
||||||
)
|
)
|
||||||
|
|
||||||
build-simple $includes $compiler_args $unit $executable
|
build-simple $includes $compiler_args $linker_args $unit $executable
|
||||||
#endregion Handmade Runtime
|
#endregion Handmade Runtime
|
||||||
|
|
||||||
Pop-Location
|
Pop-Location
|
||||||
|
@ -1,6 +1,3 @@
|
|||||||
# For now this just grabs gencpp
|
|
||||||
# Possibly the only thing it will ever grab
|
|
||||||
|
|
||||||
clear-host
|
clear-host
|
||||||
$path_root = git rev-parse --show-toplevel
|
$path_root = git rev-parse --show-toplevel
|
||||||
|
|
||||||
@ -28,4 +25,20 @@ Expand-Archive -Path $destinationZip -DestinationPath $path_temp
|
|||||||
# Move gen.hpp to the project directory
|
# Move gen.hpp to the project directory
|
||||||
Move-Item -Path (join-path $path_temp "gen.hpp") -Destination $path_dependencies -Force
|
Move-Item -Path (join-path $path_temp "gen.hpp") -Destination $path_dependencies -Force
|
||||||
|
|
||||||
|
|
||||||
|
# if ( Test-Path $path_platform_windows )
|
||||||
|
# {
|
||||||
|
# Remove-Item (Get-ChildItem -Path $path_platform_windows -Recurse -Force)
|
||||||
|
# }
|
||||||
|
|
||||||
|
Push-Location $path_temp
|
||||||
|
$path_repo_content = 'include/win32/'
|
||||||
|
|
||||||
|
& git clone --no-checkout https://github.com/Leandros/WindowsHModular.git
|
||||||
|
& git sparse-checkout init --cone
|
||||||
|
& git sparse-checkout set $path_repo_content
|
||||||
|
|
||||||
|
Copy-Item -Recurse ( './' + $path_repo_content + '*') $path_platform_windows
|
||||||
|
Pop-Location $path_temp
|
||||||
|
|
||||||
Remove-Item $path_temp -Recurse
|
Remove-Item $path_temp -Recurse
|
||||||
|
Loading…
Reference in New Issue
Block a user