AdaCore / gnat-llvm

LLVM based GNAT compiler
179 stars 18 forks source link

What does cause this problem?llvm-target_machine.adb:219: undefined reference to LLVMCreateTargetMachineWithABI' #38

Closed wanglan0804 closed 4 months ago

wanglan0804 commented 4 months ago

when I build gnat-llvm in cygwin, and after "make llvm" command succeeded.,then "make", there is error messages comes ,just list below: Changing to object directory of "GNAT_LLVM_C": "E:\gnat-llvm\llvm-interface\obj\" d:\strawberry\c\bin\g++.exe -c -x c++ -g -IE:/gnat-llvm/llvm/llvm-project-16.0.6.src/llvm/include -IE:/gnat-llvm/llvm/llvm-obj/include -std=c++17 -fno-exceptions -fno-rtti -DSTDC_CONSTANT_MACROS -DSTDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -Ie:/gnat-llvm/llvm/llvm-project-16.0.6.src/clang/include -MMD -MF llvm_wrapper.d -specs=E:\Cygwin64\tmp\GNAT-TEMP-000004.TMP E:\gnat-llvm\llvm-interface\llvm_wrapper.cc Changing to object directory of "Gnat_LLVM": "E:\gnat-llvm\llvm-interface\obj\" d:\gnat\2021\bin\gcc.exe -c -x ada -gnatA -g -gnatg -gnata -gnateE -gnatec=E:\Cygwin64\tmp\GNAT-TEMP-000005.TMP -gnatec=E:\gnat-llvm\llvm-interface\gnat.adc -gnatem=E:\Cygwin64\tmp\GNAT-TEMP-000006.TMP E:\gnat-llvm\llvm-interface\gnatllvm-codegen.adb d:\gnat\2021\bin\gcc.exe -c -x ada -gnatA -g -gnatg -gnata -gnateE -gnatec=E:\Cygwin64\tmp\GNAT-TEMP-000005.TMP -gnatec=E:\gnat-llvm\llvm-interface\gnat.adc -gnatem=E:\Cygwin64\tmp\GNAT-TEMP-000007.TMP E:\gnat-llvm\llvm-interface\gnat_src\erroutc.adb d:\gnat\2021\bin\gcc.exe -c -x ada -gnatA -g -gnatg -gnata -gnateE -gnatec=E:\Cygwin64\tmp\GNAT-TEMP-000005.TMP -gnatec=E:\gnat-llvm\llvm-interface\gnat.adc -gnatem=E:\Cygwin64\tmp\GNAT-TEMP-000008.TMP E:\gnat-llvm\llvm-interface\gnat_src\scans.adb d:\gnat\2021\bin\gcc.exe -c -x ada -gnatA -g -gnatg -gnata -gnateE -gnatec=E:\Cygwin64\tmp\GNAT-TEMP-000005.TMP -gnatec=E:\gnat-llvm\llvm-interface\gnat.adc -gnatem=E:\Cygwin64\tmp\GNAT-TEMP-000009.TMP E:\gnat-llvm\llvm-interface\gnat_src\err_vars.ads d:\gnat\2021\bin\gcc.exe -c -x ada -gnatA -g -gnatg -gnata -gnateE -gnatec=E:\Cygwin64\tmp\GNAT-TEMP-000005.TMP -gnatec=E:\gnat-llvm\llvm-interface\gnat.adc -gnatem=E:\Cygwin64\tmp\GNAT-TEMP-000010.TMP E:\gnat-llvm\llvm-interface\gnat_src\exp_dbug.adb d:\gnat\2021\bin\gcc.exe -c -x ada -gnatA -g -gnatg -gnata -gnateE -gnatec=E:\Cygwin64\tmp\GNAT-TEMP-000005.TMP -gnatec=E:\gnat-llvm\llvm-interface\gnat.adc -gnatem=E:\Cygwin64\tmp\GNAT-TEMP-000011.TMP E:\gnat-llvm\llvm-interface\gnat_src\exp_tss.adb d:\gnat\2021\bin\gcc.exe -c -x ada -gnatA -g -gnatg -gnata -gnateE -gnatec=E:\Cygwin64\tmp\GNAT-TEMP-000005.TMP -gnatec=E:\gnat-llvm\llvm-interface\gnat.adc -gnatem=E:\Cygwin64\tmp\GNAT-TEMP-000012.TMP E:\gnat-llvm\llvm-interface\obj\g-htable.adb d:\gnat\2021\bin\gcc.exe -c -x ada -gnatA -g -gnatg -gnata -gnateE -gnatec=E:\Cygwin64\tmp\GNAT-TEMP-000005.TMP -gnatec=E:\gnat-llvm\llvm-interface\gnat.adc -gnatem=E:\Cygwin64\tmp\GNAT-TEMP-000008.TMP E:\gnat-llvm\llvm-interface\gnat_src\krunch.adb d:\gnat\2021\bin\gcc.exe -c -x ada -gnatA -g -gnatg -gnata -gnateE -gnatec=E:\Cygwin64\tmp\GNAT-TEMP-000005.TMP -gnatec=E:\gnat-llvm\llvm-interface\gnat.adc -gnatem=E:\Cygwin64\tmp\GNAT-TEMP-000008.TMP E:\gnat-llvm\llvm-interface\gnat_src\widechar.adb d:\gnat\2021\bin\gcc.exe -c -x ada -gnatA -g -gnatg -gnata -gnateE -gnatec=E:\Cygwin64\tmp\GNAT-TEMP-000005.TMP -gnatec=E:\gnat-llvm\llvm-interface\gnat.adc -gnatem=E:\Cygwin64\tmp\GNAT-TEMP-000012.TMP E:\gnat-llvm\llvm-interface\gnat_src\cstand.adb d:\gnat\2021\bin\gcc.exe -c -x ada -gnatA -g -gnatg -gnata -gnateE -gnatec=E:\Cygwin64\tmp\GNAT-TEMP-000005.TMP -gnatec=E:\gnat-llvm\llvm-interface\gnat.adc -gnatem=E:\Cygwin64\tmp\GNAT-TEMP-000009.TMP E:\gnat-llvm\llvm-interface\gnat_src\exp_ch6.adb d:\gnat\2021\bin\gcc.exe -c -x ada -gnatA -g -gnatg -gnata -gnateE -gnatec=E:\Cygwin64\tmp\GNAT-TEMP-000005.TMP -gnatec=E:\gnat-llvm\llvm-interface\gnat.adc -gnatem=E:\Cygwin64\tmp\GNAT-TEMP-000008.TMP E:\gnat-llvm\llvm-interface\gnat_src\exp_unst.adb d:\gnat\2021\bin\gcc.exe -c -x ada -gnatA -g -gnatg -gnata -gnateE -gnatec=E:\Cygwin64\tmp\GNAT-TEMP-000005.TMP -gnatec=E:\gnat-llvm\llvm-interface\gnat.adc -gnatem=E:\Cygwin64\tmp\GNAT-TEMP-000011.TMP E:\gnat-llvm\llvm-interface\gnat_src\lib-load.adb gnatllvm-codegen.adb:628:09: error: "Create_Target_Machine_With_ABI" is undefined

