Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
turf/cmake/Macros.cmake
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
125 lines (118 sloc)
5.03 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| macro(GetFilesWithSourceGroups GLOB_TYPE VARIABLE RELATIVE_TO) | |
| file(${GLOB_TYPE} files ${ARGN}) | |
| foreach(file ${files}) | |
| file(RELATIVE_PATH relFile ${RELATIVE_TO} ${file}) | |
| get_filename_component(folder ${relFile} PATH) | |
| string(REPLACE / \\ folder "${folder}") | |
| source_group("${folder}" FILES ${file}) | |
| endforeach() | |
| list(APPEND ${VARIABLE} ${files}) | |
| endmacro() | |
| function(SimpleCompileCheck VARIABLE DESCRIPTION SOURCE) | |
| if(MSVC) | |
| # Force warning as error to detect "noexcept" warning when exceptions are disabled: | |
| set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /WX") | |
| endif() | |
| string(MD5 hashInputs "${CMAKE_CXX_FLAGS}${SOURCE}") | |
| if(NOT DEFINED ${VARIABLE} OR NOT "${${VARIABLE}_HASH}" STREQUAL "${hashInputs}") | |
| file(WRITE ${CMAKE_BINARY_DIR}/CMakeTmp/CompileCheck.cpp "${SOURCE}\nint main() { return 0; };") | |
| try_compile(${VARIABLE} ${CMAKE_BINARY_DIR}/CMakeTmp ${CMAKE_BINARY_DIR}/CMakeTmp/CompileCheck.cpp OUTPUT_VARIABLE output) | |
| if(${VARIABLE}) | |
| message("${DESCRIPTION} -- yes") | |
| else() | |
| message("${DESCRIPTION} -- no") | |
| endif() | |
| set(${VARIABLE} ${${VARIABLE}} CACHE INTERNAL "${DESCRIPTION}") | |
| set("${VARIABLE}_HASH" "${hashInputs}" CACHE INTERNAL "${DESCRIPTION} (hashed inputs)") | |
| endif() | |
| endfunction() | |
| macro(GetAbsoluteRelativeTo VARIABLE ROOT RELATIVE) | |
| if(IS_ABSOLUTE "${RELATIVE}") | |
| set(${VARIABLE} "${RELATIVE}") | |
| else() | |
| get_filename_component(${VARIABLE} "${ROOT}/${RELATIVE}" ABSOLUTE) | |
| endif() | |
| endmacro() | |
| macro(ConfigureFileIfChanged SRC_FILE DST_FILE SOURCE_FILES_VAR) | |
| get_filename_component(fullSrcPath "${SRC_FILE}" ABSOLUTE) | |
| list(APPEND ${SOURCE_FILES_VAR} ${fullSrcPath} ${DST_FILE}) | |
| source_group("config" FILES ${fullSrcPath} ${DST_FILE}) | |
| configure_file("${fullSrcPath}" "${DST_FILE}.compare") | |
| file(READ "${DST_FILE}.compare" newContents) | |
| file(TO_NATIVE_PATH "${fullSrcPath}" fullScrPathNative) | |
| file(TO_NATIVE_PATH "${CMAKE_CURRENT_LIST_FILE}" currentListFileNative) | |
| set(newContents | |
| "//-------------------------------------------- | |
| // This file was autogenerated from: ${fullScrPathNative} | |
| // while running: ${currentListFileNative} | |
| // Do not edit! | |
| //-------------------------------------------- | |
| ${newContents}") | |
| file(REMOVE "${DST_FILE}.compare") | |
| if(EXISTS "${DST_FILE}") | |
| file(READ "${DST_FILE}" oldContents) | |
| if (NOT oldContents STREQUAL newContents) | |
| file(WRITE "${DST_FILE}" "${newContents}") | |
| endif() | |
| else() | |
| file(WRITE "${DST_FILE}" "${newContents}") | |
| endif() | |
| endmacro() | |
| macro(WriteFileIfDifferent CONTENTS DST_FILE SOURCE_FILES_VAR) | |
| list(APPEND ${SOURCE_FILES_VAR} ${DST_FILE}) | |
| source_group("config" FILES ${SRC_FILE} ${DST_FILE}) | |
| if(EXISTS "${DST_FILE}") | |
| file(READ "${DST_FILE}" oldContents) | |
| if(NOT oldContents STREQUAL CONTENTS) | |
| file(WRITE "${DST_FILE}" "${CONTENTS}") | |
| endif() | |
| else() | |
| file(WRITE "${DST_FILE}" "${CONTENTS}") | |
| endif() | |
| endmacro() | |
| macro(ApplyTurfBuildSettings) | |
| if(MSVC) | |
| set(CMAKE_EXE_LINKER_FLAGS "/ignore:4221") | |
| set(CMAKE_STATIC_LINKER_FLAGS "/ignore:4221") | |
| set(CMAKE_SHARED_LINKER_FLAGS "/ignore:4221") | |
| if(TURF_WITH_EXCEPTIONS) | |
| set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc") | |
| else() | |
| add_definitions(-D_HAS_EXCEPTIONS=0) | |
| endif() | |
| if(NOT TURF_WITH_SECURE_COMPILER) | |
| add_definitions(-D_CRT_SECURE_NO_WARNINGS=1) | |
| set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /GS-") | |
| set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /GS-") | |
| endif() | |
| else() | |
| set(CMAKE_C_FLAGS "-g -std=gnu99 -fno-stack-protector") | |
| if(DEFINED TURF_ENABLE_CPP11 AND NOT "${TURF_ENABLE_CPP11}") | |
| set(CMAKE_CXX_FLAGS "-g -fno-stack-protector") | |
| else() | |
| if(MINGW) | |
| set(CMAKE_CXX_FLAGS "-g -std=gnu++11 -fno-stack-protector") | |
| else() | |
| set(CMAKE_CXX_FLAGS "-g -std=c++11 -fno-stack-protector") | |
| endif() | |
| endif() | |
| if(NOT TURF_WITH_EXCEPTIONS) | |
| set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions") | |
| endif() | |
| if(NOT CYGWIN) # Don't specify -pthread on Cygwin | |
| set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread") | |
| endif() | |
| endif() | |
| # Define custom build configs | |
| set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DTURF_WITH_ASSERTS=1") | |
| set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DTURF_WITH_ASSERTS=1") | |
| set(CMAKE_C_FLAGS_RELWITHASSERTS "${CMAKE_C_FLAGS_RELWITHDEBINFO} -DTURF_WITH_ASSERTS=1") | |
| set(CMAKE_CXX_FLAGS_RELWITHASSERTS "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -DTURF_WITH_ASSERTS=1") | |
| set(CMAKE_EXE_LINKER_FLAGS_RELWITHASSERTS "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO}") | |
| endmacro() | |
| macro(AddDLLCopyStep TARGET_NAME) | |
| foreach(DLL ${ARGN}) | |
| add_custom_command(TARGET ${TARGET_NAME} POST_BUILD COMMAND | |
| ${CMAKE_COMMAND} -E copy_if_different ${DLL} $<TARGET_FILE_DIR:${TARGET_NAME}>) | |
| endforeach() | |
| endmacro() |