Skip to content
Permalink
Browse files

add examples

  • Loading branch information
wenyan4work committed Mar 1, 2020
1 parent a476625 commit ee396f61fb7c222a56f45ef762c700706f3fd25d
Showing with 222 additions and 27 deletions.
  1. +181 −0 .cmake-format
  2. +26 −27 CMakeLists.txt
  3. +15 −0 examples/CMakeLists.txt
@@ -0,0 +1,181 @@
# --------------------------
# General Formatting Options
# --------------------------
# How wide to allow formatted cmake files
line_width = 80

# How many spaces to tab for indent
tab_size = 2

# If an argument group contains more than this many sub-groups (parg or kwarg
# groups), then force it to a vertical layout.
max_subgroups_hwrap = 2

# If a positional argument group contains more than this many arguments, then
# force it to a vertical layout.
max_pargs_hwrap = 6

# If true, separate flow control names from their parentheses with a space
separate_ctrl_name_with_space = False

# If true, separate function names from parentheses with a space
separate_fn_name_with_space = False

# If a statement is wrapped to more than one line, than dangle the closing
# parenthesis on its own line.
dangle_parens = False

# If the trailing parenthesis must be 'dangled' on its on line, then align it to
# this reference: `prefix`: the start of the statement, `prefix-indent`: the
# start of the statement, plus one indentation level, `child`: align to the
# column of the arguments
dangle_align = 'prefix'

# If the statement spelling length (including space and parenthesis) is smaller
# than this amount, then force reject nested layouts.
min_prefix_chars = 4

# If the statement spelling length (including space and parenthesis) is larger
# than the tab width by more than this amount, then force reject un-nested
# layouts.
max_prefix_chars = 10

# If a candidate layout is wrapped horizontally but it exceeds this many lines,
# then reject the layout.
max_lines_hwrap = 2

# What style line endings to use in the output.
line_ending = 'unix'

# Format command names consistently as 'lower' or 'upper' case
command_case = 'canonical'

# Format keywords consistently as 'lower' or 'upper' case
keyword_case = 'unchanged'

# Specify structure for custom cmake functions
additional_commands = {'pkg_find': {'kwargs': {'PKG': '*'}}}

# A list of command names which should always be wrapped
always_wrap = []

# If true, the argument lists which are known to be sortable will be sorted
# lexicographicall
enable_sort = True

# If true, the parsers may infer whether or not an argument list is sortable
# (without annotation).
autosort = False

# By default, if cmake-format cannot successfully fit everything into the
# desired linewidth it will apply the last, most agressive attempt that it made.
# If this flag is True, however, cmake-format will print error, exit with non-
# zero status code, and write-out nothing
require_valid_layout = False

# A dictionary containing any per-command configuration overrides. Currently
# only `command_case` is supported.
per_command = {}

# A dictionary mapping layout nodes to a list of wrap decisions. See the
# documentation for more information.
layout_passes = {}

# ----------------------------
# Options affecting the linter
# ----------------------------
with section("linter"):
# regular expression pattern describing valid function names
function_pattern = '[0-9a-z_]+'

# regular expression pattern describing valid macro names
macro_pattern = '[0-9A-Z_]+'

# regular expression pattern describing valid names for variables with global
# scope
global_var_pattern = '[0-9A-Z][0-9A-Z_]+'

internal_var_pattern = '_[0-9A-Z_]+'

# regular expression pattern describing valid names for variables with local
# scope
local_var_pattern = '[0-9a-z][0-9a-z_]+'

private_var_pattern = '_[0-9a-z_]+'

public_var_pattern = '[0-9A-Z][0-9A-Z_]+'

# regular expression pattern describing valid names for keywords used in
# functions or macros
keyword_pattern = '[0-9A-Z_]+'

# In the heuristic for C0201, how many conditionals to match within a loop in
# before considering the loop a parser.
max_conditionals_custom_parser = 2

# Require at least this many newlines between statements
min_statement_spacing = 1

# Require no more than this many newlines between statements
max_statement_spacing = 1

max_returns = 6

max_branches = 12

max_arguments = 5

max_localvars = 15

max_statements = 50

# ------------------------------------
# Options affecting comment formatting
# ------------------------------------
# What character to use for bulleted lists
bullet_char = '*'

# What character to use as punctuation after numerals in an enumerated list
enum_char = '.'

# If comment markup is enabled, don't reflow the first comment block in each
# listfile. Use this to preserve formatting of your copyright/license
# statements.
first_comment_is_literal = False

# If comment markup is enabled, don't reflow any comment block which matches
# this (regex) pattern. Default is `None` (disabled).
literal_comment_pattern = None

# Regular expression to match preformat fences in comments
# default=r'^\s*([`~]{3}[`~]*)(.*)$'
fence_pattern = '^\\s*([`~]{3}[`~]*)(.*)$'

# Regular expression to match rulers in comments
# default=r'^\s*[^\w\s]{3}.*[^\w\s]{3}$'
ruler_pattern = '^\\s*[^\\w\\s]{3}.*[^\\w\\s]{3}$'

# If a comment line starts with at least this many consecutive hash characters,
# then don't lstrip() them off. This allows for lazy hash rulers where the first
# hash char is not separated by space
hashruler_min_length = 10

# If true, then insert a space between the first hash char and remaining hash
# chars in a hash ruler, and normalize its length to fill the column
canonicalize_hashrulers = True

# enable comment markup parsing and reflow
enable_markup = False

# ---------------------
# Miscellaneous options
# ---------------------
# If true, emit the unicode byte-order mark (BOM) at the start of the file
emit_byteorder_mark = False

# Specify the encoding of the input file. Defaults to utf-8.
input_encoding = 'utf-8'

