mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-27 01:32:18 +00:00
[CMake] : Add precompiled header support with FLATBUFFERS_ENABLE_PCH (#5827)
* [CMake] : Add precompiled header support with FLATBUFFERS_ENABLE_PCH FLATBUFFERS_ENABLE_PCH enable precompile headers support for 'flatbuffers' and 'flatc'. Default if OFF. You need to set it to ON to make it work. 'cmake -DFLATBUFFERS_ENABLE_PCH=ON ..' This will only work if CMake version is >= 3.16, because target_precompile_headers is used. If CMake doesn't have target_precompile_headers, then nothing will happen. This can speed up compilation time. Precompiled header file for 'flatbuffers' is 'pch.h' Precompiled header file for 'flatc' is 'flatc_pch.h' * Enable FLATBUFFERS_ENABLE_PCH for VC 2017 and VS2019 builds * [CMake]: Fix error in FLATBUFFERS_ENABLE_PCH description * Add a function add_pch_to_target to avoid copy and pasting the same code like add_fsanitize_to_target Move pch.h and flatc_pch.h from include/flatbuffers to include/flatbuffers/pch Make flatc_pch.h depends on pch.h since it extend it
This commit is contained in:
committed by
GitHub
parent
e9d4532401
commit
d9fecc3327
@@ -38,6 +38,11 @@ option(FLATBUFFERS_BUILD_CPP17
|
|||||||
option(FLATBUFFERS_BUILD_LEGACY
|
option(FLATBUFFERS_BUILD_LEGACY
|
||||||
"Run C++ code generator with '--cpp-std c++0x' switch."
|
"Run C++ code generator with '--cpp-std c++0x' switch."
|
||||||
OFF)
|
OFF)
|
||||||
|
option(FLATBUFFERS_ENABLE_PCH
|
||||||
|
"Enable precompile headers support for 'flatbuffers' and 'flatc'. \"
|
||||||
|
Only work if CMake supports 'target_precompile_headers'. \"
|
||||||
|
This can speed up compilation time."
|
||||||
|
OFF)
|
||||||
|
|
||||||
if(NOT FLATBUFFERS_BUILD_FLATC AND FLATBUFFERS_BUILD_TESTS)
|
if(NOT FLATBUFFERS_BUILD_FLATC AND FLATBUFFERS_BUILD_TESTS)
|
||||||
message(WARNING
|
message(WARNING
|
||||||
@@ -302,6 +307,15 @@ function(add_fsanitize_to_target _target _sanitizer)
|
|||||||
endif()
|
endif()
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
|
function(add_pch_to_target _target _pch_header)
|
||||||
|
if(COMMAND target_precompile_headers)
|
||||||
|
target_precompile_headers(${_target} PRIVATE ${_pch_header})
|
||||||
|
if(NOT MSVC)
|
||||||
|
set_source_files_properties(src/util.cpp PROPERTIES SKIP_PRECOMPILE_HEADERS ON)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
if(BIICODE)
|
if(BIICODE)
|
||||||
include(biicode/cmake/biicode.cmake)
|
include(biicode/cmake/biicode.cmake)
|
||||||
return()
|
return()
|
||||||
@@ -316,10 +330,16 @@ if(FLATBUFFERS_BUILD_FLATLIB)
|
|||||||
target_include_directories(flatbuffers INTERFACE
|
target_include_directories(flatbuffers INTERFACE
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>)
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>)
|
||||||
target_compile_options(flatbuffers PRIVATE "${FLATBUFFERS_PRIVATE_CXX_FLAGS}")
|
target_compile_options(flatbuffers PRIVATE "${FLATBUFFERS_PRIVATE_CXX_FLAGS}")
|
||||||
|
if(FLATBUFFERS_ENABLE_PCH)
|
||||||
|
add_pch_to_target(flatbuffers include/flatbuffers/pch/pch.h)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(FLATBUFFERS_BUILD_FLATC)
|
if(FLATBUFFERS_BUILD_FLATC)
|
||||||
add_executable(flatc ${FlatBuffers_Compiler_SRCS})
|
add_executable(flatc ${FlatBuffers_Compiler_SRCS})
|
||||||
|
if(FLATBUFFERS_ENABLE_PCH)
|
||||||
|
add_pch_to_target(flatc include/flatbuffers/pch/flatc_pch.h)
|
||||||
|
endif()
|
||||||
target_compile_options(flatc PRIVATE "${FLATBUFFERS_PRIVATE_CXX_FLAGS}")
|
target_compile_options(flatc PRIVATE "${FLATBUFFERS_PRIVATE_CXX_FLAGS}")
|
||||||
if(FLATBUFFERS_CODE_SANITIZE AND NOT WIN32)
|
if(FLATBUFFERS_CODE_SANITIZE AND NOT WIN32)
|
||||||
add_fsanitize_to_target(flatc ${FLATBUFFERS_CODE_SANITIZE})
|
add_fsanitize_to_target(flatc ${FLATBUFFERS_CODE_SANITIZE})
|
||||||
@@ -352,6 +372,9 @@ if(FLATBUFFERS_BUILD_SHAREDLIB)
|
|||||||
set_target_properties(flatbuffers_shared PROPERTIES OUTPUT_NAME flatbuffers
|
set_target_properties(flatbuffers_shared PROPERTIES OUTPUT_NAME flatbuffers
|
||||||
SOVERSION "${FlatBuffers_Library_SONAME_MAJOR}"
|
SOVERSION "${FlatBuffers_Library_SONAME_MAJOR}"
|
||||||
VERSION "${FlatBuffers_Library_SONAME_FULL}")
|
VERSION "${FlatBuffers_Library_SONAME_FULL}")
|
||||||
|
if(FLATBUFFERS_ENABLE_PCH)
|
||||||
|
add_pch_to_target(flatbuffers_shared include/flatbuffers/pch/pch.h)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Global list of generated files.
|
# Global list of generated files.
|
||||||
|
|||||||
@@ -28,10 +28,12 @@ environment:
|
|||||||
|
|
||||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
||||||
CMAKE_VS_VERSION: "15 2017"
|
CMAKE_VS_VERSION: "15 2017"
|
||||||
|
CMAKE_OPTIONS: "-DFLATBUFFERS_ENABLE_PCH=1"
|
||||||
MONSTER_EXTRA: ""
|
MONSTER_EXTRA: ""
|
||||||
|
|
||||||
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
|
||||||
CMAKE_VS_VERSION: "16 2019"
|
CMAKE_VS_VERSION: "16 2019"
|
||||||
|
CMAKE_OPTIONS: "-DFLATBUFFERS_ENABLE_PCH=1"
|
||||||
MONSTER_EXTRA: ""
|
MONSTER_EXTRA: ""
|
||||||
|
|
||||||
platform:
|
platform:
|
||||||
|
|||||||
39
include/flatbuffers/pch/flatc_pch.h
Normal file
39
include/flatbuffers/pch/flatc_pch.h
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2017 Google Inc. All rights reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef FLATBUFFERS_FLATC_PCH_H_
|
||||||
|
#define FLATBUFFERS_FLATC_PCH_H_
|
||||||
|
|
||||||
|
// stl
|
||||||
|
#include <cmath>
|
||||||
|
#include <sstream>
|
||||||
|
#include <cassert>
|
||||||
|
#include <unordered_set>
|
||||||
|
#include <unordered_map>
|
||||||
|
#include <iostream>
|
||||||
|
#include <functional>
|
||||||
|
#include <set>
|
||||||
|
#include <iterator>
|
||||||
|
#include <tuple>
|
||||||
|
|
||||||
|
// flatbuffers
|
||||||
|
#include "flatbuffers/pch/pch.h"
|
||||||
|
#include "flatbuffers/code_generators.h"
|
||||||
|
#include "flatbuffers/flatbuffers.h"
|
||||||
|
#include "flatbuffers/flexbuffers.h"
|
||||||
|
#include "flatbuffers/idl.h"
|
||||||
|
|
||||||
|
#endif // FLATBUFFERS_FLATC_PCH_H_
|
||||||
38
include/flatbuffers/pch/pch.h
Normal file
38
include/flatbuffers/pch/pch.h
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2017 Google Inc. All rights reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef FLATBUFFERS_PCH_H_
|
||||||
|
#define FLATBUFFERS_PCH_H_
|
||||||
|
|
||||||
|
// stl
|
||||||
|
#include <cstdint>
|
||||||
|
#include <cstring>
|
||||||
|
#include <algorithm>
|
||||||
|
#include <list>
|
||||||
|
#include <string>
|
||||||
|
#include <utility>
|
||||||
|
#include <iomanip>
|
||||||
|
#include <map>
|
||||||
|
#include <memory>
|
||||||
|
#include <limits>
|
||||||
|
#include <stack>
|
||||||
|
#include <vector>
|
||||||
|
#include <type_traits>
|
||||||
|
|
||||||
|
// flatbuffers
|
||||||
|
#include "flatbuffers/util.h"
|
||||||
|
|
||||||
|
#endif // FLATBUFFERS_PCH_H_
|
||||||
Reference in New Issue
Block a user