48 lines
1.6 KiB
CMake
48 lines
1.6 KiB
CMake
cmake_minimum_required(VERSION 3.31)
|
|
project(yggm)
|
|
set(CMAKE_CXX_STANDARD 20)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
file(GLOB ${PROJECT_NAME}SOURCES *.cpp)
|
|
file(GLOB ${PROJECT_NAME}HEADERS *.h)
|
|
add_executable(${PROJECT_NAME} sources/main.cpp)
|
|
target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/libs)
|
|
if(CMAKE_BUILD_TYPE)
|
|
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
|
add_definitions(-DDEBUG)
|
|
elseif(CMAKE_BUILD_TYPE STREQUAL "Release")
|
|
add_definitions(-DRELEASE)
|
|
endif()
|
|
elseif(NOT CMAKE_BUILD_TYPE)
|
|
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build type" FORCE)
|
|
endif()
|
|
|
|
include(CheckCXXCompilerFlag)
|
|
check_cxx_compiler_flag("-mavx2" HAVE_AVX2)
|
|
|
|
if(HAVE_AVX2)
|
|
target_compile_options(${PROJECT_NAME} PRIVATE -mavx2)
|
|
target_compile_definitions(${PROJECT_NAME} PRIVATE USE_AVX2=1)
|
|
else()
|
|
message(WARNING "AVX2 not supported: fallback")
|
|
target_compile_definitions(${PROJECT_NAME} PRIVATE USE_AVX2=0)
|
|
endif()
|
|
|
|
set(CXX_ADDITIONAL_FLAGS
|
|
"-fomit-frame-pointer \
|
|
-funroll-loops \
|
|
-ftree-vectorize \
|
|
-ftree-slp-vectorize \
|
|
-fdelete-null-pointer-checks \
|
|
-fno-exceptions \
|
|
-fno-rtti \
|
|
-funsafe-math-optimizations \
|
|
-fstrict-aliasing \
|
|
-fstrict-overflow \
|
|
-fno-stack-protector \
|
|
-fno-math-errno")
|
|
set(CXXFLAGSR "-march=native -O3 -ffast-math -pipe -Wall -Wextra -Wpedantic -Wconversion -Wuninitialized -Wsign-conversion -flto")
|
|
set(CXXFLAGSD "-O0 -pipe -Wall -Wextra -Wpedantic -Wconversion -Wuninitialized -Wsign-conversion -g")
|
|
set(CMAKE_CXX_FLAGS_RELEASE "${CXXFLAGSR} ${CXX_ADDITIONAL_FLAGS}")
|
|
set(CMAKE_CXX_FLAGS_DEBUG "${CXXFLAGSD}")
|
|
|
|
target_link_libraries(${PROJECT_NAME} pthread sodium) |