Last active
September 28, 2017 06:36
-
-
Save 3Dcube/1e7c99fec1efd169aa2e480413cc5c0b to your computer and use it in GitHub Desktop.
Install Fortran + OpenMP + MSYS2 + Chocolatey + VS Code
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@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