Skip to content

Commit

Permalink
Re-write the Cmake config
Browse files Browse the repository at this point in the history
  • Loading branch information
kdm9 committed Dec 11, 2014
1 parent ba845bd commit 2f71a96
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 32 deletions.
72 changes: 43 additions & 29 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,26 +3,29 @@ PROJECT(libqes C)

# Append cmake-modules to module path
SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
"${CMAKE_CURRENT_SOURCE_DIR}/cmake-modules")
# git versioning
INCLUDE(GitSemVer)
GetGitSemVer(LIBQES_VERSION)
"${CMAKE_CURRENT_SOURCE_DIR}/cmake-modules")

# git describe as versioning
EXECUTE_PROCESS(COMMAND git describe
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
OUTPUT_VARIABLE LIBQES_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE)

#############################
## Setup CMAKE Environment ##
#############################

# Shortcut to enable dev compile options
OPTION(DEV "Enable developer warnings")
IF (DEV)
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fsanitize=leak -fsanitize=undefined")
SET(CMAKE_BUILD_TYPE Coverage)
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fsanitize=leak -fsanitize=undefined")
SET(CMAKE_BUILD_TYPE Coverage)
ENDIF()

IF (NOT CMAKE_BUILD_TYPE)
SET(CMAKE_BUILD_TYPE Release)
SET(CMAKE_BUILD_TYPE Release)
ENDIF()


MESSAGE(STATUS "${CMAKE_BUILD_TYPE} build of libqes version: ${LIBQES_VERSION}")

# Set output directories
Expand All @@ -33,7 +36,7 @@ SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
# Include coverage module IFF out build type is Coverage to avoid bailing out
# with unmet dependencies on Release builds, i.e. other peoples' computers
IF (CMAKE_BUILD_TYPE STREQUAL "Coverage")
INCLUDE(CodeCoverage)
INCLUDE(CodeCoverage)
ENDIF()

# Testing
Expand All @@ -47,12 +50,20 @@ INCLUDE(CPack)
## Find Packages and Headers ##
###############################

# Header/symbols
INCLUDE(CheckSymbolExists)
INCLUDE(CheckFunctionExists)
INCLUDE(CheckLibraryExists)
INCLUDE(CheckIncludeFiles)

CHECK_SYMBOL_EXISTS(getline stdio.h GETLINE_FOUND)
CHECK_SYMBOL_EXISTS(strndup string.h STRNDUP_FOUND)
CHECK_SYMBOL_EXISTS(memalign malloc.h MEMALIGN_FOUND)
CHECK_INCLUDE_FILES(malloc.h MALLOC_H_FOUND)
IF(MALLOC_H_FOUND)
CHECK_SYMBOL_EXISTS(memalign malloc.h MEMALIGN_FOUND)
ELSE()
SET(MEMALIGN_FOUND False)
ENDIF()
CHECK_SYMBOL_EXISTS(getpagesize unistd.h GETPAGESIZE_FOUND)

FIND_PACKAGE(ZLIB 1.2.1 REQUIRED)
Expand All @@ -61,30 +72,33 @@ FIND_PACKAGE(OpenMP)

# Ignore that we found openmp if we've been asked to disable it
IF (${NO_OPENMP})
SET(OPENMP_FOUND FALSE)
SET(OpenMP_C_FLAGS "")
SET(OPENMP_FOUND FALSE)
SET(OpenMP_C_FLAGS "")
ENDIF()

# Set dependency flags appropriately
SET(LIBQES_DEPENDS_LIBS
${LIBQES_DEPENDS_LIBS} ${ZLIB_LIBRARIES})
${LIBQES_DEPENDS_LIBS}
${ZLIB_LIBRARIES})
SET(LIBQES_DEPENDS_INCLUDE_DIRS
${LIBQES_DEPENDS_INCLUDE_DIRS} ${ZLIB_INCLUDE_DIRS})
${LIBQES_DEPENDS_INCLUDE_DIRS}
${ZLIB_INCLUDE_DIRS})
SET(LIBQES_DEPENDS_CFLAGS
${LIBQES_DEPENDS_CFLAGS} ${ZLIB_CFLAGS} ${OpenMP_C_FLAGS})
${LIBQES_DEPENDS_CFLAGS}
${ZLIB_CFLAGS}
${OpenMP_C_FLAGS})

