summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt54
1 files changed, 47 insertions, 7 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7efcbeeba..7101f366f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,6 +1,27 @@
PROJECT(binaryen CXX)
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.7)
+IF(NOT CMAKE_BUILD_TYPE)
+ MESSAGE(STATUS "No build type selected, default to Release")
+ SET(CMAKE_BUILD_TYPE "Release")
+ENDIF()
+STRING(TOUPPER "${CMAKE_BUILD_TYPE}" uppercase_CMAKE_BUILD_TYPE)
+IF(CMAKE_BUILD_TYPE AND
+ NOT uppercase_CMAKE_BUILD_TYPE MATCHES "^(DEBUG|RELEASE)$")
+ MESSAGE(FATAL_ERROR "Invalid value for CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}")
+ENDIF()
+
+# Support functionality.
+
+FUNCTION(ADD_COMPILE_FLAG value)
+ MESSAGE(STATUS "Building with ${value}")
+ FOREACH(variable CMAKE_C_FLAGS CMAKE_CXX_FLAGS)
+ SET(${variable} "${${variable}} ${value}" PARENT_SCOPE)
+ ENDFOREACH(variable)
+ENDFUNCTION()
+
+# Compiler setup.
+
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/src)
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin")
@@ -8,22 +29,41 @@ SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib")
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib")
IF(MSVC)
- SET(CMAKE_CXX_FLAGS "/arch:sse2 ${CMAKE_CXX_FLAGS}")
- SET(CMAKE_CXX_FLAGS "/O2 /Wall /WX- ${CMAKE_CXX_FLAGS}")
+ ADD_COMPILE_FLAG("/arch:sse2")
+ ADD_COMPILE_FLAG("/Wall")
+ ADD_COMPILE_FLAG("/WX-")
+ IF(uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG")
+ ADD_COMPILE_FLAG("/O0")
+ ELSE()
+ ADD_COMPILE_FLAG("/O2")
+ ENDIF()
ELSE()
- SET(CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}")
- SET(CMAKE_CXX_FLAGS "-msse2 -mfpmath=sse ${CMAKE_CXX_FLAGS}")
- SET(CMAKE_CXX_FLAGS "-O2 ${CMAKE_CXX_FLAGS}")
- SET(CMAKE_CXX_FLAGS "-Wall -Werror -Wextra -Wno-unused-parameter ${CMAKE_CXX_FLAGS}")
+ ADD_COMPILE_FLAG("-std=c++11")
+ ADD_COMPILE_FLAG("-msse2")
+ ADD_COMPILE_FLAG("-mfpmath=sse")
+ ADD_COMPILE_FLAG("-Wall")
+ ADD_COMPILE_FLAG("-Werror")
+ ADD_COMPILE_FLAG("-Wextra")
+ ADD_COMPILE_FLAG("-Wno-unused-parameter")
+ ADD_COMPILE_FLAG("-fno-omit-frame-pointer")
+ IF(uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG")
+ ADD_COMPILE_FLAG("-O0")
+ ADD_COMPILE_FLAG("-g3")
+ ELSE()
+ ADD_COMPILE_FLAG("-O2")
+ ADD_DEFINITIONS("-UNDEBUG") # Keep asserts.
+ ENDIF()
ENDIF()
# clang doesn't print colored diagnostics when invoked from Ninja
IF (UNIX AND
CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND
CMAKE_GENERATOR STREQUAL "Ninja")
- SET(CMAKE_CXX_FLAGS "-fcolor-diagnostics ${CMAKE_CXX_FLAGS}")
+ ADD_COMPILE_FLAG("-fcolor-diagnostics")
ENDIF()
+# Sources.
+
SET(support_SOURCES
src/support/colors.cpp
src/support/command-line.cpp