Skip to content

Commit

Permalink
Updated build files
Browse files Browse the repository at this point in the history
  • Loading branch information
Victor Moncada authored and Victor Moncada committed May 11, 2023
1 parent 3208f07 commit e9d92f2
Show file tree
Hide file tree
Showing 5 changed files with 87 additions and 103 deletions.
124 changes: 31 additions & 93 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
cmake_minimum_required(VERSION 3.1)
cmake_minimum_required(VERSION 3.16)

project(seq VERSION 1.0.0 LANGUAGES CXX)
project(seq
VERSION 1.1.0
DESCRIPTION "Collection of C++11 original containers"
HOMEPAGE_URL "https://github.com/Thermadiag/seq"
LANGUAGES CXX
)

include(GNUInstallDirs)

Expand Down Expand Up @@ -62,100 +67,33 @@ endif()



# Install headers and sources (for header-only mode)
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/seq"
DESTINATION "${CMAKE_INSTALL_PREFIX}/include")

install (TARGETS seq LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} )
install (TARGETS seq RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} )

list(APPEND headers "${CMAKE_CURRENT_SOURCE_DIR}/seq/any.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/seq/bits.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/seq/charconv.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/seq/cvector.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/seq/deque_allocator.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/seq/devector.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/seq/flat_map.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/seq/format.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/seq/hash.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/seq/memory.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/seq/ordered_map.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/seq/pdqsort.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/seq/radix_map.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/seq/radix_hash_map.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/seq/range.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/seq/seq.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/seq/sequence.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/seq/tagged_pointer.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/seq/testing.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/seq/tiered_vector.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/seq/tiny_string.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/seq/type_traits.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/seq/utils.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/seq/internal/binary_search.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/seq/internal/block_codec.h"
"${CMAKE_CURRENT_SOURCE_DIR}/seq/internal/lz4small.h"
"${CMAKE_CURRENT_SOURCE_DIR}/seq/internal/transpose.h"
"${CMAKE_CURRENT_SOURCE_DIR}/seq/internal/shuffle_table.h"
"${CMAKE_CURRENT_SOURCE_DIR}/seq/internal/unshuffle_table.h"
"${CMAKE_CURRENT_SOURCE_DIR}/seq/internal/radix_tree.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/seq/internal/radix_extra.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/seq/internal/simd.hpp"
"${CMAKE_CURRENT_SOURCE_DIR}/seq/internal/simd.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/seq/internal/charconv.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/seq/internal/hash.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/seq/internal/block_codec.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/seq/internal/lz4small.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/seq/internal/transpose.cpp"
)

target_sources(seq INTERFACE "$<BUILD_INTERFACE:${headers}>")

# Configure and install seq.pc
configure_file(seq.pc.in seq.pc @ONLY)



# Installation (only compatible with CMake version >= 3.3)
if(${CMAKE_VERSION} VERSION_GREATER "3.2")
include(CMakePackageConfigHelpers)

## Install include directory and potential natvis file
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/seq"
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")



## Create and install seqConfig.cmake
configure_package_config_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/seqConfig.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/seqConfig.cmake"
INSTALL_DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/cmake/seq")

