Skip to content

Commit f1e72ef

Browse files
committed
cmake/CustomCompiler: optimize the code
especially, only create one temp file per language
1 parent 9effab9 commit f1e72ef

File tree

2 files changed

+31
-37
lines changed

2 files changed

+31
-37
lines changed

cmake/CustomCompiler.cmake

Lines changed: 24 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -24,24 +24,13 @@
2424
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
2525
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2626

27-
function(detect_custom_clang lang)
28-
set(C_EXT ".c")
29-
set(CXX_EXT ".cpp")
30-
31-
string(RANDOM RANDOM_SUFFIX)
32-
33-
set(COMPILER_TEST_FILE "${PROJECT_BINARY_DIR}/test_compiler_${RANDOM_SUFFIX}${${lang}_EXT}")
34-
35-
file(TOUCH "${COMPILER_TEST_FILE}")
36-
27+
function(detect_custom_clang_version lang file)
3728
# Parse “<compiler> -E -dM <source file>”
38-
execute_process(COMMAND "${CMAKE_${lang}_COMPILER}" ${CUSTOM_${lang}_COMPILER_SUBCOMMAND} -E -dM "${COMPILER_TEST_FILE}"
29+
execute_process(COMMAND "${CMAKE_${lang}_COMPILER}" ${CUSTOM_${lang}_COMPILER_SUBCOMMAND} -E -dM "${file}"
3930
OUTPUT_VARIABLE CUSTOM_${lang}_CLANG_OUTPUT
4031
RESULT_VARIABLE CUSTOM_${lang}_RETURN_CODE
4132
ERROR_QUIET)
4233

43-
file(REMOVE "${COMPILER_TEST_FILE}")
44-
4534
if (NOT CUSTOM_${lang}_RETURN_CODE) # Success
4635
if ("${CUSTOM_${lang}_CLANG_OUTPUT}" MATCHES "\#define __clang_version__ ")
4736
string(REGEX REPLACE ".*#define __clang_version__ \"([^ ]+)[\" ]*.*" "\\1" CUSTOM_${lang}_CLANG_VERSION "${CUSTOM_${lang}_CLANG_OUTPUT}")
@@ -50,7 +39,7 @@ function(detect_custom_clang lang)
5039
endif()
5140
endfunction()
5241

53-
function(detect_custom_gcc lang)
42+
function(detect_custom_gcc_version lang)
5443
# This will only set the GCC version if the custom compiler is detected
5544
# as GCC by CMake.
5645
if(CUSTOM_${lang}_COMPILER_ID AND CMAKE_${lang}_COMPILER_ID STREQUAL "GNU")
@@ -59,24 +48,13 @@ function(detect_custom_gcc lang)
5948
endif()
6049
endfunction()
6150

62-
function(detect_custom_compiler lang)
63-
set(C_EXT ".c")
64-
set(CXX_EXT ".cpp")
65-
66-
string(RANDOM RANDOM_SUFFIX)
67-
68-
set(COMPILER_TEST_FILE "${PROJECT_BINARY_DIR}/test_compiler_${RANDOM_SUFFIX}${${lang}_EXT}")
69-
70-
file(TOUCH "${COMPILER_TEST_FILE}")
71-
51+
function(detect_custom_compiler_id_version lang file)
7252
# Parse “<compiler> -E -dM <source file>”
73-
execute_process(COMMAND "${CMAKE_${lang}_COMPILER}" -E -dM "${COMPILER_TEST_FILE}"
53+
execute_process(COMMAND "${CMAKE_${lang}_COMPILER}" -E -dM "${file}"
7454
OUTPUT_VARIABLE CUSTOM_${lang}_COMPILER_OUTPUT
7555
RESULT_VARIABLE CUSTOM_${lang}_RETURN_CODE
7656
ERROR_QUIET)
7757

78-
file(REMOVE "${COMPILER_TEST_FILE}")
79-
8058
if (NOT CUSTOM_${lang}_RETURN_CODE) # Success
8159
# PNaCL
8260
if ("${CUSTOM_${lang}_COMPILER_OUTPUT}" MATCHES "\#define __pnacl__ 1")
@@ -161,11 +139,24 @@ function(detect_custom_compiler lang)
161139
endif()
162140
endfunction()
163141

164-
detect_custom_compiler("C")
165-
detect_custom_compiler("CXX")
142+
function(detect_custom_compiler lang)
143+
set(C_EXT ".c")
144+
set(CXX_EXT ".cpp")
166145

167-
detect_custom_clang("C")
168-
detect_custom_clang("CXX")
146+
string(RANDOM RANDOM_SUFFIX)
147+
set(COMPILER_TEST_FILE "${PROJECT_BINARY_DIR}/test_compiler_${RANDOM_SUFFIX}${${lang}_EXT}")
148+
file(TOUCH "${COMPILER_TEST_FILE}")
149+
150+
detect_custom_compiler_id_version("${lang}" "${COMPILER_TEST_FILE}")
151+
detect_custom_clang_version("${lang}" "${COMPILER_TEST_FILE}")
152+
detect_custom_gcc_version("${lang}")
169153

170-
detect_custom_gcc("C")
171-
detect_custom_gcc("CXX")
154+
file(REMOVE "${COMPILER_TEST_FILE}")
155+
156+
set(CUSTOM_${lang}_COMPILER_ID "${CUSTOM_${lang}_COMPILER_ID}" PARENT_SCOPE)
157+
set(CUSTOM_${lang}_COMPILER_VERSION "${CUSTOM_${lang}_COMPILER_VERSION}" PARENT_SCOPE)
158+
set(CUSTOM_${lang}_COMPILER_SUBCOMMAND "${CUSTOM_${lang}_COMPILER_SUBCOMMAND}" PARENT_SCOPE)
159+
160+
set(CUSTOM_${lang}_CLANG_VERSION "${CUSTOM_${lang}_CLANG_VERSION}" PARENT_SCOPE)
161+
set(CUSTOM_${lang}_GCC_VERSION "${CUSTOM_${lang}_GCC_VERSION}" PARENT_SCOPE)
162+
endfunction()

cmake/DaemonCompiler.cmake

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@
2727
include(CustomCompiler)
2828

2929
function(detect_daemon_compiler lang)
30+
detect_custom_compiler("${lang}")
31+
3032
set(C_NAME "C")
3133
set(CXX_NAME "C++")
3234

33-
get_filename_component(DAEMON_${LANG}_COMPILER_BASENAME "${CMAKE_${lang}_COMPILER}" NAME)
34-
3535
if (CUSTOM_${lang}_COMPILER_ID)
3636
set(DAEMON_${lang}_COMPILER_ID "${CUSTOM_${lang}_COMPILER_ID}")
3737
elseif (CMAKE_${lang}_COMPILER_ID)
@@ -60,6 +60,8 @@ function(detect_daemon_compiler lang)
6060
set(DAEMON_${lang}_COMPILER_VERSION "${DAEMON_${lang}_COMPILER_VERSION}/gcc-${CUSTOM_${lang}_GCC_VERSION}")
6161
endif()
6262

63+
get_filename_component(DAEMON_${LANG}_COMPILER_BASENAME "${CMAKE_${lang}_COMPILER}" NAME)
64+
6365
set(DAEMON_${lang}_COMPILER_STRING "${DAEMON_${lang}_COMPILER_ID} ${DAEMON_${lang}_COMPILER_VERSION} ${DAEMON_${lang}_COMPILER_BASENAME}")
6466
set(DAEMON_${lang}_COMPILER_STRING "${DAEMON_${lang}_COMPILER_STRING}" PARENT_SCOPE)
6567

@@ -68,8 +70,9 @@ endfunction()
6870

6971
message(STATUS "CMake generator: ${CMAKE_GENERATOR}")
7072

71-
detect_daemon_compiler("C")
72-
detect_daemon_compiler("CXX")
73+
foreach(lang C;CXX)
74+
detect_daemon_compiler("${lang}")
75+
endforeach()
7376

7477
if (CMAKE_COMPILER_IS_GNUCXX)
7578
set(DAEMON_COMPILER_IS_GNUCXX ON)

0 commit comments

Comments
 (0)