aboutsummaryrefslogtreecommitdiff
path: root/contrib/ada/cmake/Modules
diff options
context:
space:
mode:
authorVollstrecker <werner@vollstreckernet.de>2025-12-30 14:29:38 +0100
committerMark Adler <git@madler.net>2026-01-12 10:55:15 -0800
commitb74a346cbf6b9fac87ec2746a8c678bd0a65b7c8 (patch)
tree4a99abd744e7598ff8202c6062438ccf8ee03178 /contrib/ada/cmake/Modules
parentfa448d45d647442e0a769cdb14075872c2b39a63 (diff)
downloadzlib-b74a346cbf6b9fac87ec2746a8c678bd0a65b7c8.tar.gz
zlib-b74a346cbf6b9fac87ec2746a8c678bd0a65b7c8.tar.bz2
zlib-b74a346cbf6b9fac87ec2746a8c678bd0a65b7c8.zip
CMake: Added contrib/ada.
Diffstat (limited to 'contrib/ada/cmake/Modules')
-rw-r--r--contrib/ada/cmake/Modules/CMakeADACompiler.cmake.in23
-rw-r--r--contrib/ada/cmake/Modules/CMakeADAInformation.cmake149
-rw-r--r--contrib/ada/cmake/Modules/CMakeDetermineADACompiler.cmake33
-rw-r--r--contrib/ada/cmake/Modules/CMakeTestADACompiler.cmake46
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 @@
1set(CMAKE_ADA_COMPILER "@CMAKE_ADA_COMPILER@")
2set(CMAKE_ADA_COMPILER_ARG1 "@CMAKE_ADA_COMPILER_ARG1@")
3set(CMAKE_ADA_COMPILER_ID "@CMAKE_ADA_COMPILER_ID@")
4set(CMAKE_ADA_COMPILER_VERSION "@CMAKE_ADA_COMPILER_VERSION@")
5set(CMAKE_ADA_PLATFORM_ID "@CMAKE_ADA_PLATFORM_ID@")
6set(CMAKE_AR "@CMAKE_AR@")
7#set(CMAKE_RANLIB "@CMAKE_RANLIB@")
8#set(CMAKE_LINKER "@CMAKE_LINKER@")
9set(CMAKE_ADA_COMPILER_LOADED TRUE)
10set(CMAKE_ADA_COMPILER_WORKS @CMAKE_ADA_COMPILER_WORKS@)
11#set(CMAKE_ADA_ABI_COMPILED @CMAKE_ADA_ABI_COMPILED@)
12
13set(CMAKE_ADA_COMPILER_ENV_VAR "ADA")
14
15set(CMAKE_ADA_COMPILER_ID_RUN TRUE)
16set(CMAKE_ADA_SOURCE_FILE_EXTENSIONS adb;ADB)
17set(CMAKE_ADA_IGNORE_EXTENSIONS ;o;O;obj;OBJ;ali)
18
19set(CMAKE_ADA_BINDER_HELPER "@CMAKE_ADA_BINDER_HELPER@")
20set(CMAKE_ADA_COMPILER_HELPER "@CMAKE_ADA_COMPILER_HELPER@")
21set(CMAKE_ADA_EXE_LINK_HELPER "@CMAKE_ADA_EXE_LINK_HELPER@")
22set(CMAKE_ADA_SHARED_LINK_HELPER "@CMAKE_ADA_SHARED_LINK_HELPER@")
23set(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 @@
1include(CMakeLanguageInformation)
2
3set(CMAKE_ADA_OUTPUT_EXTENSION .o)
4set(CMAKE_ADA_OUTPUT_EXTENSION_REPLACE TRUE)
5
6if(CMAKE_USER_MAKE_RULES_OVERRIDE)
7 include(${CMAKE_USER_MAKE_RULES_OVERRIDE} RESULT_VARIABLE _override)
8 set(CMAKE_USER_MAKE_RULES_OVERRIDE "${_override}")
9endif(CMAKE_USER_MAKE_RULES_OVERRIDE)
10
11
12if(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}")
15endif(CMAKE_USER_MAKE_RULES_OVERRIDE_ADA)
16
17set(CMAKE_ADA_FLAGS_INIT "$ENV{ADAFLAGS} ${CMAKE_ADA_FLAGS_INIT}")
18
19string(APPEND CMAKE_ADA_FLAGS_INIT " ")
20string(APPEND CMAKE_ADA_FLAGS_DEBUG_INIT " -g")
21string(APPEND CMAKE_ADA_FLAGS_MINSIZEREL_INIT " -Os")
22string(APPEND CMAKE_ADA_FLAGS_RELEASE_INIT " -O3")
23string(APPEND CMAKE_ADA_FLAGS_RELWITHDEBINFO_INIT " -O2 -g")
24
25cmake_initialize_per_config_variable(CMAKE_ADA_FLAGS "Flags used by the Ada compiler")
26
27if(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)
33endif(CMAKE_ADA_STANDARD_LIBRARIES_INIT)
34
35if(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.")
40endif(NOT CMAKE_ADA_COMPILER_LAUNCHER AND DEFINED ENV{CMAKE_ADA_COMPILER_LAUNCHER})
41
42if(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.")
47endif(NOT CMAKE_ADA_LINKER_LAUNCHER AND DEFINED ENV{CMAKE_ADA_LINKER_LAUNCHER})
48
49include(CMakeCommonLanguageInclude)
50_cmake_common_language_platform_flags(ADA)
51
52if(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>")
56endif(NOT CMAKE_ADA_CREATE_SHARED_LIBRARY)
57
58if(NOT CMAKE_ADA_CREATE_STATIC_LIBRARY)
59 set(CMAKE_ADA_CREATE_STATIC_LIBRARY
60 "${CMAKE_ADA_STATIC_LINK_HELPER} ${CMAKE_AR} <TARGET> <OBJECTS>")
61endif(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
79if(NOT CMAKE_ADA_COMPILE_OBJECT)
80 set(CMAKE_ADA_COMPILE_OBJECT
81 "${CMAKE_ADA_COMPILER_HELPER} <CMAKE_ADA_COMPILER> <OBJECT_DIR> <SOURCE> <FLAGS>")
82endif(NOT CMAKE_ADA_COMPILE_OBJECT)
83
84if(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>")
88endif(NOT CMAKE_ADA_LINK_EXECUTABLE)
89
90function(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)
110endfunction(ada_add_executable)
111
112function(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)
133endfunction(ada_add_library)
134
135function(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})
147endfunction(ada_find_ali)
148
149set(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 @@
1include(${CMAKE_ROOT}/Modules/CMakeDetermineCompiler.cmake)
2
3# Load system-specific compiler preferences for this language.
4include(Platform/${CMAKE_SYSTEM_NAME}-Determine-Ada OPTIONAL)
5include(Platform/${CMAKE_SYSTEM_NAME}-Ada OPTIONAL)
6
7if(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)
13endif(NOT CMAKE_ADA_COMPILER_NAMES)
14
15if(NOT CMAKE_ADA_COMPILER)
16 set(CMAKE_ADA_COMPILER_INIT NOTFOUND)
17 _cmake_find_compiler(ADA)
18else(NOT CMAKE_REAL_ADA_COMPILER)
19 _cmake_find_compiler_path(ADA)
20endif(NOT CMAKE_ADA_COMPILER)
21
22mark_as_advanced(CMAKE_ADA_COMPILER)
23set(CMAKE_ADA_COMPILER_ID "GNU")
24set(CMAKE_ADA_BINDER_HELPER "${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/binder_helper.cmake")
25set(CMAKE_ADA_COMPILER_HELPER "${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/compile_helper.cmake")
26set(CMAKE_ADA_EXE_LINK_HELPER "${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/exe_link_helper.cmake")
27set(CMAKE_ADA_SHARED_LINK_HELPER "${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/shared_link_helper.cmake")
28set(CMAKE_ADA_STATIC_LINK_HELPER "${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/static_link_helper.cmake")
29
30configure_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 @@
1include(CMakeTestCompilerCommon)
2unset(CMAKE_ADA_COMPILER_WORKS CACHE)
3
4if(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)
23endif(NOT CMAKE_ADA_COMPILER_WORKS)
24
25if(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.")
36else(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)
44endif(NOT CMAKE_ADA_COMPILER_WORKS)
45
46unset(__CMAKE_ADA_COMPILER_OUTPUT)