Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Building HelloWorld pass on windows under visual studio 2019 #54

Open
Culpr0 opened this issue Dec 14, 2021 · 5 comments
Open

Building HelloWorld pass on windows under visual studio 2019 #54

Culpr0 opened this issue Dec 14, 2021 · 5 comments
Labels
help wanted Extra attention is needed

Comments

@Culpr0
Copy link

Culpr0 commented Dec 14, 2021

Hello, i build LLVM on windows under Visual Studio 2019 with the config like this:

cmake -S llvm\llvm -B build -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_PROJECTS="clang;lld" -DLLVM_EXPORT_SYMBOLS_FOR_PLUGINS=On -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_TARGETS_TO_BUILD=X86 -Thost=x64

C:\passes\december\HelloWorld>llvm-config --version
14.0.0git

now i download this tutor and want to compile it, i do:

C:\passes\december\HelloWorld>cmake -Bbuild -DLT_LLVM_INSTALL_DIR="C:\Program Files (x86)\LLVM"
-- Building for: Visual Studio 16 2019
-- Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.19043.
-- The C compiler identification is MSVC 19.29.30137.0
-- The CXX compiler identification is MSVC 19.29.30137.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/cl.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/cl.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
CMake Error in CMakeLists.txt:
  IMPORTED_IMPLIB not set for imported target "opt" configuration "Debug".


CMake Error in CMakeLists.txt:
  IMPORTED_IMPLIB not set for imported target "opt" configuration "Release".


CMake Error in CMakeLists.txt:
  IMPORTED_IMPLIB not set for imported target "opt" configuration
  "MinSizeRel".


CMake Error in CMakeLists.txt:
  IMPORTED_IMPLIB not set for imported target "opt" configuration
  "RelWithDebInfo".


-- Generating done
CMake Generate step failed.  Build files cannot be regenerated correctly.

As you can see it produces weird result, i looked solution in this repository and found one suggestion to change CMakeLists.txt:

add_llvm_library( HelloWorld SHARED BUILDTREE_ONLY
  HelloWorld.cpp

  DEPENDS
  intrinsics_gen
  PLUGIN_TOOL
  opt
  )

Changed MODULE to SHARED works it produced build files

cd build
cmake --build . --config Release --target ALL_BUILD

this produced HelloWorld.dll.

Now i want to use this and do:
opt -load-pass-plugin="C:\passes\december\HelloWorld\build\Release\HelloWorld.dll" -passes="hello-world" -disable-output Source.bc
And get output

