167 lines
5.5 KiB
CMake
167 lines
5.5 KiB
CMake
cmake_minimum_required (VERSION 2.8.8)
|
|
|
|
ENABLE_TESTING()
|
|
#CONFIGURE_FILE(${CMAKE_CURRENT_LIST_DIR}/CTestCustom.cmake ${CMAKE_CURRENT_BINARY_DIR}/CTestCustom.cmake)
|
|
|
|
# set CMake modules path
|
|
set (CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR})
|
|
|
|
set(filenameBITTest "${CMAKE_BINARY_DIR}/testBITs.cpp")
|
|
file(WRITE ${filenameBITTest} "
|
|
// http://stackoverflow.com/a/1505664
|
|
#include <iostream>
|
|
template<int> void DoMyOperationHelper();
|
|
template<> void DoMyOperationHelper<4>() {
|
|
std::cout << 32;
|
|
}
|
|
template<> void DoMyOperationHelper<8>() {
|
|
std::cout << 64;
|
|
}
|
|
// helper function just to hide clumsy syntax
|
|
inline void DoMyOperation() { DoMyOperationHelper<sizeof(size_t)>(); }
|
|
int main(){
|
|
// appropriate function will be selected at compile time
|
|
DoMyOperation();
|
|
return 0;
|
|
}" )
|
|
try_run(RUN_RESULT_VAR COMPILE_RESULT_VAR
|
|
${CMAKE_BINARY_DIR} ${filenameBITTest}
|
|
COMPILE_OUTPUT_VARIABLE comp
|
|
RUN_OUTPUT_VARIABLE run
|
|
)
|
|
if( "64" STREQUAL "${run}")
|
|
if (WIN32)
|
|
set(ARCH_DIR "win64")
|
|
else()
|
|
set(ARCH_DIR "unix64")
|
|
endif()
|
|
else()
|
|
if (WIN32)
|
|
set(ARCH_DIR "win32")
|
|
else()
|
|
set(ARCH_DIR "unix32")
|
|
endif()
|
|
endif()
|
|
|
|
message("Build architecture ${ARCH_DIR}")
|
|
|
|
# set default build type to release
|
|
# (None Debug Release RelWithDebInfo MinSizeRel)
|
|
#set (CMAKE_BUILD_TYPE "Debug")
|
|
|
|
# for debug version
|
|
#set (CMAKE_DEBUG_POSTFIX "d")
|
|
|
|
# detect svn version
|
|
# if existant
|
|
|
|
set(PATCH_NO_FILE "${CMAKE_CURRENT_LIST_DIR}/PATCH_NO")
|
|
|
|
|
|
|
|
|
|
file (STRINGS ${PATCH_NO_FILE} CURRENT_PATCH_NUMBER)
|
|
FILE(WRITE "${CMAKE_CURRENT_BINARY_DIR}/include/patchnumber.h"
|
|
"#ifndef DR_PATCH_NUMBER\n#define DR_PATCH_NUMBER ${CURRENT_PATCH_NUMBER}\n#endif\n" )
|
|
|
|
|
|
# save which project is currently being built.
|
|
# this allows for dynamic insertion of dependencies, if not met
|
|
# ALso two ways of building can be realized:
|
|
# - build ALL modules, thirdparty and projects
|
|
# - build particular module and it's dependencies, only
|
|
# (e.g. for windows installer)
|
|
if (DEFINED PROJECTNAME)
|
|
## FRESH_RUN is set per CMAKE run
|
|
# if it is not set, the state of included dependency projects
|
|
# is deleted
|
|
# this enforces the same route of dependencies being taking
|
|
# no matter if it is the first run or concecutive runs...
|
|
#
|
|
# together with standalone.cmake this ensures correct binding of
|
|
# dependencies outside from the current source tree. Also this
|
|
# ensures changes of outside source trees being committed to a
|
|
# new buildRTYFRESH_RUN)
|
|
if(NOT DEFINED FRESH_RUN)
|
|
set(FRESH_RUN 1)
|
|
execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory "${CMAKE_BINARY_DIR}/built/")
|
|
endif(NOT DEFINED FRESH_RUN)
|
|
|
|
# used for standalone.cmake, here save that this current project
|
|
# is already being built
|
|
set(BUILDFILE "${CMAKE_BINARY_DIR}/built/${PROJECTNAME}")
|
|
IF (NOT EXISTS ${BUILDFILE})
|
|
FILE (WRITE ${BUILDFILE} "this project has already been included for build\n")
|
|
ENDIF (NOT EXISTS ${BUILDFILE})
|
|
endif()
|
|
|
|
#enable std 2011 Standard for GNU
|
|
if(NOT MSVC)
|
|
execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion
|
|
OUTPUT_VARIABLE GCC_VERSION)
|
|
#if (CMAKE_COMPILER_IS_GNUCC AND (GCC_VERSION VERSION_LESS 4.7 OR GCC_VERSION VERSION_EQUAL 4.7))
|
|
#message(STATUS "Version <= 4.7")
|
|
if ( (NOT (${PROJECTNAME} STREQUAL "libjpeg")) )
|
|
add_definitions("-std=c++11")
|
|
#endif()
|
|
else()
|
|
remove_definitions("-std=c++11")
|
|
endif()
|
|
endif()
|
|
#-static -static-libgcc -static-libstdc++
|
|
if (MINGW)
|
|
# for windows, make sure the required STD libs is linked statically into the executable
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -static-libgcc -static-libstdc++")
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-libgcc -static-libstdc++")
|
|
set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "${CMAKE_SHARED_LIBRARY_LINK_C_FLAGS} -static-libgcc -static-libstdc++")
|
|
set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "${CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS} -static-libgcc -static-libstdc++")
|
|
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libgcc -static-libstdc++" )
|
|
SET(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libgcc -static-libstdc++" )
|
|
#SET_TARGET_PROPERTIES(${PROJECTNAME} PROPERTIES LINK_FLAGS "-static-libgcc -static-libstdc++")
|
|
endif()
|
|
|
|
# set warning levels
|
|
# http://stackoverflow.com/questions/2368811/how-to-set-warning-level-in-cmake
|
|
if(MSVC)
|
|
# Force to always compile with W4
|
|
if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
|
|
string(REGEX REPLACE "/W[0-4]" "/W3" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
|
else()
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
|
|
endif()
|
|
elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -pedantic")
|
|
endif()
|
|
|
|
if (WIN32)
|
|
get_filename_component(MINGW_BIN_DIR ${CMAKE_CXX_COMPILER} DIRECTORY)
|
|
|
|
if (${ARCH_DIR} STREQUAL "win64")
|
|
INSTALL(FILES
|
|
"${MINGW_BIN_DIR}/libgcc_s_seh-1.dll"
|
|
DESTINATION bin
|
|
COMPONENT main
|
|
)
|
|
endif()
|
|
INSTALL(FILES
|
|
"${MINGW_BIN_DIR}/libstdc++-6.dll"
|
|
"${MINGW_BIN_DIR}/libwinpthread-1.dll"
|
|
"${MINGW_BIN_DIR}/libgomp-1.dll"
|
|
DESTINATION bin
|
|
COMPONENT main
|
|
)
|
|
endif()
|
|
|
|
#message ( "${ARCH_DIR}, SVN revision: ${CURRENT_PATCH_NUMBER}")
|
|
|
|
# ...
|
|
#link_directories(${CMAKE_BINARY_DIR}/lib)
|
|
#link_directories(${CURRENT_LIST_DIR}/../lib)
|
|
|
|
include_directories(${CMAKE_BINARY_DIR}/include)
|
|
include_directories(${CMAKE_BINARY_DIR}/${PROJECT_NAME})
|
|
include_directories(${CMAKE_BINARY_DIR}/module_${PROJECT_NAME})
|
|
|
|
set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL "ON")
|
|
SET(CPACK_NSIS_CONTACT "info@dominik-ruess.de")
|