mirror of
https://codeberg.org/comaps/comaps
synced 2025-12-19 21:13:35 +00:00
Added LTO and -Ofast.
Signed-off-by: Viktor Govako <viktor.govako@gmail.com>
This commit is contained in:
@@ -94,6 +94,11 @@ if (PLATFORM_WIN)
|
|||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# Try fast native arch.
|
||||||
|
if (PLATFORM_LINUX)
|
||||||
|
add_compile_options(-march=native)
|
||||||
|
endif()
|
||||||
|
|
||||||
# Built-in CMake configurations: Debug, Release, RelWithDebInfo, MinSizeRel
|
# Built-in CMake configurations: Debug, Release, RelWithDebInfo, MinSizeRel
|
||||||
if (${CMAKE_BUILD_TYPE} STREQUAL "Debug")
|
if (${CMAKE_BUILD_TYPE} STREQUAL "Debug")
|
||||||
add_definitions(-DDEBUG)
|
add_definitions(-DDEBUG)
|
||||||
@@ -103,12 +108,29 @@ if (${CMAKE_BUILD_TYPE} STREQUAL "Debug")
|
|||||||
elseif (${CMAKE_BUILD_TYPE} MATCHES "Rel")
|
elseif (${CMAKE_BUILD_TYPE} MATCHES "Rel")
|
||||||
add_definitions(-DRELEASE)
|
add_definitions(-DRELEASE)
|
||||||
if (NOT MSVC)
|
if (NOT MSVC)
|
||||||
add_compile_options(-Ofast) # Also enables -ffast-math
|
add_compile_options(-Ofast $<$<CXX_COMPILER_ID:GNU>:-flto=auto>) # Also enables -ffast-math
|
||||||
endif()
|
endif()
|
||||||
else()
|
else()
|
||||||
message(FATAL_ERROR "Unknown build type: " ${CMAKE_BUILD_TYPE})
|
message(FATAL_ERROR "Unknown build type: " ${CMAKE_BUILD_TYPE})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if (${CMAKE_BUILD_TYPE} STREQUAL "RelWithDebInfo")
|
||||||
|
add_compile_options(-fno-omit-frame-pointer)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Linux GCC LTO plugin fix.
|
||||||
|
if (PLATFORM_LINUX AND (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_BUILD_TYPE MATCHES "^Rel"))
|
||||||
|
# To force errors if LTO was not enabled.
|
||||||
|
add_compile_options(-fno-fat-lto-objects)
|
||||||
|
# To fix ar and ranlib "plugin needed to handle lto object".
|
||||||
|
string(REGEX MATCH "[0-9]+" GCC_MAJOR_VERSION ${CMAKE_CXX_COMPILER_VERSION})
|
||||||
|
file(GLOB_RECURSE plugin /usr/lib/gcc/*/${GCC_MAJOR_VERSION}/liblto_plugin.so)
|
||||||
|
set(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> --plugin ${plugin} qcs <TARGET> <OBJECTS>")
|
||||||
|
set(CMAKE_C_ARCHIVE_FINISH "<CMAKE_RANLIB> --plugin ${plugin} <TARGET>")
|
||||||
|
set(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> --plugin ${plugin} qcs <TARGET> <OBJECTS>")
|
||||||
|
set(CMAKE_CXX_ARCHIVE_FINISH "<CMAKE_RANLIB> --plugin ${plugin} <TARGET>")
|
||||||
|
endif()
|
||||||
|
|
||||||
message(STATUS "Build type: " ${CMAKE_BUILD_TYPE})
|
message(STATUS "Build type: " ${CMAKE_BUILD_TYPE})
|
||||||
|
|
||||||
if (PLATFORM_LINUX OR PLATFORM_ANDROID)
|
if (PLATFORM_LINUX OR PLATFORM_ANDROID)
|
||||||
|
|||||||
@@ -62,8 +62,12 @@ UNIT_TEST(Segment_Smoke)
|
|||||||
TEST(!OnSegment(P(10 + eps, 10), ps), ());
|
TEST(!OnSegment(P(10 + eps, 10), ps), ());
|
||||||
TEST(!OnSegment(P(0, 0), ps), ());
|
TEST(!OnSegment(P(0, 0), ps), ());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Paranoid tests.
|
// This paranoid test doesn' work with Release optimizations (LTO?).
|
||||||
|
#ifndef NDEBUG
|
||||||
|
UNIT_TEST(Segment_Paranoid)
|
||||||
|
{
|
||||||
{
|
{
|
||||||
P ps[] = {{0, 0}, {1e100, 1e100}};
|
P ps[] = {{0, 0}, {1e100, 1e100}};
|
||||||
TEST(OnSegment(ps[0], ps), ());
|
TEST(OnSegment(ps[0], ps), ());
|
||||||
@@ -94,6 +98,7 @@ UNIT_TEST(Segment_Smoke)
|
|||||||
TEST(!OnSegment(P(1e-16, 2.0 * 1e-16), ps), ());
|
TEST(!OnSegment(P(1e-16, 2.0 * 1e-16), ps), ());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
UNIT_TEST(Triangle_Smoke)
|
UNIT_TEST(Triangle_Smoke)
|
||||||
{
|
{
|
||||||
@@ -129,6 +134,8 @@ UNIT_TEST(Triangle_PointInsideSegment)
|
|||||||
TEST(!InsideTriangle(P(eps, eps), ps), ());
|
TEST(!InsideTriangle(P(eps, eps), ps), ());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This paranoid test doesn' work with Release optimizations (LTO?).
|
||||||
|
#ifndef NDEBUG
|
||||||
UNIT_TEST(Triangle_PointInsidePoint)
|
UNIT_TEST(Triangle_PointInsidePoint)
|
||||||
{
|
{
|
||||||
double constexpr eps = 1.0E-10;
|
double constexpr eps = 1.0E-10;
|
||||||
@@ -147,6 +154,7 @@ UNIT_TEST(Triangle_PointInsidePoint)
|
|||||||
TEST(!InsideTriangle(P(eps, eps), ps), ());
|
TEST(!InsideTriangle(P(eps, eps), ps), ());
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
UNIT_TEST(PolygonSelfIntersections_IntersectSmoke)
|
UNIT_TEST(PolygonSelfIntersections_IntersectSmoke)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user