C:\passes\hello>opt -load-pass-plugin="C:\passes\december\HelloWorld\build\Release\HelloWorld.dll" -passes="hello-world" -disable-output Source.bc
Failed to load passes from 'C:\passes\december\HelloWorld\build\Release\HelloWorld.dll'. Request ignored.
Expected<T> must be checked before access or destruction.
Unchecked Expected<T> contained error:
Plugin entry point not found in 'C:\passes\december\HelloWorld\build\Release\HelloWorld.dll'. Is this a legacy plugin?PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace.
Stack dump:
0.      Program arguments: opt -load-pass-plugin=C:\\passes\\december\\HelloWorld\\build\\Release\\HelloWorld.dll -passes=hello-world -disable-output Source.bc
#0 0x00007ff71ae82935 C:\Program Files (x86)\LLVM\bin\opt.exe 0x1442935 (C:\Program Files (x86)\LLVM\bin\opt.exe+0x1442935)
#1 0x00007ff71ae82935
#2 0x00007ff71ae82935 (C:\Program Files (x86)\LLVM\bin\opt.exe+0x1442935)
#3 0x00007ff884fc1881 C:\Program Files (x86)\LLVM\bin\opt.exe 0x78b21 C:\Program Files (x86)\LLVM\bin\opt.exe 0x7dd5c
#4 0x00007ff884fc1881 C:\Program Files (x86)\LLVM\bin\opt.exe 0x8a7f0 C:\Program Files (x86)\LLVM\bin\opt.exe 0x1e0a600
#5 0x00007ff884fc1881 (C:\Windows\System32\ucrtbase.dll+0x71881)
#6 0x00007ff884fc2851 (C:\Windows\System32\ucrtbase.dll+0x72851)
0x00007FF71AE82935 (0x00007974991A16CF 0x0000000000000076 0x0000000000000016 0x00007FF71AE82930), HandleAbort() + 0x5 bytes(s)
0x00007FF884FC1881 (0x000001C9DC584301 0x0000000000000000 0x0000000000000000 0x000000500C58CEC0), raise() + 0x1E1 bytes(s)
0x00007FF884FC2851 (0x0000005000000003 0x0000005000000003 0x0000000000000000 0x000001C9DC5A2DB0), abort() + 0x31 bytes(s)
0x00007FF719AB8B21 (0x000001C9DC5A2DB0 0x000000500C58CFF0 0x0000000000000000 0x000001C9DC5A2DB0), ?erase@?$SmallPtrSetImpl@PEAVLiveInterval@llvm@@@llvm@@QEAA_NPEAVLiveInterval@2@@Z() + 0x111 bytes(s)
0x00007FF719ABDD5C (0x0000000000000000 0x0000000000000000 0x000000500C58E920 0x0000000000000000), ?run@?$AnalysisPassModel@VFunction@llvm@@VAAManager@2@VPreservedAnalyses@2@VInvalidator@?$AnalysisManager@VFunction@llvm@@$$V@2@$$V@detail@llvm@@UEAA?AV?$unique_ptr@U?$AnalysisResultConcept@VFunction@llvm@@VPreservedAnalyses@2@VInvalidator@?$AnalysisManager@VFunction@llvm@@$$V@2@@detail@llvm@@U?$default_delete@U?$AnalysisResultConcept@VFunction@llvm@@VPreservedAnalyses@2@VInvalidator@?$AnalysisManager@VFunction@llvm@@$$V@2@@detail@llvm@@@std@@@std@@AEAVFunction@3@AEAV?$Analys() + 0x28FC bytes(s)
0x00007FF719ACA7F0 (0x0000000000000000 0x0000000000000000 0x000001C9DC554DA0 0x0000000000000000), ?assign@?$SmallVectorImpl@PEBVValue@llvm@@@llvm@@QEAAX_KPEBVValue@2@@Z() + 0x4780 bytes(s)
0x00007FF71B84A600 (0x0000000000000000 0x0000000000000000 0x0000000000000000 0x0000000000000000), ?identify_magic@llvm@@YA?AVerror_code@std@@AEBVTwine@1@AEAUfile_magic@1@@Z() + 0x1360 bytes(s)
0x00007FF887597034 (0x0000000000000000 0x0000000000000000 0x0000000000000000 0x0000000000000000), BaseThreadInitThunk() + 0x14 bytes(s)
0x00007FF887882651 (0x0000000000000000 0x0000000000000000 0x0000000000000000 0x0000000000000000), RtlUserThreadStart() + 0x21 bytes(s)

I checked HelloWord.dll and main entry point is DllEntryPoint i assume i need llvmGetPassPluginInfo as exported function?? How do you get this to work

@banach-space banach-space added the help wanted Extra attention is needed label Dec 15, 2021
@banach-space
Copy link
Owner

Hi @Culpr0 , thanks for visiting 👋🏻 .

Unfortunately, I don't have a Windows machine that I could test this on. Also, plugins are not supported on Windows and hence llvm-tutor has no Windows support. I know that this could still work, but I'd need a volunteer to help me with this.

Hopefully somebody else will notice this I will be able to help.

-Andrzej

@jvstech
Copy link
Collaborator

jvstech commented Oct 14, 2023

If you're fine with moving to Visual Studio 2022, I can handle this.

@banach-space
Copy link
Owner

+1

@NamelessG0d
Copy link

NamelessG0d commented Dec 22, 2023

I think all you need to add would be either use a .def file with a export or do #pragma comment(linker, "/export:llvmGetPassPluginInfo") to successfully export the required method under MSVC.

@yuahualove
Copy link

yuahualove commented Jan 22, 2024

If you're fine with moving to Visual Studio 2022, I can handle this.

`
/d/0x10llvm_opensource/llvm.16.0.6/DIY/hello/build/HelloWorld/Debug

$ opt -load-pass-plugin=HelloWorld.dll
Failed to load passes from 'HelloWorld.dll'. Request ignored.
`
hi, i faced the same problem, could you please tell me how to fixed it , and i am using Visual Studio 2022.
Many Thanks.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
help wanted Extra attention is needed
Projects
None yet
Development

No branches or pull requests

5 participants