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

Refactor includes #7

Closed
wants to merge 2 commits into from

Conversation

aleksejspopovs
Copy link
Collaborator

@aleksejspopovs aleksejspopovs commented Jun 20, 2017

This pull request converts the paths in all local includes (i.e. those including files from within libff) from absolute to relative. Using absolute paths in local includes is suboptimal, because it means that any project trying to include a file from libff must also include libff's src directory in its include path.

In other words, for #include "common/utils.hpp" to work inside a libff file, it will also have to work inside the files of the project that's trying to include libff, which might lead to ambiguities if that project also has a common/utils.hpp file, which is not unreasonable.

External projects should add /usr/include (or wherever libff was installed) to their include paths, and then include libff as #include <libff/algebra/whatever>. Pull requests that implement this in libsnark and libfqfft will be submitted in a couple of minutes.

This pull request (as well as the accompanying ones in libsnark and libfqfft) was largely generated using a Python script.

This is required to allow other projects to include files from libff
without explicitly putting the root of libff source into their include
path.
@aleksejspopovs
Copy link
Collaborator Author

@tromer, that is a valid point.

I'm not entirely convinced that this is worse than the current situation, however --- as mentioned in the pull request, any project that has a file named "common/utils.hpp" effectively cannot use libff.

Do you have suggestions for how to resolve both of these issues?

@tromer
Copy link
Member

tromer commented Jun 20, 2017

@popoffka above refers to a comment I accidentally deleted. Original text:

#include names must not refer to ../ because this breaks directory scoping. For example, because > all include paths are searched, including /usr/include, the above tells gcc to look for /usr/curve_utils.hpp

@tromer
Copy link
Member

tromer commented Jun 20, 2017

Suggested alternative: move all include files into corresponding "namespace" directories, and then use

#include "libsnark/gadgetlib1/gadget.hpp"
#include "libff/algebra/fields/fp.hpp"

etc. This keeps directory namespaces clean, and consistent regardless of which subdirectory or project you're in.

@tromer
Copy link
Member

tromer commented Jun 20, 2017

Checking best practice empirically on /usr/include of a typical Fedora installation:
3601 files have #includes with directory-qualified headers ( egrep -lr '^#include "[^"]+/' /usr/include | wc -l).
5479 files have #includes that refer to unqualified headers within their subdirectory (egrep -lr '^#include "[^/"]+"' /usr/include/* | wc -l).
1105 files include headers from .. (egrep -lr '^#include "[^"]+\.\.' /usr/include/* | wc -l).

So it seems like both options are in wide use. But looking at the actual projects, I see that "reputable" libraries like boost, Qt, opencv2, gtest, gstreamer, gnuradio, NTL all use directory-qualified includes. Exceptions include photon and some KDE libraries.

So my tendency is still towards explicit directories.

@aleksejspopovs
Copy link
Collaborator Author

Okay, I will convert all includes to be absolute and use explicit directory names and submit new pull requests. Thanks!

mobileink added a commit to minatools/libff that referenced this pull request Jul 20, 2020
# This is the 1st commit message:

bazel support, initial commit

Signed-off-by: Gregg Reynolds <601396+mobileink@users.noreply.github.com>

# This is the commit message scipr-lab#2:

gitignore .bazelrc, bazel-*

Signed-off-by: Gregg Reynolds <601396+mobileink@users.noreply.github.com>

# This is the commit message scipr-lab#3:

remove sha256 from rule_foreign_cc rule

Signed-off-by: Gregg Reynolds <601396+mobileink@users.noreply.github.com>

# This is the commit message scipr-lab#4:

rename target ff to libff

Signed-off-by: Gregg Reynolds <601396+mobileink@users.noreply.github.com>

# This is the commit message scipr-lab#5:

put curves/mnt/mnt4, 6 in separate packages

Signed-off-by: Gregg Reynolds <601396+mobileink@users.noreply.github.com>

# This is the commit message scipr-lab#6:

bn128: drop "depends" from include prefix, for bazel compatibility

Signed-off-by: Gregg Reynolds <601396+mobileink@users.noreply.github.com>

# This is the commit message scipr-lab#7:

fix refs to targets mnt4, mnt6, libff

Signed-off-by: Gregg Reynolds <601396+mobileink@users.noreply.github.com>

# This is the commit message scipr-lab#8:

fix refs to @ate_pairing//:libgmp

Signed-off-by: Gregg Reynolds <601396+mobileink@users.noreply.github.com>

# This is the commit message scipr-lab#9:

change @// to //

Signed-off-by: Gregg Reynolds <601396+mobileink@users.noreply.github.com>

# This is the commit message scipr-lab#10:

delete obsolete mnt4, mnt6 targets from curves/mnt/BUILD.bazel

Signed-off-by: Gregg Reynolds <601396+mobileink@users.noreply.github.com>

# This is the commit message scipr-lab#11:

add target scalar_multiplication:multiexp_profile

Signed-off-by: Gregg Reynolds <601396+mobileink@users.noreply.github.com>

# This is the commit message scipr-lab#12:

list headers explicitly

Signed-off-by: Gregg Reynolds <601396+mobileink@users.noreply.github.com>

# This is the commit message scipr-lab#13:

dead code elim

Signed-off-by: Gregg Reynolds <601396+mobileink@users.noreply.github.com>

# This is the commit message scipr-lab#14:

dead code elim

Signed-off-by: Gregg Reynolds <601396+mobileink@users.noreply.github.com>

# This is the commit message scipr-lab#15:

BUILD files: explicitate srcs/hdrs, DCE, buildifier reformat

Signed-off-by: Gregg Reynolds <601396+mobileink@users.noreply.github.com>

# This is the commit message scipr-lab#16:

change @ate_pairing//:zm to @ate_pairing//ate-pairing

Signed-off-by: Gregg Reynolds <601396+mobileink@users.noreply.github.com>

# This is the commit message scipr-lab#17:

switch obazl repos from local to git

Signed-off-by: Gregg Reynolds <601396+mobileink@users.noreply.github.com>

# This is the commit message scipr-lab#18:

pin xbyak, ate-pairing repos to versions, to match upstream

Signed-off-by: Gregg Reynolds <601396+mobileink@users.noreply.github.com>

# This is the commit message scipr-lab#19:

delete git submodules, not needed with Bazel

Signed-off-by: Gregg Reynolds <601396+mobileink@users.noreply.github.com>

# This is the commit message scipr-lab#20:

add sha256 for xbyak, ate-pairing external repos

Signed-off-by: Gregg Reynolds <601396+mobileink@users.noreply.github.com>

# This is the commit message scipr-lab#21:

remove xbyak dep - it's included in ate-pairing

Signed-off-by: Gregg Reynolds <601396+mobileink@users.noreply.github.com>

# This is the commit message scipr-lab#22:

restore depends dirs

Signed-off-by: Gregg Reynolds <601396+mobileink@users.noreply.github.com>
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

Successfully merging this pull request may close these issues.

2 participants