selfpatch-slr/subject/CMakeLists.txt

69 lines
1.8 KiB
CMake

set(SUBJECT_SRC
main.c
second.c
sub/second.c
)
set(SUBJECT_SPSLR_METADIR "${CMAKE_CURRENT_BINARY_DIR}/spslr")
set(SUBJECT_SPSLR_SRCROOT "${CMAKE_CURRENT_SOURCE_DIR}")
file(MAKE_DIRECTORY "${SUBJECT_SPSLR_METADIR}")
add_library(subject_objs OBJECT ${SUBJECT_SRC})
target_include_directories(subject_objs PRIVATE .)
target_link_libraries(subject_objs PRIVATE spslr_selfpatch)
add_dependencies(subject_objs spslr_pinpoint)
target_compile_options(subject_objs PRIVATE
-O1
-fplugin=$<TARGET_FILE:spslr_pinpoint>
-fplugin-arg-spslr_pinpoint-srcroot=${SUBJECT_SPSLR_SRCROOT}
-fplugin-arg-spslr_pinpoint-metadir=${SUBJECT_SPSLR_METADIR}
)
set(SUBJECT_SPSLR_FILES "")
foreach(src IN LISTS SUBJECT_SRC)
get_filename_component(abs_src "${src}" ABSOLUTE BASE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
file(RELATIVE_PATH rel_src "${SUBJECT_SPSLR_SRCROOT}" "${abs_src}")
file(TO_CMAKE_PATH "${rel_src}" rel_src)
list(APPEND SUBJECT_SPSLR_FILES "${SUBJECT_SPSLR_METADIR}/${rel_src}.spslr")
endforeach()
set(SUBJECT_SPSLR_ASM "${CMAKE_CURRENT_BINARY_DIR}/subject_spslr_program.S")
set(SUBJECT_SPSLR_OBJ "${CMAKE_CURRENT_BINARY_DIR}/subject_spslr_program.o")
add_custom_command(
OUTPUT "${SUBJECT_SPSLR_ASM}"
COMMAND $<TARGET_FILE:spslr_patchcompile>
--out=${SUBJECT_SPSLR_ASM}
${SUBJECT_SPSLR_FILES}
DEPENDS
spslr_patchcompile
$<TARGET_OBJECTS:subject_objs>
VERBATIM
)
add_custom_command(
OUTPUT "${SUBJECT_SPSLR_OBJ}"
COMMAND ${CMAKE_C_COMPILER}
-c "${SUBJECT_SPSLR_ASM}"
-o "${SUBJECT_SPSLR_OBJ}"
DEPENDS "${SUBJECT_SPSLR_ASM}"
VERBATIM
)
set_source_files_properties("${SUBJECT_SPSLR_OBJ}" PROPERTIES
GENERATED TRUE
EXTERNAL_OBJECT TRUE
)
add_executable(subject
$<TARGET_OBJECTS:subject_objs>
"${SUBJECT_SPSLR_OBJ}"
)
target_include_directories(subject PRIVATE .)
target_link_libraries(subject PRIVATE spslr_selfpatch)
add_dependencies(subject spslr_selfpatch)