Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 18 additions & 5 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,11 @@ set(BM_HEADERS ${PROJECT_SOURCE_DIR}/src/bm.h

set (CMAKE_CXX_STANDARD 17)

string(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" BM_SYSTEM_PROCESSOR_LOWER)
set(BM_TARGET_IS_X86 FALSE)
if (BM_SYSTEM_PROCESSOR_LOWER MATCHES "^(x86_64|amd64|i[3-6]86|x86)$")
set(BM_TARGET_IS_X86 TRUE)
endif()

if (CMAKE_CXX_COMPILER_ID MATCHES "GNU")
set(warnopt "-Wno-psabi")
Expand All @@ -83,11 +88,19 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang"
elseif("${BMOPTFLAGS}" STREQUAL "BMAVX2OPT")
set(bmoptf "-march=skylake -mavx2 -O2 -DBMAVX2OPT")
else()
if (CMAKE_BUILD_TYPE MATCHES "Release")
set(bmoptf "-march=native -O2")
else()
set(bmoptf "-march=native")
endif()
if (BM_TARGET_IS_X86 AND NOT CMAKE_CROSSCOMPILING)
if (CMAKE_BUILD_TYPE MATCHES "Release")
set(bmoptf "-march=native -O2")
else()
set(bmoptf "-march=native")
endif()
else()
if (CMAKE_BUILD_TYPE MATCHES "Release")
set(bmoptf "-O2")
else()
set(bmoptf "")
endif()
endif()
endif()

set(flags "-Wall -Wextra -Wno-ignored-qualifiers -fPIC -fomit-frame-pointer")
Expand Down
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -328,6 +328,8 @@ If you want to change the default you can do that in makefile.in
Project now comes with a set of makefiles for cmake, you can just build it or generate project files for any
cmake-supported environment.

When targeting `riscv64`, use the default portable build unless you add a dedicated RISC-V SIMD backend. Avoid inheriting host-only `-march=native` settings during cross-target or simulated target builds.


###### Windows:
---
Expand Down
15 changes: 11 additions & 4 deletions src/bmdef.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,20 +56,27 @@ For more information please visit: http://bitmagic.io
#endif


#if defined(__riscv)
#define BM_RISCV
#endif


// macro to define/undefine unaligned memory access (x86, PowerPC)
//
#if defined(__i386) || defined(__x86_64) || defined(__ppc__) || \
#if !defined(BM_RISCV) && \
(defined(__i386) || defined(__x86_64) || defined(__ppc__) || \
defined(__ppc64__) || defined(_M_IX86) || defined(_M_AMD64) || \
defined(_M_IX86) || defined(_M_AMD64) || defined(_M_X64) || \
defined(_M_ARM) || defined(_M_ARM64) || \
defined(__arm__) || defined(__aarch64__) || \
(defined(_M_MPPC) && !defined(BM_FORBID_UNALIGNED_ACCESS))
(defined(_M_MPPC) && !defined(BM_FORBID_UNALIGNED_ACCESS)))
#define BM_UNALIGNED_ACCESS_OK 1
#endif

#if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_X64) || \
#if !defined(BM_RISCV) && \
(defined(_M_IX86) || defined(_M_AMD64) || defined(_M_X64) || \
defined(__i386) || defined(__x86_64) || defined(_M_AMD64) || \
defined(BMSSE2OPT) || defined(BMSSE42OPT)
defined(BMSSE2OPT) || defined(BMSSE42OPT))
#define BM_x86
#endif

Expand Down