From 7624d0110b9a31bf63fdda5e7b54e7df882b746f Mon Sep 17 00:00:00 2001 From: Sanjiv Gupta Date: Sun, 2 Mar 2025 15:18:07 -0500 Subject: [PATCH] Diab: Add tests covering the Diab toolchains Run the tests only if enabled explicitly by an undocumented cache entry. We will enable it on hosts known to have the toolchains. Closes: #26735 --- Tests/RunCMake/CMakeLists.txt | 4 +++ Tests/RunCMake/Diab/CMakeLists.txt | 3 ++ Tests/RunCMake/Diab/RunCMakeTest.cmake | 42 ++++++++++++++++++++++++++ Tests/RunCMake/Diab/diab-asm.cmake | 2 ++ Tests/RunCMake/Diab/diab-c.cmake | 2 ++ Tests/RunCMake/Diab/diab-cxx.cmake | 2 ++ Tests/RunCMake/Diab/diab-lib.cmake | 7 +++++ Tests/RunCMake/Diab/libmod.c | 4 +++ Tests/RunCMake/Diab/module.c | 15 +++++++++ Tests/RunCMake/Diab/module.cxx | 7 +++++ Tests/RunCMake/Diab/module.h | 12 ++++++++ Tests/RunCMake/Diab/module.s | 10 ++++++ 12 files changed, 110 insertions(+) create mode 100644 Tests/RunCMake/Diab/CMakeLists.txt create mode 100644 Tests/RunCMake/Diab/RunCMakeTest.cmake create mode 100644 Tests/RunCMake/Diab/diab-asm.cmake create mode 100644 Tests/RunCMake/Diab/diab-c.cmake create mode 100644 Tests/RunCMake/Diab/diab-cxx.cmake create mode 100644 Tests/RunCMake/Diab/diab-lib.cmake create mode 100644 Tests/RunCMake/Diab/libmod.c create mode 100644 Tests/RunCMake/Diab/module.c create mode 100644 Tests/RunCMake/Diab/module.cxx create mode 100644 Tests/RunCMake/Diab/module.h create mode 100644 Tests/RunCMake/Diab/module.s diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt index baa6c53675..77956ef5a3 100644 --- a/Tests/RunCMake/CMakeLists.txt +++ b/Tests/RunCMake/CMakeLists.txt @@ -1369,3 +1369,7 @@ if(CMake_TEST_TICLANG_TOOLCHAINS) add_RunCMake_test(TIClang "-DCMake_TEST_TICLANG_TOOLCHAINS=${TOOLCHAINS}") set_property(TEST RunCMake.TIClang APPEND PROPERTY LABELS "TIClang") endif() +if(CMake_TEST_Diab_TOOLCHAINS) + add_RunCMake_test(Diab -DCMake_TEST_Diab_TOOLCHAINS=${CMake_TEST_Diab_TOOLCHAINS}) + set_property(TEST RunCMake.Diab APPEND PROPERTY LABELS "Diab") +endif() diff --git a/Tests/RunCMake/Diab/CMakeLists.txt b/Tests/RunCMake/Diab/CMakeLists.txt new file mode 100644 index 0000000000..955802cde9 --- /dev/null +++ b/Tests/RunCMake/Diab/CMakeLists.txt @@ -0,0 +1,3 @@ +cmake_minimum_required(VERSION 4.0) +project(${RunCMake_TEST} NONE) +include(${RunCMake_TEST}.cmake) diff --git a/Tests/RunCMake/Diab/RunCMakeTest.cmake b/Tests/RunCMake/Diab/RunCMakeTest.cmake new file mode 100644 index 0000000000..287a308acb --- /dev/null +++ b/Tests/RunCMake/Diab/RunCMakeTest.cmake @@ -0,0 +1,42 @@ +include(RunCMake) + +# Locate Diab toolchain +if(RunCMake_GENERATOR MATCHES "Makefile|Ninja") + file(GLOB _diab_toolchains + "${CMake_TEST_Diab_TOOLCHAINS}/*/*/bin/dcc*" ) + if(_diab_toolchains STREQUAL "") + message(FATAL_ERROR "Could not find any Diab toolchains at: ${CMake_TEST_Diab_TOOLCHAINS}.") + endif() +endif() + +function(run_toolchain case) + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${case}-build) + run_cmake_with_options(${case} ${ARGN}) + set(RunCMake_TEST_NO_CLEAN 1) + run_cmake_command(${case}-build ${CMAKE_COMMAND} --build .) +endfunction() + + +foreach(_diab_toolchain IN LISTS _diab_toolchains) + message(STATUS "Found Diab toolchain: ${_diab_toolchain}") + cmake_path(GET _diab_toolchain PARENT_PATH BIN_DIR) + set(c_comp ${BIN_DIR}/dcc) + set(cxx_comp ${BIN_DIR}/dplus) + + # Create an executable from .c sources only. + run_toolchain(diab-c + -DCMAKE_C_COMPILER=${c_comp} + ) + + # Create an executale from .c and .cxx sources. + run_toolchain(diab-cxx + -DCMAKE_C_COMPILER=${c_comp} + -DCMAKE_CXX_COMPILER=${cxx_comp} + ) + + # Create an executable from mixed, c, cxx and assembly. + run_toolchain(diab-asm + -DCMAKE_C_COMPILER=${c_comp} + -DCMAKE_CXX_COMPILER=${cxx_comp} + ) +endforeach() diff --git a/Tests/RunCMake/Diab/diab-asm.cmake b/Tests/RunCMake/Diab/diab-asm.cmake new file mode 100644 index 0000000000..41edc68a2f --- /dev/null +++ b/Tests/RunCMake/Diab/diab-asm.cmake @@ -0,0 +1,2 @@ +enable_language(ASM) +add_executable(exec-asm module.s) diff --git a/Tests/RunCMake/Diab/diab-c.cmake b/Tests/RunCMake/Diab/diab-c.cmake new file mode 100644 index 0000000000..39325a7d81 --- /dev/null +++ b/Tests/RunCMake/Diab/diab-c.cmake @@ -0,0 +1,2 @@ +enable_language(C) +add_executable(exec-c module.c) diff --git a/Tests/RunCMake/Diab/diab-cxx.cmake b/Tests/RunCMake/Diab/diab-cxx.cmake new file mode 100644 index 0000000000..9e00aa39c7 --- /dev/null +++ b/Tests/RunCMake/Diab/diab-cxx.cmake @@ -0,0 +1,2 @@ +enable_language(CXX) +add_executable(exec-cxx module.cxx) diff --git a/Tests/RunCMake/Diab/diab-lib.cmake b/Tests/RunCMake/Diab/diab-lib.cmake new file mode 100644 index 0000000000..62593cf4eb --- /dev/null +++ b/Tests/RunCMake/Diab/diab-lib.cmake @@ -0,0 +1,7 @@ +enable_language(C) +add_library(diab-test-lib libmod.c) + +add_executable(exec-lib-c module.c) +target_compile_options(exec-lib-c) +target_compile_definitions(exec-lib-c PRIVATE __USE_LIBFUN) +target_link_libraries(exec-lib-c PRIVATE diab-test-lib) diff --git a/Tests/RunCMake/Diab/libmod.c b/Tests/RunCMake/Diab/libmod.c new file mode 100644 index 0000000000..e42ae9983e --- /dev/null +++ b/Tests/RunCMake/Diab/libmod.c @@ -0,0 +1,4 @@ +int diab_libfun() +{ + return 42; +} diff --git a/Tests/RunCMake/Diab/module.c b/Tests/RunCMake/Diab/module.c new file mode 100644 index 0000000000..601b65b464 --- /dev/null +++ b/Tests/RunCMake/Diab/module.c @@ -0,0 +1,15 @@ +#include "module.h" +#if defined(__USE_LIBFUN) +extern int diab_libfun(); +#endif + +int i; +int main() +{ +#if defined(__USE_LIBFUN) + i = diab_libfun(); +#else + i = INTERNAL; +#endif + return i; +} diff --git a/Tests/RunCMake/Diab/module.cxx b/Tests/RunCMake/Diab/module.cxx new file mode 100644 index 0000000000..b4d46b123f --- /dev/null +++ b/Tests/RunCMake/Diab/module.cxx @@ -0,0 +1,7 @@ +#include "module.h" +int i; +int main() +{ + i = INTERNAL; + return i; +} diff --git a/Tests/RunCMake/Diab/module.h b/Tests/RunCMake/Diab/module.h new file mode 100644 index 0000000000..a8a85a64c4 --- /dev/null +++ b/Tests/RunCMake/Diab/module.h @@ -0,0 +1,12 @@ +#ifndef __MODULE_H__ +#define __MODULE_H__ + +#if defined(__cplusplus) +# define INTERNAL 64 +#elif !defined(__cplusplus) +# define INTERNAL 32 +#else +# error "Unable to determine INTERNAL symbol." +#endif + +#endif /* __MODULE_H__ */ diff --git a/Tests/RunCMake/Diab/module.s b/Tests/RunCMake/Diab/module.s new file mode 100644 index 0000000000..91faa7d5d8 --- /dev/null +++ b/Tests/RunCMake/Diab/module.s @@ -0,0 +1,10 @@ +; module.s: assembly "main" function returns 32. +; + .name "module.s" + .text + .align 2 + + .globl main +main: + diab.li r3,32 + blr