From a7c52c2a9ce56a5586db56705a54fa2cc0d6d17b Mon Sep 17 00:00:00 2001 From: doyle Date: Mon, 30 Jan 2023 22:57:17 +1100 Subject: [PATCH] Merge installer folder with internal --- Installer/os_clang_format_style_file | 459 ------------------ Installer/os_nvim_init.vim | 377 -------------- Installer/os_vimrc | 243 ---------- Installer/os_wezterm.lua | 12 - Installer/win_portable-msvc-readme.md | 9 - Installer/win_portable-msvc.py | 288 ----------- Installer/win_wcap_2022-08-11_d3b6d0d.exe | Bin 56832 -> 0 bytes .../unix_build_template.sh | 0 {Installer => Internal}/unix_gcc_build.sh | 0 {Installer => Internal}/unix_gcc_dockerfile | 0 ..._clang_merge_compilation_command_files.bat | 0 .../win_generate_msvc17_toolchain.bat | 0 .../win_generate_msvc19_toolchain.bat | 0 13 files changed, 1388 deletions(-) delete mode 100644 Installer/os_clang_format_style_file delete mode 100644 Installer/os_nvim_init.vim delete mode 100644 Installer/os_vimrc delete mode 100644 Installer/os_wezterm.lua delete mode 100644 Installer/win_portable-msvc-readme.md delete mode 100644 Installer/win_portable-msvc.py delete mode 100644 Installer/win_wcap_2022-08-11_d3b6d0d.exe rename {Installer => Internal}/unix_build_template.sh (100%) mode change 100755 => 100644 rename {Installer => Internal}/unix_gcc_build.sh (100%) mode change 100755 => 100644 rename {Installer => Internal}/unix_gcc_dockerfile (100%) rename {Installer => Internal}/win_clang_merge_compilation_command_files.bat (100%) rename {Installer => Internal}/win_generate_msvc17_toolchain.bat (100%) rename {Installer => Internal}/win_generate_msvc19_toolchain.bat (100%) diff --git a/Installer/os_clang_format_style_file b/Installer/os_clang_format_style_file deleted file mode 100644 index 4e5604a..0000000 --- a/Installer/os_clang_format_style_file +++ /dev/null @@ -1,459 +0,0 @@ ---- -IndentWidth: 4 -TabWidth: 4 ---- -Language: Cpp - -# Align parameters on the open bracket, e.g.: -# someLongFunction(argument1, -# argument2); -AlignAfterOpenBracket: Align - -# Align array column and left justify the columns e.g.: -# struct test demo[] = -# { -# {56, 23, "hello"}, -# {-1, 93463, "world"}, -# {7, 5, "!!" } -# }; -AlignArrayOfStructures: Left - -# Align assignments on consecutive lines. This will result in formattings like: -# -# int a = 1; -# int somelongname = 2; -# double c = 3; -# -# int d = 3; -# /* A comment. */ -# double e = 4; -AlignConsecutiveAssignments: Consecutive -AlignConsecutiveBitFields: Consecutive -AlignConsecutiveDeclarations: Consecutive -AlignConsecutiveMacros: Consecutive - -# Align escaped newlines as far left as possible. -# #define A \ -# int aaaa; \ -# int b; \ -# int dddddddddd; -AlignEscapedNewlines: Left - -# Horizontally align operands of binary and ternary expressions. -# Specifically, this aligns operands of a single expression that needs to be -# split over multiple lines, e.g.: -# -# int aaa = bbbbbbbbbbbbbbb + -# ccccccccccccccc; -AlignOperands: Align - -# true: false: -# int a; // My comment a vs. int a; // My comment a -# int b = 2; // comment b int b = 2; // comment about b -AlignTrailingComments: true - -# If the function declaration doesn’t fit on a line, allow putting all -# parameters of a function declaration onto the next line even if -# BinPackParameters is false. -# -# true: -# void myFunction( -# int a, int b, int c, int d, int e); -# -# false: -# void myFunction(int a, -# int b, -# int c, -# int d, -# int e); -AllowAllParametersOfDeclarationOnNextLine: false -AllowShortBlocksOnASingleLine: Never # "while (true) { continue; }" can be put on a single line. - -# If true, short case labels will be contracted to a single line. -# -# true: false: -# switch (a) { vs. switch (a) { -# case 1: x = 1; break; case 1: -# case 2: return; x = 1; -# } break; -# case 2: -# return; -# } -AllowShortCaseLabelsOnASingleLine: true -AllowShortEnumsOnASingleLine: true # enum { A, B } myEnum; - -# Only merge functions defined inside a class. Implies “empty”. -# -# class Foo { -# void f() { foo(); } -# }; -# void f() { -# foo(); -# } -# void f() {} -AllowShortFunctionsOnASingleLine: Inline -AllowShortIfStatementsOnASingleLine: false - -# Only merge empty lambdas. -# -# auto lambda = [](int a) {} -# auto lambda2 = [](int a) { -# return a; -# }; -AllowShortLambdasOnASingleLine: Empty -AllowShortLoopsOnASingleLine: false - -# true: false: -# aaaa = vs. aaaa = "bbbb" -# "bbbb" "cccc"; -# "cccc"; -AlwaysBreakBeforeMultilineStrings: true - -# Force break after template declaration only when the following declaration -# spans multiple lines. -# -# template T foo() { -# } -# template -# T foo(int aaaaaaaaaaaaaaaaaaaaa, -# int bbbbbbbbbbbbbbbbbbbbb) { -# } -AlwaysBreakTemplateDeclarations: MultiLine - -# If false, a function call’s arguments will either be all on the same line or -# will have one line each. -# -# true: -# void f() { -# f(aaaaaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaaaaaa, -# aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa); -# } -# -# false: -# void f() { -# f(aaaaaaaaaaaaaaaaaaaa, -# aaaaaaaaaaaaaaaaaaaa, -# aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa); -# } -BinPackArguments: false -BinPackParameters: false # As BinPackArguments but for function definition parameters - -# Add space after the : only (space may be added before if needed for -# AlignConsecutiveBitFields). -# -# unsigned bf: 2; -BitFieldColonSpacing: After - -# LooooooooooongType loooooooooooooooooooooongVariable = -# someLooooooooooooooooongFunction(); -# -# bool value = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + -# aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa == -# aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa && -# aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa > -# ccccccccccccccccccccccccccccccccccccccccc; -BreakBeforeBinaryOperators: None - -# Always attach braces to surrounding context, but break before braces on -# function, namespace and class definitions. -BreakBeforeBraces: Linux - -# true: -# template -# concept ... -# -# false: -# template concept ... -BreakBeforeConceptDeclarations: false - -# true: -# veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongDescription -# ? firstValue -# : SecondValueVeryVeryVeryVeryLong; -# -# false: -# veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongDescription ? -# firstValue : -# SecondValueVeryVeryVeryVeryLong; -BreakBeforeTernaryOperators: true - -# Break constructor initializers before the colon and commas, and align the -# commas with the colon. -# -# Constructor() -# : initializer1() -# , initializer2() -BreakConstructorInitializers: BeforeComma - -# Break inheritance list only after the commas. -# -# class Foo : Base1, -# Base2 -# {}; -BreakInheritanceList: AfterComma - -# true: -# const char* x = "veryVeryVeryVeryVeryVe" -# "ryVeryVeryVeryVeryVery" -# "VeryLongString"; -BreakStringLiterals: true -ColumnLimit: 100 - -# false: -# namespace Foo { -# namespace Bar { -# } -# } -CompactNamespaces: false - -# true: false: -# vector x{1, 2, 3, 4}; vs. vector x{ 1, 2, 3, 4 }; -# vector x{{}, {}, {}, {}}; vector x{ {}, {}, {}, {} }; -# f(MyMap[{composite, key}]); f(MyMap[{ composite, key }]); -# new int[3]{1, 2, 3}; new int[3]{ 1, 2, 3 }; -Cpp11BracedListStyle: true - -# Analyze the formatted file for the most used line ending (\r\n or \n). UseCRLF -# is only used as a fallback if none can be derived. -DeriveLineEnding: true -DerivePointerAlignment: true # As per DeriveLineEnding except for pointers and references - -# Add empty line only when access modifier starts a new logical block. Logical -# block is a group of one or more member fields or functions. -# -# struct foo { -# private: -# int i; -# -# protected: -# int j; -# /* comment */ -# public: -# foo() {} -# -# private: -# protected: -# }; -EmptyLineBeforeAccessModifier: LogicalBlock - -# true: false: -# namespace a { vs. namespace a { -# foo(); foo(); -# bar(); bar(); -# } // namespace a } -FixNamespaceComments: true - -# false: true: -# class C { vs. class C { -# class D { class D { -# void bar(); void bar(); -# protected: protected: -# D(); D(); -# }; }; -# public: public: -# C(); C(); -# }; }; -# void foo() { void foo() { -# return 1; return 1; -# } } -IndentAccessModifiers: false - -# false: true: -# switch (fool) { vs. switch (fool) { -# case 1: { case 1: -# bar(); { -# } break; bar(); -# default: { } -# plop(); break; -# } default: -# } { -# plop(); -# } -# } -IndentCaseBlocks: false - -# false: true: -# switch (fool) { vs. switch (fool) { -# case 1: case 1: -# bar(); bar(); -# break; break; -# default: default: -# plop(); plop(); -# } } -IndentCaseLabels: true - -# extern "C" { -# void foo(); -# } -IndentExternBlock: NoIndent - -# Indents directives before the hash. -# -# #if FOO -# #if BAR -# #include -# #endif -# #endif -IndentPPDirectives: BeforeHash - -# true: false: -# if (foo) { vs. if (foo) { -# bar(); -# bar(); } -# } -KeepEmptyLinesAtTheStartOfBlocks: false - -# The maximum number of consecutive empty lines to keep. -# -# MaxEmptyLinesToKeep: 1 vs. MaxEmptyLinesToKeep: 0 -# int f() { int f() { -# int = 1; int i = 1; -# i = foo(); -# i = foo(); return i; -# } -# return i; -# } -MaxEmptyLinesToKeep: 1 -NamespaceIndentation: None - -# Put all constructor initializers on the current line if they fit. Otherwise, -# put each one on its own line. -# -# Constructor() : a(), b() -# -# Constructor() -# : aaaaaaaaaaaaaaaaaaaa(), -# bbbbbbbbbbbbbbbbbbbb(), -# ddddddddddddd() -PackConstructorInitializers: CurrentLine -PointerAlignment: Right - -# false: -# // veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information -# /* second veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information */ -# -# true: -# // veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of -# // information -# /* second veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of -# * information */ -ReflowComments: true - -# false: true: -# -# if (isa(D)) { vs. if (isa(D)) -# handleFunctionDecl(D); handleFunctionDecl(D); -# } else if (isa(D)) { else if (isa(D)) -# handleVarDecl(D); handleVarDecl(D); -# } -# -# if (isa(D)) { vs. if (isa(D)) { -# for (auto *A : D.attrs()) { for (auto *A : D.attrs()) -# if (shouldProcessAttr(A)) { if (shouldProcessAttr(A)) -# handleAttr(A); handleAttr(A); -# } } -# } -# } -# -# if (isa(D)) { vs. if (isa(D)) -# for (auto *A : D.attrs()) { for (auto *A : D.attrs()) -# handleAttr(A); handleAttr(A); -# } -# } -# -# if (auto *D = (T)(D)) { vs. if (auto *D = (T)(D)) { -# if (shouldProcess(D)) { if (shouldProcess(D)) -# handleVarDecl(D); handleVarDecl(D); -# } else { else -# markAsIgnored(D); markAsIgnored(D); -# } } -# } -# -# if (a) { vs. if (a) -# b(); b(); -# } else { else if (c) -# if (c) { d(); -# d(); else -# } else { e(); -# e(); -# } -# } -RemoveBracesLLVM: true - -# Never v.s. Always -# #include #include -# struct Foo { -# int a, b, c; struct Foo { -# }; int a, b, c; -# namespace Ns { }; -# class Bar { -# public: namespace Ns { -# struct Foobar { class Bar { -# int a; public: -# int b; struct Foobar { -# }; int a; -# private: int b; -# int t; }; -# int method1() { -# // ... private: -# } int t; -# enum List { -# ITEM1, int method1() { -# ITEM2 // ... -# }; } -# template -# int method2(T x) { enum List { -# // ... ITEM1, -# } ITEM2 -# int i, j, k; }; -# int method3(int par) { -# // ... template -# } int method2(T x) { -# }; // ... -# class C {}; } -# } -# int i, j, k; -# -# int method3(int par) { -# // ... -# } -# }; -# -# class C {}; -# } -SeparateDefinitionBlocks: Always - -# true: false: -# int a = 5; vs. int a= 5; -# a += 42; a+= 42; -SpaceBeforeAssignmentOperators: true - -# Put a space before opening parentheses only after control statement keywords -# (for/if/while...). -# -# void f() { -# if (true) { -# f(); -# } -# } -SpaceBeforeParens: ControlStatements -SpacesBeforeTrailingComments: 1 - -# static_cast(arg); -# std::function fct; -SpacesInAngles: Never - -Standard: Auto - -# Macros which are ignored in front of a statement, as if they were an -# attribute. So that they are not parsed as identifier, for example for Qts -# emit. -# unsigned char data = 'x'; -# emit signal(data); // This is parsed as variable declaration. -# -# vs. -# -# unsigned char data = 'x'; -# emit signal(data); // Now it's fine again. -StatementAttributeLikeMacros: [emit] ---- diff --git a/Installer/os_nvim_init.vim b/Installer/os_nvim_init.vim deleted file mode 100644 index dab42f2..0000000 --- a/Installer/os_nvim_init.vim +++ /dev/null @@ -1,377 +0,0 @@ -" Plugins -" ============================================================================== -call plug#begin(stdpath('config') . '/plugged') - " nerdtree provides a file tree explorer - " vim-dispatch allows running async jobs in vim (i.e. builds in the background) - Plug 'https://github.com/scrooloose/nerdtree', { 'on': 'NERDTreeToggle' } - Plug 'https://github.com/tpope/vim-dispatch' - Plug 'https://github.com/tpope/vim-fugitive' - Plug 'https://github.com/tpope/vim-abolish' - - " TODO: 2022-06-19 Treesitter is too slow on large C++ files - " Plug 'https://github.com/nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'} - Plug 'https://github.com/bfrg/vim-cpp-modern' - - " FZF - Plug 'junegunn/fzf' - Plug 'junegunn/fzf.vim' - - " FZF for LSP - Plug 'gfanto/fzf-lsp.nvim' - Plug 'nvim-lua/plenary.nvim' - - " odin for syntax highlighting - Plug 'https://github.com/Tetralux/odin.vim' - Plug 'https://github.com/sainnhe/gruvbox-material' - - " Lua cache to speed up load times - Plug 'https://github.com/lewis6991/impatient.nvim' - - " lsp-zero begin - " LSP Support - Plug 'neovim/nvim-lspconfig' - Plug 'williamboman/mason.nvim' - Plug 'williamboman/mason-lspconfig.nvim' - - " Autocompletion - Plug 'hrsh7th/nvim-cmp' - Plug 'hrsh7th/cmp-buffer' - Plug 'hrsh7th/cmp-path' - Plug 'saadparwaiz1/cmp_luasnip' - Plug 'hrsh7th/cmp-nvim-lsp' - Plug 'hrsh7th/cmp-nvim-lua' - - " Snippets - Plug 'L3MON4D3/LuaSnip' - - " Snippet collection (Optional) - Plug 'rafamadriz/friendly-snippets' - Plug 'VonHeikemen/lsp-zero.nvim' - " lsp-zero end -call plug#end() - -" Lua Setup -" ============================================================================== -lua <-,trail:■,extends:»,precedes:«') - vim.opt.number=true -- Show line numbers - vim.opt.relativenumber=true -- Show relative line numbers - vim.opt.shiftwidth=4 -- Number of spaces for each autoindent step - vim.opt.splitright=true -- Open new splits to the right of the current one - vim.opt.swapfile=false -- Disable swapfile (stores the things changed in a file) - vim.opt.textwidth=80 -- On format, format to 80 char long lines - vim.opt.visualbell=true -- Flash the screen on error - vim.opt.wrap=false -- Don't wrap lines of text automatically - vim.opt.signcolumn = 'no' - - vim.diagnostic.config({ - -- Turn off the diagnostics signs on the line number. In LSP mode, editing - -- a C++ buffer constantly toggles the sign column on and off as you change - -- modes which is very visually distracting. - signs = false, - }) - - -- Check if there were args (i.e. opened file), non-empty buffer, or started in insert mode - if vim.fn.argc() == 0 or vim.fn.line2byte("$") ~= -1 and not opt.insertmode then - local ascii = { - "", - " Useful Bindings (Normal Mode)", - " --------------------------------------------------", - " to open the file tree explorer", - " clang format selected lines", - " jump to next compilation error", - " jump to prev compilation error", - " change working directory to current file", - " <\\s> split buffer vertically", - "", - " Abolish (Text Substitution in Normal Mode)", - " --------------------------------------------------", - " %S/facilit{y,ies}/building{,s}/g Convert facility->building, facilities->buildings", - " %S/action/sleep/g Convert action to sleep, (preserve case sensitivity ACTION->SLEEP, action->sleep) ", - "", - " FZF (Normal Mode)", - " --------------------------------------------------", - " <\\h> vim command history", - " <\\f> find files", - " <\\g> search for text (via ripgrep)", - " <\\tt> search for tag (global)", - " <\\tb> search for tag (buffer)", - " <\\cc> search for commit (global)", - " <\\cb> search for commit (buffer)", - " <\\b> search for buffer", - "", - " Autocompletion (nvim-cmp in Normal Mode)", - " --------------------------------------------------", - " Confirms selection.", - " Confirms selection.", - " Navigate to previous item on the list.", - " Navigate to the next item on the list.", - " Navigate to previous item on the list.", - " Navigate to the next item on the list.", - " Scroll up in the item's documentation.", - " Scroll down in the item's documentation.", - " Toggles the completion.", - " Go to the next placeholder in the snippet.", - " Go to the previous placeholder in the snippet.", - " Enables completion when the cursor is inside a word. If the completion menu is visible it will navigate to the next item in the list.", - " When the completion menu is visible navigate to the previous item in the list.", - "", - " LSP Bindings (Normal Mode)", - " --------------------------------------------------", - " Displays hover information about the symbol under the cursor in a floating window. See help vim.lsp.buf.hover().", - " gd Jumps to the definition of the symbol under the cursor. See help vim.lsp.buf.definition().", - " gD Jumps to the declaration of the symbol under the cursor. Some servers don't implement this feature. See help vim.lsp.buf.declaration().", - " gi Lists all the implementations for the symbol under the cursor in the quickfix window. See help vim.lsp.buf.implementation().", - " go Jumps to the definition of the type of the symbol under the cursor. See help vim.lsp.buf.type_definition().", - " gr Lists all the references to the symbol under the cursor in the quickfix window. See help vim.lsp.buf.references().", - " Displays signature information about the symbol under the cursor in a floating window. See help vim.lsp.buf.signature_help(). If a mapping already exists for this key this function is not bound.", - " Renames all references to the symbol under the cursor. See help vim.lsp.buf.rename().", - " Selects a code action available at the current cursor position. See help vim.lsp.buf.code_action().", - " gl Show diagnostics in a floating window. See :help vim.diagnostic.open_float().", - " [d Move to the previous diagnostic in the current buffer. See :help vim.diagnostic.goto_prev().", - " ]d Move to the next diagnostic. See :help vim.diagnostic.goto_next()." - } - - local height = vim.api.nvim_get_option("lines") - local width = vim.api.nvim_get_option("columns") - local ascii_rows = #ascii - local ascii_cols = #ascii[1] - local win = vim.api.nvim_get_current_win() - local buf = vim.api.nvim_create_buf(true, true) - - local function reset_start_screen() - vim.cmd("enew") - local buf = vim.api.nvim_get_current_buf() - local win = vim.api.nvim_get_current_win() - vim.api.nvim_buf_set_option(buf, "modifiable", true) - vim.api.nvim_buf_set_option(buf, "buflisted", true) - vim.api.nvim_buf_set_option(buf, "buflisted", true) - end - - vim.api.nvim_buf_set_lines(buf, 0, -1, false, ascii) - vim.api.nvim_buf_set_option(buf, "modified", false) - vim.api.nvim_buf_set_option(buf, "buflisted", false) - vim.api.nvim_buf_set_option(buf, "bufhidden", "wipe") - vim.api.nvim_buf_set_option(buf, "buftype", "nofile") - vim.api.nvim_buf_set_option(buf, "swapfile", false) - vim.api.nvim_set_current_buf(buf) - - vim.api.nvim_create_autocmd("InsertEnter,WinEnter", { - pattern = "", - callback = reset_start_screen, - }) - end - -EOF - -" Theme -" ============================================================================== -let g:gruvbox_material_background='hard' -let g:gruvbox_material_foreground='mix' -let g:gruvbox_material_disable_italic_comment=1 -let g:gruvbox_material_enable_italic=0 -let g:gruvbox_material_enable_bold=0 -let g:gruvbox_material_diagnostic_virtual_text='colored' -let g:gruvbox_material_better_performance=1 -colorscheme gruvbox-material - -" Vim-cpp-modern customisation -" Disable function highlighting (affects both C and C++ files) -let g:cpp_function_highlight = 1 - -" Enable highlighting of C++11 attributes -let g:cpp_attributes_highlight = 1 - -" Highlight struct/class member variables (affects both C and C++ files) -let g:cpp_member_highlight = 0 - -" Put all standard C and C++ keywords under Vim's highlight group 'Statement' -" (affects both C and C++ files) -let g:cpp_simple_highlight = 1 - -" Options -" ============================================================================== -" Show EOL type and last modified timestamp, right after the filename -set statusline=%<%F%h%m%r\ [%{&ff}]\ (%{strftime(\"%H:%M\ %d/%m/%Y\",getftime(expand(\"%:p\")))})%=%l,%c%V\ %P - -" Resize splits when the window is resized -au VimResized * :wincmd = - -" File patterns to ignore in command line auto complete -set wildignore+=*.class,*.o -set wildignore+=*\\tmp\\*,*.swp,*.zip,*.exe,*.obj,*.vcxproj,*.pdb,*.idb - -" Setup undo file -set undofile -let &undodir=stdpath('config') . '/undo' - -" Setup backup directory -let &backupdir=stdpath('config') . '/backup' - -" Enable mouse support -if has('mouse') - set mouse=a -endif - -" Functions -" ============================================================================== -" Increase font size using (Ctrl+Up Arrow) or (Ctrl+Down Arrow) if we are using -" gvim Otherwise font size is determined in terminal -nnoremap :silent! let &guifont = substitute( - \ &guifont, - \ ':h\zs\d\+', - \ '\=eval(submatch(0)+1)', - \ 'g') -nnoremap :silent! let &guifont = substitute( - \ &guifont, - \ ':h\zs\d\+', - \ '\=eval(submatch(0)-1)', - \ 'g') - -" Formatting options (see :h fo-table) -augroup persistent_settings - au! - au bufenter * :set formatoptions=q1j -augroup end - -" FZF -" ============================================================================== -" Empty value to disable preview window altogether -let g:fzf_preview_window = [] - -" Prefix all commands with Fzf for discoverability -let g:fzf_command_prefix = 'Fzf' - -" - down / up / left / right -let g:fzf_layout = { 'down': '40%' } - -" Add "FzfCustomRG" command which reinitializes -function! RipgrepFzf(query, fullscreen) - let command_fmt = 'rg --column --line-number --no-heading --color=always --smart-case -- %s || true' - let initial_command = printf(command_fmt, shellescape(a:query)) - let reload_command = printf(command_fmt, '{q}') - let spec = {'options': ['--phony', '--query', a:query, '--bind', 'change:reload:'.reload_command]} - call fzf#vim#grep(initial_command, 1, fzf#vim#with_preview(spec), a:fullscreen) -endfunction - -command! -nargs=* -bang FzfCustomRG call RipgrepFzf(, 0) - -" Augment the "FzfCustomFiles" command -command! -bang -nargs=? -complete=dir FzfCustomFiles - \ call fzf#vim#files(, {'options': ['--layout=reverse', '--info=inline', '--preview', 'cat {}']}, 0) - -" General Key Bindings -" ============================================================================== -" Telescope Bindings -nnoremap h FzfHistory -nnoremap f FzfCustomFiles -nnoremap g FzfCustomRG -nnoremap tt FzfTags -nnoremap tb FzfBTags -nnoremap cc FzfCommits -nnoremap cb FzfBCommits -nnoremap b FzfBuffers - -" Map Ctrl+HJKL to navigate buffer window -nmap :wincmd h -nmap :wincmd j -nmap :wincmd k -nmap :wincmd l - -" Move by wrapped lines instead of line numbers -nnoremap j gj -nnoremap k gk -nnoremap gj j -nnoremap gk k - -" Map NERDTree to Ctrl-N -map :NERDTreeToggle - -" Change to current buffer's directory -nmap cd :cd =expand("%:p:h") - -" Buffer Splitting -nnoremap s :vs - -" Go to next error -" Go to previous error -nnoremap :cn -nnoremap :cp - -" Clang Format -" ============================================================================== -map :py3file ~/clang-format.py - -" Compiler Error Formats -" ============================================================================== -" Error message formats thanks to -" https://forums.handmadehero.org/index.php/forum?view=topic&catid=4&id=704#3982 -set errorformat+=\\\ %#%f(%l\\\,%c):\ %m " MSVC: MSBuild -set errorformat+=\\\ %#%f(%l)\ :\ %#%t%[A-z]%#\ %m " MSVC: cl.exe -set errorformat+=\\\ %#%t%nxx:\ %m " MSVC: cl.exe, fatal errors is crudely implemented -set errorformat+=\\\ %#LINK\ :\ %m " MSVC: link.exe, can't find link library badly implemented -set errorformat+=\\\ %#%s\ :\ error\ %m " MSVC: link.exe, errors is badly implemented -set errorformat+=\\\ %#%s\ :\ fatal\ error\ %m " MSVC: link.exe, fatal errors is badly implemented -set errorformat+=\\\ %#%f(%l\\\,%c-%*[0-9]):\ %#%t%[A-z]%#\ %m " MSVC: HLSL fxc.exe -set errorformat+=%\\%%(CTIME%\\)%\\@=%m " ctime.exe -stats - -" Vim Dispatch -" ============================================================================== -let s:running_windows = has("win16") || has("win32") || has("win64") -if s:running_windows - set makeprg=build - nnoremap :Make ./build.bat -else - " Set vim terminal to enter normal mode using escape like normal vim behaviour - tnoremap - nnoremap :Make ./build.sh - set makeprg=./build.sh -endif diff --git a/Installer/os_vimrc b/Installer/os_vimrc deleted file mode 100644 index 10ebfe0..0000000 --- a/Installer/os_vimrc +++ /dev/null @@ -1,243 +0,0 @@ -" ============================================================================== -" Plugins -" ============================================================================== -let s:running_windows = has("win16") || has("win32") || has("win64") -silent! call plug#begin('~/.vim/plugged') - -Plug 'https://github.com/ervandew/supertab' -Plug 'https://github.com/scrooloose/nerdtree', { 'on': 'NERDTreeToggle' } -Plug 'https://github.com/tpope/vim-fugitive' -Plug 'https://github.com/bfrg/vim-cpp-modern' -Plug 'https://github.com/skywind3000/asyncrun.vim' -Plug 'https://github.com/junegunn/fzf' -Plug 'https://github.com/junegunn/fzf.vim' -Plug 'https://github.com/Tetralux/odin.vim' - -" Themes -Plug 'https://github.com/tomasr/molokai' -Plug 'https://github.com/roosta/vim-srcery' -Plug 'https://github.com/morhetz/gruvbox' - -call plug#end() - -" ============================================================================== -" Settings -" ============================================================================== -set nocompatible -set autowrite " Automatically save before commands like :next and :make -set autoread " Auto reload changed files -set backspace=2 " Backspace like most programs in insert mode -set hidden " Allow more than one modified buffer to be left without saving -set incsearch " Do incremental searching -set ignorecase " Search isn't case sensitive -set lazyredraw " Redraw the screen less often -set nowrap " No softwrapping by default -set splitright " Open new v-splits to the right -set showcmd " Display incomplete commands -set vb " Turn on screen flash which is quieter than audio bell -set wildmenu " Allow vim command-line autocompletion -set wildmode=full " Specifies option for wildmenu -set expandtab " Turn tabs into spaces -set noswapfile " Disable swapfile -set cscopetag " Search both cscopes db and tags file" - -" Ignore files in commandline autocomplete -set wildignore+=*.class,*.o -set wildignore+=*\\tmp\\*,*.swp,*.zip,*.exe,*.obj,*.vcxproj,*.pdb,*.idb - -" Undo Settings -silent! set undofile " Save undo history to file -set undolevels=1000 " Maximum number of undos that can be done -let &undodir=expand("~/.vim/undodir") " Set location to save undo files - -" Create the undo history folder if it doesn't exist -if !isdirectory(expand(&undodir)) - call mkdir(expand(&undodir), "p") -endif - -" ============================================================================== -" Appearance -" ============================================================================== -syntax on " syntax highlighting -set autoindent " Always use autoindent -set background=dark " Some themes use this indicator to theme themselves -set colorcolumn=80,100 " Set a 80, 100 char column marker -set cpoptions+=$ " $ as end marker for the change operator -set cursorline " Highlight current line -set encoding=utf-8 " Consistent character encoding -set fileformats=unix,dos -" opens a fold at the cursor. -" opens all folds at the cursor. -" closes a fold at the cursor. -" increases the foldlevel by one. -" closes all open folds. -" decreases the foldlevel by one. -" decreases the foldlevel to zero -- all folds will be open. -set foldlevelstart=99 " Initially all folds open -set foldmethod=indent " Allow folding of -set foldnestmax=20 " Maximum number of nested folds -set guioptions=menu " remove extra gui elements -set laststatus=2 " always show status bar -set linebreak " When wrapping lines, don't break words -set list " Show 'listchar' characters -set number " Show line numbers -set relativenumber " Show relative line numbers -set ruler " show the cursor position all the time -set shiftwidth=4 " Number of space chars for indentation -set showmatch " automatically show matching brackets. works like it does in bbedit. -set smartindent -set smarttab " Make 'tab' insert indents at the beginning of a line -set tabstop=4 " Number of space chars for pressing tab -set textwidth=80 " Always format to 80 chars -set listchars=tab:>- - -" Show EOL type and last modified timestamp, right after the filename -set statusline=%<%F%h%m%r\ [%{&ff}]\ (%{strftime(\"%H:%M\ %d/%m/%Y\",getftime(expand(\"%:p\")))})%=%l,%c%V\ %P - -" Resize splits when the window is resized -au VimResized * :wincmd = - -" ============================================================================== -" Theme -" ============================================================================== -let g:gruvbox_contrast_dark='hard' -let g:gruvbox_italic=0 -let g:gruvbox_bold=0 -colorscheme gruvbox - -" NOTE(doyle): Some list chars in gui don't show correctly in terminal so separate logic -" old listchars=tab:>-,eol:¬,trail:■,extends:»,precedes:« -set listchars+=trail:■,extends:»,precedes:« -if s:running_windows - set guifont=JetBrains_Mono:h9,Consolas:h9 -else - set guifont=InputMonoCondensed:h9 -endif - -" Don't show trailing spaces in insert mode -augroup trailing - au! - au InsertEnter * :set listchars-=trail:■ - au InsertLeave * :set listchars+=trail:■ -augroup END - -" Increase font size using (Ctrl+Up Arrow) or (Ctrl+Down Arrow) if we are using -" gvim Otherwise font size is determined in terminal -nnoremap :silent! let &guifont = substitute( - \ &guifont, - \ ':h\zs\d\+', - \ '\=eval(submatch(0)+1)', - \ 'g') -nnoremap :silent! let &guifont = substitute( - \ &guifont, - \ ':h\zs\d\+', - \ '\=eval(submatch(0)-1)', - \ 'g') - -" Formatting options (see :h fo-table) -augroup persistent_settings - au! - au BufEnter * :set formatoptions=q1j -augroup END - -" ============================================================================== -" Key Bindings -" ============================================================================== -" Enable mouse support -if has('mouse') - set mouse=a -endif - -" Map Ctrl+HJKL to navigate buffer window -nmap :wincmd h -nmap :wincmd j -nmap :wincmd k -nmap :wincmd l - -" Move by wrapped lines instead of line numbers -nnoremap j gj -nnoremap k gk -nnoremap gj j -nnoremap gk k - -" Map NERDTree to Ctrl-N -map :NERDTreeToggle - -" Change to current buffer's directory -nmap cd :cd =expand("%:p:h") - -" Buffer Splitting -nnoremap s :vs - -" Go to next error -" Go to previous error -nnoremap :cn -nnoremap :cp - -" ============================================================================== -" FZF -" ============================================================================== -nnoremap f :FzfFiles -nnoremap t :FzfTags -nnoremap r :FzfRg -nnoremap b :FzfBuffers -nnoremap l :FzfLines - -" Empty value to disable preview window altogether -let g:fzf_preview_window = [] - -" Prefix all commands with Fzf for discoverability -let g:fzf_command_prefix = 'Fzf' - -" - down / up / left / right -let g:fzf_layout = { 'down': '40%' } - -" ============================================================================== -" Clang Format -" ============================================================================== -map :py3file ~/.vim/clang-format.py - -" ============================================================================== -" Compiling / AsyncRun -" ============================================================================== -" Asyncrun open quickfix window up to 10 lines -let g:asyncrun_open = 10 - -" Error message formats thanks to -" https://forums.handmadehero.org/index.php/forum?view=topic&catid=4&id=704#3982 -set errorformat+=\\\ %#%f(%l\\\,%c):\ %m " MSVC: MSBuild -set errorformat+=\\\ %#%f(%l)\ :\ %#%t%[A-z]%#\ %m " MSVC: cl.exe -set errorformat+=\\\ %#%t%nxx:\ %m " MSVC: cl.exe, fatal errors is crudely implemented -set errorformat+=\\\ %#LINK\ :\ %m " MSVC: link.exe, can't find link library badly implemented -set errorformat+=\\\ %#%s\ :\ error\ %m " MSVC: link.exe, errors is badly implemented -set errorformat+=\\\ %#%s\ :\ fatal\ error\ %m " MSVC: link.exe, fatal errors is badly implemented -set errorformat+=\\\ %#%f(%l\\\,%c-%*[0-9]):\ %#%t%[A-z]%#\ %m " MSVC: HLSL fxc.exe -set errorformat+=%\\%%(CTIME%\\)%\\@=%m " ctime.exe -stats - -if s:running_windows - set makeprg=build - nnoremap :AsyncRun ./build.bat -else - " Set vim terminal to enter normal mode using escape like normal vim behaviour - tnoremap - nnoremap :AsyncRun ./build.sh - set makeprg=./build.sh -endif - -" ============================================================================== -" Other -" ============================================================================== -" Reload vimrc when it's edited -augroup myvimrc - au! - au BufWritePost $MYVIMRC so $MYVIMRC -augroup end - -" Return to the same line when a file is reopened -augroup line_return - au! - au BufReadPost * - \ if line("'\"") > 0 && line("'\"") <= line("$") | - \ execute 'normal! g`"zvzz' | - \ endif -augroup end diff --git a/Installer/os_wezterm.lua b/Installer/os_wezterm.lua deleted file mode 100644 index 904b0bf..0000000 --- a/Installer/os_wezterm.lua +++ /dev/null @@ -1,12 +0,0 @@ -local wezterm = require 'wezterm'; - -if wezterm.target_triple == "x86_64-pc-windows-msvc" then - clink_bat = string.format("%s\\..\\binaries\\clink.bat", wezterm.executable_dir) - default_prog = {"cmd.exe", "/s", "/k", clink_bat, "inject", "-q"} -end - -return { - font_size = 10.0, - color_scheme = "Peppermint", - default_prog = default_prog -} diff --git a/Installer/win_portable-msvc-readme.md b/Installer/win_portable-msvc-readme.md deleted file mode 100644 index 1fdd06d..0000000 --- a/Installer/win_portable-msvc-readme.md +++ /dev/null @@ -1,9 +0,0 @@ -This downloads standalone 64-bit MSVC compiler, linker & other tools, also headers/libraries from Windows SDK into portable folder, without installing Visual Studio. Has bare minimum components - no UWP/Store/WindowsRT stuff, just files & tools for 64-bit native desktop app development. - -Run `python.exe portable-msvc.py` and it will download output into `msvc` folder. By default it will download latest available MSVC & Windows SDK - currently v14.32.17.2 and v10.0.22621.0. - -You can list available versions with `python.exe portable-msvc.py --show-versions` and then pass versions you want with `--msvc-version` and `--sdk-version` arguments. - -To use cl.exe/link.exe from output folder, first run `setup.bat` - after that PATH/INCLUDE/LIB env variables will be setup to use all the tools as usual. You can also use clang-cl.exe with these includes & libraries. - -To use clang-cl.exe without running setup.bat, pass extra `/winsysroot msvc` argument (msvc is folder name where output is stored). diff --git a/Installer/win_portable-msvc.py b/Installer/win_portable-msvc.py deleted file mode 100644 index 3d7f8c0..0000000 --- a/Installer/win_portable-msvc.py +++ /dev/null @@ -1,288 +0,0 @@ -#!/usr/bin/env python3 - -import io -import os -import sys -import json -import shutil -import hashlib -import zipfile -import tempfile -import argparse -import subprocess -import urllib.request -from pathlib import Path - -OUTPUT = Path("msvc") # output folder - -# other architectures may work or may not - not really tested -HOST = "x64" # or x86 -TARGET = "x64" # or x86, arm, arm64 - -MANIFEST_URL = "https://aka.ms/vs/17/release/channel" - - -def download(url): - with urllib.request.urlopen(url) as res: - return res.read() - -def download_progress(url, check, name, f): - data = io.BytesIO() - with urllib.request.urlopen(url) as res: - total = int(res.headers["Content-Length"]) - size = 0 - while True: - block = res.read(1<<20) - if not block: - break - f.write(block) - data.write(block) - size += len(block) - perc = size * 100 // total - print(f"\r{name} ... {perc}%", end="") - print() - data = data.getvalue() - digest = hashlib.sha256(data).hexdigest() - if check.lower() != digest: - exit(f"Hash mismatch for f{pkg}") - return data - -# super crappy msi format parser just to find required .cab files -def get_msi_cabs(msi): - index = 0 - while True: - index = msi.find(b".cab", index+4) - if index < 0: - return - yield msi[index-32:index+4].decode("ascii") - -def first(items, cond): - return next(item for item in items if cond(item)) - - -### parse command-line arguments - -ap = argparse.ArgumentParser() -ap.add_argument("--show-versions", const=True, action="store_const", help="Show available MSVC and Windows SDK versions") -ap.add_argument("--accept-license", const=True, action="store_const", help="Automatically accept license") -ap.add_argument("--msvc-version", help="Get specific MSVC version") -ap.add_argument("--sdk-version", help="Get specific Windows SDK version") -args = ap.parse_args() - - -### get main manifest - -manifest = json.loads(download(MANIFEST_URL)) - - -### download VS manifest - -vs = first(manifest["channelItems"], lambda x: x["id"] == "Microsoft.VisualStudio.Manifests.VisualStudio") -payload = vs["payloads"][0]["url"] - -vsmanifest = json.loads(download(payload)) - - -### find MSVC & WinSDK versions - -packages = {} -for p in vsmanifest["packages"]: - packages.setdefault(p["id"].lower(), []).append(p) - -msvc = {} -sdk = {} - -for pid,p in packages.items(): - if pid.startswith("Microsoft.VisualStudio.Component.VC.".lower()) and pid.endswith(".x86.x64".lower()): - pver = ".".join(pid.split(".")[4:6]) - if pver[0].isnumeric(): - msvc[pver] = pid - elif pid.startswith("Microsoft.VisualStudio.Component.Windows10SDK.".lower()) or \ - pid.startswith("Microsoft.VisualStudio.Component.Windows11SDK.".lower()): - pver = pid.split(".")[-1] - if pver.isnumeric(): - sdk[pver] = pid - -if args.show_versions: - print("MSVC versions:", " ".join(sorted(msvc.keys()))) - print("Windows SDK versions:", " ".join(sorted(sdk.keys()))) - exit(0) - -msvc_ver = args.msvc_version or max(sorted(msvc.keys())) -sdk_ver = args.sdk_version or max(sorted(sdk.keys())) - -if msvc_ver in msvc: - msvc_pid = msvc[msvc_ver] - msvc_ver = ".".join(msvc_pid.split(".")[4:-2]) -else: - exit(f"Unknown MSVC version: f{args.msvc_version}") - -if sdk_ver in sdk: - sdk_pid = sdk[sdk_ver] -else: - exit(f"Unknown Windows SDK version: f{args.sdk_version}") - -print(f"Downloading MSVC v{msvc_ver} and Windows SDK v{sdk_ver}") - - -### agree to license - -tools = first(manifest["channelItems"], lambda x: x["id"] == "Microsoft.VisualStudio.Product.BuildTools") -resource = first(tools["localizedResources"], lambda x: x["language"] == "en-us") -license = resource["license"] - -if not args.accept_license: - accept = input(f"Do you accept Visual Studio license at {license} [Y/N] ? ") - if not accept or accept[0].lower() != "y": - exit(0) - -OUTPUT.mkdir(exist_ok=True) -total_download = 0 - -### download MSVC - -msvc_packages = [ - # MSVC binaries - f"microsoft.vc.{msvc_ver}.tools.host{HOST}.target{TARGET}.base", - f"microsoft.vc.{msvc_ver}.tools.host{HOST}.target{TARGET}.res.base", - # MSVC headers - f"microsoft.vc.{msvc_ver}.crt.headers.base", - # MSVC libs - f"microsoft.vc.{msvc_ver}.crt.{TARGET}.desktop.base", - f"microsoft.vc.{msvc_ver}.crt.{TARGET}.store.base", - # MSVC runtime source - f"microsoft.vc.{msvc_ver}.crt.source.base", - # ASAN - f"microsoft.vc.{msvc_ver}.asan.headers.base", - f"microsoft.vc.{msvc_ver}.asan.{TARGET}.base", - # MSVC redist - #f"microsoft.vc.{msvc_ver}.crt.redist.x64.base", -] - -for pkg in msvc_packages: - p = first(packages[pkg], lambda p: p.get("language") in (None, "en-US")) - for payload in p["payloads"]: - with tempfile.TemporaryFile() as f: - data = download_progress(payload["url"], payload["sha256"], pkg, f) - total_download += len(data) - with zipfile.ZipFile(f) as z: - for name in z.namelist(): - if name.startswith("Contents/"): - out = OUTPUT / Path(name).relative_to("Contents") - out.parent.mkdir(parents=True, exist_ok=True) - out.write_bytes(z.read(name)) - - -### download Windows SDK - -sdk_packages = [ - # Windows SDK tools (like rc.exe & mt.exe) - f"Windows SDK for Windows Store Apps Tools-x86_en-us.msi", - # Windows SDK headers - f"Windows SDK for Windows Store Apps Headers-x86_en-us.msi", - f"Windows SDK Desktop Headers x86-x86_en-us.msi", - # Windows SDK libs - f"Windows SDK for Windows Store Apps Libs-x86_en-us.msi", - f"Windows SDK Desktop Libs {TARGET}-x86_en-us.msi", - # CRT headers & libs - f"Universal CRT Headers Libraries and Sources-x86_en-us.msi", - # CRT redist - #"Universal CRT Redistributable-x86_en-us.msi", -] - -with tempfile.TemporaryDirectory() as d: - dst = Path(d) - - sdk_pkg = packages[sdk_pid][0] - sdk_pkg = packages[first(sdk_pkg["dependencies"], lambda x: True).lower()][0] - - msi = [] - cabs = [] - - # download msi files - for pkg in sdk_packages: - payload = first(sdk_pkg["payloads"], lambda p: p["fileName"] == f"Installers\\{pkg}") - msi.append(dst / pkg) - with open(dst / pkg, "wb") as f: - data = download_progress(payload["url"], payload["sha256"], pkg, f) - total_download += len(data) - cabs += list(get_msi_cabs(data)) - - # download .cab files - for pkg in cabs: - payload = first(sdk_pkg["payloads"], lambda p: p["fileName"] == f"Installers\\{pkg}") - with open(dst / pkg, "wb") as f: - download_progress(payload["url"], payload["sha256"], pkg, f) - - print("Unpacking msi files...") - - # run msi installers - for m in msi: - subprocess.check_call(["msiexec.exe", "/a", m, "/quiet", "/qn", f"TARGETDIR={OUTPUT.resolve()}"]) - - -### versions - -msvcv = list((OUTPUT / "VC/Tools/MSVC").glob("*"))[0].name -sdkv = list((OUTPUT / "Windows Kits/10/bin").glob("*"))[0].name - - -# place debug CRT runtime into MSVC folder (not what real Visual Studio installer does... but is reasonable) - -dst = str(OUTPUT / "VC/Tools/MSVC" / msvcv / f"bin/Host{HOST}/{TARGET}") - -pkg = "microsoft.visualcpp.runtimedebug.14" -dbg = packages[pkg][0] -payload = first(dbg["payloads"], lambda p: p["fileName"] == "cab1.cab") -try: - with tempfile.TemporaryFile(suffix=".cab", delete=False) as f: - data = download_progress(payload["url"], payload["sha256"], pkg, f) - total_download += len(data) - subprocess.check_call(["expand.exe", f.name, "-F:*", dst], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) -finally: - os.unlink(f.name) - - -### cleanup - -shutil.rmtree(OUTPUT / "Common7", ignore_errors=True) -for f in ["Auxiliary", f"lib/{TARGET}/store", f"lib/{TARGET}/uwp"]: - shutil.rmtree(OUTPUT / "VC/Tools/MSVC" / msvcv / f) -for f in OUTPUT.glob("*.msi"): - f.unlink() -for f in ["Catalogs", "DesignTime", f"bin/{sdkv}/chpe", f"Lib/{sdkv}/ucrt_enclave"]: - shutil.rmtree(OUTPUT / "Windows Kits/10" / f, ignore_errors=True) -for arch in ["x86", "x64", "arm", "arm64"]: - if arch != TARGET: - shutil.rmtree(OUTPUT / "VC/Tools/MSVC" / msvcv / f"bin/Host{arch}", ignore_errors=True) - shutil.rmtree(OUTPUT / "Windows Kits/10/bin" / sdkv / arch) - shutil.rmtree(OUTPUT / "Windows Kits/10/Lib" / sdkv / "ucrt" / arch) - shutil.rmtree(OUTPUT / "Windows Kits/10/Lib" / sdkv / "um" / arch) - - -### setup.bat - -SETUP = f"""@echo off - -set ROOT=%~dp0 - -set MSVC_VERSION={msvcv} -set MSVC_HOST=Host{HOST} -set MSVC_ARCH={TARGET} -set SDK_VERSION={sdkv} -set SDK_ARCH={TARGET} - -set MSVC_ROOT=%ROOT%VC\\Tools\\MSVC\\%MSVC_VERSION% -set SDK_INCLUDE=%ROOT%Windows Kits\\10\\Include\\%SDK_VERSION% -set SDK_LIBS=%ROOT%Windows Kits\\10\\Lib\\%SDK_VERSION% - -set VCToolsInstallDir=%MSVC_ROOT%\\ -set PATH=%MSVC_ROOT%\\bin\\%MSVC_HOST%\\%MSVC_ARCH%;%ROOT%Windows Kits\\10\\bin\\%SDK_VERSION%\\%SDK_ARCH%;%ROOT%Windows Kits\\10\\bin\\%SDK_VERSION%\\%SDK_ARCH%\\ucrt;%PATH% -set INCLUDE=%MSVC_ROOT%\\include;%SDK_INCLUDE%\\ucrt;%SDK_INCLUDE%\\shared;%SDK_INCLUDE%\\um;%SDK_INCLUDE%\\winrt;%SDK_INCLUDE%\\cppwinrt -set LIB=%MSVC_ROOT%\\lib\\%MSVC_ARCH%;%SDK_LIBS%\\ucrt\\%SDK_ARCH%;%SDK_LIBS%\\um\\%SDK_ARCH% -""" - -(OUTPUT / "setup.bat").write_text(SETUP) - -print(f"Total downloaded: {total_download>>20} MB") -print("Done!") diff --git a/Installer/win_wcap_2022-08-11_d3b6d0d.exe b/Installer/win_wcap_2022-08-11_d3b6d0d.exe deleted file mode 100644 index fb26e45c2e2e54d3eed8220a5fd102d8d3c99bdd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56832 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 TJ3e`x@^wibN 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 diff --git a/Installer/unix_build_template.sh b/Internal/unix_build_template.sh old mode 100755 new mode 100644 similarity index 100% rename from Installer/unix_build_template.sh rename to Internal/unix_build_template.sh diff --git a/Installer/unix_gcc_build.sh b/Internal/unix_gcc_build.sh old mode 100755 new mode 100644 similarity index 100% rename from Installer/unix_gcc_build.sh rename to Internal/unix_gcc_build.sh diff --git a/Installer/unix_gcc_dockerfile b/Internal/unix_gcc_dockerfile similarity index 100% rename from Installer/unix_gcc_dockerfile rename to Internal/unix_gcc_dockerfile diff --git a/Installer/win_clang_merge_compilation_command_files.bat b/Internal/win_clang_merge_compilation_command_files.bat similarity index 100% rename from Installer/win_clang_merge_compilation_command_files.bat rename to Internal/win_clang_merge_compilation_command_files.bat diff --git a/Installer/win_generate_msvc17_toolchain.bat b/Internal/win_generate_msvc17_toolchain.bat similarity index 100% rename from Installer/win_generate_msvc17_toolchain.bat rename to Internal/win_generate_msvc17_toolchain.bat diff --git a/Installer/win_generate_msvc19_toolchain.bat b/Internal/win_generate_msvc19_toolchain.bat similarity index 100% rename from Installer/win_generate_msvc19_toolchain.bat rename to Internal/win_generate_msvc19_toolchain.bat