| # Copyright 2017 The Effcee Authors. |
| # |
| # 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. |
| |
| # Utility functions |
| |
| function(effcee_default_c_compile_options TARGET) |
| if (NOT "${MSVC}") |
| target_compile_options(${TARGET} PRIVATE -Wall -Werror) |
| if (ENABLE_CODE_COVERAGE) |
| # The --coverage option is a synonym for -fprofile-arcs -ftest-coverage |
| # when compiling. |
| target_compile_options(${TARGET} PRIVATE -g -O0 --coverage) |
| # The --coverage option is a synonym for -lgcov when linking for gcc. |
| # For clang, it links in a different library, libclang_rt.profile, which |
| # requires clang to be built with compiler-rt. |
| target_link_libraries(${TARGET} PRIVATE --coverage) |
| endif() |
| if (NOT EFFCEE_ENABLE_SHARED_CRT) |
| if (WIN32) |
| # For MinGW cross compile, statically link to the libgcc runtime. |
| # But it still depends on MSVCRT.dll. |
| set_target_properties(${TARGET} PROPERTIES |
| LINK_FLAGS "-static -static-libgcc") |
| endif(WIN32) |
| endif(NOT EFFCEE_ENABLE_SHARED_CRT) |
| if (UNIX AND NOT MINGW) |
| target_link_libraries(${TARGET} PUBLIC -pthread) |
| endif() |
| else() |
| # disable warning C4800: 'int' : forcing value to bool 'true' or 'false' |
| # (performance warning) |
| target_compile_options(${TARGET} PRIVATE /wd4800) |
| endif() |
| endfunction(effcee_default_c_compile_options) |
| |
| function(effcee_default_compile_options TARGET) |
| effcee_default_c_compile_options(${TARGET}) |
| if (NOT "${MSVC}") |
| # RE2's public header requires C++11. So publicly required C++11 |
| target_compile_options(${TARGET} PUBLIC -std=c++11) |
| if (NOT EFFCEE_ENABLE_SHARED_CRT) |
| if (WIN32) |
| # For MinGW cross compile, statically link to the C++ runtime. |
| # But it still depends on MSVCRT.dll. |
| set_target_properties(${TARGET} PROPERTIES |
| LINK_FLAGS "-static -static-libgcc -static-libstdc++") |
| endif(WIN32) |
| endif(NOT EFFCEE_ENABLE_SHARED_CRT) |
| endif() |
| endfunction(effcee_default_compile_options) |