xref: /llvm-project/libc/test/integration/startup/CMakeLists.txt (revision 80cf21dad150ae8fb82e4a17f3bc594d1486b210)
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