Skip to content

Instantly share code, notes, and snippets.

@3Dcube
Last active September 28, 2017 06:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 3Dcube/1e7c99fec1efd169aa2e480413cc5c0b to your computer and use it in GitHub Desktop.
Save 3Dcube/1e7c99fec1efd169aa2e480413cc5c0b to your computer and use it in GitHub Desktop.
Install Fortran + OpenMP + MSYS2 + Chocolatey + VS Code
@echo off
chcp 65001
C:
set "TAB= "
set NLM=^
set NL=^^^%NLM%%NLM%^%NLM%%NLM%
"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
choco install -y msys2 visualstudiocode
echo @echo off%NL%^
set CHERE_INVOKING=enabled_from_arguments%NL%^
set MSYSTEM=MINGW64%NL%^
set MSYS2_PATH_TYPE=inherit%NL%^
set PATH="%%PATH%%;C:\tools\msys64\mingw64\bin;C:\Program Files\Internet Explorer"%NL%^
if "%%1"=="/d" ^(%NL%^
if "%%2"=="/c" ^(%NL%^
for /f "tokens=2,* delims= " %%%%a in ^("%%*"^) do set bashCommand=%%%%b%NL%^
^)%NL%^
) else ^(%NL%^
set bashCommand=%%*%NL%^
)%NL%^
IF "%%bashCommand%%" == "" ^(%NL%^
C:\tools\msys64\usr\bin\bash.exe --login -i %NL%^
) else ^(%NL%^
C:\tools\msys64\usr\bin\bash.exe --login -c "%%bashCommand%%"%NL%^
) > C:\tools\msys64\runmsys2.bat
start /wait "Install gcc + gfortran" cmd /c "C:\tools\msys64\runmsys2.bat pacman --noconfirm -S mingw-w64-x86_64-gcc mingw-w64-x86_64-gcc-fortran mingw-w64-x86_64-gdb make"
start "Install VSCode extensions" cmd /c "code --install-extension Gimly81.fortran & code --install-extension ms-vscode.cpptools"
cd C:\tools\msys64\home\%USERNAME%
REM // create fortran folder
mkdir fortran
cd fortran
mkdir .vscode
echo {%NL%^
"terminal.integrated.shell.windows": "C:/tools/msys64/runmsys2.bat",%NL%^
"files.exclude": {%NL%^
"*.exe": true,%NL%^
".vscode": true%NL%^
},%NL%^
"editor.detectIndentation": true,%NL%^
"editor.insertSpaces": true,%NL%^
"editor.tabSize": 4%NL%^
}%NL% > .vscode\settings.json
echo {%NL%^
"version": "2.0.0",%NL%^
"tasks": [%NL%^
{%NL%^
"taskName": "build",%NL%^
"type": "shell",%NL%^
"command": "make",%NL%^
"group": {%NL%^
"kind": "build",%NL%^
"isDefault": true%NL%^
}%NL%^
},%NL%^
{%NL%^
"taskName": "debug",%NL%^
"type": "shell",%NL%^
"command": "make",%NL%^
"args": ["debug"]%NL%^
}%NL%^
]%NL%^
} > .vscode\tasks.json
echo {%NL%^
"version": "0.2.0",%NL%^
"configurations": [%NL%^
{%NL%^
"name": "^(gdb^) Launch",%NL%^
"type": "cppdbg",%NL%^
"request": "launch",%NL%^
"program": "${workspaceRoot}/a.exe",%NL%^
"args": [],%NL%^
"stopAtEntry": false,%NL%^
"cwd": "${workspaceRoot}",%NL%^
"environment": [],%NL%^
"externalConsole": true,%NL%^
"MIMode": "gdb",%NL%^
"miDebuggerPath": "C:/tools/msys64/mingw64/bin/gdb.exe",%NL%^
"setupCommands": [%NL%^
{%NL%^
"description": "Enable pretty-printing for gdb",%NL%^
"text": "-enable-pretty-printing",%NL%^
"ignoreFailures": true%NL%^
}%NL%^
],%NL%^
"preLaunchTask": "debug"%NL%^
}%NL%^
]%NL%^
} > .vscode\launch.json
If Not Exist "C:\tools\msys64\home\%USERNAME%\fortran\main.f08" (
echo program hello%NL%^
print *, "Hello, World!"%NL%^
end > main.f08
)
echo all: build %NL%^
%TAB% @./a%NL%^
build:%NL%^
%TAB%@gfortran -std=f2008 main.f08%NL%^
debug:%NL%^
%TAB%@gfortran -std=f2008 -g main.f08 > Makefile
cd ..
REM // create openmp folder
mkdir openmp
cd openmp
xcopy /y /s ..\fortran\.vscode .vscode\
for /d %%a in ("C:\tools\msys64\mingw64\lib\gcc\x86_64-w64-mingw32\*") do set "gccPath=%%a"
set substr1=\
set substr2=/
call set gccPath=%%gccPath:%substr1%=%substr2%%%
echo {%NL%^
"configurations": [%NL%^
{%NL%^
"name": "MSYS2",%NL%^
"includePath": [%NL%^
"%gccPath%/include",%NL%^
"%gccPath%/include-fixed",%NL%^
"C:/tools/msys64/mingw64/include",%NL%^
"C:/tools/msys64/mingw64/x86_64-w64-mingw32/include",%NL%^
"${workspaceRoot}"%NL%^
],%NL%^
"defines": [%NL%^
"_DEBUG",%NL%^
"UNICODE"%NL%^
],%NL%^
"intelliSenseMode": "clang-x64",%NL%^
"browse": {%NL%^
"path": [%NL%^
"%gccPath%/include",%NL%^
"%gccPath%/include-fixed",%NL%^
"C:/tools/msys64/mingw64/include",%NL%^
"C:/tools/msys64/mingw64/x86_64-w64-mingw32/include",%NL%^
"${workspaceRoot}"%NL%^
],%NL%^
"limitSymbolsToIncludedHeaders": true,%NL%^
"databaseFilename": ""%NL%^
}%NL%^
}%NL%^
],%NL%^
"version": 3%NL%^
} > .vscode\c_cpp_properties.json
If Not Exist "C:\tools\msys64\home\%USERNAME%\openmp\main.c" (
echo #include ^<omp.h^>%NL%^
#include ^<stdio.h^>%NL%^
int main ^(^)%NL%^
{%NL%^
%TAB%int tid;%NL%^
%TAB%#pragma omp parallel private^(tid^)%NL%^
%TAB%{%NL%^
%TAB%%TAB%tid = omp_get_thread_num^(^);%NL%^
%TAB%%TAB%printf^("Hello World from thread = %%d\n", tid^);%NL%^
%TAB%}%NL%^
} > main.c
)
echo all: build %NL%^
%TAB% @./a%NL%^
build:%NL%^
%TAB%@gcc -fopenmp main.c%NL%^
debug:%NL%^
%TAB%@gcc -g -fopenmp main.c > Makefile
REM // create fortran dekstop shortcut
set SCRIPT="%TEMP%\%RANDOM%-%RANDOM%-%RANDOM%-%RANDOM%.vbs"
echo Set oShell = CreateObject("WScript.Shell") >> %SCRIPT%
echo strHomeFolder = oShell.ExpandEnvironmentStrings("%%USERPROFILE%%") >> %SCRIPT%
echo strUsername = oShell.ExpandEnvironmentStrings("%%USERNAME%%") >> %SCRIPT%
echo Set oWS = WScript.CreateObject("WScript.Shell") >> %SCRIPT%
echo Set oLink = oWS.CreateShortcut(strHomeFolder ^& "\Desktop\Fortran.lnk") >> %SCRIPT%
echo oLink.TargetPath = "C:\Program Files\Microsoft VS Code\Code.exe" >> %SCRIPT%
echo oLink.Arguments = "--locale ru-RU C:\tools\msys64\home\" ^& strUsername ^& "\fortran\" >> %SCRIPT%
echo oLink.IconLocation = "C:\Program Files\Microsoft VS Code\resources\app\resources\win32\code_file.ico" >> %SCRIPT%
echo oLink.Save >> %SCRIPT%
cscript /nologo %SCRIPT%
del %SCRIPT%
REM // create openmp dekstop shortcut
set SCRIPT="%TEMP%\%RANDOM%-%RANDOM%-%RANDOM%-%RANDOM%.vbs"
echo Set oShell = CreateObject("WScript.Shell") >> %SCRIPT%
echo strHomeFolder = oShell.ExpandEnvironmentStrings("%%USERPROFILE%%") >> %SCRIPT%
echo strUsername = oShell.ExpandEnvironmentStrings("%%USERNAME%%") >> %SCRIPT%
echo Set oWS = WScript.CreateObject("WScript.Shell") >> %SCRIPT%
echo Set oLink = oWS.CreateShortcut(strHomeFolder ^& "\Desktop\OepnMP.lnk") >> %SCRIPT%
echo oLink.TargetPath = "C:\Program Files\Microsoft VS Code\Code.exe" >> %SCRIPT%
echo oLink.Arguments = "--locale ru-RU C:\tools\msys64\home\" ^& strUsername ^& "\openmp\" >> %SCRIPT%
echo oLink.IconLocation = "C:\Program Files\Microsoft VS Code\resources\app\resources\win32\code_file.ico" >> %SCRIPT%
echo oLink.Save >> %SCRIPT%
cscript /nologo %SCRIPT%
del %SCRIPT%
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment