diff --git a/Makefile b/Makefile index 4d3a205..e61d401 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,4 @@ +CONFIG_NATIVE := true CONFIG_CXX_ALLOCATOR := true CONFIG_UBSAN := false CONFIG_SEAL_METADATA := false @@ -8,6 +9,11 @@ endef CPPFLAGS := -D_GNU_SOURCE SHARED_FLAGS := -O2 -flto -fPIC -fvisibility=hidden -fno-plt -pipe -Wall -Wextra $(call safe_flag,-Wcast-align=strict) -Wcast-qual -Wwrite-strings + +ifeq ($(CONFIG_NATIVE),true) + SHARED_FLAGS += -march=native +endif + CFLAGS := -std=c11 $(SHARED_FLAGS) -Wmissing-prototypes CXXFLAGS := -std=c++14 $(SHARED_FLAGS) LDFLAGS := -Wl,-z,defs,-z,relro,-z,now,-z,nodlopen,-z,text diff --git a/README.md b/README.md index b76e66c..38d3de2 100644 --- a/README.md +++ b/README.md @@ -60,6 +60,10 @@ make command as follows: The available configuration options are the following: +* `CONFIG_NATIVE`: `true` (default) or `false` to control whether the code is + optimized for the detected CPU on the host. If this is disabled, setting up a + custom `-march` higher than the baseline architecture is highly recommended + due to substantial performance benefits for this code. * `CONFIG_CXX_ALLOCATOR`: `true` (default) or `false` to control whether the C++ allocator is replaced for slightly improved performance and detection of mismatched sizes for sized deallocation (often type confusion bugs). This