diff options
| author | Vollstrecker <werner@vollstreckernet.de> | 2025-12-30 14:29:38 +0100 |
|---|---|---|
| committer | Mark Adler <git@madler.net> | 2026-01-12 10:55:15 -0800 |
| commit | b74a346cbf6b9fac87ec2746a8c678bd0a65b7c8 (patch) | |
| tree | 4a99abd744e7598ff8202c6062438ccf8ee03178 /contrib/ada/cmake/Modules | |
| parent | fa448d45d647442e0a769cdb14075872c2b39a63 (diff) | |
| download | zlib-b74a346cbf6b9fac87ec2746a8c678bd0a65b7c8.tar.gz zlib-b74a346cbf6b9fac87ec2746a8c678bd0a65b7c8.tar.bz2 zlib-b74a346cbf6b9fac87ec2746a8c678bd0a65b7c8.zip | |
CMake: Added contrib/ada.
Diffstat (limited to 'contrib/ada/cmake/Modules')
4 files changed, 251 insertions, 0 deletions
diff --git a/contrib/ada/cmake/Modules/CMakeADACompiler.cmake.in b/contrib/ada/cmake/Modules/CMakeADACompiler.cmake.in new file mode 100644 index 00000000..a3a4086b --- /dev/null +++ b/contrib/ada/cmake/Modules/CMakeADACompiler.cmake.in | |||
| @@ -0,0 +1,23 @@ | |||
| 1 | set(CMAKE_ADA_COMPILER "@CMAKE_ADA_COMPILER@") | ||
| 2 | set(CMAKE_ADA_COMPILER_ARG1 "@CMAKE_ADA_COMPILER_ARG1@") | ||
| 3 | set(CMAKE_ADA_COMPILER_ID "@CMAKE_ADA_COMPILER_ID@") | ||
| 4 | set(CMAKE_ADA_COMPILER_VERSION "@CMAKE_ADA_COMPILER_VERSION@") | ||
| 5 | set(CMAKE_ADA_PLATFORM_ID "@CMAKE_ADA_PLATFORM_ID@") | ||
| 6 | set(CMAKE_AR "@CMAKE_AR@") | ||
| 7 | #set(CMAKE_RANLIB "@CMAKE_RANLIB@") | ||
| 8 | #set(CMAKE_LINKER "@CMAKE_LINKER@") | ||
| 9 | set(CMAKE_ADA_COMPILER_LOADED TRUE) | ||
| 10 | set(CMAKE_ADA_COMPILER_WORKS @CMAKE_ADA_COMPILER_WORKS@) | ||
| 11 | #set(CMAKE_ADA_ABI_COMPILED @CMAKE_ADA_ABI_COMPILED@) | ||
| 12 | |||
| 13 | set(CMAKE_ADA_COMPILER_ENV_VAR "ADA") | ||
| 14 | |||
| 15 | set(CMAKE_ADA_COMPILER_ID_RUN TRUE) | ||
| 16 | set(CMAKE_ADA_SOURCE_FILE_EXTENSIONS adb;ADB) | ||
| 17 | set(CMAKE_ADA_IGNORE_EXTENSIONS ;o;O;obj;OBJ;ali) | ||
| 18 | |||
| 19 | set(CMAKE_ADA_BINDER_HELPER "@CMAKE_ADA_BINDER_HELPER@") | ||
| 20 | set(CMAKE_ADA_COMPILER_HELPER "@CMAKE_ADA_COMPILER_HELPER@") | ||
| 21 | set(CMAKE_ADA_EXE_LINK_HELPER "@CMAKE_ADA_EXE_LINK_HELPER@") | ||
| 22 | set(CMAKE_ADA_SHARED_LINK_HELPER "@CMAKE_ADA_SHARED_LINK_HELPER@") | ||
| 23 | set(CMAKE_ADA_STATIC_LINK_HELPER "@CMAKE_ADA_STATIC_LINK_HELPER@") | ||
diff --git a/contrib/ada/cmake/Modules/CMakeADAInformation.cmake b/contrib/ada/cmake/Modules/CMakeADAInformation.cmake new file mode 100644 index 00000000..70755fa0 --- /dev/null +++ b/contrib/ada/cmake/Modules/CMakeADAInformation.cmake | |||
| @@ -0,0 +1,149 @@ | |||
| 1 | include(CMakeLanguageInformation) | ||
| 2 | |||
| 3 | set(CMAKE_ADA_OUTPUT_EXTENSION .o) | ||
| 4 | set(CMAKE_ADA_OUTPUT_EXTENSION_REPLACE TRUE) | ||
| 5 | |||
| 6 | if(CMAKE_USER_MAKE_RULES_OVERRIDE) | ||
| 7 | include(${CMAKE_USER_MAKE_RULES_OVERRIDE} RESULT_VARIABLE _override) | ||
| 8 | set(CMAKE_USER_MAKE_RULES_OVERRIDE "${_override}") | ||
| 9 | endif(CMAKE_USER_MAKE_RULES_OVERRIDE) | ||
| 10 | |||
| 11 | |||
| 12 | if(CMAKE_USER_MAKE_RULES_OVERRIDE_ADA) | ||
| 13 | include(${CMAKE_USER_MAKE_RULES_OVERRIDE_ADA} RESULT_VARIABLE _override) | ||
| 14 | set(CMAKE_USER_MAKE_RULES_OVERRIDE_ADA "${_override}") | ||
| 15 | endif(CMAKE_USER_MAKE_RULES_OVERRIDE_ADA) | ||
| 16 | |||
| 17 | set(CMAKE_ADA_FLAGS_INIT "$ENV{ADAFLAGS} ${CMAKE_ADA_FLAGS_INIT}") | ||
| 18 | |||
| 19 | string(APPEND CMAKE_ADA_FLAGS_INIT " ") | ||
| 20 | string(APPEND CMAKE_ADA_FLAGS_DEBUG_INIT " -g") | ||
| 21 | string(APPEND CMAKE_ADA_FLAGS_MINSIZEREL_INIT " -Os") | ||
| 22 | string(APPEND CMAKE_ADA_FLAGS_RELEASE_INIT " -O3") | ||
| 23 | string(APPEND CMAKE_ADA_FLAGS_RELWITHDEBINFO_INIT " -O2 -g") | ||
| 24 | |||
| 25 | cmake_initialize_per_config_variable(CMAKE_ADA_FLAGS "Flags used by the Ada compiler") | ||
| 26 | |||
| 27 | if(CMAKE_ADA_STANDARD_LIBRARIES_INIT) | ||
| 28 | set(CMAKE_ADA_STANDARD_LIBRARIES | ||
| 29 | "${CMAKE_ADA_STANDARD_LIBRARIES_INIT}" | ||
| 30 | CACHE | ||
| 31 | STRING "Libraries linked by default with all Ada applications.") | ||
| 32 | mark_as_advanced(CMAKE_ADA_STANDARD_LIBRARIES) | ||
| 33 | endif(CMAKE_ADA_STANDARD_LIBRARIES_INIT) | ||
| 34 | |||
| 35 | if(NOT CMAKE_ADA_COMPILER_LAUNCHER AND DEFINED ENV{CMAKE_ADA_COMPILER_LAUNCHER}) | ||
| 36 | set(CMAKE_ADA_COMPILER_LAUNCHER | ||
| 37 | "$ENV{CMAKE_ADA_COMPILER_LAUNCHER}" | ||
| 38 | CACHE | ||
| 39 | STRING "Compiler launcher for Ada.") | ||
| 40 | endif(NOT CMAKE_ADA_COMPILER_LAUNCHER AND DEFINED ENV{CMAKE_ADA_COMPILER_LAUNCHER}) | ||
| 41 | |||
| 42 | if(NOT CMAKE_ADA_LINKER_LAUNCHER AND DEFINED ENV{CMAKE_ADA_LINKER_LAUNCHER}) | ||
| 43 | set(CMAKE_ADA_LINKER_LAUNCHER | ||
| 44 | "$ENV{CMAKE_ADA_LINKER_LAUNCHER}" | ||
| 45 | CACHE | ||
| 46 | STRING "Linker launcher for Ada.") | ||
| 47 | endif(NOT CMAKE_ADA_LINKER_LAUNCHER AND DEFINED ENV{CMAKE_ADA_LINKER_LAUNCHER}) | ||
| 48 | |||
| 49 | include(CMakeCommonLanguageInclude) | ||
| 50 | _cmake_common_language_platform_flags(ADA) | ||
| 51 | |||
| 52 | if(NOT CMAKE_ADA_CREATE_SHARED_LIBRARY) | ||
| 53 | set(CMAKE_ADA_CREATE_SHARED_LIBRARY | ||
| 54 | "${CMAKE_ADA_BINDER_HELPER} <CMAKE_ADA_COMPILER> <OBJECTS> FLAGS <FLAGS> <LINK_FLAGS>" | ||
| 55 | "${CMAKE_ADA_SHARED_LINK_HELPER} <CMAKE_ADA_COMPILER> <TARGET> <OBJECTS> <LINK_LIBRARIES>") | ||
| 56 | endif(NOT CMAKE_ADA_CREATE_SHARED_LIBRARY) | ||
| 57 | |||
| 58 | if(NOT CMAKE_ADA_CREATE_STATIC_LIBRARY) | ||
| 59 | set(CMAKE_ADA_CREATE_STATIC_LIBRARY | ||
| 60 | "${CMAKE_ADA_STATIC_LINK_HELPER} ${CMAKE_AR} <TARGET> <OBJECTS>") | ||
| 61 | endif(NOT CMAKE_ADA_CREATE_STATIC_LIBRARY) | ||
| 62 | # create a C shared module just copy the shared library rule | ||
| 63 | #if(NOT CMAKE_C_CREATE_SHARED_MODULE) | ||
| 64 | # set(CMAKE_C_CREATE_SHARED_MODULE ${CMAKE_C_CREATE_SHARED_LIBRARY}) | ||
| 65 | #endif() | ||
| 66 | |||
| 67 | # Create a static archive incrementally for large object file counts. | ||
| 68 | # If CMAKE_C_CREATE_STATIC_LIBRARY is set it will override these. | ||
| 69 | #if(NOT DEFINED CMAKE_C_ARCHIVE_CREATE) | ||
| 70 | # set(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> qc <TARGET> <LINK_FLAGS> <OBJECTS>") | ||
| 71 | #endif() | ||
| 72 | #if(NOT DEFINED CMAKE_C_ARCHIVE_APPEND) | ||
| 73 | # set(CMAKE_C_ARCHIVE_APPEND "<CMAKE_AR> q <TARGET> <LINK_FLAGS> <OBJECTS>") | ||
| 74 | #endif() | ||
| 75 | #if(NOT DEFINED CMAKE_C_ARCHIVE_FINISH) | ||
| 76 | # set(CMAKE_C_ARCHIVE_FINISH "<CMAKE_RANLIB> <TARGET>") | ||
| 77 | #endif() | ||
| 78 | |||
| 79 | if(NOT CMAKE_ADA_COMPILE_OBJECT) | ||
| 80 | set(CMAKE_ADA_COMPILE_OBJECT | ||
| 81 | "${CMAKE_ADA_COMPILER_HELPER} <CMAKE_ADA_COMPILER> <OBJECT_DIR> <SOURCE> <FLAGS>") | ||
| 82 | endif(NOT CMAKE_ADA_COMPILE_OBJECT) | ||
| 83 | |||
| 84 | if(NOT CMAKE_ADA_LINK_EXECUTABLE) | ||
| 85 | set(CMAKE_ADA_LINK_EXECUTABLE | ||
| 86 | "${CMAKE_ADA_BINDER_HELPER} <CMAKE_ADA_COMPILER> <OBJECTS> FLAGS <FLAGS> <LINK_FLAGS>" | ||
| 87 | "${CMAKE_ADA_EXE_LINK_HELPER} <CMAKE_ADA_COMPILER> <TARGET> <FLAGS> <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> OBJ <OBJECTS> LIBS <LINK_LIBRARIES>") | ||
| 88 | endif(NOT CMAKE_ADA_LINK_EXECUTABLE) | ||
| 89 | |||
| 90 | function(ada_add_executable) | ||
| 91 | if(ARGC GREATER 1) | ||
| 92 | math(EXPR last_index "${ARGC} - 1") | ||
| 93 | foreach(source RANGE 1 ${last_index}) | ||
| 94 | list(APPEND SOURCES ${ARGV${source}}) | ||
| 95 | string(REPLACE ".adb" "" ali "${ARGV${source}}") | ||
| 96 | set(clean_file "CMakeFiles/${ARGV0}.dir/${ali}.ali") | ||
| 97 | list(APPEND CLEAN_FILES ${clean_file}) | ||
| 98 | list(APPEND CLEAN_FILES b~${ali}.adb) | ||
| 99 | list(APPEND CLEAN_FILES b~${ali}.ads) | ||
| 100 | list(APPEND CLEAN_FILES b~${ali}.ali) | ||
| 101 | list(APPEND CLEAN_FILES b~${ali}.o) | ||
| 102 | endforeach(source RANGE 1 ${ARGC}) | ||
| 103 | |||
| 104 | add_executable(${ARGV0} ${ARGV1} ${SOURCES}) | ||
| 105 | |||
| 106 | set_target_properties(${ARGV0} | ||
| 107 | PROPERTIES | ||
| 108 | ADDITIONAL_CLEAN_FILES "${CLEAN_FILES}") | ||
| 109 | endif(ARGC GREATER 1) | ||
| 110 | endfunction(ada_add_executable) | ||
| 111 | |||
| 112 | function(ada_add_library) | ||
| 113 | if(ARGC GREATER 2) | ||
| 114 | math(EXPR last_index "${ARGC} - 1") | ||
| 115 | foreach(source RANGE 2 ${last_index}) | ||
| 116 | list(APPEND SOURCES ${ARGV${source}}) | ||
| 117 | string(REPLACE ".adb" "" ali "${ARGV${source}}") | ||
| 118 | set(clean_file "CMakeFiles/${ARGV0}.dir/${ali}.ali") | ||
| 119 | list(APPEND CLEAN_FILES ${clean_file}) | ||
| 120 | list(APPEND CLEAN_FILES b~${ali}.adb) | ||
| 121 | list(APPEND CLEAN_FILES b~${ali}.ads) | ||
| 122 | list(APPEND CLEAN_FILES b~${ali}.ali) | ||
| 123 | list(APPEND CLEAN_FILES b~${ali}.o) | ||
| 124 | endforeach(source RANGE 2 ${ARGC}) | ||
| 125 | |||
| 126 | add_library(${ARGV0} ${ARGV1} ${SOURCES}) | ||
| 127 | |||
| 128 | set_target_properties(${ARGV0} | ||
| 129 | PROPERTIES | ||
| 130 | ADDITIONAL_CLEAN_FILES "${CLEAN_FILES};dummylib.adb;dummylib.ali;dummylib.o" | ||
| 131 | ALI_FLAG "-aO${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${ARGV0}.dir/") | ||
| 132 | endif(ARGC GREATER 2) | ||
| 133 | endfunction(ada_add_library) | ||
| 134 | |||
| 135 | function(ada_find_ali) | ||
| 136 | get_target_property(link_libs ${ARGV0} LINK_LIBRARIES) | ||
| 137 | |||
| 138 | foreach(lib IN LISTS link_libs) | ||
| 139 | get_target_property(ali ${lib} ALI_FLAG) | ||
| 140 | string(APPEND FLAGS ${ali} " ") | ||
| 141 | unset(ali) | ||
| 142 | endforeach(lib IN LISTS link_libs) | ||
| 143 | |||
| 144 | set_target_properties(${ARGV0} | ||
| 145 | PROPERTIES | ||
| 146 | LINK_FLAGS ${FLAGS}) | ||
| 147 | endfunction(ada_find_ali) | ||
| 148 | |||
| 149 | set(CMAKE_ADA_INFORMATION_LOADED TRUE) | ||
diff --git a/contrib/ada/cmake/Modules/CMakeDetermineADACompiler.cmake b/contrib/ada/cmake/Modules/CMakeDetermineADACompiler.cmake new file mode 100644 index 00000000..1562a6c9 --- /dev/null +++ b/contrib/ada/cmake/Modules/CMakeDetermineADACompiler.cmake | |||
| @@ -0,0 +1,33 @@ | |||
| 1 | include(${CMAKE_ROOT}/Modules/CMakeDetermineCompiler.cmake) | ||
| 2 | |||
| 3 | # Load system-specific compiler preferences for this language. | ||
| 4 | include(Platform/${CMAKE_SYSTEM_NAME}-Determine-Ada OPTIONAL) | ||
| 5 | include(Platform/${CMAKE_SYSTEM_NAME}-Ada OPTIONAL) | ||
| 6 | |||
| 7 | if(NOT CMAKE_ADA_COMPILER_NAMES) | ||
| 8 | set(CMAKE_ADA_COMPILER_NAMES gnat) | ||
| 9 | |||
| 10 | foreach(ver RANGE 11 99) | ||
| 11 | list(APPEND CMAKE_ADA_COMPILER_NAMES gnat-${ver}) | ||
| 12 | endforeach(ver RANGE 11 99) | ||
| 13 | endif(NOT CMAKE_ADA_COMPILER_NAMES) | ||
| 14 | |||
| 15 | if(NOT CMAKE_ADA_COMPILER) | ||
| 16 | set(CMAKE_ADA_COMPILER_INIT NOTFOUND) | ||
| 17 | _cmake_find_compiler(ADA) | ||
| 18 | else(NOT CMAKE_REAL_ADA_COMPILER) | ||
| 19 | _cmake_find_compiler_path(ADA) | ||
| 20 | endif(NOT CMAKE_ADA_COMPILER) | ||
| 21 | |||
| 22 | mark_as_advanced(CMAKE_ADA_COMPILER) | ||
| 23 | set(CMAKE_ADA_COMPILER_ID "GNU") | ||
| 24 | set(CMAKE_ADA_BINDER_HELPER "${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/binder_helper.cmake") | ||
| 25 | set(CMAKE_ADA_COMPILER_HELPER "${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/compile_helper.cmake") | ||
| 26 | set(CMAKE_ADA_EXE_LINK_HELPER "${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/exe_link_helper.cmake") | ||
| 27 | set(CMAKE_ADA_SHARED_LINK_HELPER "${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/shared_link_helper.cmake") | ||
| 28 | set(CMAKE_ADA_STATIC_LINK_HELPER "${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/static_link_helper.cmake") | ||
| 29 | |||
| 30 | configure_file( | ||
| 31 | ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules/CMakeADACompiler.cmake.in | ||
| 32 | ${CMAKE_PLATFORM_INFO_DIR}/CMakeADACompiler.cmake | ||
| 33 | @ONLY) | ||
diff --git a/contrib/ada/cmake/Modules/CMakeTestADACompiler.cmake b/contrib/ada/cmake/Modules/CMakeTestADACompiler.cmake new file mode 100644 index 00000000..889c93c0 --- /dev/null +++ b/contrib/ada/cmake/Modules/CMakeTestADACompiler.cmake | |||
| @@ -0,0 +1,46 @@ | |||
| 1 | include(CMakeTestCompilerCommon) | ||
| 2 | unset(CMAKE_ADA_COMPILER_WORKS CACHE) | ||
| 3 | |||
| 4 | if(NOT CMAKE_ADA_COMPILER_WORKS) | ||
| 5 | PrintTestCompilerStatus("ADA" "") | ||
| 6 | set(_ADA_TEST_FILE "${CMAKE_BINARY_DIR}/${CMAKE_FILES_DIRECTORY}/CMakeTmp/main.adb") | ||
| 7 | |||
| 8 | file(WRITE ${_ADA_TEST_FILE} | ||
| 9 | "with Ada.Text_IO; use Ada.Text_IO;\n" | ||
| 10 | "\n" | ||
| 11 | "procedure main is\n" | ||
| 12 | "begin\n" | ||
| 13 | "Put_Line(\"Hello, World!\");\n" | ||
| 14 | "end Main;\n") | ||
| 15 | |||
| 16 | try_compile(CMAKE_ADA_COMPILER_WORKS ${CMAKE_BINARY_DIR} | ||
| 17 | ${_ADA_TEST_FILE} | ||
| 18 | OUTPUT_VARIABLE __CMAKE_ADA_COMPILER_OUTPUT) | ||
| 19 | |||
| 20 | set(CMAKE_ADA_COMPILER_WORKS ${CMAKE_ADA_COMPILER_WORKS}) | ||
| 21 | unset(CMAKE_ADA_COMPILER_WORKS CACHE) | ||
| 22 | set(ADA_TEST_WAS_RUN TRUE) | ||
| 23 | endif(NOT CMAKE_ADA_COMPILER_WORKS) | ||
| 24 | |||
| 25 | if(NOT CMAKE_ADA_COMPILER_WORKS) | ||
| 26 | PrintTestCompilerStatus("ADA" " -- broken") | ||
| 27 | |||
| 28 | file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log | ||
| 29 | "Determining if the Ada compiler works failed with " | ||
| 30 | "the following output:\n${__CMAKE_ADA_COMPILER_OUTPUT}\n\n") | ||
| 31 | |||
| 32 | message(FATAL_ERROR "The Ada compiler \"${CMAKE_ADA_COMPILER}\" " | ||
| 33 | "is not able to compile a simple test program.\nIt fails " | ||
| 34 | "with the following output:\n ${__CMAKE_ADA_COMPILER_OUTPUT}\n\n" | ||
| 35 | "CMake will not be able to correctly generate this project.") | ||
| 36 | else(NOT CMAKE_ADA_COMPILER_WORKS) | ||
| 37 | if(ADA_TEST_WAS_RUN) | ||
| 38 | PrintTestCompilerStatus("ADA" " -- works") | ||
| 39 | |||
| 40 | file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log | ||
| 41 | "Determining if the Ada compiler works passed with " | ||
| 42 | "the following output:\n${__CMAKE_ADA_COMPILER_OUTPUT}\n\n") | ||
| 43 | endif(ADA_TEST_WAS_RUN) | ||
| 44 | endif(NOT CMAKE_ADA_COMPILER_WORKS) | ||
| 45 | |||
| 46 | unset(__CMAKE_ADA_COMPILER_OUTPUT) | ||
