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

In lesson2 why since there is UefiLessonsPkg why we have include MdePkg/MdePkg.dec in SimplestApp.inf? #2

Open
joyoseller20100802 opened this issue Mar 19, 2023 · 4 comments

Comments

@joyoseller20100802
Copy link

No description provided.

@Kostr
Copy link
Owner

Kostr commented Mar 19, 2023

Generally if we use a library or PCD from another package, we would need to include declaration (DEC) file for that package.

Why is that? Let's comment the Packages section in our UefiLessonsPkg/SimplestApp/SimplestApp.inf file:

#[Packages]
#  MdePkg/MdePkg.dec

In this case the build would fail with this error:

edk2/Build/UefiLessonsPkg/RELEASE_GCC5/X64/UefiLessonsPkg/SimplestApp/SimplestApp/DEBUG/AutoGen.h:16:10: fatal error: Uefi.h: No such file or directory
   16 | #include <Uefi.h>
      |          ^~~~~~~~

Here the build system complains that it can't find the header file Uefi.h. If you'll search for this file in the edk2 repo, you will find it in the MdePkg/Include folder (https://github.com/tianocore/edk2/blob/master/MdePkg/Include/Uefi.h)

But as you see the build system couldn't find it in our case.

How does including MdePkg/MdePkg.dec fixes the issue? If you'll look at the https://github.com/tianocore/edk2/blob/master/MdePkg/MdePkg.dec you'll see that it has these statements:

...
[Includes]
  Include
...

This adds another folder (MdePkg/Include) folder to search for include files. And this is what we need to make our build system happy.

Just in case here is a documentation for the INF file [Packages] section:
https://edk2-docs.gitbook.io/edk-ii-inf-specification/3_edk_ii_inf_file_format/37_-packages-_sections

@joyoseller20100802
Copy link
Author

My thought about it is that the uefi add package(dsc dec) and class(inf) Based on c (.c file and .h file) ,a class (a inf) have many c file and their reference information of c file of other package and corresponding class can get from its dsc file.but it has it own MdePkg/MdePkg.dec to reflect the reference information,I think it's more intuitive.

@joyoseller20100802
Copy link
Author

In lesson 20 i thought it again ,inf can not use the information in dsc because dsc `s component include inf w if inf w use the information in its dsc can lead to cycle use ,so inf can not use the information in dsc in theory.

@joyoseller20100802
Copy link
Author

Of cause this is only on case ,other cases such as lesson 2 inf can use the information of its dsc .

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants