У меня проблемы с сборкой 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 -.
Я пробовал использовать gprbuild с gradle, но получаю ту же ошибку.
Эта точная командная строка gnatmake работает автономно?
(о, и в разделе gnat_Clang нет смысла, пока проект DragonEgg не выдаст какие-то результаты)
Здесь gnatmake -dM -E -v -. - hello.adb
дает «gnatmake: за символом переключателя не может следовать пробел», а затем удаление дает «Нераспознанный параметр командной строки: -.». Удаление "-". работает, поэтому я думаю, вам нужно выяснить, почему Gradle создает неработающие командные строки, и прекратить это делать.
Я разделяю вашу боль ... У нас есть сборка ты старый Ada, которая находится внутри make-файла - она просто вызывает автономную команду gnatmake
. Подход KISS. Я думаю, что было бы проще использовать «Плагин Ada» с модель для того, как работают проекты Ada. Это то, что я различаю из языковых плагинов, таких как: плагин java, cpp, плагин kotlin, плагин Groovy и т. д. Что-то вроде Kotlin родной плагин может быть структурой, на которой вы можете строить.
Вам действительно нужно использовать Gradle с Ada? По крайней мере, вы можете попробовать утилиту gprbuild, даже с gradle.