blob: e1fb3ba2836b64f70bdce51e83f6811b41f43de8 (
plain) (
blame)
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
|
#===------------------------------------------------------------------------===#
#
# The KLEE Symbolic Virtual Machine
#
# This file is distributed under the University of Illinois Open Source
# License. See LICENSE.TXT for details.
#
#===------------------------------------------------------------------------===#
function(compile_bitcode_library library_name source_files compile_cc_flags compile_cxx_flags opt_suffix)
# Compile every source file
set(BC_FILES)
foreach(source_file ${source_files})
# Get filename without extension
get_filename_component(file_name_only "${source_file}" NAME_WE)
set(bc_file "${CMAKE_CURRENT_BINARY_DIR}/${file_name_only}${opt_suffix}.bc" )
get_filename_component(source_file_type "${source_file}" EXT)
if("${source_file_type}" STREQUAL ".cpp")
add_custom_command(
OUTPUT ${bc_file}
COMMAND ${LLVMCXX} -c "-emit-llvm" ${compile_cxx_flags} "${source_file}" -o ${bc_file}
DEPENDS ${source_file}
)
else()
add_custom_command(
OUTPUT ${bc_file}
COMMAND ${LLVMCC} -c "-emit-llvm" ${compile_cc_flags} "${source_file}" -o ${bc_file}
DEPENDS ${source_file}
)
endif()
list(APPEND BC_FILES ${bc_file})
endforeach()
# Add command to link them to an archive
add_custom_command(
OUTPUT ${library_name}
COMMAND ${LLVM_AR} rcs ${library_name} ${BC_FILES}
DEPENDS ${BC_FILES}
)
endfunction(compile_bitcode_library)
function(prefix_with_path files prefix output_var)
set(_result)
foreach(file ${files})
list(APPEND _result "${prefix}${file}")
endforeach()
set(${output_var} "${_result}" PARENT_SCOPE)
endfunction(prefix_with_path)
function(add_bitcode_library_targets lib_prefix prefixed_files cc_extra_args cxx_extra_args)
set(_lib_dependencies)
foreach(_suffix ${LIB_BC_SUFFIX})
set(final_cc_flags ${LIB_BC_FLAGS_${_suffix}} ${cc_extra_args})
set(final_cxx_flags ${LIB_BC_FLAGS_${_suffix}} ${cxx_extra_args})
compile_bitcode_library("${KLEE_RUNTIME_DIRECTORY}/libklee${lib_prefix}${_suffix}.bca" "${prefixed_files}" "${final_cc_flags}" "${final_cxx_flags}" "${_suffix}")
list(APPEND _lib_dependencies "${KLEE_RUNTIME_DIRECTORY}/libklee${lib_prefix}${_suffix}.bca")
endforeach()
add_custom_target(${lib_prefix} DEPENDS "${_lib_dependencies}")
endfunction(add_bitcode_library_targets)
|