install(FILES "${CMAKE_CURRENT_BINARY_DIR}/seqConfig.cmake"
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/cmake/seq")

install(FILES ${CMAKE_BINARY_DIR}/seq.pc
install(FILES ${CMAKE_BINARY_DIR}/seq.pc
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/pkgconfig)


## Create local seqTargets.cmake
export(TARGETS seq NAMESPACE seq:: FILE "${CMAKE_CURRENT_BINARY_DIR}/seqTargets.cmake")

## Create and install global seqTargets.cmake
install(TARGETS seq
EXPORT seqTargets)

install(EXPORT seqTargets
NAMESPACE seq::
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/cmake/seq")



## Create and install seqConfigVersion.cmake
# seq is header-only and does not depend on the architecture.
# Remove CMAKE_SIZEOF_VOID_P from seqConfigVersion.cmake so that a
# seqConfig.cmake generated for a 64 bit target can be used for 32 bit
# targets and vice versa.
set(CMAKE_SIZEOF_VOID_P_BACKUP ${CMAKE_SIZEOF_VOID_P})
unset(CMAKE_SIZEOF_VOID_P)
write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/seqConfigVersion.cmake"
COMPATIBILITY SameMajorVersion)
set(CMAKE_SIZEOF_VOID_P ${CMAKE_SIZEOF_VOID_P_BACKUP})

install(FILES "${CMAKE_CURRENT_BINARY_DIR}/seqConfigVersion.cmake"
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/cmake/seq")
endif()
# Configure and install seqConfig.cmake and seqConfigVersion.cmake
include(CMakePackageConfigHelpers)
configure_package_config_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/seqConfig.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/seqConfig.cmake"
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/seq
PATH_VARS )

# Generate seqConfigVersion.cmake
write_basic_package_version_file(
${CMAKE_CURRENT_BINARY_DIR}/seqConfigVersion.cmake
VERSION ${PROJECT_VERSION}
COMPATIBILITY SameMajorVersion )

install(FILES ${CMAKE_CURRENT_BINARY_DIR}/seqConfig.cmake
${CMAKE_CURRENT_BINARY_DIR}/seqConfigVersion.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/seq )

34 changes: 34 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,40 @@ Build
The *seq* library requires compilation using cmake, but you can still use it without compilation by defining `SEQ_HEADER_ONLY`.
Even in header-only mode, you should use the cmake file for installation.
Tests can be built using cmake from the `tests` folder, and benchmarks from the `benchs` folder.
Note that for msvc build, AVX2 support is enabled by default. You should call cmake with `-DENABLE_AVX2=OFF` to disable it.

Using Seq library with CMake
----------------------------

The follwing example shows how to use the *seq* library within a CMake project:

```cmake
# Dummy test project
project(test)
# Add seq installation folder
list(APPEND CMAKE_PREFIX_PATH "path_to_seq_installation/lib/cmake/seq")
# Find package seq
find_package(seq REQUIRED)
# Add include directory
include_directories("${SEQ_INCLUDE_DIR}")
# Add lib directory
link_directories("${SEQ_LIB_DIR}")
# Add sources
add_executable(test test.cpp)
# Add sse/avx flags
if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
target_compile_options(test PRIVATE /arch:AVX2)
else()
target_compile_options(test PRIVATE -march=native)
endif()
# Link with seq
target_link_libraries(test ${SEQ_LIBRARY} )
```

Acknowledgements
----------------
Expand Down
20 changes: 13 additions & 7 deletions cmake/seqConfig.cmake.in
Original file line number Diff line number Diff line change
@@ -1,9 +1,15 @@
# This module sets the following variables:
# * seq_FOUND - true if seq found on the system
# * seq_INCLUDE_DIRS - the directory containing seq headers

@PACKAGE_INIT@

if(NOT TARGET seq)
include("${CMAKE_CURRENT_LIST_DIR}/seqTargets.cmake")
get_target_property(seq_INCLUDE_DIRS seq INTERFACE_INCLUDE_DIRECTORIES)
endif()
set_and_check(SEQ_INCLUDE_DIR "${PACKAGE_PREFIX_DIR}/include")

math(EXPR BITS "8*${CMAKE_SIZEOF_VOID_P}")
IF(${BITS} MATCHES "64" AND UNIX)
set_and_check(SEQ_LIB_DIR "${PACKAGE_PREFIX_DIR}/lib64")
ELSE()
set_and_check(SEQ_LIB_DIR "${PACKAGE_PREFIX_DIR}/lib")
ENDIF()

set(SEQ_LIBRARY seq)

check_required_components(seq)
8 changes: 6 additions & 2 deletions seq/internal/block_codec.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,15 @@
* SOFTWARE.
*/

#ifdef __SSE4_1__

#include <utility>
#include <cstdio>

#include "simd.hpp"

#ifdef __SSE4_1__



#include "block_codec.h"
#include "transpose.h"
#include "shuffle_table.h"
Expand Down
4 changes: 3 additions & 1 deletion seq/internal/transpose.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,12 @@
* SOFTWARE.
*/

#ifdef __SSE4_1__


#include "transpose.h"

#ifdef __SSE4_1__

namespace seq
{

Expand Down

0 comments on commit e9d92f2

Please sign in to comment.