╭─────────────╮ │scroll to top│ ╰─────────────╯ ╭ CMakeLists.txt ───────────────────────────────────────────────╮ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ╰───────────────────────────────────────────────────────────────╯
╭ find file ─ ─ ─ ─ ─ ─ ─ ─ ─ ─╮ ╭────╮ ╭ clone ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ╮ │ │ │http│ ssh │ │ ╰ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─╯ ╰────╯ ╰ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ╯
54 ERROR_QUIET) 55 if(EXIT_STATUS EQUAL "0") 56 set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS "${PROJECT_SOURCE_DIR}/.git/HEAD") 57 if(GIT_DESCRIBE MATCHES "^v?([0-9]+\\.[0-9]+\\.[0-9]+)$") 58 # Tagged release version. 59 set(GIT_TAG ${CMAKE_MATCH_1}) 60 if(NOT GIT_TAG VERSION_EQUAL RESOLVED_ZIG_VERSION) 61 message(SEND_ERROR "Zig version (${RESOLVED_ZIG_VERSION}) does not match Git tag (${GIT_TAG}).") 62 endif() 63 elseif(GIT_DESCRIBE MATCHES "^v?([0-9]+\\.[0-9]+\\.[0-9]+)-([0-9]+)-g(.+)$") 64 # Untagged pre-release. The Zig version is updated to include the number of commits 65 # since the last tagged version and the commit hash. The version is formatted in 66 # accordance with the https://semver.org specification. 67 set(GIT_TAG ${CMAKE_MATCH_1}) 68 set(GIT_COMMITS_AFTER_TAG ${CMAKE_MATCH_2}) 69 set(GIT_COMMIT ${CMAKE_MATCH_3}) 70 if(NOT RESOLVED_ZIG_VERSION VERSION_GREATER GIT_TAG) 71 message(SEND_ERROR "Zig version (${RESOLVED_ZIG_VERSION}) must be greater than tagged ancestor (${GIT_TAG}).") 72 endif() 73 set(RESOLVED_ZIG_VERSION "${RESOLVED_ZIG_VERSION}-dev.${GIT_COMMITS_AFTER_TAG}+${GIT_COMMIT}") 74 else() 75 message(WARNING "Failed to parse version from output of `git describe`.") 76 endif() 77 endif() 78 endif() 79 else() 80 set(RESOLVED_ZIG_VERSION "${ZIG_VERSION}") 81 endif() 82 message(STATUS "Configuring zig version ${RESOLVED_ZIG_VERSION}") 83 84 set(ZIG_NO_LIB off CACHE BOOL 85 "Disable copying lib/ files to install prefix during the build phase") 86 87 set(ZIG_STATIC off CACHE BOOL "Attempt to build a static zig executable (not compatible with glibc)") 88 set(ZIG_SHARED_LLVM off CACHE BOOL "Prefer linking against shared LLVM libraries") 89 set(ZIG_STATIC_LLVM ${ZIG_STATIC} CACHE BOOL "Prefer linking against static LLVM libraries") 90 set(ZIG_STATIC_ZLIB ${ZIG_STATIC} CACHE BOOL "Prefer linking against static zlib") 91 set(ZIG_STATIC_ZSTD ${ZIG_STATIC} CACHE BOOL "Prefer linking against static zstd") 92 set(ZIG_STATIC_CURSES OFF CACHE BOOL "Enable static linking against curses") 93 set(ZIG_STATIC_LIBXML2 OFF CACHE BOOL "Enable static linking against libxml2") 94 95 if (ZIG_SHARED_LLVM AND ZIG_STATIC_LLVM) 96 message(SEND_ERROR "-DZIG_SHARED_LLVM and -DZIG_STATIC_LLVM cannot both be enabled simultaneously") 97 endif() 98 99 set(ZIG_TARGET_TRIPLE "native" CACHE STRING "arch-os-abi to output binaries for") 100 set(ZIG_TARGET_MCPU "native" CACHE STRING "-mcpu parameter to output binaries for") 101 set(ZIG_TARGET_DYNAMIC_LINKER "" CACHE STRING 102 "Override the dynamic linker used by the Zig binary. Default is to auto-detect the dynamic linker.") 103 set(ZIG_SINGLE_THREADED off CACHE BOOL "limit the zig compiler to use only 1 thread") 104 set(ZIG_AR_WORKAROUND off CACHE BOOL "append 'ar' subcommand to CMAKE_AR") 105 106 if("${ZIG_TARGET_TRIPLE}" STREQUAL "native") 107 set(ZIG_USE_LLVM_CONFIG ON CACHE BOOL "use llvm-config to find LLVM libraries") 108 else() 109 set(ZIG_USE_LLVM_CONFIG OFF CACHE BOOL "use llvm-config to find LLVM libraries") 110 endif() 111 112 if(ZIG_AR_WORKAROUND) 113 string(REPLACE "<CMAKE_AR>" "<CMAKE_AR> ar" CMAKE_C_ARCHIVE_CREATE ${CMAKE_C_ARCHIVE_CREATE}) 114 string(REPLACE "<CMAKE_AR>" "<CMAKE_AR> ar" CMAKE_CXX_ARCHIVE_CREATE ${CMAKE_CXX_ARCHIVE_CREATE}) 115 endif() 116 117 118 option(ZIG_PIE "Produce a position independent zig executable" ${CMAKE_POSITION_INDEPENDENT_CODE}) 119 include(CheckPIESupported) 120 check_pie_supported( 121 OUTPUT_VARIABLE ZIG_PIE_SUPPORTED_BY_CMAKE 122 LANGUAGES C CXX 123 ) 124 if(ZIG_PIE AND NOT CMAKE_CXX_LINK_PIE_SUPPORTED) 125 message(SEND_ERROR "ZIG_PIE was requested but CMake does not support it for \"zigcpp\" target: ${ZIG_PIE_SUPPORTED_BY_CMAKE}") 126 endif() 127 128 129 # Detect system libcxx name. 130 if ("c++" IN_LIST CMAKE_CXX_IMPLICIT_LINK_LIBRARIES) 131 set(ZIG_SYSTEM_LIBCXX "c++" CACHE STRING "system libcxx name for build.zig") 132 else() 133 set(ZIG_SYSTEM_LIBCXX "stdc++" CACHE STRING "system libcxx name for build.zig") 134 endif() 135 136 find_package(llvm 22) 137 find_package(clang 22) 138 find_package(lld 22) 139 140 if(ZIG_STATIC_ZLIB) 141 if (MSVC) 142 list(REMOVE_ITEM LLVM_LIBRARIES "z.lib") 143 else() 144 list(REMOVE_ITEM LLVM_LIBRARIES "-lz") 145 endif() 146 147 find_library(ZLIB NAMES libz.a libzlibstatic.a z zlib libz NAMES_PER_DIR) 148 list(APPEND LLVM_LIBRARIES "${ZLIB}") 149 endif() 150 151 if(ZIG_STATIC_ZSTD) 152 if (MSVC) 153 list(REMOVE_ITEM LLVM_LIBRARIES "zstd.lib") 154 else() 155 list(REMOVE_ITEM LLVM_LIBRARIES "-lzstd") 156 endif() 157 158 find_library(ZSTD NAMES libzstd.a libzstdstatic.a zstd NAMES_PER_DIR) 159 list(APPEND LLVM_LIBRARIES "${ZSTD}") 160 endif() 161 162 if (MSVC) 163 if(NOT DEFINED CMAKE_MSVC_RUNTIME_LIBRARY) 164 if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") 165 # avoid linking to the debug versions of ucrt by default 166 # as they are not redistributable. 167 set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreadedDLL) 168 endif() 169 endif() 170 endif () 171 172 if(ZIG_STATIC_CURSES) 173 list(REMOVE_ITEM LLVM_LIBRARIES "-lcurses") 174 find_library(CURSES NAMES libcurses.a libncurses.a NAMES_PER_DIR 175 PATHS 176 /usr/local/opt/ncurses/lib 177 /opt/homebrew/opt/ncurses/lib) 178 list(APPEND LLVM_LIBRARIES "${CURSES}") 179 endif() 180 181 if(ZIG_STATIC_LIBXML2) 182 list(REMOVE_ITEM LLVM_LIBRARIES "-lxml2") 183 find_library(LIBXML2 NAMES libxml2.a NAMES_PER_DIR) 184 list(APPEND LLVM_LIBRARIES "${LIBXML2}") 185 endif() 186 187 find_package(Threads) 188 189 set(ZIG_CONFIG_H_OUT "${PROJECT_BINARY_DIR}/config.h") 190 set(ZIG_CONFIG_ZIG_OUT "${PROJECT_BINARY_DIR}/config.zig") 191 192 set(ZIG_WASM2C_SOURCES 193 stage1/wasm2c.c 194 ) 195 # Sync with "zig_cpp_sources" in build.zig 196 set(ZIG_CPP_SOURCES 197 # These are planned to stay even when we are self-hosted. 198 src/zig_llvm.cpp 199 src/zig_llvm-ar.cpp 200 src/zig_clang_driver.cpp 201 src/zig_clang_cc1_main.cpp 202 src/zig_clang_cc1as_main.cpp 203 ) 204 # Needed because we use cmake, not the zig build system, to build zig2.o. 205 set(ZIG_STAGE2_SOURCES 206 "${ZIG_CONFIG_ZIG_OUT}" 207 lib/compiler_rt.zig 208 lib/std/BitStack.zig 209 lib/std/Build.zig 210 lib/std/Build/Cache.zig 211 lib/std/Build/Cache/DepTokenizer.zig 212 lib/std/Io.zig 213 lib/std/Io/Reader.zig 214 lib/std/Io/Writer.zig 215 lib/std/Progress.zig 216 lib/std/Random.zig 217 lib/std/Target.zig 218 lib/std/Target/Query.zig 219 lib/std/Target/aarch64.zig 220 lib/std/Target/amdgcn.zig 221 lib/std/Target/arm.zig 222 lib/std/Target/avr.zig 223 lib/std/Target/bpf.zig 224 lib/std/Target/hexagon.zig 225 lib/std/Target/loongarch.zig 226 lib/std/Target/mips.zig 227 lib/std/Target/msp430.zig 228 lib/std/Target/nvptx.zig 229 lib/std/Target/powerpc.zig 230 lib/std/Target/riscv.zig 231 lib/std/Target/s390x.zig 232 lib/std/Target/sparc.zig 233 lib/std/Target/wasm.zig 234 lib/std/Target/x86.zig 235 lib/std/Thread.zig 236 lib/std/array_hash_map.zig 237 lib/std/array_list.zig 238 lib/std/ascii.zig 239 lib/std/atomic.zig 240 lib/std/base64.zig 241 lib/std/buf_map.zig 242 lib/std/lang.zig 243 lib/std/lang/assembly.zig 244 lib/std/c.zig 245 lib/std/coff.zig 246 lib/std/crypto.zig 247 lib/std/crypto/blake3.zig 248 lib/std/crypto/siphash.zig 249 lib/std/debug.zig 250 lib/std/dwarf.zig 251 lib/std/dwarf/AT.zig 252 lib/std/dwarf/ATE.zig 253 lib/std/dwarf/FORM.zig 254 lib/std/dwarf/LANG.zig 255 lib/std/dwarf/OP.zig 256 lib/std/dwarf/TAG.zig 257 lib/std/elf.zig 258 lib/std/fmt.zig 259 lib/std/fmt/parse_float.zig 260 lib/std/fs.zig 261 lib/std/fs/path.zig 262 lib/std/hash.zig 263 lib/std/hash/auto_hash.zig 264 lib/std/hash/wyhash.zig 265 lib/std/hash_map.zig 266 lib/std/heap.zig 267 lib/std/heap/ArenaAllocator.zig 268 lib/std/json.zig 269 lib/std/leb128.zig 270 lib/std/log.zig 271 lib/std/macho.zig 272 lib/std/math.zig 273 lib/std/math/big.zig 274 lib/std/math/big/int.zig 275 lib/std/math/float.zig 276 lib/std/math/frexp.zig 277 lib/std/math/isinf.zig 278 lib/std/math/isnan.zig 279 lib/std/math/log.zig 280 lib/std/math/log10.zig 281 lib/std/math/log2.zig 282 lib/std/math/signbit.zig 283 lib/std/math/sqrt.zig 284 lib/std/mem.zig 285 lib/std/mem/Allocator.zig 286 lib/std/meta.zig 287 lib/std/meta/trailer_flags.zig 288 lib/std/multi_array_list.zig 289 lib/std/os.zig 290 lib/std/os/linux.zig 291 lib/std/os/linux.zig 292 lib/std/os/linux/IoUring.zig 293 lib/std/os/linux/io_uring_sqe.zig 294 lib/std/os/linux/x86_64.zig 295 lib/std/os/linux/x86_64.zig 296 lib/std/os/windows.zig 297 lib/std/os/windows/ntstatus.zig 298 lib/std/os/windows/win32error.zig 299 lib/std/pdb.zig 300 lib/std/process.zig 301 lib/std/process/Child.zig 302 lib/std/sort.zig 303 lib/std/start.zig 304 lib/std/static_string_map.zig 305 lib/std/std.zig 306 lib/std/time.zig 307 lib/std/treap.zig 308 lib/std/unicode.zig 309 lib/std/zig.zig 310 lib/std/zig/Ast.zig 311 lib/std/zig/Ast/Render.zig 312 lib/std/zig/AstGen.zig 313 lib/std/zig/AstRlAnnotate.zig 314 lib/std/zig/LibCInstallation.zig 315 lib/std/zig/Parse.zig 316 lib/std/zig/Server.zig 317 lib/std/zig/WindowsSdk.zig 318 lib/std/zig/Zir.zig 319 lib/std/zig/string_literal.zig 320 lib/std/zig/system.zig 321 lib/std/zig/system/NativePaths.zig 322 lib/std/zig/system/x86.zig 323 lib/std/zig/tokenizer.zig 324 lib/std/zig/llvm.zig 325 lib/std/zig/llvm/BitcodeReader.zig 326 lib/std/zig/llvm/Builder.zig 327 lib/std/zig/llvm/bitcode_writer.zig 328 lib/std/zig/llvm/ir.zig 329 src/Air.zig 330 src/Air/Legalize.zig 331 src/Air/Liveness.zig 332 src/Air/Liveness/Verify.zig 333 src/Air/print.zig 334 src/Builtin.zig 335 src/Compilation.zig 336 src/Compilation/Config.zig 337 src/InternPool.zig 338 src/RangeSet.zig 339 src/Sema.zig 340 src/Sema/reinterpret.zig 341 src/Sema/comptime_ptr_access.zig 342 src/Sema/type_resolution.zig 343 src/Type.zig 344 src/Value.zig 345 src/Zcu.zig 346 src/Zcu/PerThread.zig 347 src/codegen.zig 348 src/codegen/aarch64.zig 349 src/codegen/aarch64/abi.zig 350 src/codegen/aarch64/Assemble.zig 351 src/codegen/aarch64/Disassemble.zig 352 src/codegen/aarch64/encoding.zig 353 src/codegen/aarch64/instructions.zon 354 src/codegen/aarch64/Mir.zig 355 src/codegen/aarch64/Select.zig 356 src/codegen/c.zig 357 src/codegen/c/type.zig 358 src/codegen/c/type/render_defs.zig 359 src/codegen/llvm.zig 360 src/codegen/llvm/bindings.zig 361 src/codegen/loongarch/abi.zig 362 src/codegen/loongarch/encoding.zig 363 src/codegen/loongarch/decode_tree.zon 364 src/codegen/loongarch/inst_formats.zon 365 src/codegen/loongarch/Assemble.zig 366 src/codegen/loongarch/Disassemble.zig 367 src/codegen/loongarch/Mir.zig 368 src/codegen/loongarch/bits.zig 369 src/codegen/loongarch/Select.zig 370 src/codegen/loongarch.zig 371 src/codegen/s390x/abi.zig 372 src/crash_report.zig 373 src/dev.zig 374 src/libs/freebsd.zig 375 src/libs/glibc.zig 376 src/libs/netbsd.zig 377 src/libs/openbsd.zig 378 src/libs/libcxx.zig 379 src/libs/libtsan.zig 380 src/libs/libunwind.zig 381 src/link.zig 382 src/link/C.zig 383 src/link/ConstPool.zig 384 src/link/Coff.zig 385 src/link/Dwarf.zig 386 src/link/Dwarf2.zig 387 src/link/Elf.zig 388 src/link/Elf/Archive.zig 389 src/link/Elf/Atom.zig 390 src/link/Elf/AtomList.zig 391 src/link/Elf/LinkerDefined.zig 392 src/link/Elf/Merge.zig 393 src/link/Elf/Object.zig 394 src/link/Elf/SharedObject.zig 395 src/link/Elf/Symbol.zig 396 src/link/Elf/Thunk.zig 397 src/link/Elf/ZigObject.zig 398 src/link/Elf/eh_frame.zig 399 src/link/Elf/file.zig 400 src/link/Elf/gc.zig 401 src/link/Elf/relocatable.zig 402 src/link/Elf/relocation.zig 403 src/link/Elf/synthetic_sections.zig 404 src/link/Elf2.zig 405 src/link/LdScript.zig 406 src/link/Lld.zig 407 src/link/MachO.zig 408 src/link/MachO/Archive.zig 409 src/link/MachO/Atom.zig 410 src/link/MachO/CodeSignature.zig 411 src/link/MachO/DebugSymbols.zig 412 src/link/MachO/Dwarf.zig 413 src/link/MachO/Dylib.zig 414 src/link/MachO/InternalObject.zig 415 src/link/MachO/Object.zig 416 src/link/MachO/Relocation.zig 417 src/link/MachO/Symbol.zig 418 src/link/MachO/UnwindInfo.zig 419 src/link/MachO/ZigObject.zig 420 src/link/MachO/dead_strip.zig 421 src/link/MachO/dyld_info/Rebase.zig 422 src/link/MachO/dyld_info/Trie.zig 423 src/link/MachO/dyld_info/bind.zig 424 src/link/MachO/eh_frame.zig 425 src/link/MachO/fat.zig 426 src/link/MachO/file.zig 427 src/link/MachO/hasher.zig 428 src/link/MachO/load_commands.zig 429 src/link/MachO/relocatable.zig 430 src/link/MachO/synthetic.zig 431 src/link/MachO/Thunk.zig 432 src/link/MachO/uuid.zig 433 src/link/MappedFile.zig 434 src/link/Queue.zig 435 src/link/StringTable.zig 436 src/link/Wasm.zig 437 src/link/Wasm/Archive.zig 438 src/link/Wasm/Flush.zig 439 src/link/Wasm/Object.zig 440 src/link/aarch64.zig 441 src/link/riscv.zig 442 src/link/table_section.zig 443 src/link/tapi.zig 444 src/link/tapi/Tokenizer.zig 445 src/link/tapi/parse.zig 446 src/link/tapi/parse/test.zig 447 src/link/tapi/yaml.zig 448 src/link/tapi/yaml/test.zig 449 src/main.zig 450 src/libs/mingw.zig 451 src/libs/musl.zig 452 src/mutable_value.zig 453 src/print_env.zig 454 src/print_targets.zig 455 src/print_value.zig 456 src/print_zir.zig 457 src/register_manager.zig 458 src/target.zig 459 src/tracy.zig 460 src/libs/wasi_libc.zig 461 ) 462 463 if(MSVC) 464 set(MSVC_DIA_SDK_DIR "$ENV{VSINSTALLDIR}DIA SDK") 465 if(IS_DIRECTORY ${MSVC_DIA_SDK_DIR}) 466 set(ZIG_DIA_GUIDS_LIB "${MSVC_DIA_SDK_DIR}/lib/amd64/diaguids.lib") 467 string(REGEX REPLACE "\\\\" "\\\\\\\\" ZIG_DIA_GUIDS_LIB_ESCAPED "${ZIG_DIA_GUIDS_LIB}") 468 endif() 469 470 # The /RTC[c][s][u] flag enables extra runtime checks. ("/RTC1" == "/RTCsu") 471 # The "c" (PossibleDataLoss) and "u" (UninitializeVariable) flags trap on valid C code so we disable 472 # them. The "s" flag seems like it might be OK. 473 string(REPLACE "/RTC1" "/RTCs" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}") 474 string(REPLACE "/RTC1" "/RTCs" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}") 475 endif() 476 477 configure_file ( 478 stage1/config.h.in 479 "${ZIG_CONFIG_H_OUT}" 480 ) 481 configure_file ( 482 stage1/config.zig.in 483 "${ZIG_CONFIG_ZIG_OUT}" 484 ) 485 486 # zigcpp target 487 488 set(ZIGCPP_OUTPUT_DIR "${PROJECT_BINARY_DIR}/zigcpp") 489 490 add_library(zigcpp STATIC ${ZIG_CPP_SOURCES}) 491 492 # Sync with minimum C++ standard required to build LLVM 493 # and with "exe_cflags" in build.zig 494 target_compile_features(zigcpp PRIVATE cxx_std_17) 495 set_target_properties(zigcpp PROPERTIES POSITION_INDEPENDENT_CODE ${ZIG_PIE}) 496 497 if(LLVM_LINK_MODE STREQUAL "static") 498 target_compile_definitions(zigcpp PRIVATE 499 LLVM_BUILD_STATIC 500 CLANG_BUILD_STATIC 501 ) 502 endif() 503 504 if(NOT MSVC) 505 if(MINGW) 506 target_compile_options(zigcpp PRIVATE -Wno-format) 507 endif() 508 # Sync content below with "exe_cflags" in build.zig 509 target_compile_definitions(zigcpp PUBLIC 510 __STDC_CONSTANT_MACROS 511 __STDC_FORMAT_MACROS 512 __STDC_LIMIT_MACROS 513 514 _GNU_SOURCE 515 ) 516 target_compile_options(zigcpp PRIVATE 517 -fno-exceptions 518 -fno-rtti 519 -fno-stack-protector 520 521 -fvisibility-inlines-hidden 522 523 -Wno-type-limits 524 -Wno-missing-braces 525 -Wno-comment 526 ) 527 else() 528 target_compile_options(zigcpp PRIVATE /Zc:preprocessor) 529 set_property(TARGET zigcpp PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded") 530 endif() 531 532 target_include_directories(zigcpp PUBLIC 533 ${CLANG_INCLUDE_DIRS} 534 ${LLVM_INCLUDE_DIRS} 535 ${LLD_INCLUDE_DIRS} 536 ) 537 target_link_libraries(zigcpp PUBLIC 538 ${CLANG_LIBRARIES} 539 ${LLD_LIBRARIES} 540 ${LLVM_LIBRARIES} 541 ${CMAKE_THREAD_LIBS_INIT} 542 ) 543 544 # Handle multi-config builds and place each into a common lib. The VS generator 545 # for example will append a Debug folder by default if not explicitly specified. 546 set_target_properties(zigcpp PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${ZIGCPP_OUTPUT_DIR}) 547 foreach(CONFIG_TYPE ${CMAKE_CONFIGURATION_TYPES}) 548 string(TOUPPER ${CONFIG_TYPE} CONFIG_TYPE) 549 set_target_properties(zigcpp PROPERTIES ARCHIVE_OUTPUT_DIRECTORY_${CONFIG_TYPE} ${ZIGCPP_OUTPUT_DIR}) 550 endforeach() 551 552 # end of zigcpp target 553 554 include(CheckSymbolExists) 555 556 string(TOLOWER "${CMAKE_HOST_SYSTEM_NAME}" ZIG_HOST_TARGET_OS) 557 if(ZIG_HOST_TARGET_OS STREQUAL "android") 558 set(ZIG_HOST_TARGET_OS "linux") 559 set(ZIG_HOST_TARGET_IS_ANDROID TRUE) 560 elseif(ZIG_HOST_TARGET_OS STREQUAL "darwin") 561 set(ZIG_HOST_TARGET_OS "macos") 562 elseif(ZIG_HOST_TARGET_OS STREQUAL "gnu") 563 set(ZIG_HOST_TARGET_OS "hurd") 564 elseif(ZIG_HOST_TARGET_OS STREQUAL "serenityos") 565 set(ZIG_HOST_TARGET_OS "serenity") 566 elseif(ZIG_HOST_TARGET_OS STREQUAL "sunos") 567 set(ZIG_HOST_TARGET_OS "illumos") 568 endif() 569 570 string(TOLOWER "${CMAKE_HOST_SYSTEM_PROCESSOR}" ZIG_HOST_TARGET_ARCH) 571 if(ZIG_HOST_TARGET_ARCH MATCHES "^i[3-9]86$") 572 if (ZIG_HOST_TARGET_OS STREQUAL "illumos") 573 set(ZIG_HOST_TARGET_ARCH "x86_64") 574 else() 575 set(ZIG_HOST_TARGET_ARCH "x86") 576 endif() 577 elseif(ZIG_HOST_TARGET_ARCH STREQUAL "amd64") 578 set(ZIG_HOST_TARGET_ARCH "x86_64") 579 elseif(ZIG_HOST_TARGET_ARCH STREQUAL "arm64") 580 set(ZIG_HOST_TARGET_ARCH "aarch64") 581 elseif(ZIG_HOST_TARGET_ARCH MATCHES "^arm(el)?$" OR ZIG_HOST_TARGET_ARCH MATCHES "^armv[7-8]l$") 582 set(ZIG_HOST_TARGET_ARCH "arm") 583 elseif(ZIG_HOST_TARGET_ARCH STREQUAL "armeb" OR ZIG_HOST_TARGET_ARCH MATCHES "^armv[7-8]b$") 584 set(ZIG_HOST_TARGET_ARCH "armeb") 585 endif() 586 if(ZIG_HOST_TARGET_ARCH MATCHES "^arm(eb)?$") 587 check_symbol_exists(__thumb__ "" ZIG_HOST_TARGET_DEFAULTS_TO_THUMB) 588 if(ZIG_HOST_TARGET_DEFAULTS_TO_THUMB) 589 string(REGEX REPLACE "^arm" "thumb" ZIG_HOST_TARGET_ARCH "${ZIG_HOST_TARGET_ARCH}") 590 endif() 591 endif() 592 string(REGEX REPLACE "^ppc((64)?(le)?)$" "powerpc\\1" ZIG_HOST_TARGET_ARCH "${ZIG_HOST_TARGET_ARCH}") 593 594 set(ZIG_HOST_TARGET_ABI "") 595 if(MSVC) 596 set(ZIG_HOST_TARGET_ABI "-msvc") 597 elseif(MINGW) 598 set(ZIG_HOST_TARGET_ABI "-gnu") 599 elseif(ZIG_HOST_TARGET_IS_ANDROID) 600 if(ZIG_HOST_TARGET_ARCH STREQUAL "arm") 601 set(ZIG_HOST_TARGET_ABI "-androideabi") 602 else() 603 set(ZIG_HOST_TARGET_ABI "-android") 604 endif() 605 endif() 606 607 set(ZIG_HOST_TARGET_TRIPLE "${ZIG_HOST_TARGET_ARCH}-${ZIG_HOST_TARGET_OS}${ZIG_HOST_TARGET_ABI}" CACHE STRING "Host zig target triple.") 608 609 if(MSVC) 610 set(ZIG_WASM2C_COMPILE_FLAGS "") 611 set(ZIG1_COMPILE_FLAGS "/Os") 612 set(ZIG2_COMPILE_FLAGS "/Od") 613 set(ZIG2_LINK_FLAGS "/STACK:16777216 /FORCE:MULTIPLE") 614 else() 615 set(ZIG_WASM2C_COMPILE_FLAGS "-std=c99") 616 set(ZIG1_COMPILE_FLAGS "-std=c99 -Oz -fno-strict-aliasing") 617 set(ZIG2_COMPILE_FLAGS "-std=c99 -Oz -fno-sanitize=undefined -fno-stack-protector -fno-strict-aliasing") 618 if(CMAKE_C_COMPILER_ID STREQUAL "Clang" AND ZIG_HOST_TARGET_ARCH STREQUAL "s390x") 619 string(REPLACE -Oz -O0 ZIG2_COMPILE_FLAGS "${ZIG2_COMPILE_FLAGS}") # llvm 22 assertion failure 620 endif() 621 # Must match the condition in build.zig. 622 if(ZIG_HOST_TARGET_ARCH MATCHES "^(arm|thumb)(eb)?$" OR ZIG_HOST_TARGET_ARCH EQUAL "hexagon" OR ZIG_HOST_TARGET_ARCH MATCHES "^powerpc(64)?(le)?$") 623 set(ZIG1_COMPILE_FLAGS "${ZIG1_COMPILE_FLAGS} -ffunction-sections -fdata-sections") 624 set(ZIG2_COMPILE_FLAGS "${ZIG2_COMPILE_FLAGS} -ffunction-sections -fdata-sections") 625 endif() 626 if (CMAKE_C_COMPILER_ID STREQUAL "GNU") 627 # Prevent GCC from miscompiling 'zig2.c'. See also 'GCC_BUG_119085_PRESENT' workaround details in 'bootstrap.c'. 628 if ( 629 (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL "10.0" AND 630 CMAKE_C_COMPILER_VERSION VERSION_LESS_EQUAL "13.4") OR 631 (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL "14.0" AND 632 CMAKE_C_COMPILER_VERSION VERSION_LESS_EQUAL "14.3") OR 633 (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL "15.0" AND 634 CMAKE_C_COMPILER_VERSION VERSION_LESS "15.2") 635 ) 636 set(ZIG2_COMPILE_FLAGS "${ZIG2_COMPILE_FLAGS} -fno-tree-sra") 637 endif() 638 639 # Prevent GCC from spamming false positive `-Waddress-of-packed-member` warnings in 'zig2.c'. 640 # See also 'GCC_BUG_94081_PRESENT' workaround details in 'bootstrap.c'. 641 set(ZIG2_COMPILE_FLAGS "${ZIG2_COMPILE_FLAGS} -Wno-address-of-packed-member") 642 endif() 643 endif() 644 645 set(ZIG1_WASM_MODULE "${PROJECT_SOURCE_DIR}/stage1/zig1.wasm") 646 set(ZIG1_C_SOURCE "${PROJECT_BINARY_DIR}/zig1.c") 647 set(ZIG2_C_SOURCE "${PROJECT_BINARY_DIR}/zig2.c") 648 set(ZIG_COMPILER_RT_C_SOURCE "${PROJECT_BINARY_DIR}/compiler_rt.c") 649 650 add_executable(zig-wasm2c ${ZIG_WASM2C_SOURCES}) 651 set_target_properties(zig-wasm2c PROPERTIES COMPILE_FLAGS "${ZIG_WASM2C_COMPILE_FLAGS}") 652 653 add_custom_command( 654 OUTPUT "${ZIG1_C_SOURCE}" 655 COMMAND zig-wasm2c "${ZIG1_WASM_MODULE}" "${ZIG1_C_SOURCE}" 656 DEPENDS zig-wasm2c "${ZIG1_WASM_MODULE}" 657 COMMENT "Converting ${ZIG1_WASM_MODULE} to ${ZIG1_C_SOURCE}" 658 WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" 659 ) 660 661 add_executable(zig1 ${ZIG1_C_SOURCE} stage1/wasi.c) 662 set_target_properties(zig1 PROPERTIES COMPILE_FLAGS ${ZIG1_COMPILE_FLAGS}) 663 664 if(MSVC) 665 target_link_options(zig1 PRIVATE /STACK:0x10000000) 666 else() 667 target_link_libraries(zig1 LINK_PUBLIC m) 668 if(MINGW) 669 target_link_options(zig1 PRIVATE -Wl,--stack,0x10000000) 670 endif() 671 endif() 672 673 set(BUILD_ZIG2_ARGS 674 "${PROJECT_SOURCE_DIR}/lib" 675 build-exe -ofmt=c -lc -OReleaseSmall 676 --name zig2 677 -femit-bin="${ZIG2_C_SOURCE}" 678 -target "${ZIG_HOST_TARGET_TRIPLE}" 679 --dep "build_options" 680 "-Mroot=src/main.zig" 681 "-Mbuild_options=${ZIG_CONFIG_ZIG_OUT}" 682 ) 683 684 add_custom_command( 685 OUTPUT "${ZIG2_C_SOURCE}" 686 COMMAND zig1 ${BUILD_ZIG2_ARGS} 687 DEPENDS zig1 "${ZIG_STAGE2_SOURCES}" 688 COMMENT "Running zig1.wasm to produce ${ZIG2_C_SOURCE}" 689 WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" 690 ) 691 692 set(BUILD_COMPILER_RT_ARGS 693 "${PROJECT_SOURCE_DIR}/lib" 694 build-obj -ofmt=c -OReleaseSmall 695 --name compiler_rt 696 -femit-bin="${ZIG_COMPILER_RT_C_SOURCE}" 697 -target "${ZIG_HOST_TARGET_TRIPLE}" 698 "-Mroot=lib/compiler_rt.zig" 699 ) 700 701 add_custom_command( 702 OUTPUT "${ZIG_COMPILER_RT_C_SOURCE}" 703 COMMAND zig1 ${BUILD_COMPILER_RT_ARGS} 704 DEPENDS zig1 "${ZIG_STAGE2_SOURCES}" 705 COMMENT "Running zig1.wasm to produce ${ZIG_COMPILER_RT_C_SOURCE}" 706 WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" 707 ) 708 709 add_executable(zig2 ${ZIG2_C_SOURCE} ${ZIG_COMPILER_RT_C_SOURCE}) 710 set_target_properties(zig2 PROPERTIES 711 COMPILE_FLAGS ${ZIG2_COMPILE_FLAGS} 712 LINK_FLAGS "${ZIG2_LINK_FLAGS}" 713 ) 714 target_include_directories(zig2 PUBLIC stage1) 715 target_link_libraries(zig2 LINK_PUBLIC zigcpp) 716 717 if(MSVC) 718 target_link_libraries(zig2 LINK_PUBLIC ntdll.lib ws2_32.lib) 719 elseif(MINGW) 720 target_link_libraries(zig2 LINK_PUBLIC ntdll ws2_32) 721 endif() 722 723 if(NOT MSVC) 724 target_link_libraries(zig2 LINK_PUBLIC ${LIBXML2}) 725 endif() 726 727 if(ZIG_DIA_GUIDS_LIB) 728 target_link_libraries(zig2 LINK_PUBLIC ${ZIG_DIA_GUIDS_LIB}) 729 endif() 730 731 if(MSVC OR MINGW) 732 target_link_libraries(zig2 LINK_PUBLIC version) 733 endif() 734 735 736 set(ZIG_BUILD_ARGS 737 "--zig-lib=${PROJECT_SOURCE_DIR}/lib" 738 739 "-Dversion-string=${RESOLVED_ZIG_VERSION}" 740 "-Dtarget=${ZIG_TARGET_TRIPLE}" 741 "-Dcpu=${ZIG_TARGET_MCPU}" 742 743 -Denable-llvm 744 "-Dconfig_h=${ZIG_CONFIG_H_OUT}" 745 ) 746 747 set(ZIG_EXTRA_BUILD_ARGS "" CACHE STRING "Extra zig build args") 748 if(ZIG_EXTRA_BUILD_ARGS) 749 list(APPEND ZIG_BUILD_ARGS ${ZIG_EXTRA_BUILD_ARGS}) 750 endif() 751 752 set(ZIG_RELEASE_SAFE OFF CACHE BOOL "Build Zig as ReleaseSafe (with debug assertions on)") 753 754 if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") 755 list(APPEND ZIG_BUILD_ARGS -Doptimize=Debug) 756 else() 757 if("${CMAKE_BUILD_TYPE}" STREQUAL "MinSizeRel") 758 list(APPEND ZIG_BUILD_ARGS -Doptimize=ReleaseSmall) 759 else() 760 # Release and RelWithDebInfo 761 if(ZIG_RELEASE_SAFE) 762 list(APPEND ZIG_BUILD_ARGS -Doptimize=ReleaseSafe) 763 else() 764 list(APPEND ZIG_BUILD_ARGS -Doptimize=ReleaseFast) 765 endif() 766 if(NOT "${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo") 767 list(APPEND ZIG_BUILD_ARGS -Dstrip) 768 endif() 769 endif() 770 endif() 771 772 if(ZIG_STATIC AND NOT MSVC) 773 list(APPEND ZIG_BUILD_ARGS -Duse-zig-libcxx) 774 endif() 775 776 if(ZIG_NO_LIB) 777 list(APPEND ZIG_BUILD_ARGS -Dno-lib) 778 endif() 779 780 if(ZIG_SINGLE_THREADED) 781 list(APPEND ZIG_BUILD_ARGS -Dsingle-threaded) 782 endif() 783 784 if(ZIG_PIE) 785 list(APPEND ZIG_BUILD_ARGS -Dpie) 786 endif() 787 788 if(NOT "${ZIG_TARGET_DYNAMIC_LINKER}" STREQUAL "") 789 list(APPEND ZIG_BUILD_ARGS "-Ddynamic-linker=${ZIG_TARGET_DYNAMIC_LINKER}") 790 endif() 791 792 793 add_custom_target(stage3 ALL 794 DEPENDS "${PROJECT_BINARY_DIR}/stage3/bin/zig" 795 ) 796 797 set(ZIG2_WORKING_DIR "${PROJECT_SOURCE_DIR}") 798 799 add_custom_command( 800 OUTPUT "${PROJECT_BINARY_DIR}/stage3/bin/zig" 801 COMMAND zig2 build ${ZIG_BUILD_ARGS} --prefix "${PROJECT_BINARY_DIR}/stage3" 802 COMMENT "Building stage3" 803 WORKING_DIRECTORY "${ZIG2_WORKING_DIR}" 804 ) 805 806 set(ZIG_EXECUTABLE "$<TARGET_FILE:zig2>") 807 808 install(CODE "set(ZIG_EXECUTABLE \"${ZIG_EXECUTABLE}\")") 809 install(CODE "set(ZIG_BUILD_ARGS \"${ZIG_BUILD_ARGS}\")") 810 install(CODE "set(ZIG2_WORKING_DIR \"${ZIG2_WORKING_DIR}\")") 811 install(CODE "set(CMAKE_INSTALL_PREFIX \"${CMAKE_INSTALL_PREFIX}\")") 812 install(SCRIPT cmake/install.cmake) 813