Open hebasto opened 2 years ago
Chasing for Concept (N)ACKs...
The currently suggesting minimal CMake-based build system implementation is enough for:
add_subdirectory(minisketch EXCLUDE_FROM_ALL)
target_compile_definitions(minisketch
PRIVATE
DISABLE_DEFAULT_FIELDS
ENABLE_FIELD_32
)
To became a full fledged one, the current minimal CMake-based build system requires some additional features:
Although, those features are not required for this PR goal, i.e., providing a native Windows CI task.
Imo this should be renamed "Add CMake buildsystem". I looked for this a while back and didn't find it because CMake isn't mentioned in the title.
Concept ACK. Will review next week.
@sipa Are you interested in CMake for this project?
@theuni Yeah, will look soon.
@sipa No rush. I was just looking for a concept ACK.
I worked up a CMake impl as well before seeing this PR. I think we'd benefit from parts of each, so I'll get with @hebasto on creating a combined version for review.
Imo this should be renamed "Add CMake buildsystem".
Done.
I'm happy to add a CMake build system for minisketch. I will need review from people more experienced with build systems, though.
I'm happy to add a CMake build system for minisketch. I will need review from people more experienced with build systems, though.
I'm going to update this PR shortly.
Reworked.
The PR description has been updated.
The approach from https://github.com/hebasto/bitcoin/pull/93 was used for printing summary.
Addressed @theuni's comments.
This PR adds a new CMake-based build system, which can be reused in downstream projects, including Bitcoin Core.
Also an MSVC CI task has been added per feedback.
--disable-ccache
--enable-tests
-DMINISKETCH_TESTS
--enable-benchmark
-DMINISKETCH_BENCHMARK
--enable-fields
-DMINISKETCH_FIELDS
Here is a examples of output when configuring:
minisketch configure summary
Library type .......................... Static Build options: clmul fields ........................ ENABLED clz implementation .................. compiler builtin Optional binaries: benchmark ........................... ON tests ............................... ON
Cross compiling ....................... FALSE C++ compiler .......................... GNU 13.2.0, /usr/bin/c++ Available build configurations ........ Debug, Release, RelWithDebInfo Default build configuration ........... Debug 'Debug' build configuration: C++ flags ........................... -g -Wall 'Release' build configuration: C++ flags ........................... -O3 -DNDEBUG -Wall 'RelWithDebInfo' build configuration: C++ flags ........................... -O2 -g -DNDEBUG -Wall
CMake Warning at CMakeLists.txt:117 (message): Only compiling in support for field sizes: 42
This means the library will lack support for other field sizes entirely.
-- Configuring done (0.5s) -- Generating done (0.0s) -- Build files have been written to: /home/hebasto/git/minisketch/build
$ cmake -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo -DMINISKETCH_BENCHMARK=ON -DMINISKETCH_FIELDS=42 -- The CXX compiler identification is GNU 13.2.0 -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Check for working CXX compiler: /usr/bin/c++ - skipped -- Detecting CXX compile features -- Detecting CXX compile features - done -- Performing Test HAVE_CLMUL -- Performing Test HAVE_CLMUL - Success -- Performing Test HAVE_CLZ -- Performing Test HAVE_CLZ - Success
minisketch configure summary
Library type .......................... Static Build options: clmul fields ........................ ENABLED clz implementation .................. compiler builtin Optional binaries: benchmark ........................... ON tests ............................... ON
Cross compiling ....................... FALSE C++ compiler .......................... GNU 13.2.0, /usr/bin/c++ Build configuration ................... RelWithDebInfo C++ flags ............................. -O2 -g -DNDEBUG -Wall
CMake Warning at CMakeLists.txt:117 (message): Only compiling in support for field sizes: 42
This means the library will lack support for other field sizes entirely.
-- Configuring done (0.6s) -- Generating done (0.0s) -- Build files have been written to: /home/hebasto/git/minisketch/build