2 ## Author: Hank Anderson <hank@statease.com>
3 ## Description: Ported from OpenBLAS/Makefile.prebuild
4 ## This is triggered by system.cmake and runs before any of the code is built.
5 ## Creates config.h and Makefile.conf by first running the c_check perl script (which creates those files).
6 ## Next it runs f_check and appends some fortran information to the files.
7 ## Finally it runs getarch and getarch_2nd for even more environment information.
9 # CMake vars set by this file:
37 # CPUIDEMU = ../../cpuid/table.o
40 set(EXFLAGS "-DCPUIDEMU -DVENDOR=99")
43 if (DEFINED TARGET_CORE)
44 # set the C flags for just this file
45 set(GETARCH2_FLAGS "-DBUILD_KERNEL")
46 set(TARGET_MAKE "Makefile_kernel.conf")
47 set(TARGET_CONF "config_kernel.h")
49 set(TARGET_MAKE "Makefile.conf")
50 set(TARGET_CONF "config.h")
53 include("${PROJECT_SOURCE_DIR}/cmake/c_check.cmake")
56 include("${PROJECT_SOURCE_DIR}/cmake/f_check.cmake")
61 ${PROJECT_SOURCE_DIR}/getarch.c
66 list(APPEND GETARCH_SRC ${PROJECT_SOURCE_DIR}/cpuid.S)
70 #Use generic for MSVC now
71 set(GETARCH_FLAGS ${GETARCH_FLAGS} -DFORCE_GENERIC)
74 set(GETARCH_DIR "${PROJECT_BINARY_DIR}/getarch_build")
75 set(GETARCH_BIN "getarch${CMAKE_EXECUTABLE_SUFFIX}")
76 file(MAKE_DIRECTORY ${GETARCH_DIR})
77 try_compile(GETARCH_RESULT ${GETARCH_DIR}
78 SOURCES ${GETARCH_SRC}
79 COMPILE_DEFINITIONS ${EXFLAGS} ${GETARCH_FLAGS} -I${PROJECT_SOURCE_DIR}
80 OUTPUT_VARIABLE GETARCH_LOG
81 COPY_FILE ${PROJECT_BINARY_DIR}/${GETARCH_BIN}
84 message(STATUS "Running getarch")
86 # use the cmake binary w/ the -E param to run a shell command in a cross-platform way
87 execute_process(COMMAND ${PROJECT_BINARY_DIR}/${GETARCH_BIN} 0 OUTPUT_VARIABLE GETARCH_MAKE_OUT)
88 execute_process(COMMAND ${PROJECT_BINARY_DIR}/${GETARCH_BIN} 1 OUTPUT_VARIABLE GETARCH_CONF_OUT)
90 message(STATUS "GETARCH results:\n${GETARCH_MAKE_OUT}")
92 # append config data from getarch to the TARGET file and read in CMake vars
93 file(APPEND ${TARGET_CONF} ${GETARCH_CONF_OUT})
94 ParseGetArchVars(${GETARCH_MAKE_OUT})
96 set(GETARCH2_DIR "${PROJECT_BINARY_DIR}/getarch2_build")
97 set(GETARCH2_BIN "getarch_2nd${CMAKE_EXECUTABLE_SUFFIX}")
98 file(MAKE_DIRECTORY ${GETARCH2_DIR})
99 try_compile(GETARCH2_RESULT ${GETARCH2_DIR}
100 SOURCES ${PROJECT_SOURCE_DIR}/getarch_2nd.c
101 COMPILE_DEFINITIONS ${EXFLAGS} ${GETARCH_FLAGS} ${GETARCH2_FLAGS} -I${PROJECT_SOURCE_DIR}
102 OUTPUT_VARIABLE GETARCH2_LOG
103 COPY_FILE ${PROJECT_BINARY_DIR}/${GETARCH2_BIN}
106 # use the cmake binary w/ the -E param to run a shell command in a cross-platform way
107 execute_process(COMMAND ${PROJECT_BINARY_DIR}/${GETARCH2_BIN} 0 OUTPUT_VARIABLE GETARCH2_MAKE_OUT)
108 execute_process(COMMAND ${PROJECT_BINARY_DIR}/${GETARCH2_BIN} 1 OUTPUT_VARIABLE GETARCH2_CONF_OUT)
110 # append config data from getarch_2nd to the TARGET file and read in CMake vars
111 file(APPEND ${TARGET_CONF} ${GETARCH2_CONF_OUT})
112 ParseGetArchVars(${GETARCH2_MAKE_OUT})