Сборка Ada с Gradle

У меня проблемы с сборкой Ada с помощью Gradle. Я подумал, что это не должно быть слишком сложно, поскольку Ада построена с использованием компилятора GCC и Ada, но я был очень неправ. Я просмотрел весь Интернет и документацию Gradle, но не смог найти решения.

Это моя ошибка, когда я запускаю ./gradlew build, ./gradlew compileCalcExecutableCalcC или ./gradlew calcExecutable (мой файл Ada называется calc.adb)

Execution failed for task ':assemble'. No buildable binaries found: - executable 'calc:executable': No tool chain is available to build for platform 'linux_x86-64': - Tool chain 'gnat' (GNU GCC): Could not determine GCC metadata: failed to execute gnatmake -dM -E -v -. - Tool chain 'gnat_clang' (Clang): Could not determine Clang metadata: failed to execute gnatmake -dM -E -v -.

Это мой файл build.gradle:

apply plugin: 'c'
model{
    toolChains{
        gnat(Gcc){ // Gradle doesn't have an Ada toolchain, so we're creating a custom toolchain
            target("linux_x86-64"){
                path '/usr/bin'
                cCompiler.executable = 'gnatmake'
                cCompiler.withArguments{ args ->
                    Collections.replaceAll(args, "CUSTOM", '-f', '-u',     '-c')
            } // end cCompiler.withArguments
        } // end target()
    } // end gnat
    gnat_clang(Clang){
         target("linux_x86-64") {
            path '/usr/bin'
            cCompiler.executable = 'gnatmake'
            cCompiler.withArguments{ args ->
                Collections.replaceAll(args, "CUSTOM", '-f', '-u', '-c')
            }
        } // end target
    } // end gnat_clang
} // end toolChains
components{
    calc(NativeExecutableSpec){
        binaries.all{
            cCompiler.args "-f", "-u", "-c", "calc.adb"
        } // end binaries.all

        sources{
            c.source.srcDirs = ['src/']
            c.source.includes = ['**/calc.adb']
        }
    } // end calc
} // end components
} // end model

Моя версия Gradle и Gradle Wrapper - 4.7, а моя версия Groovy - 2.4.12.

Обновлять:

Теперь Gradle распознает новые флаги. Вот обновленный build.gradle:

apply plugin: 'c'
model{
    toolChains{
        gnat(Gcc){ // Gradle doesn't have an Ada toolchain, so we're creating a custom toolchain
            target("linux_x86-64"){
                path '/usr/bin'
                cCompiler.executable = 'gnatmake'
                cCompiler.withArguments{ args ->
                   Collections.replaceAll(args, "CUSTOM", "-dM -E -v -.")
            } // end cCompiler.withArguments
        } // end target()
    } // end gnat
} // end toolChains
components{
    calc(NativeExecutableSpec){
        sources{
            c.source.srcDirs = ['src/']
            c.source.includes = ['**/calc.adb']
        }
    } // end calc
} // end components
} // end model

Теперь Gradle выдает новую ошибку, и я не совсем уверен, как ее исправить.

No tool chain is available to build for platform 'linux_x86-64':
- Tool chain 'gnat' (GNU GCC): Could not determine GCC metadata: failed to execute gnatmake -dM -E -v -.
- Tool chain 'gnat_clang' (Clang): Could not determine Clang metadata: failed to execute gnatmake -dM -E -v -.

Вам действительно нужно использовать Gradle с Ada? По крайней мере, вы можете попробовать утилиту gprbuild, даже с gradle.

Timur Samkharadze 02.05.2018 18:16

Я пробовал использовать gprbuild с gradle, но получаю ту же ошибку.

G Bhaskar 03.05.2018 16:01

Эта точная командная строка gnatmake работает автономно?

user_1818839 03.05.2018 21:48

(о, и в разделе gnat_Clang нет смысла, пока проект DragonEgg не выдаст какие-то результаты)

user_1818839 03.05.2018 21:52

Здесь gnatmake -dM -E -v -. - hello.adb дает «gnatmake: за символом переключателя не может следовать пробел», а затем удаление дает «Нераспознанный параметр командной строки: -.». Удаление "-". работает, поэтому я думаю, вам нужно выяснить, почему Gradle создает неработающие командные строки, и прекратить это делать.

user_1818839 03.05.2018 21:58

Я разделяю вашу боль ... У нас есть сборка ты старый Ada, которая находится внутри make-файла - она ​​просто вызывает автономную команду gnatmake. Подход KISS. Я думаю, что было бы проще использовать «Плагин Ada» с модель для того, как работают проекты Ada. Это то, что я различаю из языковых плагинов, таких как: плагин java, cpp, плагин kotlin, плагин Groovy и т. д. Что-то вроде Kotlin родной плагин может быть структурой, на которой вы можете строить.

will 30.10.2018 03:50
Gradle за прокси-сервером
Gradle за прокси-сервером
Создайте проект Gradle под сетевым прокси.
"DevOps: Jenkins & AWS Series, часть 5: Установка Gradle на Ubuntu 22.04
"DevOps: Jenkins & AWS Series, часть 5: Установка Gradle на Ubuntu 22.04
В этой статье блога мы проведем вас через процесс установки Gradle на Ubuntu 22.04, интеграции его с Jenkins и создания задания Gradle. Мы...
2
6
406
0

Другие вопросы по теме