SAPFOR для Фортрана использует внутреннее представление исходного кода на Фортране, основанное на библиотеке SAGE++, которая написана на С++ (высокоуровневый интерфейс) и С (низкоуровневая реализация). Данная библиотека используется в компиляторе Fortran-DVMH. Поэтому, чтобы не копировать проект компилятора, необходимые библиотеки подгружаются с помощью git submodule. Для того, чтобы выгрузить и собрать SAPFOR, необходимо сделать:
git clone --config core.autocrlf=trueтекущего репозиторияGIT_SSL_NO_VERIFY=true git submodule update --initвнутри папки, куда был клонирован репозиторий для обновления подмодулейGIT_SSL_NO_VERIFY=true git submodule foreach git fetch originGIT_SSL_NO_VERIFY=true git submodule foreach git checkout mainпереводим все под модули на main ветку
Для создания проекта необходимо использовать CMAKE GUI (загрузить по ссылке) для Windows (7 и выше) или CMAKE в UNIX. Основной файл CMakeList.txt находится в корне проекта. Проект лучше создавать в отдельной папке, например, _bin. Для сборки под Linux необходимо из этого каталога выполнить команду cmake ../ и затем make -j 4.
Для Windows необходимо запустить установленный CMAKE GUI, далее настроить каталог, где находится CMakeList.txt и выходной каталог проекта, куда будет собран проект. Затем выбрать Configure и Generate. Проект можно создавать под ту IDE, которая нравится, но рекомендуется Visual Studio 2019 и выше.
В случае успешной сборки проекта, в каталоге проекта появится исполняемый файл: Sapfor_F.exe. Для запуска необходимо сделать следующее: запустить парсер (Sapfor_F.exe -parse) на исходном коде на Фортране, добавив флаг -spf, который включает директивы SAPFOR !$SPF в коде программы, а также можно добавить флаг -lgstd, который говорит о том, что надо игнорировать !DVM$ директивы в коде программы. Тогда запуск парсера будет выглядеть, например, так:
Sapfor_F -parse -spf jac.f (или Sapfor_F -parse -spf -lgstd jac.f)
После этого создастся проект dvm.proj и jac.dep файлы. Файл dvm.proj является текстовым и содержит список *.dep файлов (бинарные файлы), из которых состоит проект программы. В данном случае в файле dvm.proj будет только один файл jac.dep. Чтобы добавить к проекту еще один файл, необходимо к флагам парсера добавить -a dvm.proj. Парсер работает с каждым файлом по отдельности, то есть для многофайлового проекта необходимо вызвать парсер для каждого файла отдельно. Последние версии Sapfor_F поддерживают обработку нескольких файлов, а также простых масок, например, *.f90.
Для запуска SAPFOR необходим файл проекта dvm.proj и *.dep файлы. По умолчанию SAPFOR берет dvm.proj файл и начинает работу, либо надо указать с помощью опции имя файла вместо dvm.proj, в котором будет список *.dep файлов. Получить список всех опций (фаз или проходов анализа SAPFOR) можно либо по -help, либо просто запустив SAPFOR без параметров. Например, запуск прохода, который выполняет распараллеливание программы от и до, будет выглядеть так:
Sapfor -t 13