Page MenuHomePhabricator

Add cmake build for libsecp256k1
ClosedPublic

Authored by deadalnix on Dec 10 2017, 16:46.

Details

Summary

A per title.

Test Plan
mkdir build && cd build
cmake -GNinja ..
ninja

Check that the library is built properly.

Diff Detail

Repository
rABC Bitcoin ABC
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

schancel requested changes to this revision.Dec 12 2017, 01:24

Failed for me:

[14/21] Building C object src/secp256k1/CMakeFiles/exhaustive_tests.dir/src/tests_exhaustive.c.o
FAILED: src/secp256k1/CMakeFiles/exhaustive_tests.dir/src/tests_exhaustive.c.o
ccache /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc -DHAVE_LIBGMP -DHAVE___INT128 -DSECP256K1_BUILD -DUSE_FIELD_5X52 -DUSE_FIELD_INV_BUILTIN -DUSE_NUM_GMP -DUSE_SCALAR_4X64 -DUSE_SCALAR_INV_BUILTIN -DVERIFY -I../src/secp256k1/. -I../src/secp256k1/include -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk -MD -MT src/secp256k1/CMakeFiles/exhaustive_tests.dir/src/tests_exhaustive.c.o -MF src/secp256k1/CMakeFiles/exhaustive_tests.dir/src/tests_exhaustive.c.o.d -o src/secp256k1/CMakeFiles/exhaustive_tests.dir/src/tests_exhaustive.c.o   -c ../src/secp256k1/src/tests_exhaustive.c
In file included from ../src/secp256k1/src/tests_exhaustive.c:25:
In file included from ../src/secp256k1/src/group.h:10:
In file included from ../src/secp256k1/src/num.h:17:
../src/secp256k1/src/num_gmp.h:10:10: fatal error: 'gmp.h' file not found
#include <gmp.h>
         ^~~~~~~
1 error generated.
[19/21] Building C object src/secp256k1/CMakeFiles/secp256k1_tests.dir/src/tests.c.o
FAILED: src/secp256k1/CMakeFiles/secp256k1_tests.dir/src/tests.c.o
ccache /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc -DHAVE_LIBGMP -DHAVE___INT128 -DUSE_FIELD_5X52 -DUSE_FIELD_INV_BUILTIN -DUSE_NUM_GMP -DUSE_SCALAR_4X64 -DUSE_SCALAR_INV_BUILTIN -DVERIFY -I../src/secp256k1/. -I../src/secp256k1/include -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk -MD -MT src/secp256k1/CMakeFiles/secp256k1_tests.dir/src/tests.c.o -MF src/secp256k1/CMakeFiles/secp256k1_tests.dir/src/tests.c.o.d -o src/secp256k1/CMakeFiles/secp256k1_tests.dir/src/tests.c.o   -c ../src/secp256k1/src/tests.c
In file included from ../src/secp256k1/src/tests.c:17:
In file included from ../src/secp256k1/src/secp256k1.c:10:
In file included from ../src/secp256k1/src/num_impl.h:14:
In file included from ../src/secp256k1/src/num.h:17:
../src/secp256k1/src/num_gmp.h:10:10: fatal error: 'gmp.h' file not found
#include <gmp.h>
         ^~~~~~~
1 error generated.
ninja: build stopped: subcommand failed.
This revision now requires changes to proceed.Dec 12 2017, 01:24

Not sure if there is a better way to do this, but this fixed the problem for me:

diff --git a/src/secp256k1/CMakeLists.txt b/src/secp256k1/CMakeLists.txt
index 56263cebe..f3a1bcfad 100644
--- a/src/secp256k1/CMakeLists.txt
+++ b/src/secp256k1/CMakeLists.txt
@@ -59,6 +59,14 @@ if(SECP256K1_BUILD_TEST)
        add_test(NAME secp256k1_tests COMMAND secp256k1_tests)
        target_link_libraries(secp256k1_tests secp256k1)
        target_compile_definitions(secp256k1_tests PUBLIC VERIFY)
+       if(GMP_INCLUDE_DIR AND GMP_LIBRARIES)
+               target_compile_definitions(secp256k1_tests PUBLIC HAVE_LIBGMP)
+               target_compile_definitions(secp256k1_tests PUBLIC USE_NUM_GMP)
+               target_include_directories(secp256k1_tests PRIVATE ${GMP_INCLUDE_DIR})
+               target_link_libraries(secp256k1_tests ${GMP_LIBRARIES})
+       else()
+               target_compile_definitions(secp256k1_tests PUBLIC USE_NUM_NONE)
+       endif()

        add_executable(exhaustive_tests src/tests_exhaustive.c)
        add_test(NAME exhaustive_tests COMMAND exhaustive_tests)
@@ -67,6 +75,14 @@ if(SECP256K1_BUILD_TEST)
        # This should not be enabled at the same time as coverage is.
        # TODO: support coverage.
        target_compile_definitions(exhaustive_tests PUBLIC VERIFY)
+       if(GMP_INCLUDE_DIR AND GMP_LIBRARIES)
+               target_compile_definitions(exhaustive_tests PUBLIC HAVE_LIBGMP)
+               target_compile_definitions(exhaustive_tests PUBLIC USE_NUM_GMP)
+               target_include_directories(exhaustive_tests PRIVATE ${GMP_INCLUDE_DIR})
+               target_link_libraries(exhaustive_tests ${GMP_LIBRARIES})
+       else()
+               target_compile_definitions(exhaustive_tests PUBLIC USE_NUM_NONE)
+       endif()
 endif(SECP256K1_BUILD_TEST)

 # TODO: emult static precomputation
This comment was removed by schancel.

Make the import path of gmp public so it also impacts users of the library.

This revision is now accepted and ready to land.Dec 12 2017, 13:43
This revision was automatically updated to reflect the committed changes.