blob: fc2ce9929a4ff0159c4e5608922675ab78cc3655 [file] [log] [blame]
DRCc869c2c2010-10-15 08:43:32 +00001if(NOT DEFINED NASM)
DRC105f9a92011-11-29 09:02:10 +00002 set(NASM nasm CACHE PATH "Path to NASM/YASM executable")
DRCc869c2c2010-10-15 08:43:32 +00003endif()
4
5if(SIMD_X86_64)
6 set(NAFLAGS -fwin64 -DWIN64 -D__x86_64__ -I${CMAKE_SOURCE_DIR}/win/
7 -I${CMAKE_CURRENT_SOURCE_DIR}/)
8else()
9 set(NAFLAGS -fwin32 -DWIN32 -I${CMAKE_SOURCE_DIR}/win/
10 -I${CMAKE_CURRENT_SOURCE_DIR}/)
11endif()
12
DRCc869c2c2010-10-15 08:43:32 +000013# 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.
15if(CMAKE_BUILD_TYPE STREQUAL "Debug"
16 OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
17 set(NAFLAGS ${NAFLAGS} -g)
18endif()
19
20if(SIMD_X86_64)
DRCda5220a2011-03-02 02:17:30 +000021 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)
DRCc869c2c2010-10-15 08:43:32 +000024 message(STATUS "Building x86_64 SIMD extensions")
25else()
DRCda5220a2011-03-02 02:17:30 +000026 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)
DRCc869c2c2010-10-15 08:43:32 +000031 message(STATUS "Building i386 SIMD extensions")
32endif()
33
34if(MSVC_IDE)
DRC926e01f2011-04-06 06:35:38 +000035 set(OBJDIR "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}")
DRCc869c2c2010-10-15 08:43:32 +000036else()
37 set(OBJDIR ${CMAKE_CURRENT_BINARY_DIR})
38endif()
39
DRC8015a302012-03-17 14:32:38 +000040file(GLOB INC_FILES *.inc)
41
DRCc869c2c2010-10-15 08:43:32 +000042foreach(file ${SIMD_BASENAMES})
DRCd830d362010-10-15 20:07:41 +000043 set(DEPFILE "")
DRCc869c2c2010-10-15 08:43:32 +000044 set(SIMD_SRC ${CMAKE_CURRENT_SOURCE_DIR}/${file}.asm)
DRCd830d362010-10-15 20:07:41 +000045 if(${file} MATCHES col)
DRC29d8f252012-08-07 21:59:59 +000046 set(DEPFILE ${file})
DRCd830d362010-10-15 20:07:41 +000047 string(REGEX REPLACE "col" "clr" DEPFILE ${DEPFILE})
DRC29d8f252012-08-07 21:59:59 +000048 set(DEPFILE ${CMAKE_CURRENT_SOURCE_DIR}/${DEPFILE}.asm)
DRCd830d362010-10-15 20:07:41 +000049 endif()
50 if(${file} MATCHES mer)
DRC29d8f252012-08-07 21:59:59 +000051 set(DEPFILE ${file})
DRCd830d362010-10-15 20:07:41 +000052 string(REGEX REPLACE "mer" "mrg" DEPFILE ${DEPFILE})
DRC29d8f252012-08-07 21:59:59 +000053 set(DEPFILE ${CMAKE_CURRENT_SOURCE_DIR}/${DEPFILE}.asm)
DRCd830d362010-10-15 20:07:41 +000054 endif()
DRC58b6ec42011-04-02 02:14:13 +000055 if(${file} MATCHES gra)
DRC29d8f252012-08-07 21:59:59 +000056 set(DEPFILE ${file})
DRC58b6ec42011-04-02 02:14:13 +000057 string(REGEX REPLACE "gra" "gry" DEPFILE ${DEPFILE})
DRC29d8f252012-08-07 21:59:59 +000058 set(DEPFILE ${CMAKE_CURRENT_SOURCE_DIR}/${DEPFILE}.asm)
DRC58b6ec42011-04-02 02:14:13 +000059 endif()
DRCc869c2c2010-10-15 08:43:32 +000060 set(SIMD_OBJ ${OBJDIR}/${file}.obj)
DRC8015a302012-03-17 14:32:38 +000061 add_custom_command(OUTPUT ${SIMD_OBJ}
62 DEPENDS ${SIMD_SRC} ${DEPFILE} ${INC_FILES}
DRCc869c2c2010-10-15 08:43:32 +000063 COMMAND ${NASM} ${NAFLAGS} ${SIMD_SRC} -o${SIMD_OBJ})
64 set(SIMD_OBJS ${SIMD_OBJS} ${SIMD_OBJ})
65endforeach()
66
67set(SIMD_OBJS ${SIMD_OBJS} PARENT_SCOPE)
68add_custom_target(simd DEPENDS ${SIMD_OBJS})