##########################
## Set Compiler Options ##
##########################

# Set GCC-specific options
IF (CMAKE_COMPILER_IS_GNUCC)
SET(WEXTRA_FLAGS "${WEXTRA_FLAGS} -Woverride-init -Wnormalized=id -Wlogical-op")
EXECUTE_PROCESS(COMMAND ${CMAKE_C_COMPILER} -dumpversion
OUTPUT_VARIABLE GCC_VERSION)
IF (${GCC_VERSION} VERSION_GREATER 4.9 OR ${GCC_VERSION} VERSION_EQUAL 4.9)
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fdiagnostics-color=always")
ENDIF()
SET(WEXTRA_FLAGS "${WEXTRA_FLAGS} -Woverride-init -Wnormalized=id -Wlogical-op")
EXECUTE_PROCESS(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
IF (${GCC_VERSION} VERSION_GREATER 4.9 OR ${GCC_VERSION} VERSION_EQUAL 4.9)
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fdiagnostics-color=always")
ENDIF()
ENDIF()

# Set CFLAGS
Expand All @@ -100,21 +114,21 @@ SET(WEXTRA_FLAGS "${WEXTRA_FLAGS} -Wstrict-overflow=1 -Wextra -Warray-bounds -Wa

SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${LIBQES_DEPENDS_CFLAGS} -std=gnu99 ${WEXTRA_FLAGS}")
IF(UNIX)
SET(CMAKE_C_FLAGS_DEBUG "-ggdb -fstack-protector-all -march=native")
SET(CMAKE_C_FLAGS_DEBUG "-ggdb -fstack-protector-all -march=native")
ELSE()
SET(CMAKE_C_FLAGS_DEBUG "-g -march=native")
SET(CMAKE_C_FLAGS_DEBUG "-g -march=native")
ENDIF()
SET(CMAKE_C_FLAGS_RELEASE "-O4 -march=native")
# Coverage target set in CodeCoverage.cmake

# Set include dirs
INCLUDE_DIRECTORIES(
${CMAKE_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/src
${CMAKE_CURRENT_SOURCE_DIR}/test
${CMAKE_CURRENT_SOURCE_DIR}/test/tinytest
${LIBQES_DEPENDS_INCLUDE_DIRS}
)
${CMAKE_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/src
${CMAKE_CURRENT_SOURCE_DIR}/test
${CMAKE_CURRENT_SOURCE_DIR}/test/tinytest
${LIBQES_DEPENDS_INCLUDE_DIRS}
)

# Set link dirs
LINK_DIRECTORIES(${CMAKE_BINARY_DIR}/lib)
Expand Down
8 changes: 5 additions & 3 deletions src/qes_config.h.in
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,7 @@
*
* Description: Define various things from CMake.
*
* Version: 1.0
* Created: 15/08/14 12:09:59
* Revision: none
* License: GPLv3+
* Compiler: gcc, clang
*
Expand All @@ -16,7 +14,9 @@
* ============================================================================
*/

/* Pull LIBQES_VERSION in from CMAKE */
#ifndef QES_CONFIG_H
#define QES_CONFIG_H

#define LIBQES_VERSION "${LIBQES_VERSION}";
#cmakedefine GETLINE_FOUND
#cmakedefine STRNDUP_FOUND
Expand All @@ -25,6 +25,7 @@
#cmakedefine ZLIB_FOUND
#cmakedefine GZBUFFER_FOUND
#cmakedefine OPENMP_FOUND
#cmakedefine MALLOC_H_FOUND

/* Definitions to make changing fp type easy */
#ifdef ZLIB_FOUND
Expand Down Expand Up @@ -73,3 +74,4 @@
# define QES_ZREWIND frewind
#endif

#endif /* QES_CONFIG_H */

0 comments on commit 2f71a96

Please sign in to comment.