| add_custom_target(libc_loader_tests) |
| |
| # A rule to add loader tests. When we have a complete loader, we should |
| # be able to use the add_libc_unittest rule or an extension of it. But, |
| # while the loader is getting built, we need to use a special rule like |
| # this. |
| function(add_loader_test target_name) |
| if(NOT CMAKE_HOST_UNIX) |
| message( |
| WARNING |
| "Loader tests currently assume a POSIX/Unix like environment and " |
| "may not work on your platform.") |
| endif() |
| |
| cmake_parse_arguments( |
| "ADD_LOADER_TEST" |
| "" # No option arguments |
| "SRC" # Single value arguments |
| "DEPENDS;ARGS;ENV" # Multivalue arguments. |
| ${ARGN} |
| ) |
| |
| get_fq_target_name(${target_name} fq_target_name) |
| add_executable( |
| ${fq_target_name} |
| EXCLUDE_FROM_ALL |
| ${ADD_LOADER_TEST_SRC} |
| ) |
| |
| set_target_properties(${fq_target_name} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) |
| |
| target_include_directories( |
| ${fq_target_name} |
| PRIVATE |
| ${LIBC_SOURCE_DIR} |
| ${LIBC_BUILD_DIR} |
| ${LIBC_BUILD_DIR}/include |
| ) |
| |
| if(ADD_LOADER_TEST_DEPENDS) |
| get_fq_deps_list(fq_deps_list ${ADD_LOADER_TEST_DEPENDS}) |
| add_dependencies(${fq_target_name} ${fq_deps_list}) |
| get_object_files_for_test(link_object_files has_skipped_entrypoint_list ${fq_deps_list}) |
| target_link_libraries(${fq_target_name} ${link_object_files}) |
| endif() |
| |
| target_link_options( |
| ${fq_target_name} |
| BEFORE PRIVATE |
| -nostdlib |
| ) |
| |
| add_custom_command( |
| TARGET ${fq_target_name} |
| POST_BUILD |
| COMMAND ${ADD_LOADER_TEST_ENV} $<TARGET_FILE:${fq_target_name}> ${ADD_LOADER_TEST_ARGS} |
| ) |
| |
| add_dependencies(libc_loader_tests ${fq_target_name}) |
| endfunction(add_loader_test) |
| |
| if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${LIBC_TARGET_OS}) |
| add_subdirectory(${LIBC_TARGET_OS}) |
| endif() |