19a077806SSiva Chandra Reddy# A rule to add startup system tests. When we have a complete startup system, 29a077806SSiva Chandra Reddy# we should be able to use the add_libc_unittest rule or an extension of it. 39a077806SSiva Chandra Reddy# But, while the system is being developed, we need to use a special rule like 49a077806SSiva Chandra Reddy# this. 59a077806SSiva Chandra Reddyfunction(add_startup_test target_name) 69a077806SSiva Chandra Reddy if(NOT CMAKE_HOST_UNIX) 79a077806SSiva Chandra Reddy message( 89a077806SSiva Chandra Reddy WARNING 99a077806SSiva Chandra Reddy "Test for the startup system currently assume a POSIX/Unix like " 109a077806SSiva Chandra Reddy "environment and may not work on your platform.") 119a077806SSiva Chandra Reddy endif() 129a077806SSiva Chandra Reddy 139a077806SSiva Chandra Reddy cmake_parse_arguments( 149a077806SSiva Chandra Reddy "ADD_STARTUP_TEST" 159a077806SSiva Chandra Reddy "" # No option arguments 169a077806SSiva Chandra Reddy "SRC" # Single value arguments 179a077806SSiva Chandra Reddy "DEPENDS;ARGS;ENV" # Multivalue arguments. 189a077806SSiva Chandra Reddy ${ARGN} 199a077806SSiva Chandra Reddy ) 209a077806SSiva Chandra Reddy 219a077806SSiva Chandra Reddy get_fq_target_name(${target_name} fq_target_name) 229a077806SSiva Chandra Reddy add_executable( 239a077806SSiva Chandra Reddy ${fq_target_name} 249a077806SSiva Chandra Reddy EXCLUDE_FROM_ALL 259a077806SSiva Chandra Reddy ${ADD_STARTUP_TEST_SRC} 269a077806SSiva Chandra Reddy ) 279a077806SSiva Chandra Reddy 289a077806SSiva Chandra Reddy set_target_properties(${fq_target_name} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) 299a077806SSiva Chandra Reddy 309a077806SSiva Chandra Reddy target_include_directories( 319a077806SSiva Chandra Reddy ${fq_target_name} 329a077806SSiva Chandra Reddy PRIVATE 339a077806SSiva Chandra Reddy ${LIBC_SOURCE_DIR} 349a077806SSiva Chandra Reddy ${LIBC_BUILD_DIR} 35*80cf21daSlntue ${LIBC_INCLUDE_DIR} 369a077806SSiva Chandra Reddy ) 379a077806SSiva Chandra Reddy 389a077806SSiva Chandra Reddy if(ADD_STARTUP_TEST_DEPENDS) 399a077806SSiva Chandra Reddy get_fq_deps_list(fq_deps_list ${ADD_STARTUP_TEST_DEPENDS}) 409a077806SSiva Chandra Reddy add_dependencies(${fq_target_name} ${fq_deps_list}) 419a077806SSiva Chandra Reddy get_object_files_for_test(link_object_files has_skipped_entrypoint_list ${fq_deps_list}) 429a077806SSiva Chandra Reddy target_link_libraries(${fq_target_name} ${link_object_files}) 439a077806SSiva Chandra Reddy endif() 449a077806SSiva Chandra Reddy 459a077806SSiva Chandra Reddy target_link_options( 469a077806SSiva Chandra Reddy ${fq_target_name} 479a077806SSiva Chandra Reddy BEFORE PRIVATE 489a077806SSiva Chandra Reddy -nostdlib 499a077806SSiva Chandra Reddy ) 509a077806SSiva Chandra Reddy 519a077806SSiva Chandra Reddy add_custom_command( 529a077806SSiva Chandra Reddy TARGET ${fq_target_name} 539a077806SSiva Chandra Reddy POST_BUILD 549a077806SSiva Chandra Reddy COMMAND ${ADD_STARTUP_TEST_ENV} $<TARGET_FILE:${fq_target_name}> ${ADD_STARTUP_TEST_ARGS} 559a077806SSiva Chandra Reddy ) 569a077806SSiva Chandra Reddy 579a077806SSiva Chandra Reddy add_dependencies(libc_startup_tests ${fq_target_name}) 589a077806SSiva Chandra Reddyendfunction(add_startup_test) 599a077806SSiva Chandra Reddy 609a077806SSiva Chandra Reddyif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${LIBC_TARGET_OS}) 619a077806SSiva Chandra Reddy add_subdirectory(${LIBC_TARGET_OS}) 629a077806SSiva Chandra Reddyendif() 63