blob: d0e10daefa6ca069ca93d7ba3c32f961ee4dc985 [file] [log] [blame]
PROJECT(x86mod)
CMAKE_MINIMUM_REQUIRED(VERSION 2.4)
SET(YASM_SOURCE_DIR "${PROJECT_SOURCE_DIR}/../.."
CACHE STRING "Location of Yasm source")
IF (NOT YASM_SOURCE_DIR)
MESSAGE(FATAL_ERROR "YASM_SOURCE_DIR must be defined")
ENDIF (NOT YASM_SOURCE_DIR)
SET(SOURCE_DIR "${YASM_SOURCE_DIR}/modules/arch/x86")
SET (YASM_POSSIBLE_PATHS
"$ENV{ProgramFiles}/Yasm/Bin"
/usr/bin
/usr/local/bin
)
FIND_PROGRAM(YASM_PATH yasm
PATHS ${YASM_POSSIBLE_PATHS}
)
SET (GENPERF_POSSIBLE_PATHS
${YASM_SOURCE_DIR}/objdir/tools/genperf
${YASM_SOURCE_DIR}/objdir/tools/genperf/Debug
${YASM_SOURCE_DIR}/objdir/tools/genperf/Release
)
FIND_PROGRAM(GENPERF_PATH genperf
DOC "The path to the yasm genperf executable"
PATHS ${GENPERF_POSSIBLE_PATHS}
)
IF (NOT GENPERF_PATH)
MESSAGE(FATAL_ERROR "Could not find genperf executable")
ENDIF (NOT GENPERF_PATH)
SET (YASM_POSSIBLE_INCLUDE_PATHS
"${YASM_PATH}"
"${YASM_PATH}/../include"
"$ENV{ProgramFiles}/Yasm/Include"
/usr/include
/usr/local/include
)
FIND_PATH(YASM_INCLUDE_PATH NAMES libyasm.h
DOC "The path to the libyasm include files"
PATHS ${YASM_POSSIBLE_INCLUDE_PATHS}
)
IF (NOT YASM_INCLUDE_PATH)
MESSAGE(FATAL_ERROR "Could not find yasm include files")
ENDIF (NOT YASM_INCLUDE_PATH)
INCLUDE_DIRECTORIES(${YASM_INCLUDE_PATH})
INCLUDE_DIRECTORIES(${YASM_SOURCE_DIR})
SET (YASM_POSSIBLE_LIB_PATHS
"${YASM_PATH}"
"${YASM_PATH}/../lib"
"${YASM_INCLUDE_PATH}/../lib"
"$ENV{ProgramFiles}/Yasm/Lib"
/usr/lib
/usr/local/lib
)
FIND_LIBRARY(YASM_LIBRARY
NAMES yasm
DOC "The path to the libyasm library"
PATHS ${YASM_POSSIBLE_LIB_PATHS}
)
IF (NOT YASM_LIBRARY)
MESSAGE(FATAL_ERROR "Could not find yasm library")
ENDIF (NOT YASM_LIBRARY)
INCLUDE(FindPythonInterp)
IF (NOT PYTHON_EXECUTABLE)
MESSAGE(FATAL_ERROR "Could not find Python executable")
ENDIF (NOT PYTHON_EXECUTABLE)
INCLUDE_DIRECTORIES(${SOURCE_DIR})
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
ADD_CUSTOM_COMMAND(
OUTPUT
${CMAKE_CURRENT_BINARY_DIR}/x86insns.c
${CMAKE_CURRENT_BINARY_DIR}/x86insn_gas.gperf
${CMAKE_CURRENT_BINARY_DIR}/x86insn_nasm.gperf
COMMAND ${PYTHON_EXECUTABLE} ${SOURCE_DIR}/gen_x86_insn.py
${CMAKE_CURRENT_BINARY_DIR}/x86insns.c
${CMAKE_CURRENT_BINARY_DIR}/x86insn_gas.gperf
${CMAKE_CURRENT_BINARY_DIR}/x86insn_nasm.gperf
MAIN_DEPENDENCY ${SOURCE_DIR}/gen_x86_insn.py
)
macro (YASM_GENPERF _in_NAME _out_NAME)
add_custom_command(
OUTPUT ${_out_NAME}
COMMAND ${GENPERF_PATH} ${_in_NAME} ${_out_NAME}
MAIN_DEPENDENCY ${_in_NAME}
)
endmacro (YASM_GENPERF)
YASM_GENPERF(
${SOURCE_DIR}/x86cpu.gperf
${CMAKE_CURRENT_BINARY_DIR}/x86cpu.c
)
YASM_GENPERF(
${SOURCE_DIR}/x86regtmod.gperf
${CMAKE_CURRENT_BINARY_DIR}/x86regtmod.c
)
YASM_GENPERF(
${CMAKE_CURRENT_BINARY_DIR}/x86insn_nasm.gperf
${CMAKE_CURRENT_BINARY_DIR}/x86insn_nasm.c
)
YASM_GENPERF(
${CMAKE_CURRENT_BINARY_DIR}/x86insn_gas.gperf
${CMAKE_CURRENT_BINARY_DIR}/x86insn_gas.c
)
SET(insn_DEPS
${CMAKE_CURRENT_BINARY_DIR}/x86insn_nasm.c
${CMAKE_CURRENT_BINARY_DIR}/x86insn_gas.c
${CMAKE_CURRENT_BINARY_DIR}/x86insns.c
)
SET_SOURCE_FILES_PROPERTIES(${SOURCE_DIR}/x86id.c PROPERTIES
OBJECT_DEPENDS "${insn_DEPS}"
)
ADD_LIBRARY(x86mod MODULE
init_plugin.c
${SOURCE_DIR}/x86arch.c
${SOURCE_DIR}/x86bc.c
${SOURCE_DIR}/x86expr.c
${SOURCE_DIR}/x86id.c
x86cpu.c
x86regtmod.c
)
TARGET_LINK_LIBRARIES(x86mod ${YASM_LIBRARY})