DRC | c869c2c | 2010-10-15 08:43:32 +0000 | [diff] [blame] | 1 | if(NOT DEFINED NASM) |
DRC | 105f9a9 | 2011-11-29 09:02:10 +0000 | [diff] [blame] | 2 | set(NASM nasm CACHE PATH "Path to NASM/YASM executable") |
DRC | c869c2c | 2010-10-15 08:43:32 +0000 | [diff] [blame] | 3 | endif() |
| 4 | |
| 5 | if(SIMD_X86_64) |
| 6 | set(NAFLAGS -fwin64 -DWIN64 -D__x86_64__ -I${CMAKE_SOURCE_DIR}/win/ |
| 7 | -I${CMAKE_CURRENT_SOURCE_DIR}/) |
| 8 | else() |
| 9 | set(NAFLAGS -fwin32 -DWIN32 -I${CMAKE_SOURCE_DIR}/win/ |
| 10 | -I${CMAKE_CURRENT_SOURCE_DIR}/) |
| 11 | endif() |
| 12 | |
DRC | c869c2c | 2010-10-15 08:43:32 +0000 | [diff] [blame] | 13 | # This only works if building from the command line. There is currently no way |
| 14 | # to set a variable's value based on the build type when using the MSVC IDE. |
| 15 | if(CMAKE_BUILD_TYPE STREQUAL "Debug" |
| 16 | OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") |
| 17 | set(NAFLAGS ${NAFLAGS} -g) |
| 18 | endif() |
| 19 | |
| 20 | if(SIMD_X86_64) |
DRC | da5220a | 2011-03-02 02:17:30 +0000 | [diff] [blame] | 21 | set(SIMD_BASENAMES jfsseflt-64 jccolss2-64 jdcolss2-64 jcgrass2-64 |
| 22 | jcsamss2-64 jdsamss2-64 jdmerss2-64 jcqnts2i-64 jfss2fst-64 jfss2int-64 |
| 23 | jiss2red-64 jiss2int-64 jiss2fst-64 jcqnts2f-64 jiss2flt-64) |
DRC | c869c2c | 2010-10-15 08:43:32 +0000 | [diff] [blame] | 24 | message(STATUS "Building x86_64 SIMD extensions") |
| 25 | else() |
DRC | da5220a | 2011-03-02 02:17:30 +0000 | [diff] [blame] | 26 | set(SIMD_BASENAMES jsimdcpu jccolmmx jcgrammx jdcolmmx jcsammmx jdsammmx |
| 27 | jdmermmx jcqntmmx jfmmxfst jfmmxint jimmxred jimmxint jimmxfst jcqnt3dn |
| 28 | jf3dnflt ji3dnflt jcqntsse jfsseflt jisseflt jccolss2 jcgrass2 jdcolss2 |
| 29 | jcsamss2 jdsamss2 jdmerss2 jcqnts2i jfss2fst jfss2int jiss2red jiss2int |
| 30 | jiss2fst jcqnts2f jiss2flt) |
DRC | c869c2c | 2010-10-15 08:43:32 +0000 | [diff] [blame] | 31 | message(STATUS "Building i386 SIMD extensions") |
| 32 | endif() |
| 33 | |
| 34 | if(MSVC_IDE) |
DRC | 926e01f | 2011-04-06 06:35:38 +0000 | [diff] [blame] | 35 | set(OBJDIR "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}") |
DRC | c869c2c | 2010-10-15 08:43:32 +0000 | [diff] [blame] | 36 | else() |
| 37 | set(OBJDIR ${CMAKE_CURRENT_BINARY_DIR}) |
| 38 | endif() |
| 39 | |
DRC | 8015a30 | 2012-03-17 14:32:38 +0000 | [diff] [blame] | 40 | file(GLOB INC_FILES *.inc) |
| 41 | |
DRC | c869c2c | 2010-10-15 08:43:32 +0000 | [diff] [blame] | 42 | foreach(file ${SIMD_BASENAMES}) |
DRC | d830d36 | 2010-10-15 20:07:41 +0000 | [diff] [blame] | 43 | set(DEPFILE "") |
DRC | c869c2c | 2010-10-15 08:43:32 +0000 | [diff] [blame] | 44 | set(SIMD_SRC ${CMAKE_CURRENT_SOURCE_DIR}/${file}.asm) |
DRC | d830d36 | 2010-10-15 20:07:41 +0000 | [diff] [blame] | 45 | if(${file} MATCHES col) |
DRC | 29d8f25 | 2012-08-07 21:59:59 +0000 | [diff] [blame] | 46 | set(DEPFILE ${file}) |
DRC | d830d36 | 2010-10-15 20:07:41 +0000 | [diff] [blame] | 47 | string(REGEX REPLACE "col" "clr" DEPFILE ${DEPFILE}) |
DRC | 29d8f25 | 2012-08-07 21:59:59 +0000 | [diff] [blame] | 48 | set(DEPFILE ${CMAKE_CURRENT_SOURCE_DIR}/${DEPFILE}.asm) |
DRC | d830d36 | 2010-10-15 20:07:41 +0000 | [diff] [blame] | 49 | endif() |
| 50 | if(${file} MATCHES mer) |
DRC | 29d8f25 | 2012-08-07 21:59:59 +0000 | [diff] [blame] | 51 | set(DEPFILE ${file}) |
DRC | d830d36 | 2010-10-15 20:07:41 +0000 | [diff] [blame] | 52 | string(REGEX REPLACE "mer" "mrg" DEPFILE ${DEPFILE}) |
DRC | 29d8f25 | 2012-08-07 21:59:59 +0000 | [diff] [blame] | 53 | set(DEPFILE ${CMAKE_CURRENT_SOURCE_DIR}/${DEPFILE}.asm) |
DRC | d830d36 | 2010-10-15 20:07:41 +0000 | [diff] [blame] | 54 | endif() |
DRC | 58b6ec4 | 2011-04-02 02:14:13 +0000 | [diff] [blame] | 55 | if(${file} MATCHES gra) |
DRC | 29d8f25 | 2012-08-07 21:59:59 +0000 | [diff] [blame] | 56 | set(DEPFILE ${file}) |
DRC | 58b6ec4 | 2011-04-02 02:14:13 +0000 | [diff] [blame] | 57 | string(REGEX REPLACE "gra" "gry" DEPFILE ${DEPFILE}) |
DRC | 29d8f25 | 2012-08-07 21:59:59 +0000 | [diff] [blame] | 58 | set(DEPFILE ${CMAKE_CURRENT_SOURCE_DIR}/${DEPFILE}.asm) |
DRC | 58b6ec4 | 2011-04-02 02:14:13 +0000 | [diff] [blame] | 59 | endif() |
DRC | c869c2c | 2010-10-15 08:43:32 +0000 | [diff] [blame] | 60 | set(SIMD_OBJ ${OBJDIR}/${file}.obj) |
DRC | 8015a30 | 2012-03-17 14:32:38 +0000 | [diff] [blame] | 61 | add_custom_command(OUTPUT ${SIMD_OBJ} |
| 62 | DEPENDS ${SIMD_SRC} ${DEPFILE} ${INC_FILES} |
DRC | c869c2c | 2010-10-15 08:43:32 +0000 | [diff] [blame] | 63 | COMMAND ${NASM} ${NAFLAGS} ${SIMD_SRC} -o${SIMD_OBJ}) |
| 64 | set(SIMD_OBJS ${SIMD_OBJS} ${SIMD_OBJ}) |
| 65 | endforeach() |
| 66 | |
| 67 | set(SIMD_OBJS ${SIMD_OBJS} PARENT_SCOPE) |
| 68 | add_custom_target(simd DEPENDS ${SIMD_OBJS}) |