summaryrefslogtreecommitdiff
path: root/fuzzylite/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'fuzzylite/CMakeLists.txt')
-rw-r--r--fuzzylite/CMakeLists.txt163
1 files changed, 128 insertions, 35 deletions
diff --git a/fuzzylite/CMakeLists.txt b/fuzzylite/CMakeLists.txt
index f00a71a..28435e2 100644
--- a/fuzzylite/CMakeLists.txt
+++ b/fuzzylite/CMakeLists.txt
@@ -1,17 +1,28 @@
-cmake_minimum_required(VERSION 2.8)
+cmake_minimum_required(VERSION 2.8.8)
+
+if (APPLE)
+ set(CMAKE_OSX_DEPLOYMENT_TARGET 10.9)
+endif()
project(fuzzylite CXX)
+
+if (APPLE)
+ cmake_policy(SET CMP0042 NEW)
+endif()
+if (MSVC)
+ cmake_policy(SET CMP0054 NEW)
+endif()
+
+
###DEFINES SECTION
if(NOT CMAKE_VERBOSE_MAKEFILE)
set(CMAKE_VERBOSE_MAKEFILE false)
endif()
-set(FL_VERSION 5.1)
-add_definitions(-DFL_VERSION="${FL_VERSION}")
-
-set(FL_DATE "1507")
-add_definitions(-DFL_DATE="${FL_DATE}")
+if( NOT CMAKE_BUILD_TYPE )
+ set( CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." FORCE )
+endif()
add_definitions(-DFL_BUILD_PATH="${CMAKE_SOURCE_DIR}") #used to determine FL__FILE__
@@ -21,35 +32,50 @@ if(FL_BUILD_SHARED)
option(FL_BUILD_BINARY "Build fuzzylite binary" ON)
endif()
+option(FL_CPP98 "Builds utilizing C++98, i.e., passing -std=c++98" OFF)
option(FL_USE_FLOAT "Use fl::scalar as float" OFF)
-option(FL_BACKTRACE "Provide backtrace information in case of errors" OFF)
-option(FL_CPP11 "Builds utilizing C++11, i.e., passing -std=c++11" OFF)
+option(FL_BACKTRACE "Provide backtrace information in case of errors" ON)
-if(FL_CPP11 AND MSVC)
- message("Warning: MSVC not compatible with FL_CPP11 flag")
-endif()
+option(FL_BUILD_TESTS "Builds the unit tests" ON)
if(FL_USE_FLOAT)
add_definitions(-DFL_USE_FLOAT)
endif(FL_USE_FLOAT)
-if(NOT FL_BACKTRACE)
- add_definitions(-DFL_BACKTRACE_OFF)
+if(FL_BACKTRACE)
+ add_definitions(-DFL_BACKTRACE)
+endif()
+
+if (MSVC AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19)
+#C++11 not available before Visual Studio 2015
+ if (NOT FL_CPP98)
+ set(FL_CPP98 ON)
+ endif()
endif()
-if(FL_CPP11)
- add_definitions(-DFL_CPP11)
+if(FL_CPP98)
+ add_definitions(-DFL_CPP98)
if(NOT MSVC)
+ #Set C++98 by default in Clang and others
+ add_definitions(-std=c++98)
+ endif()
+else()
+ if(NOT MSVC)
+ #Set C++11 by default in Clang and others
add_definitions(-std=c++11)
- endif(NOT MSVC)
-endif(FL_CPP11)
+ endif()
+endif(FL_CPP98)
+#Put all binaries in same location
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY bin)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY bin)
if(NOT MSVC)
- set(CMAKE_CXX_FLAGS "-pedantic -Wall -Wextra ${CMAKE_CXX_FLAGS}")
+#TODO: Remove -Werror before release.
+#Add Unix compilation flags
+ set(CMAKE_CXX_FLAGS "-pedantic -Wall -Wextra -Werror ${CMAKE_CXX_FLAGS}")
+
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
@@ -59,38 +85,64 @@ if(NOT MSVC)
endif()
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
+#Address fl::null errors of literal null conversion
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-non-literal-null-conversion")
endif()
+
+if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
+ if (CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 6)
+ #In GNU gcc v6, the default is C++11
+ if (FL_CPP98)
+ #set the default to C++98
+ #Fix error: 'template<class> class std::auto_ptr' is deprecated with gcc-6
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++98")
+ endif()
+ endif()
+ #In GNU gcc 4.7, Op::str(T, std::size_t(0)) raises a warning of type-limits
+ if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-type-limits")
+ endif()
+endif()
+
+
set(FL_LIBS)
if(MSVC)
+#Set compilation flags in Windows
set(CMAKE_CXX_FLAGS "/W4 /EHsc")
#Wx: Treat warnings as errors. W4: All warnings
#http://msdn.microsoft.com/en-us/library/thxezb7y.aspx
#EHsc: call destructors on __try __catch, and to ignore C4530: C++ exception handler used. Note, unwind semantics are not enabled
+ #Add Backtrace library
if (FL_BACKTRACE)
set(FL_LIBS dbghelp)
endif()
endif()
+
+if(APPLE)
+#Fix ld: symbol(s) not found for architecture x86_64 on mac
+ set(FL_LIBS stdc++)
+endif()
+
+
###BUILD SECTION
include_directories(.)
-if (APPLE)
- cmake_policy(SET CMP0042 NEW)
-endif()
file(STRINGS FL_HEADERS fl-headers)
file(STRINGS FL_SOURCES fl-sources)
+file(STRINGS FL_TESTS fl-tests)
string(REGEX REPLACE "\n" " " ${fl-headers} ${fl-headers})
string(REGEX REPLACE "\n" " " ${fl-sources} ${fl-sources})
+string(REGEX REPLACE "\n" " " ${fl-tests} ${fl-tests})
message("${exepath}")
-set(CMAKE_DEBUG_POSTFIX d)
+set(CMAKE_DEBUG_POSTFIX debug)
if (MSVC OR CMAKE_GENERATOR STREQUAL Xcode)
if(FL_BUILD_SHARED)
@@ -119,16 +171,16 @@ endif()
if(FL_BUILD_SHARED)
set_target_properties(fl-shared PROPERTIES OUTPUT_NAME fuzzylite)
- set_target_properties(fl-shared PROPERTIES DEBUG_POSTFIX d)
- set_target_properties(fl-shared PROPERTIES COMPILE_DEFINITIONS "FL_EXPORT_LIBRARY")
- set_target_properties(fl-shared PROPERTIES VERSION 5.1)
+ set_target_properties(fl-shared PROPERTIES DEBUG_POSTFIX -debug)
+ target_compile_definitions(fl-shared PRIVATE FL_EXPORT_LIBRARY)
+ set_target_properties(fl-shared PROPERTIES VERSION 6.0)
target_link_libraries(fl-shared ${FL_LIBS})
endif()
if(FL_BUILD_STATIC)
set_target_properties(fl-static PROPERTIES OUTPUT_NAME fuzzylite-static)
- set_target_properties(fl-static PROPERTIES DEBUG_POSTFIX d)
- set_target_properties(fl-static PROPERTIES VERSION 5.1)
+ set_target_properties(fl-static PROPERTIES DEBUG_POSTFIX -debug)
+ set_target_properties(fl-static PROPERTIES VERSION 6.0)
target_link_libraries(fl-static ${FL_LIBS})
endif()
@@ -136,12 +188,40 @@ if(FL_BUILD_BINARY)
add_executable(fl-bin src/main.cpp)
set_target_properties(fl-bin PROPERTIES OUTPUT_NAME fuzzylite)
set_target_properties(fl-bin PROPERTIES OUTPUT_NAME fuzzylite IMPORT_PREFIX tmp-) #To prevent LNK1149 in Windows
- set_target_properties(fl-bin PROPERTIES DEBUG_POSTFIX d)
-
- set_target_properties(fl-bin PROPERTIES COMPILE_DEFINITIONS "FL_IMPORT_LIBRARY")
+ set_target_properties(fl-bin PROPERTIES DEBUG_POSTFIX -debug)
+ target_compile_definitions(fl-bin PRIVATE FL_IMPORT_LIBRARY) #if building with fl-shared
target_link_libraries(fl-bin fl-shared ${FL_LIBS})
endif(FL_BUILD_BINARY)
+if(FL_BUILD_TESTS)
+ add_executable(fl-test ${fl-headers} ${fl-tests})
+ set_target_properties(fl-test PROPERTIES OUTPUT_NAME fuzzylite-tests)
+ set_target_properties(fl-test PROPERTIES OUTPUT_NAME fuzzylite-tests IMPORT_PREFIX tmp-) #To prevent LNK1149 in Windows
+ set_target_properties(fl-test PROPERTIES DEBUG_POSTFIX -debug)
+
+ target_compile_definitions(fl-test PRIVATE FL_IMPORT_LIBRARY)
+ if (FL_CPP98)
+ target_compile_definitions(fl-test PRIVATE CATCH_CONFIG_NO_CPP11)
+ endif()
+
+ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
+ #Ignore QuickTest macro expansion comparison: CHECK(xstr(4+10) == "4+10")
+ target_compile_options(fl-test PRIVATE -Wno-address)
+ endif()
+ if (MSVC)
+ target_compile_options(fl-test PRIVATE /wd4130)
+ endif()
+
+ target_link_libraries(fl-test fl-shared ${FL_LIBS})
+
+ enable_testing()
+ add_test(NAME RunTests COMMAND fl-test)
+# add_test(NAME ListTests COMMAND fl-test --list-tests)
+# set_tests_properties(ListTests PROPERTIES PASS_REGULAR_EXPRESSION "[0-9]+ test case")
+# add_test(NAME ListTags COMMAND fl-test --list-tags)
+# set_tests_properties(ListTags PROPERTIES PASS_REGULAR_EXPRESSION "[0-9]+ tag")
+endif()
+
###INSTALL SECTION
if(NOT FL_INSTALL_BINDIR)
set(FL_INSTALL_BINDIR bin)
@@ -156,7 +236,7 @@ if(NOT FL_INSTALL_LIBDIR)
endif()
if(FL_BUILD_BINARY)
- install(TARGETS fl-bin
+ install(TARGETS fl-bin
RUNTIME DESTINATION ${FL_INSTALL_BINDIR}
LIBRARY DESTINATION ${FL_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${FL_INSTALL_LIBDIR}
@@ -164,7 +244,7 @@ if(FL_BUILD_BINARY)
endif()
if(FL_BUILD_SHARED)
- install(TARGETS fl-shared
+ install(TARGETS fl-shared
RUNTIME DESTINATION ${FL_INSTALL_BINDIR}
LIBRARY DESTINATION ${FL_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${FL_INSTALL_LIBDIR}
@@ -186,13 +266,26 @@ configure_file(${CMAKE_SOURCE_DIR}/fuzzylite.pc.in ${CMAKE_BINARY_DIR}/fuzzylite
install(FILES ${CMAKE_BINARY_DIR}/fuzzylite.pc DESTINATION ${FL_INSTALL_LIBDIR}/pkgconfig)
message("=====================================")
-message("fuzzylite v.${FL_VERSION}b${FL_DATE}\n")
+message("fuzzylite v6.0\n")
+message("FL_CPP98=${FL_CPP98}")
message("FL_USE_FLOAT=${FL_USE_FLOAT}")
-message("FL_CPP11=${FL_CPP11}")
message("FL_BACKTRACE=${FL_BACKTRACE}")
+message("FL_LIBS=${FL_LIBS}")
message("FL_INSTALL_BINDIR=${FL_INSTALL_BINDIR}")
message("FL_INSTALL_LIBDIR=${FL_INSTALL_LIBDIR}")
-message("Build=${CMAKE_BUILD_TYPE}")
+message("FL_BUILD_TESTS=${FL_BUILD_TESTS}")
+message("")
+message("CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}")
+message("CMAKE_CXX_COMPILER_ID=${CMAKE_CXX_COMPILER_ID}")
+message("CMAKE_CXX_COMPILER_VERSION=${CMAKE_CXX_COMPILER_VERSION}")
+message("CMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}")
+message("CMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}")
+message("COMPILE_DEFINITIONS:")
+get_directory_property(fl-definitions DIRECTORY ${CMAKE_SOURCE_DIR} COMPILE_DEFINITIONS )
+foreach(d ${fl-definitions})
+ message( STATUS "Defined: " ${d} )
+endforeach()
+
message("=====================================\n")
###UNINSTALL SECTION