152 lines
4.0 KiB
CMake
152 lines
4.0 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 dl)
|
|
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")
|
|
|
|
set(SUBJECT_TARGET_MAP "${CMAKE_CURRENT_BINARY_DIR}/subject.spslr_targets")
|
|
|
|
add_custom_command(
|
|
OUTPUT "${SUBJECT_SPSLR_ASM}" "${SUBJECT_TARGET_MAP}"
|
|
COMMAND $<TARGET_FILE:spslr_patchcompile>
|
|
--out=${SUBJECT_SPSLR_ASM}
|
|
--dump-targets=${SUBJECT_TARGET_MAP}
|
|
${SUBJECT_SPSLR_FILES}
|
|
DEPENDS
|
|
spslr_patchcompile
|
|
subject_objs
|
|
${SUBJECT_SPSLR_FILES}
|
|
VERBATIM
|
|
)
|
|
|
|
add_custom_target(subject_spslr_metadata
|
|
DEPENDS "${SUBJECT_SPSLR_ASM}" "${SUBJECT_TARGET_MAP}"
|
|
)
|
|
|
|
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)
|
|
|
|
|
|
|
|
set(MODULE_SRC
|
|
module.c
|
|
)
|
|
|
|
set(MODULE_SPSLR_METADIR "${CMAKE_CURRENT_BINARY_DIR}/spslr_module")
|
|
set(MODULE_SPSLR_SRCROOT "${CMAKE_CURRENT_SOURCE_DIR}")
|
|
|
|
file(MAKE_DIRECTORY "${MODULE_SPSLR_METADIR}")
|
|
|
|
add_library(spslr_module_objs OBJECT ${MODULE_SRC})
|
|
target_include_directories(spslr_module_objs PRIVATE .)
|
|
add_dependencies(spslr_module_objs spslr_pinpoint)
|
|
|
|
target_compile_options(spslr_module_objs PRIVATE
|
|
-O1
|
|
-fPIC
|
|
-fplugin=$<TARGET_FILE:spslr_pinpoint>
|
|
-fplugin-arg-spslr_pinpoint-srcroot=${MODULE_SPSLR_SRCROOT}
|
|
-fplugin-arg-spslr_pinpoint-metadir=${MODULE_SPSLR_METADIR}
|
|
)
|
|
|
|
set(MODULE_SPSLR_FILES "")
|
|
foreach(src IN LISTS MODULE_SRC)
|
|
get_filename_component(abs_src "${src}" ABSOLUTE BASE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
|
|
file(RELATIVE_PATH rel_src "${MODULE_SPSLR_SRCROOT}" "${abs_src}")
|
|
file(TO_CMAKE_PATH "${rel_src}" rel_src)
|
|
list(APPEND MODULE_SPSLR_FILES "${MODULE_SPSLR_METADIR}/${rel_src}.spslr")
|
|
endforeach()
|
|
|
|
set(MODULE_SPSLR_ASM "${CMAKE_CURRENT_BINARY_DIR}/spslr_module_program.S")
|
|
set(MODULE_SPSLR_OBJ "${CMAKE_CURRENT_BINARY_DIR}/spslr_module_program.o")
|
|
|
|
add_custom_command(
|
|
OUTPUT "${MODULE_SPSLR_ASM}"
|
|
COMMAND $<TARGET_FILE:spslr_patchcompile>
|
|
--out=${MODULE_SPSLR_ASM}
|
|
--load-targets=${SUBJECT_TARGET_MAP}
|
|
--no-new-targets
|
|
--module
|
|
${MODULE_SPSLR_FILES}
|
|
DEPENDS
|
|
spslr_patchcompile
|
|
subject_spslr_metadata
|
|
spslr_module_objs
|
|
${MODULE_SPSLR_FILES}
|
|
VERBATIM
|
|
)
|
|
|
|
add_custom_command(
|
|
OUTPUT "${MODULE_SPSLR_OBJ}"
|
|
COMMAND ${CMAKE_C_COMPILER}
|
|
-fPIC
|
|
-c "${MODULE_SPSLR_ASM}"
|
|
-o "${MODULE_SPSLR_OBJ}"
|
|
DEPENDS "${MODULE_SPSLR_ASM}"
|
|
VERBATIM
|
|
)
|
|
|
|
set_source_files_properties("${MODULE_SPSLR_OBJ}" PROPERTIES
|
|
GENERATED TRUE
|
|
EXTERNAL_OBJECT TRUE
|
|
)
|
|
|
|
add_library(spslr_module SHARED
|
|
$<TARGET_OBJECTS:spslr_module_objs>
|
|
"${MODULE_SPSLR_OBJ}"
|
|
)
|
|
|
|
target_include_directories(spslr_module PRIVATE .)
|
|
set_target_properties(spslr_module PROPERTIES
|
|
OUTPUT_NAME "spslr_module"
|
|
PREFIX "lib"
|
|
)
|