You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

prebuild.cmake 16 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490
  1. ##
  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. ## Then it runs getarch and getarch_2nd for even more environment information.
  8. ## Finally it builds gen_config_h for use at build time to generate config.h.
  9. # CMake vars set by this file:
  10. # CORE
  11. # LIBCORE
  12. # NUM_CORES
  13. # HAVE_MMX
  14. # HAVE_SSE
  15. # HAVE_SSE2
  16. # HAVE_SSE3
  17. # MAKE
  18. # SGEMM_UNROLL_M
  19. # SGEMM_UNROLL_N
  20. # DGEMM_UNROLL_M
  21. # DGEMM_UNROLL_M
  22. # QGEMM_UNROLL_N
  23. # QGEMM_UNROLL_N
  24. # CGEMM_UNROLL_M
  25. # CGEMM_UNROLL_M
  26. # ZGEMM_UNROLL_N
  27. # ZGEMM_UNROLL_N
  28. # XGEMM_UNROLL_M
  29. # XGEMM_UNROLL_N
  30. # CGEMM3M_UNROLL_M
  31. # CGEMM3M_UNROLL_N
  32. # ZGEMM3M_UNROLL_M
  33. # ZGEMM3M_UNROLL_M
  34. # XGEMM3M_UNROLL_N
  35. # XGEMM3M_UNROLL_N
  36. # CPUIDEMU = ../../cpuid/table.o
  37. if (DEFINED CPUIDEMU)
  38. set(EXFLAGS "-DCPUIDEMU -DVENDOR=99")
  39. endif ()
  40. if (BUILD_KERNEL)
  41. # set the C flags for just this file
  42. set(GETARCH2_FLAGS "-DBUILD_KERNEL")
  43. set(TARGET_CONF "config_kernel.h")
  44. set(TARGET_CONF_DIR ${PROJECT_BINARY_DIR}/kernel_config/${TARGET_CORE})
  45. else()
  46. set(TARGET_CONF "config.h")
  47. set(TARGET_CONF_DIR ${PROJECT_BINARY_DIR})
  48. endif ()
  49. set(TARGET_CONF_TEMP "${PROJECT_BINARY_DIR}/${TARGET_CONF}.tmp")
  50. # c_check
  51. set(FU "")
  52. if (APPLE OR (MSVC AND NOT ${CMAKE_C_COMPILER_ID} MATCHES "Clang"))
  53. set(FU "_")
  54. endif()
  55. if(MINGW AND NOT MINGW64)
  56. set(FU "_")
  57. endif()
  58. set(COMPILER_ID ${CMAKE_C_COMPILER_ID})
  59. if (${COMPILER_ID} STREQUAL "GNU")
  60. set(COMPILER_ID "GCC")
  61. endif ()
  62. string(TOUPPER ${ARCH} UC_ARCH)
  63. file(WRITE ${TARGET_CONF_TEMP}
  64. "#define OS_${HOST_OS}\t1\n"
  65. "#define ARCH_${UC_ARCH}\t1\n"
  66. "#define C_${COMPILER_ID}\t1\n"
  67. "#define __${BINARY}BIT__\t1\n"
  68. "#define FUNDERSCORE\t${FU}\n")
  69. if (${HOST_OS} STREQUAL "WINDOWSSTORE")
  70. file(APPEND ${TARGET_CONF_TEMP}
  71. "#define OS_WINNT\t1\n")
  72. endif ()
  73. # f_check
  74. if (NOT NOFORTRAN)
  75. include("${PROJECT_SOURCE_DIR}/cmake/f_check.cmake")
  76. else ()
  77. file(APPEND ${TARGET_CONF_TEMP}
  78. "#define BUNDERSCORE _\n"
  79. "#define NEEDBUNDERSCORE 1\n")
  80. set(BU "_")
  81. endif ()
  82. # Cannot run getarch on target if we are cross-compiling
  83. if (DEFINED CORE AND CMAKE_CROSSCOMPILING AND NOT (${HOST_OS} STREQUAL "WINDOWSSTORE"))
  84. # Write to config as getarch would
  85. if (DEFINED TARGET_CORE)
  86. set(TCORE ${TARGET_CORE})
  87. else()
  88. set(TCORE ${CORE})
  89. endif()
  90. # TODO: Set up defines that getarch sets up based on every other target
  91. # Perhaps this should be inside a different file as it grows larger
  92. file(APPEND ${TARGET_CONF_TEMP}
  93. "#define ${TCORE}\n"
  94. "#define CORE_${TCORE}\n"
  95. "#define CHAR_CORENAME \"${TCORE}\"\n")
  96. if ("${TCORE}" STREQUAL "CORE2")
  97. file(APPEND ${TARGET_CONF_TEMP}
  98. "#define L1_DATA_SIZE\t32768\n"
  99. "#define L1_DATA_LINESIZE\t64\n"
  100. "#define L2_SIZE\t1048576\n"
  101. "#define L2_LINESIZE\t64\n"
  102. "#define DTB_DEFAULT_ENTRIES\t256\n"
  103. "#define DTB_SIZE\t4096\n"
  104. "#define HAVE_CMOV\n"
  105. "#define HAVE_MMX\n"
  106. "#define HAVE_SSE\n"
  107. "#define HAVE_SSE2\n"
  108. "#define HAVE_SSE3\n"
  109. "#define HAVE_SSSE3\n"
  110. "#define SLOCAL_BUFFER_SIZE\t16384\n"
  111. "#define DLOCAL_BUFFER_SIZE\t16384\n"
  112. "#define CLOCAL_BUFFER_SIZE\t16384\n"
  113. "#define ZLOCAL_BUFFER_SIZE\t16384\n")
  114. set(SGEMM_UNROLL_M 8)
  115. set(SGEMM_UNROLL_N 4)
  116. set(DGEMM_UNROLL_M 4)
  117. set(DGEMM_UNROLL_N 4)
  118. set(CGEMM_UNROLL_M 4)
  119. set(CGEMM_UNROLL_N 2)
  120. set(ZGEMM_UNROLL_M 2)
  121. set(ZGEMM_UNROLL_N 2)
  122. set(CGEMM3M_UNROLL_M 8)
  123. set(CGEMM3M_UNROLL_N 4)
  124. set(ZGEMM3M_UNROLL_M 4)
  125. set(ZGEMM3M_UNROLL_N 4)
  126. elseif ("${TCORE}" STREQUAL "ARMV7")
  127. file(APPEND ${TARGET_CONF_TEMP}
  128. "#define L1_DATA_SIZE\t65536\n"
  129. "#define L1_DATA_LINESIZE\t32\n"
  130. "#define L2_SIZE\t512488\n"
  131. "#define L2_LINESIZE\t32\n"
  132. "#define DTB_DEFAULT_ENTRIES\t64\n"
  133. "#define DTB_SIZE\t4096\n"
  134. "#define L2_ASSOCIATIVE\t4\n"
  135. "#define HAVE_VFPV3\n"
  136. "#define HAVE_VFP\n")
  137. set(SGEMM_UNROLL_M 4)
  138. set(SGEMM_UNROLL_N 4)
  139. set(DGEMM_UNROLL_M 4)
  140. set(DGEMM_UNROLL_N 4)
  141. set(CGEMM_UNROLL_M 2)
  142. set(CGEMM_UNROLL_N 2)
  143. set(ZGEMM_UNROLL_M 2)
  144. set(ZGEMM_UNROLL_N 2)
  145. elseif ("${TCORE}" STREQUAL "ARMV8")
  146. file(APPEND ${TARGET_CONF_TEMP}
  147. "#define L1_DATA_SIZE\t32768\n"
  148. "#define L1_DATA_LINESIZE\t64\n"
  149. "#define L2_SIZE\t262144\n"
  150. "#define L2_LINESIZE\t64\n"
  151. "#define DTB_DEFAULT_ENTRIES\t64\n"
  152. "#define DTB_SIZE\t4096\n"
  153. "#define L2_ASSOCIATIVE\t32\n"
  154. "#define ARMV8\n")
  155. set(SGEMM_UNROLL_M 16)
  156. set(SGEMM_UNROLL_N 4)
  157. set(DGEMM_UNROLL_M 8)
  158. set(DGEMM_UNROLL_N 4)
  159. set(CGEMM_UNROLL_M 8)
  160. set(CGEMM_UNROLL_N 4)
  161. set(ZGEMM_UNROLL_M 4)
  162. set(ZGEMM_UNROLL_N 4)
  163. set(SYMV_P 16)
  164. elseif ("${TCORE}" STREQUAL "CORTEXA57" OR "${TCORE}" STREQUAL "CORTEXA53")
  165. file(APPEND ${TARGET_CONF_TEMP}
  166. "#define L1_CODE_SIZE\t32768\n"
  167. "#define L1_CODE_LINESIZE\t64\n"
  168. "#define L1_CODE_ASSOCIATIVE\t3\n"
  169. "#define L1_DATA_SIZE\t32768\n"
  170. "#define L1_DATA_LINESIZE\t64\n"
  171. "#define L1_DATA_ASSOCIATIVE\t2\n"
  172. "#define L2_SIZE\t262144\n"
  173. "#define L2_LINESIZE\t64\n"
  174. "#define L2_ASSOCIATIVE\t16\n"
  175. "#define DTB_DEFAULT_ENTRIES\t64\n"
  176. "#define DTB_SIZE\t4096\n"
  177. "#define HAVE_VFPV4\n"
  178. "#define HAVE_VFPV3\n"
  179. "#define HAVE_VFP\n"
  180. "#define HAVE_NEON\n"
  181. "#define ARMV8\n")
  182. set(SGEMM_UNROLL_M 16)
  183. set(SGEMM_UNROLL_N 4)
  184. set(DGEMM_UNROLL_M 8)
  185. set(DGEMM_UNROLL_N 4)
  186. set(CGEMM_UNROLL_M 8)
  187. set(CGEMM_UNROLL_N 4)
  188. set(ZGEMM_UNROLL_M 4)
  189. set(ZGEMM_UNROLL_N 4)
  190. set(SYMV_P 16)
  191. elseif ("${TCORE}" STREQUAL "CORTEXA72" OR "${TCORE}" STREQUAL "CORTEXA73")
  192. file(APPEND ${TARGET_CONF_TEMP}
  193. "#define L1_CODE_SIZE\t49152\n"
  194. "#define L1_CODE_LINESIZE\t64\n"
  195. "#define L1_CODE_ASSOCIATIVE\t3\n"
  196. "#define L1_DATA_SIZE\t32768\n"
  197. "#define L1_DATA_LINESIZE\t64\n"
  198. "#define L1_DATA_ASSOCIATIVE\t2\n"
  199. "#define L2_SIZE\t524288\n"
  200. "#define L2_LINESIZE\t64\n"
  201. "#define L2_ASSOCIATIVE\t16\n"
  202. "#define DTB_DEFAULT_ENTRIES\t64\n"
  203. "#define DTB_SIZE\t4096\n"
  204. "#define HAVE_VFPV4\n"
  205. "#define HAVE_VFPV3\n"
  206. "#define HAVE_VFP\n"
  207. "#define HAVE_NEON\n"
  208. "#define ARMV8\n")
  209. set(SGEMM_UNROLL_M 16)
  210. set(SGEMM_UNROLL_N 4)
  211. set(DGEMM_UNROLL_M 8)
  212. set(DGEMM_UNROLL_N 4)
  213. set(CGEMM_UNROLL_M 8)
  214. set(CGEMM_UNROLL_N 4)
  215. set(ZGEMM_UNROLL_M 4)
  216. set(ZGEMM_UNROLL_N 4)
  217. set(SYMV_P 16)
  218. elseif ("${TCORE}" STREQUAL "FALKOR")
  219. file(APPEND ${TARGET_CONF_TEMP}
  220. "#define L1_CODE_SIZE\t65536\n"
  221. "#define L1_CODE_LINESIZE\t64\n"
  222. "#define L1_CODE_ASSOCIATIVE\t3\n"
  223. "#define L1_DATA_SIZE\t32768\n"
  224. "#define L1_DATA_LINESIZE\t128\n"
  225. "#define L1_DATA_ASSOCIATIVE\t2\n"
  226. "#define L2_SIZE\t524288\n"
  227. "#define L2_LINESIZE\t64\n"
  228. "#define L2_ASSOCIATIVE\t16\n"
  229. "#define DTB_DEFAULT_ENTRIES\t64\n"
  230. "#define DTB_SIZE\t4096\n"
  231. "#define HAVE_VFPV4\n"
  232. "#define HAVE_VFPV3\n"
  233. "#define HAVE_VFP\n"
  234. "#define HAVE_NEON\n"
  235. "#define ARMV8\n")
  236. set(SGEMM_UNROLL_M 16)
  237. set(SGEMM_UNROLL_N 4)
  238. set(DGEMM_UNROLL_M 8)
  239. set(DGEMM_UNROLL_N 4)
  240. set(CGEMM_UNROLL_M 8)
  241. set(CGEMM_UNROLL_N 4)
  242. set(ZGEMM_UNROLL_M 4)
  243. set(ZGEMM_UNROLL_N 4)
  244. set(SYMV_P 16)
  245. elseif ("${TCORE}" STREQUAL "THUNDERX")
  246. file(APPEND ${TARGET_CONF_TEMP}
  247. "#define L1_CODE_SIZE\t32768\n"
  248. "#define L1_CODE_LINESIZE\t64\n"
  249. "#define L1_CODE_ASSOCIATIVE\t3\n"
  250. "#define L1_DATA_SIZE\t32768\n"
  251. "#define L1_DATA_LINESIZE\t128\n"
  252. "#define L1_DATA_ASSOCIATIVE\t2\n"
  253. "#define L2_SIZE\t167772164\n"
  254. "#define L2_LINESIZE\t128\n"
  255. "#define L2_ASSOCIATIVE\t16\n"
  256. "#define DTB_DEFAULT_ENTRIES\t64\n"
  257. "#define DTB_SIZE\t4096\n"
  258. "#define HAVE_VFPV4\n"
  259. "#define HAVE_VFPV3\n"
  260. "#define HAVE_VFP\n"
  261. "#define HAVE_NEON\n"
  262. "#define ARMV8\n")
  263. set(SGEMM_UNROLL_M 4)
  264. set(SGEMM_UNROLL_N 4)
  265. set(DGEMM_UNROLL_M 2)
  266. set(DGEMM_UNROLL_N 2)
  267. set(CGEMM_UNROLL_M 2)
  268. set(CGEMM_UNROLL_N 2)
  269. set(ZGEMM_UNROLL_M 2)
  270. set(ZGEMM_UNROLL_N 2)
  271. set(SYMV_P 16)
  272. elseif ("${TCORE}" STREQUAL "THUNDERX2T99")
  273. file(APPEND ${TARGET_CONF_TEMP}
  274. "#define L1_CODE_SIZE\t32768\n"
  275. "#define L1_CODE_LINESIZE\t64\n"
  276. "#define L1_CODE_ASSOCIATIVE\t8\n"
  277. "#define L1_DATA_SIZE\t32768\n"
  278. "#define L1_DATA_LINESIZE\t64\n"
  279. "#define L1_DATA_ASSOCIATIVE\t8\n"
  280. "#define L2_SIZE\t262144\n"
  281. "#define L2_LINESIZE\t64\n"
  282. "#define L2_ASSOCIATIVE\t8\n"
  283. "#define L3_SIZE\t33554432\n"
  284. "#define L3_LINESIZE\t64\n"
  285. "#define L3_ASSOCIATIVE\t32\n"
  286. "#define DTB_DEFAULT_ENTRIES\t64\n"
  287. "#define DTB_SIZE\t4096\n"
  288. "#define ARMV8\n")
  289. set(SGEMM_UNROLL_M 16)
  290. set(SGEMM_UNROLL_N 4)
  291. set(DGEMM_UNROLL_M 8)
  292. set(DGEMM_UNROLL_N 4)
  293. set(CGEMM_UNROLL_M 8)
  294. set(CGEMM_UNROLL_N 4)
  295. set(ZGEMM_UNROLL_M 4)
  296. set(ZGEMM_UNROLL_N 4)
  297. set(SYMV_P 16)
  298. elseif ("${TCORE}" STREQUAL "TSV110")
  299. file(APPEND ${TARGET_CONF_TEMP}
  300. "#define ARMV8\n"
  301. "#define L1_CODE_SIZE\t65536\n"
  302. "#define L1_CODE_LINESIZE\t64\n"
  303. "#define L1_CODE_ASSOCIATIVE\t4\n"
  304. "#define L1_DATA_SIZE\t65536\n"
  305. "#define L1_DATA_LINESIZE\t64\n"
  306. "#define L1_DATA_ASSOCIATIVE\t4\n"
  307. "#define L2_SIZE\t524288\n"
  308. "#define L2_LINESIZE\t64\n"
  309. "#define L2_ASSOCIATIVE\t8\n"
  310. "#define DTB_DEFAULT_ENTRIES\t64\n"
  311. "#define DTB_SIZE\t4096\n")
  312. set(SGEMM_UNROLL_M 16)
  313. set(SGEMM_UNROLL_N 4)
  314. set(DGEMM_UNROLL_M 8)
  315. set(DGEMM_UNROLL_N 4)
  316. set(CGEMM_UNROLL_M 8)
  317. set(CGEMM_UNROLL_N 4)
  318. set(ZGEMM_UNROLL_M 4)
  319. set(ZGEMM_UNROLL_N 4)
  320. set(SYMV_P 16)
  321. elseif ("${TCORE}" STREQUAL "POWER6")
  322. file(APPEND ${TARGET_CONF_TEMP}
  323. "#define L1_DATA_SIZE 32768\n"
  324. "#define L1_DATA_LINESIZE 128\n"
  325. "#define L2_SIZE 524288\n"
  326. "#define L2_LINESIZE 128 \n"
  327. "#define DTB_DEFAULT_ENTRIES 128\n"
  328. "#define DTB_SIZE 4096\n"
  329. "#define L2_ASSOCIATIVE 8\n")
  330. set(SGEMM_UNROLL_M 4)
  331. set(SGEMM_UNROLL_N 4)
  332. set(DGEMM_UNROLL_M 4)
  333. set(DGEMM_UNROLL_N 4)
  334. set(CGEMM_UNROLL_M 2)
  335. set(CGEMM_UNROLL_N 4)
  336. set(ZGEMM_UNROLL_M 2)
  337. set(ZGEMM_UNROLL_N 4)
  338. set(SYMV_P 8)
  339. elseif ("${TCORE}" STREQUAL "POWER8")
  340. file(APPEND ${TARGET_CONF_TEMP}
  341. "#define L1_DATA_SIZE 32768\n"
  342. "#define L1_DATA_LINESIZE 128\n"
  343. "#define L2_SIZE 524288\n"
  344. "#define L2_LINESIZE 128 \n"
  345. "#define DTB_DEFAULT_ENTRIES 128\n"
  346. "#define DTB_SIZE 4096\n"
  347. "#define L2_ASSOCIATIVE 8\n")
  348. set(SGEMM_UNROLL_M 16)
  349. set(SGEMM_UNROLL_N 8)
  350. set(DGEMM_UNROLL_M 16)
  351. set(DGEMM_UNROLL_N 4)
  352. set(CGEMM_UNROLL_M 8)
  353. set(CGEMM_UNROLL_N 4)
  354. set(ZGEMM_UNROLL_M 8)
  355. set(ZGEMM_UNROLL_N 2)
  356. set(SYMV_P 8)
  357. elseif ("${TCORE}" STREQUAL "POWER9")
  358. file(APPEND ${TARGET_CONF_TEMP}
  359. "#define L1_DATA_SIZE 32768\n"
  360. "#define L1_DATA_LINESIZE 128\n"
  361. "#define L2_SIZE 524288\n"
  362. "#define L2_LINESIZE 128 \n"
  363. "#define DTB_DEFAULT_ENTRIES 128\n"
  364. "#define DTB_SIZE 4096\n"
  365. "#define L2_ASSOCIATIVE 8\n")
  366. set(SGEMM_UNROLL_M 16)
  367. set(SGEMM_UNROLL_N 8)
  368. set(DGEMM_UNROLL_M 16)
  369. set(DGEMM_UNROLL_N 4)
  370. set(CGEMM_UNROLL_M 8)
  371. set(CGEMM_UNROLL_N 4)
  372. set(ZGEMM_UNROLL_M 8)
  373. set(ZGEMM_UNROLL_N 2)
  374. set(SYMV_P 8)
  375. endif()
  376. # Or should this actually be NUM_CORES?
  377. if (${NUM_THREADS} GREATER 0)
  378. file(APPEND ${TARGET_CONF_TEMP} "#define NUM_CORES\t${NUM_THREADS}\n")
  379. endif()
  380. # GetArch_2nd
  381. foreach(float_char S;D;Q;C;Z;X)
  382. if (NOT DEFINED ${float_char}GEMM_UNROLL_M)
  383. set(${float_char}GEMM_UNROLL_M 2)
  384. endif()
  385. if (NOT DEFINED ${float_char}GEMM_UNROLL_N)
  386. set(${float_char}GEMM_UNROLL_N 2)
  387. endif()
  388. endforeach()
  389. file(APPEND ${TARGET_CONF_TEMP}
  390. "#define GEMM_MULTITHREAD_THRESHOLD\t${GEMM_MULTITHREAD_THRESHOLD}\n")
  391. # Move to where gen_config_h would place it
  392. file(MAKE_DIRECTORY ${TARGET_CONF_DIR})
  393. file(RENAME ${TARGET_CONF_TEMP} "${TARGET_CONF_DIR}/${TARGET_CONF}")
  394. else(NOT CMAKE_CROSSCOMPILING)
  395. # compile getarch
  396. set(GETARCH_SRC
  397. ${PROJECT_SOURCE_DIR}/getarch.c
  398. ${CPUIDEMU}
  399. )
  400. if ("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC")
  401. #Use generic for MSVC now
  402. message("MSVC")
  403. set(GETARCH_FLAGS ${GETARCH_FLAGS} -DFORCE_GENERIC)
  404. else()
  405. list(APPEND GETARCH_SRC ${PROJECT_SOURCE_DIR}/cpuid.S)
  406. if (DEFINED TARGET_CORE)
  407. set(GETARCH_FLAGS ${GETARCH_FLAGS} -DFORCE_${TARGET_CORE})
  408. endif ()
  409. endif ()
  410. if ("${CMAKE_SYSTEM_NAME}" STREQUAL "WindowsStore")
  411. # disable WindowsStore strict CRT checks
  412. set(GETARCH_FLAGS ${GETARCH_FLAGS} -D_CRT_SECURE_NO_WARNINGS)
  413. endif ()
  414. set(GETARCH_DIR "${PROJECT_BINARY_DIR}/getarch_build")
  415. set(GETARCH_BIN "getarch${CMAKE_EXECUTABLE_SUFFIX}")
  416. file(MAKE_DIRECTORY ${GETARCH_DIR})
  417. configure_file(${TARGET_CONF_TEMP} ${GETARCH_DIR}/${TARGET_CONF} COPYONLY)
  418. if (NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "WindowsStore")
  419. try_compile(GETARCH_RESULT ${GETARCH_DIR}
  420. SOURCES ${GETARCH_SRC}
  421. COMPILE_DEFINITIONS ${EXFLAGS} ${GETARCH_FLAGS} -I${GETARCH_DIR} -I"${PROJECT_SOURCE_DIR}" -I"${PROJECT_BINARY_DIR}"
  422. OUTPUT_VARIABLE GETARCH_LOG
  423. COPY_FILE ${PROJECT_BINARY_DIR}/${GETARCH_BIN}
  424. )
  425. if (NOT ${GETARCH_RESULT})
  426. MESSAGE(FATAL_ERROR "Compiling getarch failed ${GETARCH_LOG}")
  427. endif ()
  428. endif ()
  429. message(STATUS "Running getarch")
  430. # use the cmake binary w/ the -E param to run a shell command in a cross-platform way
  431. execute_process(COMMAND "${PROJECT_BINARY_DIR}/${GETARCH_BIN}" 0 OUTPUT_VARIABLE GETARCH_MAKE_OUT)
  432. execute_process(COMMAND "${PROJECT_BINARY_DIR}/${GETARCH_BIN}" 1 OUTPUT_VARIABLE GETARCH_CONF_OUT)
  433. message(STATUS "GETARCH results:\n${GETARCH_MAKE_OUT}")
  434. # append config data from getarch to the TARGET file and read in CMake vars
  435. file(APPEND ${TARGET_CONF_TEMP} ${GETARCH_CONF_OUT})
  436. ParseGetArchVars(${GETARCH_MAKE_OUT})
  437. set(GETARCH2_DIR "${PROJECT_BINARY_DIR}/getarch2_build")
  438. set(GETARCH2_BIN "getarch_2nd${CMAKE_EXECUTABLE_SUFFIX}")
  439. file(MAKE_DIRECTORY ${GETARCH2_DIR})
  440. configure_file(${TARGET_CONF_TEMP} ${GETARCH2_DIR}/${TARGET_CONF} COPYONLY)
  441. if (NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "WindowsStore")
  442. try_compile(GETARCH2_RESULT ${GETARCH2_DIR}
  443. SOURCES ${PROJECT_SOURCE_DIR}/getarch_2nd.c
  444. COMPILE_DEFINITIONS ${EXFLAGS} ${GETARCH_FLAGS} ${GETARCH2_FLAGS} -I${GETARCH2_DIR} -I"${PROJECT_SOURCE_DIR}" -I"${PROJECT_BINARY_DIR}"
  445. OUTPUT_VARIABLE GETARCH2_LOG
  446. COPY_FILE ${PROJECT_BINARY_DIR}/${GETARCH2_BIN}
  447. )
  448. if (NOT ${GETARCH2_RESULT})
  449. MESSAGE(FATAL_ERROR "Compiling getarch_2nd failed ${GETARCH2_LOG}")
  450. endif ()
  451. endif ()
  452. # use the cmake binary w/ the -E param to run a shell command in a cross-platform way
  453. execute_process(COMMAND "${PROJECT_BINARY_DIR}/${GETARCH2_BIN}" 0 OUTPUT_VARIABLE GETARCH2_MAKE_OUT)
  454. execute_process(COMMAND "${PROJECT_BINARY_DIR}/${GETARCH2_BIN}" 1 OUTPUT_VARIABLE GETARCH2_CONF_OUT)
  455. # append config data from getarch_2nd to the TARGET file and read in CMake vars
  456. file(APPEND ${TARGET_CONF_TEMP} ${GETARCH2_CONF_OUT})
  457. configure_file(${TARGET_CONF_TEMP} ${TARGET_CONF_DIR}/${TARGET_CONF} COPYONLY)
  458. ParseGetArchVars(${GETARCH2_MAKE_OUT})
  459. endif()