Text archives Help
- From: bigler@sci.utah.edu
- To: manta@sci.utah.edu
- Subject: [MANTA] r1398 - in trunk: . CMake
- Date: Thu, 24 May 2007 12:36:45 -0600 (MDT)
Author: bigler
Date: Thu May 24 12:36:45 2007
New Revision: 1398
Added:
trunk/CMake/ConfigArchitecture.cmake
trunk/CMake/ConfigCompilerFlags.cmake
trunk/CMake/LinuxCPUInfo.cmake
- copied, changed from r1397, trunk/CMake/linux-precise-arch.cmake
trunk/CMake/ProcessorInfo.txt
Removed:
trunk/CMake/linux-precise-arch.cmake
Modified:
trunk/CMake/ConfigApple.cmake
trunk/CMake/ConfigIA64.cmake
trunk/CMake/ConfigIccVersion.cmake
trunk/CMake/ConfigX86_64.cmake
trunk/CMake/Macros.cmake
trunk/CMakeLists.txt
Log:
New world order for manta configuration. This should do a much better
job of generating good default compiler optimizations based on the
compiler and processor you are using.
CMake/ConfigApple.cmake
Added newline.
CMake/ConfigArchitecture.cmake
Configure different parameters based on the system architecture.
CMake/ConfigCompilerFlags.cmake
Set bazillions of compiler flags based on compiler and processor
used.
CMake/ConfigIA64.cmake
CMake/ConfigIccVersion.cmake
CMake/ConfigX86_64.cmake
Use USING_ICC/ICPC instead of using a regular expression.
CMake/LinuxCPUInfo.cmake
Don't spit anything out.
CMake/Macros.cmake
Added APPEND_TO_STRING and PREPEND_TO_STRING.
Changed FORCE_ADD_CXX_FLAGS to FORCE_ADD_FLAGS, so that I could use
it with other paramters besides CMAKE_CXX_FLAGS.
CMake/ProcessorInfo.txt
Information about different processors and optimization flags.
CMake/linux-precise-arch.cmake
Moved to LinuxCPUInfo.cmake.
CMakeLists.txt
Use ConfigArchitecture, CompilerInfo, and ConfigComipilerFlags.
Got rid of ConfigIA64, ConfigX86_64, ConfigIccVersion, ConfigIrix,
and ConfigApple.
Use FORCE_ADD_FLAGS instead of FORCE_ADD_CXX_FLAGS.
Remove force adding of "-Wall". This is configured elsewhere and
not manditory.
Modified: trunk/CMake/ConfigApple.cmake
==============================================================================
--- trunk/CMake/ConfigApple.cmake (original)
+++ trunk/CMake/ConfigApple.cmake Thu May 24 12:36:45 2007
@@ -24,4 +24,4 @@
FIRST_TIME_SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g -D_GLIBCXX_DEBUG" STRING
"Debug Flags")
-ENDIF (APPLE)
\ No newline at end of file
+ENDIF (APPLE)
Added: trunk/CMake/ConfigArchitecture.cmake
==============================================================================
--- (empty file)
+++ trunk/CMake/ConfigArchitecture.cmake Thu May 24 12:36:45 2007
@@ -0,0 +1,36 @@
+# This file will set architecture and system variables. Compiler
+# flags should go into ConfigComipilerFlags.cmake.
+
+
+# Assume that if we are running on an Itanium (ia64), then it is an
+# SGI linux system
+IF (CMAKE_SYSTEM_PROCESSOR MATCHES "ia64")
+
+ SET(SGI_LINUX TRUE)
+
+ENDIF (CMAKE_SYSTEM_PROCESSOR MATCHES "ia64")
+
+IF (APPLE)
+
+ # Obtain output of /usr/bin/macine
+ EXEC_PROGRAM("/usr/bin/machine" OUTPUT_VARIABLE APPLE_MACHINE)
+
+ # Apple G4
+ IF (${APPLE_MACHINE} MATCHES "ppc7450")
+ SET(APPLE_G4 TRUE)
+ ENDIF (${APPLE_MACHINE} MATCHES "ppc7450")
+
+ # Apple G5
+ IF (${APPLE_MACHINE} MATCHES "ppc970")
+ SET(APPLE_G5 TRUE)
+ ENDIF(${APPLE_MACHINE} MATCHES "ppc970")
+
+ # Intel
+ IF (${APPLE_MACHINE} MATCHES "i486")
+ SET(APPLE_X86 TRUE)
+ ENDIF (${APPLE_MACHINE} MATCHES "i486")
+
+# MESSAGE("APPLE_G4 = ${APPLE_G4}")
+# MESSAGE("APPLE_G5 = ${APPLE_G5}")
+# MESSAGE("APPLE_X86 = ${APPLE_X86}")
+ENDIF(APPLE)
Added: trunk/CMake/ConfigCompilerFlags.cmake
==============================================================================
--- (empty file)
+++ trunk/CMake/ConfigCompilerFlags.cmake Thu May 24 12:36:45 2007
@@ -0,0 +1,254 @@
+# This will create a set of default compiler flags based on the system
+# and compiler supplied.
+
+##############################################################
+## Compiler libraries
+##############################################################
+
+# Some compilers in non default locations have libraries they need in
+# order to run properly. You could change your LD_LIBRARY_PATH or you
+# could add the path toth to the rpath of the library or executable.
+# This helps with that.
+
+IF(NOT COMPILER_LIBRARY_PATH)
+ # Try and guess it
+ IF(USING_ICC)
+ SET(compiler_test_compiler ${CMAKE_C_COMPILER})
+ ENDIF(USING_ICC)
+ IF(USING_ICPC)
+ SET(compiler_test_compiler ${CMAKE_CXX_COMPILER})
+ ENDIF(USING_ICPC)
+ IF(compiler_test_compiler)
+ # TODO(bigler): get the full path of the compiler and guess the
+ # library from that.
+ ENDIF(compiler_test_compiler)
+ENDIF(NOT COMPILER_LIBRARY_PATH)
+
+SET(COMPILER_LIBRARY_PATH "${COMPILER_LIBRARY_PATH}" CACHE PATH "Path to
compiler libraries" FORCE)
+
+IF(EXISTS "${COMPILER_LIBRARY_PATH}")
+ SET(rpath_arg "-Wl,-rpath,\"${COMPILER_LIBRARY_PATH}\"")
+ # TODO(bigler): remove the old path if there is one
+ FORCE_ADD_FLAGS(CMAKE_EXE_LINKER_FLAGS ${rpath_arg})
+ FORCE_ADD_FLAGS(CMAKE_MODULE_LINKER_FLAGS ${rpath_arg})
+ FORCE_ADD_FLAGS(CMAKE_SHARED_LINKER_FLAGS ${rpath_arg})
+ELSE(EXISTS "${COMPILER_LIBRARY_PATH}")
+ IF(COMPILER_LIBRARY_PATH)
+ MESSAGE(FATAL_ERROR "COMPILER_LIBRARY_PATH is set, but the path does not
exist:\n${COMPILER_LIBRARY_PATH}")
+ ENDIF(COMPILER_LIBRARY_PATH)
+ENDIF(EXISTS "${COMPILER_LIBRARY_PATH}")
+
+##############################################################
+## System independent
+##############################################################
+
+# Initialize these parameters
+SET(C_FLAGS "")
+SET(C_FLAGS_DEBUG "")
+SET(C_FLAGS_RELEASE "")
+
+SET(CXX_FLAGS "")
+SET(CXX_FLAGS_DEBUG "")
+SET(CXX_FLAGS_RELEASE "")
+
+# Set the default warning levels for each compiler
+
+####################
+SET(WARNING_FLAGS "-Wall -wd193,383,424,981,1419,1572") #-Wcheck may also
work
+# Solomon also uses these warning flags -wd1188,1476,1505
+SET(DEBUG_FLAGS "-O0 -g -restrict")
+SET(RELEASE_FLAGS "-O3 -g -restrict")
+IF (USING_ICC)
+ APPEND_TO_STRING(C_FLAGS ${WARNING_FLAGS})
+ APPEND_TO_STRING(C_FLAGS_DEBUG ${DEBUG_FLAGS})
+ APPEND_TO_STRING(C_FLAGS_RELEASE ${RELEASE_FLAGS})
+ENDIF(USING_ICC)
+
+IF (USING_ICPC)
+ APPEND_TO_STRING(CXX_FLAGS ${WARNING_FLAGS})
+ APPEND_TO_STRING(CXX_FLAGS_DEBUG "${DEBUG_FLAGS} -D_GLIBCXX_DEBUG")
+ APPEND_TO_STRING(CXX_FLAGS_RELEASE ${RELEASE_FLAGS})
+ENDIF(USING_ICPC)
+
+####################
+SET(WARNING_FLAGS "-Wall")
+SET(DEBUG_FLAGS "-O0 -g3")
+SET(RELEASE_FLAGS "-O3 -DNDEBUG -g3 -fgcse-sm -funroll-loops
-fstrict-aliasing -fsched-interblock -ffast-math -freorder-blocks")
+IF (USING_GCC)
+ APPEND_TO_STRING(C_FLAGS ${WARNING_FLAGS})
+ APPEND_TO_STRING(C_FLAGS_DEBUG ${DEBUG_FLAGS})
+ APPEND_TO_STRING(C_FLAGS_RELEASE ${RELEASE_FLAGS})
+ENDIF(USING_GCC)
+
+IF (USING_GPP)
+ APPEND_TO_STRING(CXX_FLAGS ${WARNING_FLAGS})
+ APPEND_TO_STRING(CXX_FLAGS_DEBUG "${DEBUG_FLAGS} -D_GLIBCXX_DEBUG")
+ APPEND_TO_STRING(CXX_FLAGS_RELEASE ${RELEASE_FLAGS})
+ENDIF(USING_GPP)
+
+
+##############################################################
+## IA64
+##############################################################
+IF (CMAKE_SYSTEM_PROCESSOR MATCHES "ia64")
+ APPEND_TO_STRING(INTEL_OPT "-tpp2")
+ENDIF (CMAKE_SYSTEM_PROCESSOR MATCHES "ia64")
+
+##############################################################
+## Apple
+##############################################################
+IF (APPLE_G4)
+ APPEND_TO_STRING(GCC_OPT "-falign-loops=16 -falign-jumps=16
-falign-functions=16 -falign-jumps-max-skip=15 -falign-loops-max-skip=15
-mpowerpc-gpopt -force_cpusubtype_ALL -mtune=G4 -mcpu=G4 -faltivec
-mabi=altivec -mpowerpc-gfxopt")
+ENDIF (APPLE_G4)
+
+# G5 Workstation.
+IF (APPLE_G5)
+ APPEND_TO_STRING(GCC_OPT "-falign-loops=16 -falign-jumps=16
-falign-functions=16 -falign-jumps-max-skip=15 -falign-loops-max-skip=15
-mpowerpc-gpopt -force_cpusubtype_ALL -mtune=G5 -mcpu=G5 -mpowerpc64
-faltivec -mabi=altivec -mpowerpc-gfxopt" STRING "G5 Optimized Flags")
+ENDIF (APPLE_G5)
+
+# Macintel
+IF (APPLE_X86)
+ APPEND_TO_STRING(GCC_ARCH "nocona")
+ APPEND_TO_STRING(GCC_ARCH "prescott")
+ APPEND_TO_STRING(GCC_OPT "-msse -msse2 -msse3 -mfpmath=sse")
+ENDIF (APPLE_X86)
+
+##############################################################
+## X86
+##############################################################
+
+# On apple machines CMAKE_SYSTEM_PROCESSOR return i386.
+
+IF (CMAKE_SYSTEM_PROCESSOR MATCHES "i686" OR
+ CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
+ APPEND_TO_STRING(GCC_OPT "-msse -msse2 -msse3 -mfpmath=sse")
+
+ # mtune options
+
+ INCLUDE(${CMAKE_SOURCE_DIR}/CMake/LinuxCPUInfo.cmake)
+
+ IF(VENDOR_ID MATCHES "AuthenticAMD")
+ APPEND_TO_STRING(GCC_ARCH "opteron") # supports 64 bit instructions
+ APPEND_TO_STRING(GCC_ARCH "athlon-xp") # no support for 64 bit
instructions
+ APPEND_TO_STRING(INTEL_OPT "-xW -unroll4")
+ ENDIF(VENDOR_ID MATCHES "AuthenticAMD")
+ IF(VENDOR_ID MATCHES "GenuineIntel")
+ IF(CPU_FAMILY EQUAL 6)
+ IF(MODEL GREATER 13)
+ # This is likely a Pentium3, Pentium M. Some pentium 3s don't
+ # support sse2, in that case fall back to the i686 code.
+ APPEND_TO_STRING(GCC_ARCH "pentium-m")
+ APPEND_TO_STRING(INTEL_OPT "-xB -tpp7")
+ ELSE(MODEL GREATER 13)
+ IF(MODEL GREATER 15)
+ # This is likely a Core Single or Core Duo. This doesn't
+ # support EM64T.
+ APPEND_TO_STRING(GCC_ARCH "prescott")
+ ELSE(MODEL GREATER 15)
+ # This is likely a Core 2
+ APPEND_TO_STRING(GCC_ARCH "nocona")
+ APPEND_TO_STRING(GCC_ARCH "prescott")
+ ENDIF(MODEL GREATER 15)
+ ENDIF(MODEL GREATER 13)
+ ENDIF(CPU_FAMILY EQUAL 6)
+ IF(CPU_FAMILY EQUAL 15)
+ # These are your Pentium 4 and friends
+ IF(FLAGS MATCHES "em64t")
+ APPEND_TO_STRING(GCC_ARCH "nocona")
+ APPEND_TO_STRING(GCC_ARCH "prescott")
+ ENDIF(FLAGS MATCHES "em64t")
+ APPEND_TO_STRING(GCC_ARCH "pentium4")
+ APPEND_TO_STRING(INTEL_OPT "-xP -tpp7 -unroll4 -msse3")
+ ENDIF(CPU_FAMILY EQUAL 15)
+ ENDIF(VENDOR_ID MATCHES "GenuineIntel")
+ APPEND_TO_STRING(GCC_ARCH "i686")
+
+ ###########################################################
+ # Some x86_64 specific stuff
+ IF (CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
+ APPEND_TO_STRING(INTEL_OPT "-tpp7")
+ ENDIF(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
+ ###########################################################
+
+ENDIF (CMAKE_SYSTEM_PROCESSOR MATCHES "i686" OR
+ CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
+
+##############################################################
+## Configure Architecture
+##############################################################
+
+# Cycle through the GCC_ARCH args and see which one will pass first.
+# Guard this evaluation with PASSED_FIRST_CONFIGURE, to make sure it
+# is only done the first time.
+IF(USING_GCC OR USING_GPP AND NOT PASSED_FIRST_CONFIGURE)
+ SEPARATE_ARGUMENTS(GCC_ARCH)
+ # Change the extension based of if we are using both gcc and g++.
+ IF(USING_GCC)
+ SET(EXTENSION "c")
+ ELSE(USING_GCC)
+ SET(EXTENSION "cc")
+ ENDIF(USING_GCC)
+ SET(COMPILE_TEST_SOURCE ${CMAKE_BINARY_DIR}/test/compile-test.${EXTENSION})
+ CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/CMake/testmain.c"
+ ${COMPILE_TEST_SOURCE} IMMEDIATE COPYONLY)
+ FOREACH(ARCH ${GCC_ARCH})
+ IF(NOT GOOD_ARCH)
+# MESSAGE("Testing ARCH = ${ARCH}")
+ SET(ARCH_FLAG "-march=${ARCH} -mtune=${ARCH}")
+ SET(COMPILER_ARGS "${ARCH_FLAG} ${C_FLAGS_RELEASE} ${C_FLAGS}
${GCC_OPT}")
+ TRY_RUN(RUN_RESULT_VAR COMPILE_RESULT_VAR
+ ${CMAKE_BINARY_DIR}/test ${COMPILE_TEST_SOURCE}
+ CMAKE_FLAGS
+ -DCOMPILE_DEFINITIONS:STRING=${COMPILER_ARGS}
+ OUTPUT_VARIABLE OUTPUT
+ )
+# MESSAGE("OUTPUT = ${OUTPUT}")
+# MESSAGE("COMPILER_ARGS = ${COMPILER_ARGS}")
+# MESSAGE("RUN_RESULT_VAR = ${RUN_RESULT_VAR}")
+# MESSAGE("COMPILE_RESULT_VAR = ${COMPILE_RESULT_VAR}")
+ IF(RUN_RESULT_VAR EQUAL 0)
+ SET(GOOD_ARCH ${ARCH})
+ ENDIF(RUN_RESULT_VAR EQUAL 0)
+ ENDIF(NOT GOOD_ARCH)
+ ENDFOREACH(ARCH)
+ IF(GOOD_ARCH)
+ PREPEND_TO_STRING(GCC_OPT "-march=${GOOD_ARCH} -mtune=${GOOD_ARCH}")
+ ENDIF(GOOD_ARCH)
+# MESSAGE("GOOD_ARCH = ${GOOD_ARCH}")
+ENDIF(USING_GCC OR USING_GPP AND NOT PASSED_FIRST_CONFIGURE)
+
+
+# MESSAGE("CMAKE_SYSTEM_PROCESSOR = ${CMAKE_SYSTEM_PROCESSOR}")
+# MESSAGE("APPLE = ${APPLE}")
+# MESSAGE("LINUX = ${LINUX}")
+
+##############################################################
+## Set the defaults
+##############################################################
+
+MACRO(ADD_COMPILER_FLAG COMPILER FLAGS NEW_FLAG)
+ IF(${COMPILER})
+ PREPEND_TO_STRING(${FLAGS} ${${NEW_FLAG}})
+ ENDIF(${COMPILER})
+ENDMACRO(ADD_COMPILER_FLAG)
+
+ADD_COMPILER_FLAG(USING_ICC C_FLAGS_RELEASE INTEL_OPT)
+ADD_COMPILER_FLAG(USING_ICPC CXX_FLAGS_RELEASE INTEL_OPT)
+ADD_COMPILER_FLAG(USING_GCC C_FLAGS_RELEASE GCC_OPT)
+ADD_COMPILER_FLAG(USING_GPP CXX_FLAGS_RELEASE GCC_OPT)
+
+MACRO(SET_FLAGS FLAG NEW_VALUE)
+ IF(${NEW_VALUE})
+ FIRST_TIME_MESSAGE("Setting compiler flags:")
+ FIRST_TIME_MESSAGE("${NEW_VALUE} = ${${NEW_VALUE}}")
+ FIRST_TIME_SET(${FLAG} "${${NEW_VALUE}}" CACHE STRING "Default compiler
flags" FORCE)
+ ENDIF(${NEW_VALUE})
+ENDMACRO(SET_FLAGS)
+
+SET_FLAGS(CMAKE_C_FLAGS C_FLAGS)
+SET_FLAGS(CMAKE_C_FLAGS_DEBUG C_FLAGS_DEBUG)
+SET_FLAGS(CMAKE_C_FLAGS_RELEASE C_FLAGS_RELEASE)
+
+SET_FLAGS(CMAKE_CXX_FLAGS CXX_FLAGS)
+SET_FLAGS(CMAKE_CXX_FLAGS_DEBUG CXX_FLAGS_DEBUG)
+SET_FLAGS(CMAKE_CXX_FLAGS_RELEASE CXX_FLAGS_RELEASE)
Modified: trunk/CMake/ConfigIA64.cmake
==============================================================================
--- trunk/CMake/ConfigIA64.cmake (original)
+++ trunk/CMake/ConfigIA64.cmake Thu May 24 12:36:45 2007
@@ -6,23 +6,23 @@
SET(SGI_LINUX TRUE)
# Warn if the compiler is not icc
- IF (CMAKE_C_COMPILER MATCHES "icc$")
+ IF (USING_ICC)
FIRST_TIME_SET(CMAKE_C_FLAGS_RELEASE "-tpp2 -O3 -g " CACHE STRING
"Release Flags" FORCE)
FIRST_TIME_SET(CMAKE_C_FLAGS_DEBUG "-O0 -g" CACHE STRING "Debug Flags"
FORCE)
- ELSE (CMAKE_C_COMPILER MATCHES "icc$")
+ ELSE (USING_ICC)
FIRST_TIME_MESSAGE("Intel Compilers recommended on ia64. setenv CC
icc before running cmake.")
FIRST_TIME_SET(CMAKE_C_FLAGS_RELEASE "-O3 -ffast-math
-funroll-loops -g" CACHE STRING "Release Flags" FORCE)
FIRST_TIME_SET(CMAKE_C_FLAGS_DEBUG "-O0 -g" CACHE STRING "Debug
Flags" FORCE)
- ENDIF(CMAKE_C_COMPILER MATCHES "icc$")
+ ENDIF(USING_ICC)
- IF (CMAKE_CXX_COMPILER MATCHES "icpc$")
+ IF (USING_ICPC)
FIRST_TIME_SET(CMAKE_CXX_FLAGS_RELEASE "-tpp2 -O3 -g" CACHE STRING
"Release Flags" FORCE)
FIRST_TIME_SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g" CACHE STRING "Debug
Flags" FORCE)
- ELSE (CMAKE_CXX_COMPILER MATCHES "icpc$")
+ ELSE (USING_ICPC)
FIRST_TIME_MESSAGE("Intel Compilers recommended on ia64. setenv
CXX icpc before running cmake.")
FIRST_TIME_SET(CMAKE_CXX_FLAGS_RELEASE "-O3 -ffast-math
-funroll-loops -g" CACHE STRING "Release Flags" FORCE)
FIRST_TIME_SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g" CACHE STRING "Debug
Flags" FORCE)
- ENDIF(CMAKE_CXX_COMPILER MATCHES "icpc$")
+ ENDIF(USING_ICPC)
ENDIF (CMAKE_SYSTEM_PROCESSOR MATCHES "ia64")
Modified: trunk/CMake/ConfigIccVersion.cmake
==============================================================================
--- trunk/CMake/ConfigIccVersion.cmake (original)
+++ trunk/CMake/ConfigIccVersion.cmake Thu May 24 12:36:45 2007
@@ -1,6 +1,6 @@
# Determine INTEL_COMPILER_VERSION
-IF (CMAKE_CXX_COMPILER MATCHES "icpc$")
+IF (USING_ICPC)
EXEC_PROGRAM(${CMAKE_CXX_COMPILER}
ARGS --version
@@ -12,4 +12,4 @@
MARK_AS_ADVANCED(INTEL_COMPILER_VERSION)
-ENDIF(CMAKE_CXX_COMPILER MATCHES "icpc$")
\ No newline at end of file
+ENDIF(USING_ICPC)
Modified: trunk/CMake/ConfigX86_64.cmake
==============================================================================
--- trunk/CMake/ConfigX86_64.cmake (original)
+++ trunk/CMake/ConfigX86_64.cmake Thu May 24 12:36:45 2007
@@ -4,15 +4,17 @@
####################################################################
# Check for Intel Compilers.
- IF (CMAKE_C_COMPILER MATCHES "icc$")
+ IF (USING_ICC)
FIRST_TIME_SET(CMAKE_C_FLAGS_RELEASE "-tpp7 -O3 -g" CACHE STRING
"Release Flags" FORCE)
FIRST_TIME_SET(CMAKE_C_FLAGS_DEBUG "-O0 -g" CACHE STRING "Debug Flags"
FORCE)
- ENDIF(CMAKE_C_COMPILER MATCHES "icc$")
+ FIRST_TIME_SET(CMAKE_C_FLAGS "-Wcheck" CACHE STRING "Compiler Flags"
FORCE)
+ ENDIF(USING_ICC)
- IF (CMAKE_CXX_COMPILER MATCHES "icpc$")
+ IF (USING_ICPC)
FIRST_TIME_SET(CMAKE_CXX_FLAGS_RELEASE "-tpp7 -O3 -g" CACHE STRING
"Release Flags" FORCE)
FIRST_TIME_SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g -D_GLIBCXX_DEBUG"
CACHE STRING "Debug Flags" FORCE)
- ENDIF(CMAKE_CXX_COMPILER MATCHES "icpc$")
+ FIRST_TIME_SET(CMAKE_CXX_FLAGS "-Wcheck" CACHE STRING "Compiler Flags"
FORCE)
+ ENDIF(USING_ICPC)
ENDIF (CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
Copied: trunk/CMake/LinuxCPUInfo.cmake (from r1397,
trunk/CMake/linux-precise-arch.cmake)
==============================================================================
--- trunk/CMake/linux-precise-arch.cmake (original)
+++ trunk/CMake/LinuxCPUInfo.cmake Thu May 24 12:36:45 2007
@@ -5,21 +5,21 @@
SET(VENDOR_ID_RX "vendor_id[ \t]*:[ \t]*([a-zA-Z]+)\n")
STRING(REGEX MATCH "${VENDOR_ID_RX}" VENDOR_ID "${PROC_CPUINFO}")
STRING(REGEX REPLACE "${VENDOR_ID_RX}" "\\1" VENDOR_ID "${VENDOR_ID}")
- MESSAGE(STATUS "VENDOR_ID : ${VENDOR_ID}")
+# MESSAGE(STATUS "VENDOR_ID : ${VENDOR_ID}")
SET(CPU_FAMILY_RX "cpu family[ \t]*:[ \t]*([0-9]+)")
STRING(REGEX MATCH "${CPU_FAMILY_RX}" CPU_FAMILY "${PROC_CPUINFO}")
STRING(REGEX REPLACE "${CPU_FAMILY_RX}" "\\1" CPU_FAMILY "${CPU_FAMILY}")
- MESSAGE(STATUS "CPU_FAMILY : ${CPU_FAMILY}")
+# MESSAGE(STATUS "CPU_FAMILY : ${CPU_FAMILY}")
SET(MODEL_RX "model[ \t]*:[ \t]*([0-9]+)")
STRING(REGEX MATCH "${MODEL_RX}" MODEL "${PROC_CPUINFO}")
STRING(REGEX REPLACE "${MODEL_RX}" "\\1" MODEL "${MODEL}")
- MESSAGE(STATUS "MODEL : ${MODEL}")
+# MESSAGE(STATUS "MODEL : ${MODEL}")
SET(FLAGS_RX "flags[ \t]*:[ \t]*([a-zA-Z0-9 _]+)\n")
STRING(REGEX MATCH "${FLAGS_RX}" FLAGS "${PROC_CPUINFO}")
STRING(REGEX REPLACE "${FLAGS_RX}" "\\1" FLAGS "${FLAGS}")
- MESSAGE(STATUS "FLAGS : ${FLAGS}")
+# MESSAGE(STATUS "FLAGS : ${FLAGS}")
ENDIF(EXISTS "/proc/cpuinfo")
Modified: trunk/CMake/Macros.cmake
==============================================================================
--- trunk/CMake/Macros.cmake (original)
+++ trunk/CMake/Macros.cmake Thu May 24 12:36:45 2007
@@ -1,24 +1,39 @@
+# Appends VAL to the string contained in STR
+MACRO(APPEND_TO_STRING STR VAL)
+ # You need to double ${} STR to get the value. The first one gets
+ # the variable, the second one gets the value.
+ SET(${STR} "${${STR}} ${VAL}")
+ENDMACRO(APPEND_TO_STRING)
+
+# Prepends VAL to the string contained in STR
+MACRO(PREPEND_TO_STRING STR VAL)
+ # You need to double ${} STR to get the value. The first one gets
+ # the variable, the second one gets the value.
+ SET(${STR} "${VAL} ${${STR}}")
+ENDMACRO(PREPEND_TO_STRING)
+
+
#################################################################
-### ADD_CXX_FLAGS(flags) ###
-### flags will be added to CMAKE_CXX_FLAGS, but only once ###
+### FORCE_ADD_FLAGS(parameter flags) ###
+### flags will be added to parameter, but only once ###
### This only works for CMake 2.0 and above. ###
#################################################################
-MACRO(FORCE_ADD_CXX_FLAGS)
+MACRO(FORCE_ADD_FLAGS parameter)
FOREACH(arg ${ARGN})
SET(TMP ${arg}) #elsewise the Seperate command doesn't work)
SEPARATE_ARGUMENTS(TMP)
FOREACH(option ${TMP})
- STRING(REGEX REPLACE " ${option}" "" CMAKE_CXX_FLAGS
- "${CMAKE_CXX_FLAGS}")
- STRING(REGEX REPLACE "${option}" "" CMAKE_CXX_FLAGS
- "${CMAKE_CXX_FLAGS}")
- SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${option}" CACHE STRING
- "common C++ build flags" FORCE)
+ STRING(REGEX REPLACE " ${option}" "" ${parameter}
+ "${${parameter}}")
+ STRING(REGEX REPLACE "${option}" "" ${parameter}
+ "${${parameter}}")
+ SET(${parameter} "${${parameter}} ${option}" CACHE STRING
+ "" FORCE)
ENDFOREACH(option ${TMP})
ENDFOREACH(arg ${ARGN})
-ENDMACRO(FORCE_ADD_CXX_FLAGS)
+ENDMACRO(FORCE_ADD_FLAGS)
# This MACRO is designed to set variables to default values only on
# the first configure. Subsequent configures will produce no ops.
@@ -62,4 +77,5 @@
# DEPENDS Must match custom command OUTPUT.
DEPENDS ${PROJECT_BINARY_DIR}/lib/${PY_FILE}
)
-ENDMACRO(PYTHON_POST_BUILD_COPY PY_FILE)
\ No newline at end of file
+ENDMACRO(PYTHON_POST_BUILD_COPY PY_FILE)
+
Added: trunk/CMake/ProcessorInfo.txt
==============================================================================
--- (empty file)
+++ trunk/CMake/ProcessorInfo.txt Thu May 24 12:36:45 2007
@@ -0,0 +1,189 @@
+Output from LinuxCPUInfo.cmake
+
+Arachne (Opteron 880):
+
+-- VENDOR_ID : AuthenticAMD
+-- CPU_FAMILY : 15
+-- MODEL : 33
+-- FLAGS : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat
pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt lm 3dnowext
3dnow pni lahf_lm cmp_legacy
+
+Muzzle (Pentium 4):
+
+-- VENDOR_ID : GenuineIntel
+-- CPU_FAMILY : 15
+-- MODEL : 2
+-- FLAGS : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat
pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe cid
+
+Rocket (Pentium M):
+
+-- VENDOR_ID : GenuineIntel
+-- CPU_FAMILY : 6
+-- MODEL : 13
+-- FLAGS : fpu vme de pse tsc msr mce cx8 sep mtrr pge mca cmov pat clflush
dts acpi mmx fxsr sse sse2 ss tm pbe est tm2
+
+
+==========================================================
+Information on how to decode CPU_FAMILY and MODEL
+
+
http://balusc.xs4all.nl/srv/har-cpu-int-pm.php
+
+
+Mobile processors (Like Pentium 3) MMX, SSE, SSE2
+6-9 Banias
+6-D Dothan
+6-E Yonah
+
+Core Solo - MMX, SSE, SSE2, SSE3
+6-E-8 Yonah
+6-E-C
+
+Core Duo
+6-E-8 Yonah
+6-E-C
+
+Core 2 Duo - EM64T, MMX, SSE, SSE2, SSE3
+6-F-2 Allendale
+6-F-6 Conroe (2M)
+6-F-7 Kentsfield
+
+Pentium 4 (also Celeron) MMX, SSE, SSE2
+F-0 Willamette
+F-1
+F-2 Northwood
+F-2 Gallatin (stepping 5)
+F-3 Prescott (adds SSE3)
+F-4 Prescott (stepping 1,9)
+F-4 Prescott 2M (stepping 3,A)
+F-6 Cedar Mill (stepping 2,4)
+F-0-A Foster (Xeon DP)
+F-1-2
+F-2-4 Prestonia (Xeon DP)
+F-2-7
+F-2-9
+F-3-4 Nocona
+F-4-1
+F-4-9
+F-4-3 Irwindale
+F-4-A
+.... Got bored of doing this
+
+Pentium D (Dual core) EM64T, MMX, SSE, SSE2, SSE3
+F-4 Smithfield
+F-6 Presler
+F-4 Paxville DP (Xeon)
+F-6 Dempsey (Xeon)
+F-2 Paxville
+F-4 Paxville
+F-6 Tulsa
+
+==========================================================
+ -mtune=cpu-type
+ Tune to cpu-type everything applicable about the generated code,
+ except for the ABI and the set of available instructions. The
+ choices for cpu-type are:
+
+ generic
+ Produce code optimized for the most common IA32/AMD64/EM64T
+ processors. If you know the CPU on which your code will run,
+ then you should use the corresponding -mtune option instead of
+ -mtune=generic. But, if you do not know exactly what CPU
+ users of your application will have, then you should use this
+ option.
+
+ As new processors are deployed in the marketplace, the
+ behavior of this option will change. Therefore, if you
+ upgrade to a newer version of GCC, the code generated
+ option will change to reflect the processors that were
+ most common when that version of GCC was released.
+
+ There is no -march=generic option because -march indicates the
+ instruction set the compiler can use, and there is no generic
+ instruction set applicable to all processors. In contrast,
+ -mtune indicates the processor (or, in this case, collection
+ of processors) for which the code is optimized.
+
+ i386
+ Original Intel's i386 CPU.
+
+ i486
+ Intel's i486 CPU. (No scheduling is implemented for this
+ chip.)
+
+ i586, pentium
+ Intel Pentium CPU with no MMX support.
+
+ pentium-mmx
+ Intel PentiumMMX CPU based on Pentium core with MMX
+ instruction set support.
+
+ pentiumpro
+ Intel PentiumPro CPU.
+
+ i686
+ Same as "generic", but when used as "march" option, PentiumPro
+ instruction set will be used, so the code will run on all i686
+ familly chips.
+
+ pentium2
+ Intel Pentium2 CPU based on PentiumPro core with MMX
+ instruction set support.
+
+ pentium3, pentium3m
+ Intel Pentium3 CPU based on PentiumPro core with MMX and SSE
+ instruction set support.
+
+ pentium-m
+ Low power version of Intel Pentium3 CPU with MMX, SSE and SSE2
+ instruction set support. Used by Centrino notebooks.
+
+ pentium4, pentium4m
+ Intel Pentium4 CPU with MMX, SSE and SSE2 instruction
+ set support.
+
+ prescott
+ Improved version of Intel Pentium4 CPU with MMX, SSE, SSE2 and
+ SSE3 instruction set support.
+
+ nocona
+ Improved version of Intel Pentium4 CPU with 64-bit extensions,
+ MMX, SSE, SSE2 and SSE3 instruction set support.
+
+ k6 AMD K6 CPU with MMX instruction set support.
+
+ k6-2, k6-3
+ Improved versions of AMD K6 CPU with MMX and 3dNOW!
+ instruction set support.
+
+ athlon, athlon-tbird
+ AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and SSE
+ prefetch instructions support.
+
+ athlon-4, athlon-xp, athlon-mp
+ Improved AMD Athlon CPU with MMX, 3dNOW!, enhanced 3dNOW! and
+ full SSE instruction set support.
+
+ k8, opteron, athlon64, athlon-fx
+ AMD K8 core based CPUs with x86-64 instruction set support.
+ (This supersets MMX, SSE, SSE2, 3dNOW!, enhanced 3dNOW! and
+ 64-bit instruction set extensions.)
+
+ winchip-c6
+ IDT Winchip C6 CPU, dealt in same way as i486 with additional
+ MMX instruction set support.
+
+ winchip2
+ IDT Winchip2 CPU, dealt in same way as i486 with additional
+ MMX and 3dNOW! instruction set support.
+
+ c3 Via C3 CPU with MMX and 3dNOW! instruction set support. (No
+ scheduling is implemented for this chip.)
+
+ c3-2
+ Via C3-2 CPU with MMX and SSE instruction set support. (No
+ scheduling is implemented for this chip.)
+
+ While picking a specific cpu-type will schedule things
+ appropriately for that particular chip, the compiler will
+ not generate any code that does not run on the i386 without
+ the -march=cpu-type option being used.
+
Modified: trunk/CMakeLists.txt
==============================================================================
--- trunk/CMakeLists.txt (original)
+++ trunk/CMakeLists.txt Thu May 24 12:36:45 2007
@@ -41,27 +41,35 @@
###############################################################################
# Include helper cmake scripts
-INCLUDE (${CMAKE_CURRENT_SOURCE_DIR}/CMake/Macros.cmake) # Include all
Manta CMake Macros.
-INCLUDE (${CMAKE_CURRENT_SOURCE_DIR}/CMake/BuildType.cmake) # Set various
options based on the build type.
-INCLUDE (${CMAKE_CURRENT_SOURCE_DIR}/CMake/CheckSSE.cmake) # Check if
the build supports SSE
-INCLUDE (${CMAKE_CURRENT_SOURCE_DIR}/CMake/About.cmake) # Add a
static library build info and license.
+# Include all Manta CMake Macros.
+INCLUDE (${CMAKE_CURRENT_SOURCE_DIR}/CMake/Macros.cmake)
+# Set flags based on the architecture we are on (no compiler stuff)
+INCLUDE (${CMAKE_CURRENT_SOURCE_DIR}/CMake/ConfigArchitecture.cmake)
+# Determine information about the compiler
+INCLUDE (${CMAKE_CURRENT_SOURCE_DIR}/CMake/CompilerInfo.cmake)
+# Set various options based on the build type.
+INCLUDE (${CMAKE_CURRENT_SOURCE_DIR}/CMake/BuildType.cmake)
+# Check if the build supports SSE
+INCLUDE (${CMAKE_CURRENT_SOURCE_DIR}/CMake/CheckSSE.cmake)
+# Add a static library build info and license.
+INCLUDE (${CMAKE_CURRENT_SOURCE_DIR}/CMake/About.cmake)
+
+###############################################
# Search for common dependencies.
-INCLUDE (${CMAKE_CURRENT_SOURCE_DIR}/CMake/FindX11andGL.cmake) # Find X11
and GL, specialized on OSX and Cygwin
-INCLUDE (${CMAKE_CURRENT_SOURCE_DIR}/CMake/FindTeem.cmake) # Locate Teem.
-INCLUDE (${CMAKE_CURRENT_SOURCE_DIR}/CMake/FindPabst.cmake) # Locate pabst
+
+# Find X11 and GL, specialized on OSX and Cygwin
+INCLUDE (${CMAKE_CURRENT_SOURCE_DIR}/CMake/FindX11andGL.cmake)
+# Locate Teem.
+INCLUDE (${CMAKE_CURRENT_SOURCE_DIR}/CMake/FindTeem.cmake)
+# Locate pabst
+INCLUDE (${CMAKE_CURRENT_SOURCE_DIR}/CMake/FindPabst.cmake)
# Check for specific machine/compiler options.
-INCLUDE (${CMAKE_CURRENT_SOURCE_DIR}/CMake/ConfigIA64.cmake) # SGI
Itanium2 flags.
-INCLUDE (${CMAKE_CURRENT_SOURCE_DIR}/CMake/ConfigX86_64.cmake) # AMD64
and Intel EM64T flags.
-INCLUDE (${CMAKE_CURRENT_SOURCE_DIR}/CMake/ConfigIccVersion.cmake) # Extract
Intel Compiler version info.
-INCLUDE (${CMAKE_CURRENT_SOURCE_DIR}/CMake/ConfigIrix.cmake) # SGI
Irix Mips compiler flags.
-INCLUDE (${CMAKE_CURRENT_SOURCE_DIR}/CMake/ConfigApple.cmake) # Apple
processor identification.
+INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/CMake/ConfigCompilerFlags.cmake)
## We need SCI_NOPERSISTENT to be defined
-FORCE_ADD_CXX_FLAGS("-DSCI_NOPERSISTENT")
-## Steve wants all the warnings turned on.
-FORCE_ADD_CXX_FLAGS("-Wall")
+FORCE_ADD_FLAGS(CMAKE_CXX_FLAGS "-DSCI_NOPERSISTENT")
SET(USE_STATS_COLLECTOR 0 CACHE BOOL "Enable stats collection")
- [MANTA] r1398 - in trunk: . CMake, bigler, 05/24/2007
Archive powered by MHonArc 2.6.16.