From 1bedd3bd7f97ddd4904ab5280fcd947248b63ba9 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Mon, 22 Aug 2016 09:12:46 -0400 Subject: [PATCH] CMakeLists: Clean up Moves functions out of the main CMakeLists file into module files that can just be included whenever necessary. This also uses the CMake provided variables for enforcing compiler requirements. --- CMakeLists.txt | 42 +++++------------------- CMakeModules/CreateDirectoryGroups.cmake | 15 +++++++++ CMakeModules/DetectArchitecture.cmake | 16 +++++++++ src/CMakeLists.txt | 1 + tests/CMakeLists.txt | 1 + 5 files changed, 42 insertions(+), 33 deletions(-) create mode 100644 CMakeModules/CreateDirectoryGroups.cmake create mode 100644 CMakeModules/DetectArchitecture.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 9028a062..51057f81 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,9 +5,16 @@ project(dynarmic) option(DYNARMIC_USE_SYSTEM_BOOST "Use the system boost libraries" ON) option(DYNARMIC_USE_LLVM "Support disassembly of jitted x86_64 code using LLVM" OFF) +# Set hard requirements for C++ +set(CMAKE_CXX_STANDARD 14) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) + +# Signify where the module directories are +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/CMakeModules) + # Compiler flags if (NOT MSVC) - add_compile_options(--std=c++14) add_compile_options(-Wall -Werror -Wextra -pedantic -pedantic-errors -Wfatal-errors -Wno-unused-parameter -Wno-missing-braces) if (ARCHITECTURE_x86_64) @@ -17,39 +24,8 @@ else() add_compile_options(/W3 /MP /Zi /Zo /EHsc /WX) endif() -# This function should be passed a list of all files in a target. It will automatically generate -# file groups following the directory hierarchy, so that the layout of the files in IDEs matches the -# one in the filesystem. -function(create_directory_groups) - # Place any files that aren't in the source list in a separate group so that they don't get in - # the way. - source_group("Other Files" REGULAR_EXPRESSION ".") - - foreach(file_name ${ARGV}) - get_filename_component(dir_name "${file_name}" PATH) - # Group names use '\' as a separator even though the entire rest of CMake uses '/'... - string(REPLACE "/" "\\" group_name "${dir_name}") - source_group("${group_name}" FILES "${file_name}") - endforeach() -endfunction() - # Arch detection -include(CheckSymbolExists) -function(detect_architecture symbol arch) - if (NOT DEFINED ARCHITECTURE) - set(CMAKE_REQUIRED_QUIET 1) - check_symbol_exists("${symbol}" "" ARCHITECTURE_${arch}) - unset(CMAKE_REQUIRED_QUIET) - - # The output variable needs to be unique across invocations otherwise - # CMake's crazy scope rules will keep it defined - if (ARCHITECTURE_${arch}) - set(ARCHITECTURE "${arch}" PARENT_SCOPE) - set(ARCHITECTURE_${arch} 1 PARENT_SCOPE) - add_definitions(-DARCHITECTURE_${arch}=1) - endif() - endif() -endfunction() +include(DetectArchitecture) if (MSVC) detect_architecture("_M_AMD64" x86_64) detect_architecture("_M_IX86" x86) diff --git a/CMakeModules/CreateDirectoryGroups.cmake b/CMakeModules/CreateDirectoryGroups.cmake new file mode 100644 index 00000000..e806421f --- /dev/null +++ b/CMakeModules/CreateDirectoryGroups.cmake @@ -0,0 +1,15 @@ +# This function should be passed a list of all files in a target. It will automatically generate +# file groups following the directory hierarchy, so that the layout of the files in IDEs matches the +# one in the filesystem. +function(create_directory_groups) + # Place any files that aren't in the source list in a separate group so that they don't get in + # the way. + source_group("Other Files" REGULAR_EXPRESSION ".") + + foreach(file_name ${ARGV}) + get_filename_component(dir_name "${file_name}" PATH) + # Group names use '\' as a separator even though the entire rest of CMake uses '/'... + string(REPLACE "/" "\\" group_name "${dir_name}") + source_group("${group_name}" FILES "${file_name}") + endforeach() +endfunction() diff --git a/CMakeModules/DetectArchitecture.cmake b/CMakeModules/DetectArchitecture.cmake new file mode 100644 index 00000000..e984c6b8 --- /dev/null +++ b/CMakeModules/DetectArchitecture.cmake @@ -0,0 +1,16 @@ +include(CheckSymbolExists) +function(detect_architecture symbol arch) + if (NOT DEFINED ARCHITECTURE) + set(CMAKE_REQUIRED_QUIET 1) + check_symbol_exists("${symbol}" "" ARCHITECTURE_${arch}) + unset(CMAKE_REQUIRED_QUIET) + + # The output variable needs to be unique across invocations otherwise + # CMake's crazy scope rules will keep it defined + if (ARCHITECTURE_${arch}) + set(ARCHITECTURE "${arch}" PARENT_SCOPE) + set(ARCHITECTURE_${arch} 1 PARENT_SCOPE) + add_definitions(-DARCHITECTURE_${arch}=1) + endif() + endif() +endfunction() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index f8a40f57..886c332e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,4 +1,5 @@ include_directories(.) +include(CreateDirectoryGroups) set(SRCS backend_x64/block_of_code.cpp diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 1af8a446..e2f810e3 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,4 +1,5 @@ include_directories(. ../src) +include(CreateDirectoryGroups) set(SRCS arm/fuzz_arm.cpp