From 11ccbe317ea7fae1deedc9747baf36b6ba67863d Mon Sep 17 00:00:00 2001 From: Jussi Pakkanen Date: Tue, 18 Dec 2012 14:50:53 +0200 Subject: Added precompiled header support and enabled it for UnityCore. (bzr r2998.2.1) --- CMakeLists.txt | 3 +- UnityCore/CMakeLists.txt | 1 + UnityCore/pch/unitycore_pch.hh | 33 ++++++++++++++++++ cmake/isclang.cc | 26 ++++++++++++++ cmake/pch.cmake | 78 ++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 140 insertions(+), 1 deletion(-) create mode 100644 UnityCore/pch/unitycore_pch.hh create mode 100644 cmake/isclang.cc create mode 100644 cmake/pch.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 2310f4770..ee0f09012 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,8 @@ project (unity) -cmake_minimum_required(VERSION 2.8) +cmake_minimum_required(VERSION 2.8.9) include (cmake/Documentation.cmake) +include (cmake/pch.cmake) # # Base bits diff --git a/UnityCore/CMakeLists.txt b/UnityCore/CMakeLists.txt index c000adf6c..b3d270677 100644 --- a/UnityCore/CMakeLists.txt +++ b/UnityCore/CMakeLists.txt @@ -131,6 +131,7 @@ set_target_properties(${CORE_LIB_NAME} PROPERTIES VERSION ${CORE_LIB_LT_CURRENT}.${CORE_LIB_LT_REV}.${CORE_LIB_LT_AGE} SOVERSION ${CORE_LIB_LT_CURRENT} INSTALL_RPATH "${PRIVATE_CORE_DEPS_LIBRARY_DIRS}") +add_pch(pch/unitycore_pch.hh ${CORE_LIB_NAME}) install (TARGETS ${CORE_LIB_NAME} RUNTIME DESTINATION bin diff --git a/UnityCore/pch/unitycore_pch.hh b/UnityCore/pch/unitycore_pch.hh new file mode 100644 index 000000000..87cb9ecc4 --- /dev/null +++ b/UnityCore/pch/unitycore_pch.hh @@ -0,0 +1,33 @@ +// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*- +/* + * Copyright (C) 2011 Canonical Ltd + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 3 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * Authored by: Jussi Pakkanen + */ + +/* + * These are the precompiled header includes for UnityCore. + * Only system header files can be listed here. + */ + +#include +#include +#include +#include + +#include +#include +#include +#include diff --git a/cmake/isclang.cc b/cmake/isclang.cc new file mode 100644 index 000000000..35cbb3295 --- /dev/null +++ b/cmake/isclang.cc @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2012 Canonical, Ltd. + * + * Authors: + * Jussi Pakkanen + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 3 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +int main(int argc, char **argv) { +#ifdef __clang__ + return 1; // This gets assigned to a CMake variable so "1" means "true". +#else + return 0; +#endif +} diff --git a/cmake/pch.cmake b/cmake/pch.cmake new file mode 100644 index 000000000..83e94255b --- /dev/null +++ b/cmake/pch.cmake @@ -0,0 +1,78 @@ +function(get_gcc_flags target_name) + # CMake does not provide an easy way to get all compiler switches, + # so this function is a fishing expedition to get them. + # http://public.kitware.com/Bug/view.php?id=1260 + set(compile_args ${CMAKE_CXX_FLAGS}) + string(TOUPPER "${CMAKE_BUILD_TYPE}" buildtype_name) + if(CMAKE_CXX_FLAGS_${buildtype_name}) + list(APPEND compile_args ${CMAKE_CXX_FLAGS_${buildtype_name}}) + endif() + get_directory_property(dir_inc INCLUDE_DIRECTORIES) + foreach(item ${dir_inc}) + LIST(APPEND compile_args "-I" ${item}) + endforeach() + get_directory_property(dir_defs COMPILE_DEFINITIONS) + foreach(item ${dir_defs}) + list(APPEND compile_args -D${item}) + endforeach() + get_directory_property(buildtype_defs COMPILE_DEFINITIONS_${buildtype_name}) + foreach(item ${buildtype_defs}) + list(APPEND compile_args -D${item}) + endforeach() + get_target_property(target_type ${target_name} TYPE) + if(${target_type} STREQUAL SHARED_LIBRARY) + list(APPEND compile_args ${CMAKE_CXX_COMPILE_OPTIONS_PIC}) + endif() + set(compile_args ${compile_args} PARENT_SCOPE) + #message(STATUS ${compile_args}) +endfunction() + +function(add_pch_linux header_filename target_name pch_suffix) + set(gch_target_name "${target_name}_pch") + get_filename_component(header_basename ${header_filename} NAME) + set(gch_filename "${CMAKE_CURRENT_BINARY_DIR}/${header_basename}.${pch_suffix}") + get_gcc_flags(${target_name}) # Sets compile_args in this scope. It's even better than Intercal's COME FROM! + #message(STATUS ${compile_args}) + list(APPEND compile_args -c ${CMAKE_CURRENT_SOURCE_DIR}/${header_filename} -o ${gch_filename}) + separate_arguments(compile_args) + add_custom_command(OUTPUT ${gch_filename} + COMMAND ${CMAKE_CXX_COMPILER} ${compile_args} + DEPENDS ${header_filename}) + add_custom_target(${gch_target_name} DEPENDS ${gch_filename}) + add_dependencies(${target_name} ${gch_target_name}) + + # Add the PCH to every source file's include list. + # This is the only way that is supported by both GCC and Clang. + set_property(TARGET ${target_name} APPEND_STRING PROPERTY COMPILE_FLAGS "-include ${header_basename}") + + # Each directory should have only one precompiled header + # for simplicity. If there are several, the current dir + # gets added to the search path several times. + # It should not be an issue, though. + include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR}) +endfunction() + +try_run(IS_CLANG did_build ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR}/cmake/isclang.cc) + +if(UNIX) + if(NOT APPLE) + option(use_pch "Use precompiled headers." TRUE) + endif() +endif() + +if(use_pch) + message(STATUS "Using precompiled headers.") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Winvalid-pch") + if(IS_CLANG) + set(precompiled_header_extension pch) + else() + set(precompiled_header_extension gch) + endif() + macro(add_pch _header_filename _target_name) + add_pch_linux(${_header_filename} ${_target_name} ${precompiled_header_extension}) + endmacro() +else() + message(STATUS "Not using precompiled headers.") + macro(add_pch _header_filename _target_name) + endmacro() +endif() -- cgit v1.2.3 From 4f696dc521bcf43eade6a12008d095d7e6399de9 Mon Sep 17 00:00:00 2001 From: Jussi Pakkanen Date: Tue, 18 Dec 2012 15:09:57 +0200 Subject: Added pch support to unity-shared. (bzr r2998.2.2) --- UnityCore/pch/unitycore_pch.hh | 2 +- unity-shared/CMakeLists.txt | 1 + unity-shared/pch/unity-shared_pch.hh | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 unity-shared/pch/unity-shared_pch.hh diff --git a/UnityCore/pch/unitycore_pch.hh b/UnityCore/pch/unitycore_pch.hh index 87cb9ecc4..43a04d774 100644 --- a/UnityCore/pch/unitycore_pch.hh +++ b/UnityCore/pch/unitycore_pch.hh @@ -1,6 +1,6 @@ // -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*- /* - * Copyright (C) 2011 Canonical Ltd + * Copyright (C) 2012 Canonical Ltd * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 as diff --git a/unity-shared/CMakeLists.txt b/unity-shared/CMakeLists.txt index 408a5fd0a..7f67753a1 100644 --- a/unity-shared/CMakeLists.txt +++ b/unity-shared/CMakeLists.txt @@ -83,6 +83,7 @@ endif() add_library (unity-shared STATIC ${UNITY_SHARED_SOURCES}) target_link_libraries (unity-shared ${LIBS}) add_dependencies (unity-shared unity-core-${UNITY_API_VERSION}) +add_pch(pch/unity-shared_pch.hh unity-shared) # # We also need to build compiz specific parts and standalone variants of those parts diff --git a/unity-shared/pch/unity-shared_pch.hh b/unity-shared/pch/unity-shared_pch.hh new file mode 100644 index 000000000..060dbba3c --- /dev/null +++ b/unity-shared/pch/unity-shared_pch.hh @@ -0,0 +1,33 @@ +// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*- +/* + * Copyright (C) 2012 Canonical Ltd + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 3 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * Authored by: Jussi Pakkanen + */ + +/* + * These are the precompiled header includes for UnityCore. + * Only system header files can be listed here. + */ + +#include +#include +#include +#include + +#include +#include +#include +#include -- cgit v1.2.3 From 75f1f4fe738862b7390704f97c742890911ebf0b Mon Sep 17 00:00:00 2001 From: Jussi Pakkanen Date: Tue, 18 Dec 2012 15:31:10 +0200 Subject: Enabled pch for Dash. (bzr r2998.2.3) --- dash/CMakeLists.txt | 3 +++ dash/pch/dash_pch.hh | 29 +++++++++++++++++++++++++++++ dash/previews/CMakeLists.txt | 1 + dash/previews/pch/previews_pch.hh | 28 ++++++++++++++++++++++++++++ 4 files changed, 61 insertions(+) create mode 100644 dash/pch/dash_pch.hh create mode 100644 dash/previews/pch/previews_pch.hh diff --git a/dash/CMakeLists.txt b/dash/CMakeLists.txt index 02554d4ea..38917839b 100644 --- a/dash/CMakeLists.txt +++ b/dash/CMakeLists.txt @@ -52,6 +52,9 @@ set (DASH_SOURCES add_library (dash-lib STATIC ${DASH_SOURCES}) add_dependencies (dash-lib unity-core-${UNITY_API_VERSION} unity-shared) target_link_libraries (dash-lib previews-lib) +add_pch(pch/dash_pch.hh dash-lib) + + # # Standalone variant # diff --git a/dash/pch/dash_pch.hh b/dash/pch/dash_pch.hh new file mode 100644 index 000000000..8e582fc74 --- /dev/null +++ b/dash/pch/dash_pch.hh @@ -0,0 +1,29 @@ +// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*- +/* + * Copyright (C) 2012 Canonical Ltd + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 3 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * Authored by: Jussi Pakkanen + */ + +/* + * These are the precompiled header includes for Dash. + * Only system header files can be listed here. + */ + +#include +#include +#include + +#include diff --git a/dash/previews/CMakeLists.txt b/dash/previews/CMakeLists.txt index ed58a95f9..731bebda0 100644 --- a/dash/previews/CMakeLists.txt +++ b/dash/previews/CMakeLists.txt @@ -41,6 +41,7 @@ set (PREVIEWS_SOURCES add_library (previews-lib STATIC ${PREVIEWS_SOURCES}) add_dependencies (previews-lib unity-core-${UNITY_API_VERSION} unity-shared) target_link_libraries (previews-lib unity-shared) +add_pch(pch/previews_pch.hh previews-lib) # # Application Standalone variant diff --git a/dash/previews/pch/previews_pch.hh b/dash/previews/pch/previews_pch.hh new file mode 100644 index 000000000..bdc5cae3f --- /dev/null +++ b/dash/previews/pch/previews_pch.hh @@ -0,0 +1,28 @@ +// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*- +/* + * Copyright (C) 2012 Canonical Ltd + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 3 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * Authored by: Jussi Pakkanen + */ + +/* + * These are the precompiled header includes for this module. + * Only system header files can be listed here. + */ + +#include +#include +#include +#include -- cgit v1.2.3 From 893ef9631bde944d54afa8559408dae4e3167c0d Mon Sep 17 00:00:00 2001 From: Jussi Pakkanen Date: Tue, 18 Dec 2012 15:40:10 +0200 Subject: Enabled pch for launcher-lib. (bzr r2998.2.4) --- launcher/CMakeLists.txt | 1 + launcher/pch/launcher_pch.hh | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 launcher/pch/launcher_pch.hh diff --git a/launcher/CMakeLists.txt b/launcher/CMakeLists.txt index cfb6bfb5e..b08719bc0 100644 --- a/launcher/CMakeLists.txt +++ b/launcher/CMakeLists.txt @@ -81,6 +81,7 @@ endif () add_library (launcher-lib STATIC ${LAUNCHER_SOURCES}) add_dependencies (launcher-lib unity-core-${UNITY_API_VERSION} unity-shared) target_link_libraries (launcher-lib unity-shared) +add_pch(pch/launcher_pch.hh launcher-lib) set (SWITCHER_SOURCES SwitcherController.cpp diff --git a/launcher/pch/launcher_pch.hh b/launcher/pch/launcher_pch.hh new file mode 100644 index 000000000..569390f4b --- /dev/null +++ b/launcher/pch/launcher_pch.hh @@ -0,0 +1,33 @@ +// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*- +/* + * Copyright (C) 2012 Canonical Ltd + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 3 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * Authored by: Jussi Pakkanen + */ + +/* + * These are the precompiled header includes for this module. + * Only system header files can be listed here. + */ + +#include + +#include +#include +#include +#include + +#include +#include -- cgit v1.2.3 From 6c5ddc0a8173fbb7e8ecb40c10ea2851fbea2524 Mon Sep 17 00:00:00 2001 From: Jussi Pakkanen Date: Tue, 18 Dec 2012 15:45:26 +0200 Subject: Enabled pch for hud-lib. (bzr r2998.2.5) --- hud/CMakeLists.txt | 1 + hud/pch/hud_pch.hh | 31 +++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 hud/pch/hud_pch.hh diff --git a/hud/CMakeLists.txt b/hud/CMakeLists.txt index f9af1e588..01dbb8df2 100644 --- a/hud/CMakeLists.txt +++ b/hud/CMakeLists.txt @@ -31,6 +31,7 @@ set (HUD_SOURCES add_library (hud-lib STATIC ${HUD_SOURCES}) add_dependencies (hud-lib unity-core-${UNITY_API_VERSION} unity-shared) +add_pch(pch/hud_pch.hh hud-lib) # # Standalone variant diff --git a/hud/pch/hud_pch.hh b/hud/pch/hud_pch.hh new file mode 100644 index 000000000..f4979cb97 --- /dev/null +++ b/hud/pch/hud_pch.hh @@ -0,0 +1,31 @@ +// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*- +/* + * Copyright (C) 2012 Canonical Ltd + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 3 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * Authored by: Jussi Pakkanen + */ + +/* + * These are the precompiled header includes for this module. + * Only system header files can be listed here. + */ + +#include +#include + +#include +#include +#include +#include -- cgit v1.2.3 From 80c22a25627e69eb049226320f221b4c05940d5f Mon Sep 17 00:00:00 2001 From: Jussi Pakkanen Date: Tue, 18 Dec 2012 15:49:18 +0200 Subject: Enabled pch for panel-lib. (bzr r2998.2.6) --- panel/CMakeLists.txt | 1 + panel/pch/panel_pch.hh | 31 +++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 panel/pch/panel_pch.hh diff --git a/panel/CMakeLists.txt b/panel/CMakeLists.txt index fd6faf0e2..21cdc044a 100644 --- a/panel/CMakeLists.txt +++ b/panel/CMakeLists.txt @@ -32,6 +32,7 @@ set (PANEL_SOURCES add_library (panel-lib STATIC ${PANEL_SOURCES}) add_dependencies (panel-lib unity-core-${UNITY_API_VERSION} unity-shared) +add_pch(pch/panel_pch.hh panel-lib) # # Standalone variant diff --git a/panel/pch/panel_pch.hh b/panel/pch/panel_pch.hh new file mode 100644 index 000000000..eb73fb367 --- /dev/null +++ b/panel/pch/panel_pch.hh @@ -0,0 +1,31 @@ +// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*- +/* + * Copyright (C) 2012 Canonical Ltd + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 3 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * Authored by: Jussi Pakkanen + */ + +/* + * These are the precompiled header includes for this module. + * Only system header files can be listed here. + */ + +#include +#include + +#include +#include +#include +#include -- cgit v1.2.3 From 6951e1de4c5d14648e10e2f380f05c44c8b31bdc Mon Sep 17 00:00:00 2001 From: Jussi Pakkanen Date: Tue, 18 Dec 2012 15:59:03 +0200 Subject: Enabled pch for shortcuts-lib. (bzr r2998.2.7) --- shortcuts/CMakeLists.txt | 1 + shortcuts/pch/shortcuts_pch.hh | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 shortcuts/pch/shortcuts_pch.hh diff --git a/shortcuts/CMakeLists.txt b/shortcuts/CMakeLists.txt index 164755f9a..2d39dee4f 100644 --- a/shortcuts/CMakeLists.txt +++ b/shortcuts/CMakeLists.txt @@ -35,6 +35,7 @@ set (SHORTCUTS_SOURCES add_library (shortcuts-lib STATIC ${SHORTCUTS_SOURCES}) add_dependencies (shortcuts-lib unity-core-${UNITY_API_VERSION} unity-shared) +add_pch(pch/shortcuts_pch.hh shortcuts-lib) # # Standalone variant diff --git a/shortcuts/pch/shortcuts_pch.hh b/shortcuts/pch/shortcuts_pch.hh new file mode 100644 index 000000000..67e6f1fd5 --- /dev/null +++ b/shortcuts/pch/shortcuts_pch.hh @@ -0,0 +1,32 @@ +// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*- +/* + * Copyright (C) 2012 Canonical Ltd + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 3 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * Authored by: Jussi Pakkanen + */ + +/* + * These are the precompiled header includes for this module. + * Only system header files can be listed here. + */ + +#include +#include +#include + +#include +#include +#include +#include -- cgit v1.2.3