# Specify the encoding of the output file. Defaults to utf-8. Note that cmake
# only claims to support utf-8 so be careful when using anything else
output_encoding = 'utf-8'
@@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.10)
project(
PVFMM
PVFMM
VERSION 1.1
LANGUAGES CXX)

@@ -30,73 +30,70 @@ find_package(OpenMP REQUIRED)

# library
find_package(MKL)
if(NOT MKL_FOUND)
find_package(BLAS REQUIRED)
find_package(LAPACK REQUIRED)
find_package(FFTW REQUIRED)
if(MKL_FOUND)
set(DEP_INC ${MKL_FFTW_INCLUDE_DIR} ${MKL_INCLUDE_DIR})
set(DEP_LIB ${MKL_SDL_LIBRARY})
else()
find_package(BLAS REQUIRED)
find_package(LAPACK REQUIRED)
find_package(FFTW REQUIRED)
set(DEP_INC ${MKL_FFTW_INCLUDE_DIR} ${MKL_INCLUDE_DIR})
set(DEP_LIB ${MKL_SDL_LIBRARY})
endif()

find_file(SYS_STAT sys/stat.h OPTIONAL)

# generate pvfmm_config.h
if(MKL_FOUND)
option(PVFMM_FFTW3_MKL "PVFMM_FFTW3_MKL" ON)
option(PVFMM_HAVE_FFTW "PVFMM_HAVE_FFTW" ON)
option(PVFMM_HAVE_FFTWF "PVFMM_HAVE_FFTWF" ON)
option(PVFMM_FFTW3_MKL "PVFMM_FFTW3_MKL" ON)
option(PVFMM_HAVE_FFTW "PVFMM_HAVE_FFTW" ON)
option(PVFMM_HAVE_FFTWF "PVFMM_HAVE_FFTWF" ON)
endif()

if(FFTW_DOUBLE_LIB_FOUND)
option(PVFMM_HAVE_FFTW "PVFMM_HAVE_FFTW" ON)
option(PVFMM_HAVE_FFTW "PVFMM_HAVE_FFTW" ON)
endif()

if(FFTW_FLOAT_LIB_FOUND)
option(PVFMM_HAVE_FFTWF "PVFMM_HAVE_FFTWF" ON)
option(PVFMM_HAVE_FFTWF "PVFMM_HAVE_FFTWF" ON)
endif()

if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel")
option(PVFMM_HAVE_INTEL_SVML "PVFMM_HAVE_INTEL_SVML" ON)
option(PVFMM_HAVE_INTEL_SVML "PVFMM_HAVE_INTEL_SVML" ON)
endif()

if(SYS_STAT)
option(PVFMM_HAVE_SYS_STAT_H "PVFMM_HAVE_SYS_STAT_H" ON)
option(PVFMM_HAVE_SYS_STAT_H "PVFMM_HAVE_SYS_STAT_H" ON)
endif()

configure_file(pvfmm_config.h.in pvfmm_config.h @ONLY)

enable_testing()

# add_subdirectory(include)
# add_subdirectory(src)
# add_subdirectory(examples)
# add_subdirectory(Test)

# part 1, core library
file(GLOB pvfmm_SRC "src/*.cpp")

# shared lib
add_library( pvfmm SHARED ${pvfmm_SRC} )
add_library(pvfmm SHARED ${pvfmm_SRC})
set_target_properties(pvfmm PROPERTIES OUTPUT_NAME pvfmm)
target_include_directories(
pvfmm
PUBLIC $<INSTALL_INTERFACE:include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/>
${MKL_INCLUDE_DIRS}
${MPI_FFTW_INCLUDE_DIR}
${CMAKE_BINARY_DIR}
)
${CMAKE_BINARY_DIR} ${DEP_INC})
target_link_libraries(pvfmm PUBLIC ${DEP_LIB} OpenMP::OpenMP_CXX MPI::MPI_CXX)
target_compile_options(pvfmm PUBLIC ${OpenMP_CXX_FLAGS})

# static lib
add_library( pvfmmStatic STATIC ${pvfmm_SRC} )
add_library(pvfmmStatic STATIC ${pvfmm_SRC})
set_target_properties(pvfmmStatic PROPERTIES OUTPUT_NAME pvfmm)
target_include_directories(
pvfmmStatic
PUBLIC $<INSTALL_INTERFACE:include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/>
${MKL_INCLUDE_DIRS}
${MPI_FFTW_INCLUDE_DIR}
${CMAKE_BINARY_DIR}
)
${CMAKE_BINARY_DIR} ${DEP_INC})
target_link_libraries(pvfmmStatic PUBLIC ${DEP_LIB} OpenMP::OpenMP_CXX
MPI::MPI_CXX)
target_compile_options(pvfmmStatic PUBLIC ${OpenMP_CXX_FLAGS})

# install core library and headers
@@ -113,3 +110,5 @@ install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pvfmm/)
install(FILES ${CMAKE_BINARY_DIR}/pvfmm_config.h
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pvfmm/)

add_subdirectory(examples)
@@ -0,0 +1,15 @@
add_executable(example1 ./src/example1.cpp)
target_link_libraries(example1 PRIVATE pvfmmStatic)
target_include_directories(example1 PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)

add_executable(example2 ./src/example2.cpp)
target_link_libraries(example2 PRIVATE pvfmmStatic)
target_include_directories(example2 PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)

add_executable(fmm_pts ./src/fmm_pts.cpp)
target_link_libraries(fmm_pts PRIVATE pvfmmStatic)
target_include_directories(fmm_pts PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)

add_executable(fmm_cheb ./src/example1.cpp)
target_link_libraries(fmm_cheb PRIVATE pvfmmStatic)
target_include_directories(fmm_cheb PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)

0 comments on commit ee396f6

Please sign in to comment.
You can’t perform that action at this time.