compilation of gnatllvm-codegen.adb failed

gprbuild: compilation phase failed make[1]: [makefile:87: build] Error 4 make[1]: Leaving directory 'E:/gnat-llvm/llvm-interface' make: *** [makefile:2: all] Error 2

ArnaudCharlet commented 4 months ago

The function Create_Target_Machine_With_ABI is defined under llvm/adainclude/llvm-target_machine.adb. I suspect you have some misconfiguration somewhere, unfortunately I have never seen this error.

wanglan0804 commented 4 months ago

Thanks a lot! I re-clone the code, then another error is appeared just below: /opt/GNAT/2021/bin/../libexec/gcc/x86_64-pc-linux-gnu/10.3.1/ld: /home/wanglan/gnat-llvm/llvm-interface/obj/llvm-target_machine.o: in function llvm__target_machine__create_target_machine_with_abi': /home/wanglan/gnat-llvm/llvm/adainclude/llvm-target_machine.adb:219: undefined reference toLLVMCreateTargetMachineWithABI' collect2: error: ld returned 1 exit status /opt/GNAT/2021/bin/../libexec/gcc/x86_64-pc-linux-gnu/10.3.1/ld: /home/wanglan/gnat-llvm/llvm-interface/obj/llvm-target_machine.o: in function llvm__target_machine__create_target_machine_with_abi': /home/wanglan/gnat-llvm/llvm/adainclude/llvm-target_machine.adb:219: undefined reference toLLVMCreateTargetMachineWithABI' collect2: error: ld returned 1 exit status link of gcc_wrapper.adb failed link of gnat1drv.adb failed gprbuild: *** link phase failed

wanglan0804 commented 4 months ago

I found the the solution method: At the llvm source code,patch the diff file "LLVMCreateTargetMachineWithABI.diff", then rebuild the llvm source code.

ArnaudCharlet commented 4 months ago

Indeed, this patch is currently needed. It has been upstreamed so starting with LLVM 18 (once GNAT LLVM supports it) the patch won't be needed.