blob: 3378b7743499877d866bb9cc563d5ed1e7240946 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
# Specify Flex and Bison target
BISON_TARGET(ptx_parser ptx.y ${CMAKE_CURRENT_BINARY_DIR}/ptx.tab.c
COMPILE_FLAGS "--name-prefix=ptx_ -v -d --file-prefix=${CMAKE_CURRENT_BINARY_DIR}/ptx")
BISON_TARGET(ptxinfo_parser ptxinfo.y ${CMAKE_CURRENT_BINARY_DIR}/ptxinfo.tab.c
COMPILE_FLAGS "--name-prefix=ptxinfo_ -v -d --file-prefix=${CMAKE_CURRENT_BINARY_DIR}/ptxinfo")
FLEX_TARGET(ptx_lexer ptx.l ${CMAKE_CURRENT_BINARY_DIR}/lex.ptx_.c)
FLEX_TARGET(ptxinfo_lexer ptxinfo.l ${CMAKE_CURRENT_BINARY_DIR}/lex.ptxinfo_.c)
ADD_FLEX_BISON_DEPENDENCY(ptx_lexer ptx_parser)
ADD_FLEX_BISON_DEPENDENCY(ptxinfo_lexer ptxinfo_parser)
# The flex and bison are using CXX, need to set their generated files to CXX so that
# they can be compiled and linked
set_source_files_properties(${BISON_ptx_parser_OUTPUT_SOURCE}
${FLEX_ptx_lexer_OUTPUTS}
${BISON_ptxinfo_parser_OUTPUT_SOURCE}
${FLEX_ptxinfo_lexer_OUTPUTS}
PROPERTIES LANGUAGE CXX)
# Create libptxsim.a
add_library(ptxsim STATIC
cuda_device_printf.cc
cuda_device_runtime.cc
cuda-sim.cc
instructions.cc
memory.cc
ptx_ir.cc
ptx_loader.cc
ptx_parser.cc
ptx_sim.cc
ptx-stats.cc
decuda_pred_table/decuda_pred_table.cc
${BISON_ptx_parser_OUTPUT_SOURCE} ${FLEX_ptx_lexer_OUTPUTS}
${BISON_ptxinfo_parser_OUTPUT_SOURCE} ${FLEX_ptxinfo_lexer_OUTPUTS})
# Define this for all source files, though we just need it for parser
target_compile_definitions(ptxsim PRIVATE YYDEBUG)
target_include_directories(ptxsim PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/decuda_pred_table)
target_include_directories(ptxsim PUBLIC ${CUDAToolkit_INCLUDE_DIRS})
target_include_directories(ptxsim PRIVATE ${CMAKE_BINARY_DIR})
# ptxsim need buildstring
add_dependencies(ptxsim gen_build_string)
# Create instructions.h using custom command
add_custom_target(gen_instructions_h DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/instructions.h)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/instructions.h
COMMAND touch ${CMAKE_CURRENT_BINARY_DIR}/instructions.h
COMMAND chmod +w ${CMAKE_CURRENT_BINARY_DIR}/instructions.h
COMMAND echo "// DO NOT EDIT THIS FILE! IT IS AUTOMATICALLY GENERATED BY THE MAKEFILE (see target for instructions.h)" > ${CMAKE_CURRENT_BINARY_DIR}/instructions.h
COMMAND echo "#include \"ptx_ir.h\"" >> ${CMAKE_CURRENT_BINARY_DIR}/instructions.h
COMMAND echo "#ifndef instructions_h_included" >> ${CMAKE_CURRENT_BINARY_DIR}/instructions.h
COMMAND echo "#define instructions_h_included" >> ${CMAKE_CURRENT_BINARY_DIR}/instructions.h
COMMAND cat ${CMAKE_CURRENT_SOURCE_DIR}/instructions.cc | grep "_impl(" | sed "s/{.*//" | sed "s/$/;/" >> ${CMAKE_CURRENT_BINARY_DIR}/instructions.h
COMMAND echo "#endif" >> ${CMAKE_CURRENT_BINARY_DIR}/instructions.h
# COMMAND chmod -w ${CMAKE_CURRENT_BINARY_DIR}/instructions.h
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/instructions.cc
VERBATIM
)
add_dependencies(ptxsim gen_instructions_h)
# Create ptx_parser_decode.def using custom command
add_custom_target(gen_ptx_parser_decode DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/ptx_parser_decode.def)
if(UNIX)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/ptx_parser_decode.def
COMMAND cat ${CMAKE_CURRENT_BINARY_DIR}/ptx.tab.h | grep "=" | sed "s/^[ ]\\+//" | sed -E "s/\\s+\\/\\*.+\\*\\///" | sed "s/[=,]//g" | sed "s/\\([_A-Z1-9]\\+\\)[ ]\\+\\([0-9]\\+\\)/\\1 \\1/" | sed "s/^/DEF(/" | sed "s/ /,\"/" | sed "s/$/\")/" | sed "/YYerror/d;/YYEOF/d;/YYEMPTY/d;/YYUNDEF/d;" > ${CMAKE_CURRENT_BINARY_DIR}/ptx_parser_decode.def
DEPENDS ${BISON_ptx_parser_OUTPUTS}
VERBATIM
)
else()
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/ptx_parser_decode.def
COMMAND cat ${CMAKE_CURRENT_BINARY_DIR}/ptx.tab.h | grep "=" | sed -E "s/^ +//" | sed -E "s/\\s+\\/\\*.+\\*\\///" | sed "s/[=,]//g" | sed -E "s/([_A-Z1-9]+).*/\\1 \\1/" | sed "s/^/DEF(/" | sed "s/ /,\"/" | sed "s/$/\")/" | sed "/YYerror/d;/YYEOF/d;/YYEMPTY/d;/YYUNDEF/d;" > ${CMAKE_CURRENT_BINARY_DIR}/ptx_parser_decode.def
DEPENDS ${BISON_ptx_parser_OUTPUTS}
VERBATIM
)
endif()
add_dependencies(ptxsim gen_ptx_parser_decode)
|