Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

94 lines (80 sloc) 3.509 kb
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
INCLUDE(arch/CMakeLists.txt)
INCLUDE(listfmts/CMakeLists.txt)
INCLUDE(parsers/CMakeLists.txt)
INCLUDE(preprocs/CMakeLists.txt)
INCLUDE(dbgfmts/CMakeLists.txt)
INCLUDE(objfmts/CMakeLists.txt)
MESSAGE(STATUS "Standard modules: ${YASM_MODULES}")
#
# Generate init_plugin.c
# This file provides the yasm_init_plugin() function for yasmstd.
#
SET(INIT_PLUGIN_C ${CMAKE_CURRENT_BINARY_DIR}/init_plugin.c)
SET(INIT_PLUGIN_C_REV 1)
# Don't regen if no changes; default to regen
SET(regen_init_plugin_c TRUE)
IF(EXISTS ${INIT_PLUGIN_C})
FILE(READ ${INIT_PLUGIN_C} _old_init_plugin_c)
STRING(REGEX MATCHALL "[^\n]*\n" _lines "${_old_init_plugin_c}")
#MESSAGE(STATUS "Lines: ${_lines}")
LIST(GET _lines 0 _line0)
STRING(REGEX MATCH "([A-Za-z][A-Za-z0-9_]+[ ]?)+" _old_modules "${_line0}")
#MESSAGE(STATUS "Old modules: ${_old_modules}")
STRING(REPLACE ";" " " _modules_str "${YASM_MODULES}")
STRING(COMPARE EQUAL "${_old_modules}" "${_modules_str} " _modules_match)
LIST(GET _lines 1 _line1)
STRING(REGEX MATCH "rev [0-9]+" _old_modules_rev "${_line1}")
#MESSAGE(STATUS "Old modules rev: ${_old_modules_rev}")
STRING(COMPARE EQUAL "${_old_modules_rev}" "rev ${INIT_PLUGIN_C_REV}"
_modules_rev_match)
IF(_modules_match AND _modules_rev_match)
SET(regen_init_plugin_c FALSE)
ENDIF(_modules_match AND _modules_rev_match)
ENDIF(EXISTS ${INIT_PLUGIN_C})
IF(regen_init_plugin_c)
MESSAGE(STATUS "Generating standard plugin initialization file")
STRING(REPLACE ";" " " _modules_str "${YASM_MODULES}")
FILE(WRITE ${INIT_PLUGIN_C} "/* ${_modules_str} \n")
FILE(APPEND ${INIT_PLUGIN_C} " rev ${INIT_PLUGIN_C_REV}\n")
FILE(APPEND ${INIT_PLUGIN_C} " */\n\n")
FILE(APPEND ${INIT_PLUGIN_C} "#include <libyasm.h>\n")
FILE(APPEND ${INIT_PLUGIN_C} "#include <libyasm/module.h>\n\n")
FOREACH(module ${YASM_MODULES})
STRING(REGEX MATCHALL "[a-zA-Z][a-zA-Z0-9]+" _modulepath ${module})
LIST(GET _modulepath 0 _type)
LIST(GET _modulepath 1 _keyword)
FILE(APPEND ${INIT_PLUGIN_C}
"extern yasm_${_type}_module yasm_${_keyword}_LTX_${_type};\n")
ENDFOREACH(module)
FILE(APPEND ${INIT_PLUGIN_C} "\n#ifdef _MSC_VER\n")
FILE(APPEND ${INIT_PLUGIN_C} "__declspec(dllexport)\n")
FILE(APPEND ${INIT_PLUGIN_C} "#endif\n")
FILE(APPEND ${INIT_PLUGIN_C} "void\n")
FILE(APPEND ${INIT_PLUGIN_C} "yasm_init_plugin(void)\n")
FILE(APPEND ${INIT_PLUGIN_C} "{\n")
FOREACH(module ${YASM_MODULES})
STRING(REGEX MATCHALL "[a-zA-Z][a-zA-Z0-9]+" _modulepath ${module})
LIST(GET _modulepath 0 _type)
LIST(GET _modulepath 1 _keyword)
SET(_data "yasm_${_keyword}_LTX_${_type}")
STRING(TOUPPER "${_type}" _type)
FILE(APPEND ${INIT_PLUGIN_C}
" yasm_register_module(YASM_MODULE_${_type}, \"${_keyword}\", &${_data});\n")
ENDFOREACH(module)
FILE(APPEND ${INIT_PLUGIN_C} "}\n")
ELSE(regen_init_plugin_c)
MESSAGE(STATUS "Not regenerating static modules file (unchanged)")
ENDIF(regen_init_plugin_c)
SET_SOURCE_FILES_PROPERTIES(init_plugin.c GENERATED)
SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR})
ADD_LIBRARY(yasmstd MODULE
init_plugin.c
${YASM_MODULES_SRC}
)
TARGET_LINK_LIBRARIES(yasmstd libyasm)
IF(WIN32)
INSTALL(TARGETS yasmstd LIBRARY DESTINATION bin)
ELSE(WIN32)
INSTALL(TARGETS yasmstd LIBRARY DESTINATION lib)
ENDIF(WIN32)
Jump to Line
Something went wrong with that request. Please try again.