# Компајлирање
Задатак је могуће компајлирати:

- директно из командне линије или
- коришћењем cmake алата

У првом случају, додатне опције компајлирања је потребно додати у формату ``-опција``. У другом случају компајлерске опције
се додају у променљиву ``CMAKE_C_FLAGS``, а линкерске у ``CMAKE_EXE_LINKER_FLAGS``
 у датотеци ``CMakeLists.txt`` .

## Компајлирање из командне линије директним позивом компајлера
### Компајлирање са HDF5 подршком
Уколико желите да користите изгенерисане улазне податке у ``hdf5`` формату неопходно је имати инсталирану подршку за овај
формат података. На Убунту оперативним системина, ``hdf5`` пакет можете инсталирати покретањем следећих команди:
```sh
sudo apt install libhdf5-dev 
```
Затим се позиционирати у коренски директоријум задатка и покренути:
```sh
[[ -d build ]] && rm -r build; mkdir build && cd build && h5cc ../utils/*.h ../utils/*.c ../main.c -fopenmp
```
Овај скрипт ће да провери да ли у тренутном диеркторијуму постоји директоријум са именом ``build``, директоријум ће бити 
обрисан. Затим ће бити направљен истоимени директоријум променити текући директоријум на директоријум 
``build`` и у њему направити извршну датотеку програма на основу изворних датотека.

Уколико вам је баш свеједно да ли су вам извршне и изворне датотеке помешане у истом директоријуму (није баш добра пракса) 
можете и једноставно покренути само команду за компајлирање док сте позиционирани у коренском директоријуму пројекта са: 
```sh
h5cc utils/*.h utils/*.c main.c -fopenmp
```
У том случају ћете извршну датотеку пронаћи у самом коренском директоријуму.

### Компајлирање без HDF5 подршке
Уколико не желите да користите улазне податке у hdf5 формату, задатак можете компајлирати на следећи начин:
```sh
gcc main.c -DDISABLE_HDF5 -fopenmp
```
Уколико искључите подршку за учитавање генерисаних улазних података, потребно је да 
модификујете дату поставку задатка тако да на неки други начин обезбедите учитавање улазних података, 
али је обавезно користити вредности дате у датотекама ``m3x3.h5`` и ``m5x5.h5``. Да би се постигло множење две матрице, сваку 
од претходно наведених матрица помножити саму собом, али решење направити тако да буде независно од података који се налазе
у матрицама (дакле не треба да буде специфичности које користе чињеницу да се множе две исте матрице).

## Компајлирање из командне линије коришћењем ``cmake`` алата
Уколико немате инсталиране ``cmake`` и ``make`` пакете нећете моћи овако да компајлирате задатак.

Инсталација на Убунту оперативним системима:
```sh
sudo apt install cmake make -y
```
Након успешне инсталације, потребно је да се позиционирате у коренски директоријум задатка и покренете следеће наредбе:

```sh
[[ -d build ]] && rm -r build; mkdir build && cd build && cmake .. && make -j4
```
Уколико хоћете да искомпајлирате програм без подршке за ``hdf5`` пакет, линију ``cmake ..`` треба заменити са 
``cmake -DENABLE_HDF5=OFF ..``. Уколико искључите подршку за учитавање генерисаних улазних података, потребно је да 
модификујете изворни код тако да на неки други начин обезбедите учитавање улазних података.

# Покретање програма
Позиционирати се у директоријум у којем се налази извршна датотека и покренути 
``OMP_NUM_THREADS=<Nomp> ./a.out`` (назив a.out заменити одговарајућим називом извршне датотеке ако сте при компајлирању 
специфицирали неки други назив).``<Nomp>`` заменити конкретним бројем који представља број нити по процесу.
