zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

CMakeLists.txt (31645B) - Raw


      1 cmake_minimum_required(VERSION 3.15)
      2 
      3 if(NOT CMAKE_BUILD_TYPE)
      4     set(CMAKE_BUILD_TYPE "Debug" CACHE STRING
      5         "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." FORCE)
      6 endif()
      7 
      8 if(NOT CMAKE_INSTALL_PREFIX)
      9     set(CMAKE_INSTALL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/stage3" CACHE PATH
     10       "Directory to install zig to" FORCE)
     11 endif()
     12 
     13 # CMake recognizes the CMAKE_PREFIX_PATH environment variable for some things,
     14 # and also the CMAKE_PREFIX_PATH cache variable for other things. However, it
     15 # does not relate these two things, i.e. if the environment variable is set,
     16 # CMake does not populate the cache variable in a corresponding manner. Some
     17 # package systems, such as Homebrew, set the environment variable but not the
     18 # cache variable. Furthermore, the environment variable follows the system path
     19 # separator, such as ':' on POSIX and ';' on Windows, but the cache variable
     20 # follows CMake's array behavior, i.e. always ';' for a separator.
     21 list(APPEND ZIG_CMAKE_PREFIX_PATH "${CMAKE_PREFIX_PATH}")
     22 if(WIN32)
     23   list(APPEND ZIG_CMAKE_PREFIX_PATH $ENV{CMAKE_PREFIX_PATH})
     24 else()
     25   string(REGEX REPLACE ":" ";" ZIG_CMAKE_PREFIX_PATH_STRING "$ENV{CMAKE_PREFIX_PATH}")
     26   list(APPEND ZIG_CMAKE_PREFIX_PATH "${ZIG_CMAKE_PREFIX_PATH_STRING}")
     27 endif()
     28 
     29 list(PREPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
     30 
     31 project(zig
     32   DESCRIPTION
     33     "Zig is a general-purpose programming language and toolchain for maintaining robust, optimal and reusable software"
     34   HOMEPAGE_URL
     35     "https://ziglang.org"
     36   LANGUAGES
     37     C CXX
     38 )
     39 
     40 set(ZIG_VERSION_MAJOR 0)
     41 set(ZIG_VERSION_MINOR 15)
     42 set(ZIG_VERSION_PATCH 2)
     43 set(ZIG_VERSION "" CACHE STRING "Override Zig version string. Default is to find out with git.")
     44 
     45 if("${ZIG_VERSION}" STREQUAL "")
     46     set(RESOLVED_ZIG_VERSION "${ZIG_VERSION_MAJOR}.${ZIG_VERSION_MINOR}.${ZIG_VERSION_PATCH}")
     47     find_program(GIT_EXE NAMES git NAMES_PER_DIR)
     48     if(GIT_EXE AND EXISTS "${PROJECT_SOURCE_DIR}/.git")
     49         execute_process(
     50             COMMAND ${GIT_EXE} -C "${PROJECT_SOURCE_DIR}" describe --match *.*.* --tags --abbrev=9
     51             RESULT_VARIABLE EXIT_STATUS
     52             OUTPUT_VARIABLE GIT_DESCRIBE
     53             OUTPUT_STRIP_TRAILING_WHITESPACE
     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 20)
    137 find_package(clang 20)
    138 find_package(lld 20)
    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.cpp
    201     src/zig_clang_driver.cpp
    202     src/zig_clang_cc1_main.cpp
    203     src/zig_clang_cc1as_main.cpp
    204 )
    205 # Needed because we use cmake, not the zig build system, to build zig2.o.
    206 set(ZIG_STAGE2_SOURCES
    207     "${ZIG_CONFIG_ZIG_OUT}"
    208     lib/compiler_rt.zig
    209     lib/compiler_rt/absv.zig
    210     lib/compiler_rt/absvdi2.zig
    211     lib/compiler_rt/absvsi2.zig
    212     lib/compiler_rt/absvti2.zig
    213     lib/compiler_rt/adddf3.zig
    214     lib/compiler_rt/addf3.zig
    215     lib/compiler_rt/addo.zig
    216     lib/compiler_rt/addsf3.zig
    217     lib/compiler_rt/addtf3.zig
    218     lib/compiler_rt/addvsi3.zig
    219     lib/compiler_rt/addxf3.zig
    220     lib/compiler_rt/arm.zig
    221     lib/compiler_rt/atomics.zig
    222     lib/compiler_rt/aulldiv.zig
    223     lib/compiler_rt/aullrem.zig
    224     lib/compiler_rt/bswap.zig
    225     lib/compiler_rt/ceil.zig
    226     lib/compiler_rt/clear_cache.zig
    227     lib/compiler_rt/cmp.zig
    228     lib/compiler_rt/cmpdf2.zig
    229     lib/compiler_rt/cmpsf2.zig
    230     lib/compiler_rt/cmptf2.zig
    231     lib/compiler_rt/cmpxf2.zig
    232     lib/compiler_rt/common.zig
    233     lib/compiler_rt/comparef.zig
    234     lib/compiler_rt/cos.zig
    235     lib/compiler_rt/count0bits.zig
    236     lib/compiler_rt/divdf3.zig
    237     lib/compiler_rt/divsf3.zig
    238     lib/compiler_rt/divtf3.zig
    239     lib/compiler_rt/divti3.zig
    240     lib/compiler_rt/divxf3.zig
    241     lib/compiler_rt/emutls.zig
    242     lib/compiler_rt/exp.zig
    243     lib/compiler_rt/exp2.zig
    244     lib/compiler_rt/extenddftf2.zig
    245     lib/compiler_rt/extenddfxf2.zig
    246     lib/compiler_rt/extendf.zig
    247     lib/compiler_rt/extendhfsf2.zig
    248     lib/compiler_rt/extendhftf2.zig
    249     lib/compiler_rt/extendhfxf2.zig
    250     lib/compiler_rt/extendsfdf2.zig
    251     lib/compiler_rt/extendsftf2.zig
    252     lib/compiler_rt/extendsfxf2.zig
    253     lib/compiler_rt/extendxftf2.zig
    254     lib/compiler_rt/fabs.zig
    255     lib/compiler_rt/fixdfdi.zig
    256     lib/compiler_rt/fixdfsi.zig
    257     lib/compiler_rt/fixdfti.zig
    258     lib/compiler_rt/fixhfdi.zig
    259     lib/compiler_rt/fixhfsi.zig
    260     lib/compiler_rt/fixhfti.zig
    261     lib/compiler_rt/fixsfdi.zig
    262     lib/compiler_rt/fixsfsi.zig
    263     lib/compiler_rt/fixsfti.zig
    264     lib/compiler_rt/fixtfdi.zig
    265     lib/compiler_rt/fixtfsi.zig
    266     lib/compiler_rt/fixtfti.zig
    267     lib/compiler_rt/fixunsdfdi.zig
    268     lib/compiler_rt/fixunsdfsi.zig
    269     lib/compiler_rt/fixunsdfti.zig
    270     lib/compiler_rt/fixunshfdi.zig
    271     lib/compiler_rt/fixunshfsi.zig
    272     lib/compiler_rt/fixunshfti.zig
    273     lib/compiler_rt/fixunssfdi.zig
    274     lib/compiler_rt/fixunssfsi.zig
    275     lib/compiler_rt/fixunssfti.zig
    276     lib/compiler_rt/fixunstfdi.zig
    277     lib/compiler_rt/fixunstfsi.zig
    278     lib/compiler_rt/fixunstfti.zig
    279     lib/compiler_rt/fixunsxfdi.zig
    280     lib/compiler_rt/fixunsxfsi.zig
    281     lib/compiler_rt/fixunsxfti.zig
    282     lib/compiler_rt/fixxfdi.zig
    283     lib/compiler_rt/fixxfsi.zig
    284     lib/compiler_rt/fixxfti.zig
    285     lib/compiler_rt/float_from_int.zig
    286     lib/compiler_rt/floatdidf.zig
    287     lib/compiler_rt/floatdihf.zig
    288     lib/compiler_rt/floatdisf.zig
    289     lib/compiler_rt/floatditf.zig
    290     lib/compiler_rt/floatdixf.zig
    291     lib/compiler_rt/floatsidf.zig
    292     lib/compiler_rt/floatsihf.zig
    293     lib/compiler_rt/floatsisf.zig
    294     lib/compiler_rt/floatsitf.zig
    295     lib/compiler_rt/floatsixf.zig
    296     lib/compiler_rt/floattidf.zig
    297     lib/compiler_rt/floattihf.zig
    298     lib/compiler_rt/floattisf.zig
    299     lib/compiler_rt/floattitf.zig
    300     lib/compiler_rt/floattixf.zig
    301     lib/compiler_rt/floatundidf.zig
    302     lib/compiler_rt/floatundihf.zig
    303     lib/compiler_rt/floatundisf.zig
    304     lib/compiler_rt/floatunditf.zig
    305     lib/compiler_rt/floatundixf.zig
    306     lib/compiler_rt/floatunsidf.zig
    307     lib/compiler_rt/floatunsihf.zig
    308     lib/compiler_rt/floatunsisf.zig
    309     lib/compiler_rt/floatunsitf.zig
    310     lib/compiler_rt/floatunsixf.zig
    311     lib/compiler_rt/floatuntidf.zig
    312     lib/compiler_rt/floatuntihf.zig
    313     lib/compiler_rt/floatuntisf.zig
    314     lib/compiler_rt/floatuntitf.zig
    315     lib/compiler_rt/floatuntixf.zig
    316     lib/compiler_rt/floor.zig
    317     lib/compiler_rt/fma.zig
    318     lib/compiler_rt/fmax.zig
    319     lib/compiler_rt/fmin.zig
    320     lib/compiler_rt/fmod.zig
    321     lib/compiler_rt/gedf2.zig
    322     lib/compiler_rt/gesf2.zig
    323     lib/compiler_rt/getf2.zig
    324     lib/compiler_rt/gexf2.zig
    325     lib/compiler_rt/int.zig
    326     lib/compiler_rt/int_from_float.zig
    327     lib/compiler_rt/log.zig
    328     lib/compiler_rt/log10.zig
    329     lib/compiler_rt/log2.zig
    330     lib/compiler_rt/modti3.zig
    331     lib/compiler_rt/mulXi3.zig
    332     lib/compiler_rt/muldf3.zig
    333     lib/compiler_rt/mulf3.zig
    334     lib/compiler_rt/mulo.zig
    335     lib/compiler_rt/mulsf3.zig
    336     lib/compiler_rt/multf3.zig
    337     lib/compiler_rt/mulvsi3.zig
    338     lib/compiler_rt/mulxf3.zig
    339     lib/compiler_rt/negXi2.zig
    340     lib/compiler_rt/negdf2.zig
    341     lib/compiler_rt/negsf2.zig
    342     lib/compiler_rt/negtf2.zig
    343     lib/compiler_rt/negv.zig
    344     lib/compiler_rt/negxf2.zig
    345     lib/compiler_rt/os_version_check.zig
    346     lib/compiler_rt/parity.zig
    347     lib/compiler_rt/popcount.zig
    348     lib/compiler_rt/rem_pio2.zig
    349     lib/compiler_rt/rem_pio2_large.zig
    350     lib/compiler_rt/rem_pio2f.zig
    351     lib/compiler_rt/round.zig
    352     lib/compiler_rt/shift.zig
    353     lib/compiler_rt/sin.zig
    354     lib/compiler_rt/sincos.zig
    355     lib/compiler_rt/sqrt.zig
    356     lib/compiler_rt/stack_probe.zig
    357     lib/compiler_rt/subdf3.zig
    358     lib/compiler_rt/subo.zig
    359     lib/compiler_rt/subsf3.zig
    360     lib/compiler_rt/subtf3.zig
    361     lib/compiler_rt/subvdi3.zig
    362     lib/compiler_rt/subvsi3.zig
    363     lib/compiler_rt/subxf3.zig
    364     lib/compiler_rt/tan.zig
    365     lib/compiler_rt/trig.zig
    366     lib/compiler_rt/trunc.zig
    367     lib/compiler_rt/truncdfhf2.zig
    368     lib/compiler_rt/truncdfsf2.zig
    369     lib/compiler_rt/truncf.zig
    370     lib/compiler_rt/truncsfhf2.zig
    371     lib/compiler_rt/trunctfdf2.zig
    372     lib/compiler_rt/trunctfhf2.zig
    373     lib/compiler_rt/trunctfsf2.zig
    374     lib/compiler_rt/trunctfxf2.zig
    375     lib/compiler_rt/truncxfdf2.zig
    376     lib/compiler_rt/truncxfhf2.zig
    377     lib/compiler_rt/truncxfsf2.zig
    378     lib/compiler_rt/udivmod.zig
    379     lib/compiler_rt/udivmodei4.zig
    380     lib/compiler_rt/udivmodti4.zig
    381     lib/compiler_rt/udivti3.zig
    382     lib/compiler_rt/umodti3.zig
    383     lib/compiler_rt/unorddf2.zig
    384     lib/compiler_rt/unordsf2.zig
    385     lib/compiler_rt/unordtf2.zig
    386     lib/std/BitStack.zig
    387     lib/std/Build.zig
    388     lib/std/Build/Cache.zig
    389     lib/std/Build/Cache/DepTokenizer.zig
    390     lib/std/Io.zig
    391     lib/std/Io/Reader.zig
    392     lib/std/Io/Writer.zig
    393     lib/std/Progress.zig
    394     lib/std/Random.zig
    395     lib/std/Target.zig
    396     lib/std/Target/Query.zig
    397     lib/std/Target/aarch64.zig
    398     lib/std/Target/amdgcn.zig
    399     lib/std/Target/arm.zig
    400     lib/std/Target/avr.zig
    401     lib/std/Target/bpf.zig
    402     lib/std/Target/hexagon.zig
    403     lib/std/Target/loongarch.zig
    404     lib/std/Target/mips.zig
    405     lib/std/Target/msp430.zig
    406     lib/std/Target/nvptx.zig
    407     lib/std/Target/powerpc.zig
    408     lib/std/Target/riscv.zig
    409     lib/std/Target/s390x.zig
    410     lib/std/Target/sparc.zig
    411     lib/std/Target/wasm.zig
    412     lib/std/Target/x86.zig
    413     lib/std/Thread.zig
    414     lib/std/Thread/Futex.zig
    415     lib/std/Thread/Mutex.zig
    416     lib/std/Thread/Pool.zig
    417     lib/std/Thread/ResetEvent.zig
    418     lib/std/Thread/WaitGroup.zig
    419     lib/std/array_hash_map.zig
    420     lib/std/array_list.zig
    421     lib/std/ascii.zig
    422     lib/std/atomic.zig
    423     lib/std/base64.zig
    424     lib/std/buf_map.zig
    425     lib/std/builtin.zig
    426     lib/std/c.zig
    427     lib/std/coff.zig
    428     lib/std/crypto.zig
    429     lib/std/crypto/blake3.zig
    430     lib/std/crypto/siphash.zig
    431     lib/std/debug.zig
    432     lib/std/dwarf.zig
    433     lib/std/dwarf/AT.zig
    434     lib/std/dwarf/ATE.zig
    435     lib/std/dwarf/FORM.zig
    436     lib/std/dwarf/LANG.zig
    437     lib/std/dwarf/OP.zig
    438     lib/std/dwarf/TAG.zig
    439     lib/std/elf.zig
    440     lib/std/fmt.zig
    441     lib/std/fmt/parse_float.zig
    442     lib/std/fs.zig
    443     lib/std/fs/AtomicFile.zig
    444     lib/std/fs/Dir.zig
    445     lib/std/fs/File.zig
    446     lib/std/fs/get_app_data_dir.zig
    447     lib/std/fs/path.zig
    448     lib/std/hash.zig
    449     lib/std/hash/auto_hash.zig
    450     lib/std/hash/wyhash.zig
    451     lib/std/hash_map.zig
    452     lib/std/heap.zig
    453     lib/std/heap/arena_allocator.zig
    454     lib/std/json.zig
    455     lib/std/leb128.zig
    456     lib/std/log.zig
    457     lib/std/macho.zig
    458     lib/std/math.zig
    459     lib/std/math/big.zig
    460     lib/std/math/big/int.zig
    461     lib/std/math/float.zig
    462     lib/std/math/frexp.zig
    463     lib/std/math/isinf.zig
    464     lib/std/math/isnan.zig
    465     lib/std/math/log.zig
    466     lib/std/math/log10.zig
    467     lib/std/math/log2.zig
    468     lib/std/math/signbit.zig
    469     lib/std/math/sqrt.zig
    470     lib/std/mem.zig
    471     lib/std/mem/Allocator.zig
    472     lib/std/meta.zig
    473     lib/std/meta/trailer_flags.zig
    474     lib/std/multi_array_list.zig
    475     lib/std/os.zig
    476     lib/std/os/linux.zig
    477     lib/std/os/linux.zig
    478     lib/std/os/linux/IoUring.zig
    479     lib/std/os/linux/io_uring_sqe.zig
    480     lib/std/os/linux/x86_64.zig
    481     lib/std/os/linux/x86_64.zig
    482     lib/std/os/windows.zig
    483     lib/std/os/windows/ntstatus.zig
    484     lib/std/os/windows/win32error.zig
    485     lib/std/pdb.zig
    486     lib/std/process.zig
    487     lib/std/process/Child.zig
    488     lib/std/sort.zig
    489     lib/std/start.zig
    490     lib/std/static_string_map.zig
    491     lib/std/std.zig
    492     lib/std/time.zig
    493     lib/std/treap.zig
    494     lib/std/unicode.zig
    495     lib/std/zig.zig
    496     lib/std/zig/Ast.zig
    497     lib/std/zig/Ast/Render.zig
    498     lib/std/zig/AstGen.zig
    499     lib/std/zig/AstRlAnnotate.zig
    500     lib/std/zig/LibCInstallation.zig
    501     lib/std/zig/Parse.zig
    502     lib/std/zig/Server.zig
    503     lib/std/zig/WindowsSdk.zig
    504     lib/std/zig/Zir.zig
    505     lib/std/zig/c_builtins.zig
    506     lib/std/zig/string_literal.zig
    507     lib/std/zig/system.zig
    508     lib/std/zig/system/NativePaths.zig
    509     lib/std/zig/system/x86.zig
    510     lib/std/zig/tokenizer.zig
    511     lib/std/zig/llvm.zig
    512     lib/std/zig/llvm/BitcodeReader.zig
    513     lib/std/zig/llvm/Builder.zig
    514     lib/std/zig/llvm/bitcode_writer.zig
    515     lib/std/zig/llvm/ir.zig
    516     src/Air.zig
    517     src/Air/Legalize.zig
    518     src/Air/Liveness.zig
    519     src/Air/Liveness/Verify.zig
    520     src/Air/print.zig
    521     src/Air/types_resolved.zig
    522     src/Builtin.zig
    523     src/Compilation.zig
    524     src/Compilation/Config.zig
    525     src/DarwinPosixSpawn.zig
    526     src/InternPool.zig
    527     src/Package.zig
    528     src/Package/Fetch.zig
    529     src/Package/Fetch/git.zig
    530     src/Package/Manifest.zig
    531     src/Package/Module.zig
    532     src/RangeSet.zig
    533     src/Sema.zig
    534     src/Sema/bitcast.zig
    535     src/Sema/comptime_ptr_access.zig
    536     src/Type.zig
    537     src/Value.zig
    538     src/Zcu.zig
    539     src/Zcu/PerThread.zig
    540     src/clang.zig
    541     src/clang_options.zig
    542     src/clang_options_data.zig
    543     src/codegen.zig
    544     src/codegen/aarch64.zig
    545     src/codegen/aarch64/abi.zig
    546     src/codegen/aarch64/Assemble.zig
    547     src/codegen/aarch64/Disassemble.zig
    548     src/codegen/aarch64/encoding.zig
    549     src/codegen/aarch64/instructions.zon
    550     src/codegen/aarch64/Mir.zig
    551     src/codegen/aarch64/Select.zig
    552     src/codegen/c.zig
    553     src/codegen/c/Type.zig
    554     src/codegen/llvm.zig
    555     src/codegen/llvm/bindings.zig
    556     src/crash_report.zig
    557     src/dev.zig
    558     src/libs/freebsd.zig
    559     src/libs/glibc.zig
    560     src/libs/netbsd.zig
    561     src/introspect.zig
    562     src/libs/libcxx.zig
    563     src/libs/libtsan.zig
    564     src/libs/libunwind.zig
    565     src/link.zig
    566     src/link/C.zig
    567     src/link/Coff.zig
    568     src/link/Dwarf.zig
    569     src/link/Elf.zig
    570     src/link/Elf/Archive.zig
    571     src/link/Elf/Atom.zig
    572     src/link/Elf/AtomList.zig
    573     src/link/Elf/LinkerDefined.zig
    574     src/link/Elf/Merge.zig
    575     src/link/Elf/Object.zig
    576     src/link/Elf/SharedObject.zig
    577     src/link/Elf/Symbol.zig
    578     src/link/Elf/Thunk.zig
    579     src/link/Elf/ZigObject.zig
    580     src/link/Elf/eh_frame.zig
    581     src/link/Elf/file.zig
    582     src/link/Elf/gc.zig
    583     src/link/Elf/relocatable.zig
    584     src/link/Elf/relocation.zig
    585     src/link/Elf/synthetic_sections.zig
    586     src/link/Goff.zig
    587     src/link/LdScript.zig
    588     src/link/Lld.zig
    589     src/link/MachO.zig
    590     src/link/MachO/Archive.zig
    591     src/link/MachO/Atom.zig
    592     src/link/MachO/CodeSignature.zig
    593     src/link/MachO/DebugSymbols.zig
    594     src/link/MachO/Dwarf.zig
    595     src/link/MachO/Dylib.zig
    596     src/link/MachO/InternalObject.zig
    597     src/link/MachO/Object.zig
    598     src/link/MachO/Relocation.zig
    599     src/link/MachO/Symbol.zig
    600     src/link/MachO/UnwindInfo.zig
    601     src/link/MachO/ZigObject.zig
    602     src/link/MachO/dead_strip.zig
    603     src/link/MachO/dyld_info/Rebase.zig
    604     src/link/MachO/dyld_info/Trie.zig
    605     src/link/MachO/dyld_info/bind.zig
    606     src/link/MachO/eh_frame.zig
    607     src/link/MachO/fat.zig
    608     src/link/MachO/file.zig
    609     src/link/MachO/hasher.zig
    610     src/link/MachO/load_commands.zig
    611     src/link/MachO/relocatable.zig
    612     src/link/MachO/synthetic.zig
    613     src/link/MachO/Thunk.zig
    614     src/link/MachO/uuid.zig
    615     src/link/Queue.zig
    616     src/link/StringTable.zig
    617     src/link/Wasm.zig
    618     src/link/Wasm/Archive.zig
    619     src/link/Wasm/Flush.zig
    620     src/link/Wasm/Object.zig
    621     src/link/Xcoff.zig
    622     src/link/aarch64.zig
    623     src/link/riscv.zig
    624     src/link/table_section.zig
    625     src/link/tapi.zig
    626     src/link/tapi/Tokenizer.zig
    627     src/link/tapi/parse.zig
    628     src/link/tapi/parse/test.zig
    629     src/link/tapi/yaml.zig
    630     src/link/tapi/yaml/test.zig
    631     src/main.zig
    632     src/libs/mingw.zig
    633     src/libs/musl.zig
    634     src/mutable_value.zig
    635     src/print_env.zig
    636     src/print_targets.zig
    637     src/print_value.zig
    638     src/print_zir.zig
    639     src/register_manager.zig
    640     src/target.zig
    641     src/tracy.zig
    642     src/translate_c.zig
    643     src/libs/wasi_libc.zig
    644 )
    645 
    646 if(MSVC)
    647     set(MSVC_DIA_SDK_DIR "$ENV{VSINSTALLDIR}DIA SDK")
    648     if(IS_DIRECTORY ${MSVC_DIA_SDK_DIR})
    649         set(ZIG_DIA_GUIDS_LIB "${MSVC_DIA_SDK_DIR}/lib/amd64/diaguids.lib")
    650         string(REGEX REPLACE "\\\\" "\\\\\\\\" ZIG_DIA_GUIDS_LIB_ESCAPED "${ZIG_DIA_GUIDS_LIB}")
    651     endif()
    652 
    653     # The /RTC[c][s][u] flag enables extra runtime checks. ("/RTC1" == "/RTCsu")
    654     # The "c" (PossibleDataLoss) and "u" (UninitializeVariable) flags trap on valid C code so we disable
    655     # them.  The "s" flag seems like it might be OK.
    656     string(REPLACE "/RTC1" "/RTCs" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}")
    657     string(REPLACE "/RTC1" "/RTCs" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
    658 endif()
    659 
    660 configure_file (
    661     stage1/config.h.in
    662     "${ZIG_CONFIG_H_OUT}"
    663 )
    664 configure_file (
    665     stage1/config.zig.in
    666     "${ZIG_CONFIG_ZIG_OUT}"
    667 )
    668 
    669 # zigcpp target
    670 
    671 set(ZIGCPP_OUTPUT_DIR "${PROJECT_BINARY_DIR}/zigcpp")
    672 
    673 add_library(zigcpp STATIC ${ZIG_CPP_SOURCES})
    674 
    675 # Sync with minimum C++ standard required to build LLVM
    676 # and with "exe_cflags" in build.zig
    677 target_compile_features(zigcpp PRIVATE cxx_std_17)
    678 set_target_properties(zigcpp PROPERTIES POSITION_INDEPENDENT_CODE ${ZIG_PIE})
    679 
    680 if(LLVM_LINK_MODE STREQUAL "static")
    681   target_compile_definitions(zigcpp PRIVATE
    682     LLVM_BUILD_STATIC
    683     CLANG_BUILD_STATIC
    684   )
    685 endif()
    686 
    687 if(NOT MSVC)
    688   if(MINGW)
    689     target_compile_options(zigcpp PRIVATE -Wno-format)
    690   endif()
    691   # Sync content below with "exe_cflags" in build.zig
    692   target_compile_definitions(zigcpp PUBLIC
    693     __STDC_CONSTANT_MACROS
    694     __STDC_FORMAT_MACROS
    695     __STDC_LIMIT_MACROS
    696 
    697     _GNU_SOURCE
    698   )
    699   target_compile_options(zigcpp PRIVATE
    700     -fno-exceptions
    701     -fno-rtti
    702     -fno-stack-protector
    703 
    704     -fvisibility-inlines-hidden
    705 
    706     -Wno-type-limits
    707     -Wno-missing-braces
    708     -Wno-comment
    709   )
    710 else()
    711 target_compile_options(zigcpp PRIVATE /Zc:preprocessor)
    712 set_property(TARGET zigcpp PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded")
    713 endif()
    714 
    715 target_include_directories(zigcpp PUBLIC
    716     ${CLANG_INCLUDE_DIRS}
    717     ${LLVM_INCLUDE_DIRS}
    718     ${LLD_INCLUDE_DIRS}
    719 )
    720 target_link_libraries(zigcpp PUBLIC
    721     ${CLANG_LIBRARIES}
    722     ${LLD_LIBRARIES}
    723     ${LLVM_LIBRARIES}
    724     ${CMAKE_THREAD_LIBS_INIT}
    725 )
    726 
    727 # Handle multi-config builds and place each into a common lib. The VS generator
    728 # for example will append a Debug folder by default if not explicitly specified.
    729 set_target_properties(zigcpp PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${ZIGCPP_OUTPUT_DIR})
    730 foreach(CONFIG_TYPE ${CMAKE_CONFIGURATION_TYPES})
    731     string(TOUPPER ${CONFIG_TYPE} CONFIG_TYPE)
    732     set_target_properties(zigcpp PROPERTIES ARCHIVE_OUTPUT_DIRECTORY_${CONFIG_TYPE} ${ZIGCPP_OUTPUT_DIR})
    733 endforeach()
    734 
    735 # end of zigcpp target
    736 
    737 include(CheckSymbolExists)
    738 
    739 string(TOLOWER "${CMAKE_HOST_SYSTEM_NAME}" ZIG_HOST_TARGET_OS)
    740 if(ZIG_HOST_TARGET_OS STREQUAL "darwin")
    741   set(ZIG_HOST_TARGET_OS "macos")
    742 elseif(ZIG_HOST_TARGET_OS STREQUAL "sunos")
    743   check_symbol_exists(__illumos__ "" ZIG_HOST_TARGET_HAS_ILLUMOS_MACRO)
    744   if (ZIG_HOST_TARGET_HAS_ILLUMOS_MACRO)
    745     set(ZIG_HOST_TARGET_OS "illumos")
    746   else()
    747     set(ZIG_HOST_TARGET_OS "solaris")
    748   endif()
    749 endif()
    750 
    751 string(TOLOWER "${CMAKE_HOST_SYSTEM_PROCESSOR}" ZIG_HOST_TARGET_ARCH)
    752 if(ZIG_HOST_TARGET_ARCH MATCHES "^i[3-9]86$")
    753   if (ZIG_HOST_TARGET_OS MATCHES "(solaris|illumos)")
    754     set(ZIG_HOST_TARGET_ARCH "x86_64")
    755   else()
    756     set(ZIG_HOST_TARGET_ARCH "x86")
    757   endif()
    758 elseif(ZIG_HOST_TARGET_ARCH STREQUAL "amd64")
    759   set(ZIG_HOST_TARGET_ARCH "x86_64")
    760 elseif(ZIG_HOST_TARGET_ARCH STREQUAL "arm64")
    761   set(ZIG_HOST_TARGET_ARCH "aarch64")
    762 elseif(ZIG_HOST_TARGET_ARCH MATCHES "^arm(el)?$" OR ZIG_HOST_TARGET_ARCH MATCHES "^armv[7-8]l$")
    763   set(ZIG_HOST_TARGET_ARCH "arm")
    764 elseif(ZIG_HOST_TARGET_ARCH STREQUAL "armeb" OR ZIG_HOST_TARGET_ARCH MATCHES "^armv[7-8]b$")
    765   set(ZIG_HOST_TARGET_ARCH "armeb")
    766 endif()
    767 if(ZIG_HOST_TARGET_ARCH MATCHES "^arm(eb)?$")
    768   check_symbol_exists(__thumb__ "" ZIG_HOST_TARGET_DEFAULTS_TO_THUMB)
    769   if(ZIG_HOST_TARGET_DEFAULTS_TO_THUMB)
    770     string(REGEX REPLACE "^arm" "thumb" ZIG_HOST_TARGET_ARCH "${ZIG_HOST_TARGET_ARCH}")
    771   endif()
    772 endif()
    773 string(REGEX REPLACE "^ppc((64)?(le)?)$" "powerpc\\1" ZIG_HOST_TARGET_ARCH "${ZIG_HOST_TARGET_ARCH}")
    774 
    775 if(MSVC)
    776   set(ZIG_HOST_TARGET_ABI "-msvc")
    777 elseif(MINGW)
    778   set(ZIG_HOST_TARGET_ABI "-gnu")
    779 elseif(ZIG_HOST_TARGET_ARCH MATCHES "^(arm|thumb)hf?(eb)?$")
    780   string(REGEX REPLACE "^(arm|thumb)hf?((eb)?)$" "\\1\\2" ZIG_HOST_TARGET_ARCH "${ZIG_HOST_TARGET_ARCH}")
    781   set(ZIG_HOST_TARGET_ABI "-eabihf")
    782 else()
    783   set(ZIG_HOST_TARGET_ABI "")
    784 endif()
    785 
    786 set(ZIG_HOST_TARGET_TRIPLE "${ZIG_HOST_TARGET_ARCH}-${ZIG_HOST_TARGET_OS}${ZIG_HOST_TARGET_ABI}" CACHE STRING "Host zig target triple.")
    787 
    788 if(MSVC)
    789   set(ZIG_WASM2C_COMPILE_FLAGS "")
    790   set(ZIG1_COMPILE_FLAGS "/Os")
    791   set(ZIG2_COMPILE_FLAGS "/Od")
    792   set(ZIG2_LINK_FLAGS "/STACK:16777216 /FORCE:MULTIPLE")
    793 else()
    794   set(ZIG_WASM2C_COMPILE_FLAGS "-std=c99 -O2")
    795   set(ZIG1_COMPILE_FLAGS "-std=c99 -Os")
    796   set(ZIG2_COMPILE_FLAGS "-std=c99 -O0 -fno-sanitize=undefined -fno-stack-protector")
    797   if(APPLE)
    798     set(ZIG2_LINK_FLAGS "-Wl,-stack_size,0x10000000")
    799   elseif(MINGW)
    800     set(ZIG2_LINK_FLAGS "-Wl,--stack,0x10000000")
    801   # Solaris/illumos ld(1) does not provide a --stack-size option.
    802   elseif(CMAKE_HOST_SOLARIS)
    803     unset(ZIG2_LINK_FLAGS)
    804   else()
    805     set(ZIG2_LINK_FLAGS "-Wl,-z,stack-size=0x10000000")
    806   endif()
    807 endif()
    808 
    809 set(ZIG1_WASM_MODULE "${PROJECT_SOURCE_DIR}/stage1/zig1.wasm")
    810 set(ZIG1_C_SOURCE "${PROJECT_BINARY_DIR}/zig1.c")
    811 set(ZIG2_C_SOURCE "${PROJECT_BINARY_DIR}/zig2.c")
    812 set(ZIG_COMPILER_RT_C_SOURCE "${PROJECT_BINARY_DIR}/compiler_rt.c")
    813 
    814 add_executable(zig-wasm2c ${ZIG_WASM2C_SOURCES})
    815 set_target_properties(zig-wasm2c PROPERTIES COMPILE_FLAGS "${ZIG_WASM2C_COMPILE_FLAGS}")
    816 
    817 add_custom_command(
    818   OUTPUT "${ZIG1_C_SOURCE}"
    819   COMMAND zig-wasm2c "${ZIG1_WASM_MODULE}" "${ZIG1_C_SOURCE}"
    820   DEPENDS zig-wasm2c "${ZIG1_WASM_MODULE}"
    821   COMMENT "Converting ${ZIG1_WASM_MODULE} to ${ZIG1_C_SOURCE}"
    822   WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
    823 )
    824 
    825 add_executable(zig1 ${ZIG1_C_SOURCE} stage1/wasi.c)
    826 set_target_properties(zig1 PROPERTIES COMPILE_FLAGS ${ZIG1_COMPILE_FLAGS})
    827 
    828 if(MSVC)
    829   target_link_options(zig1 PRIVATE /STACK:0x10000000)
    830 else()
    831   target_link_libraries(zig1 LINK_PUBLIC m)
    832   if(MINGW)
    833     target_link_options(zig1 PRIVATE -Wl,--stack,0x10000000)
    834   endif()
    835 endif()
    836 
    837 set(BUILD_ZIG2_ARGS
    838   "${PROJECT_SOURCE_DIR}/lib"
    839   build-exe -ofmt=c -lc -OReleaseSmall
    840   --name zig2
    841   -femit-bin="${ZIG2_C_SOURCE}"
    842   -target "${ZIG_HOST_TARGET_TRIPLE}"
    843   --dep "build_options"
    844   --dep "aro"
    845   "-Mroot=src/main.zig"
    846   "-Mbuild_options=${ZIG_CONFIG_ZIG_OUT}"
    847   "-Maro=lib/compiler/aro/aro.zig"
    848 )
    849 
    850 add_custom_command(
    851   OUTPUT "${ZIG2_C_SOURCE}"
    852   COMMAND zig1 ${BUILD_ZIG2_ARGS}
    853   DEPENDS zig1 "${ZIG_STAGE2_SOURCES}"
    854   COMMENT "Running zig1.wasm to produce ${ZIG2_C_SOURCE}"
    855   WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
    856 )
    857 
    858 set(BUILD_COMPILER_RT_ARGS
    859   "${PROJECT_SOURCE_DIR}/lib"
    860   build-obj -ofmt=c -OReleaseSmall
    861   --name compiler_rt
    862   -femit-bin="${ZIG_COMPILER_RT_C_SOURCE}"
    863   -target "${ZIG_HOST_TARGET_TRIPLE}"
    864   "-Mroot=lib/compiler_rt.zig"
    865 )
    866 
    867 add_custom_command(
    868   OUTPUT "${ZIG_COMPILER_RT_C_SOURCE}"
    869   COMMAND zig1 ${BUILD_COMPILER_RT_ARGS}
    870   DEPENDS zig1 "${ZIG_STAGE2_SOURCES}"
    871   COMMENT "Running zig1.wasm to produce ${ZIG_COMPILER_RT_C_SOURCE}"
    872   WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
    873 )
    874 
    875 add_executable(zig2 ${ZIG2_C_SOURCE} ${ZIG_COMPILER_RT_C_SOURCE})
    876 set_target_properties(zig2 PROPERTIES
    877   COMPILE_FLAGS ${ZIG2_COMPILE_FLAGS}
    878   LINK_FLAGS "${ZIG2_LINK_FLAGS}"
    879 )
    880 target_include_directories(zig2 PUBLIC stage1)
    881 target_link_libraries(zig2 LINK_PUBLIC zigcpp)
    882 
    883 if(MSVC)
    884   target_link_libraries(zig2 LINK_PUBLIC ntdll.lib ws2_32.lib)
    885 elseif(MINGW)
    886   target_link_libraries(zig2 LINK_PUBLIC ntdll ws2_32)
    887 endif()
    888 
    889 if(NOT MSVC)
    890     target_link_libraries(zig2 LINK_PUBLIC ${LIBXML2})
    891 endif()
    892 
    893 if(ZIG_DIA_GUIDS_LIB)
    894     target_link_libraries(zig2 LINK_PUBLIC ${ZIG_DIA_GUIDS_LIB})
    895 endif()
    896 
    897 if(MSVC OR MINGW)
    898     target_link_libraries(zig2 LINK_PUBLIC version)
    899 endif()
    900 
    901 
    902 # "-Dno-langref" is hardcoded because stage2 builds lack the `@cImport`
    903 # feature, which some of the doctests rely on.
    904 
    905 # To obtain this document, run `zig build` against stage3 rather than stage2.
    906 # Note that the `langref` step can be used to isolate this task.
    907 set(ZIG_BUILD_ARGS
    908   --zig-lib-dir "${PROJECT_SOURCE_DIR}/lib"
    909 
    910   "-Dversion-string=${RESOLVED_ZIG_VERSION}"
    911   "-Dtarget=${ZIG_TARGET_TRIPLE}"
    912   "-Dcpu=${ZIG_TARGET_MCPU}"
    913 
    914   -Denable-llvm
    915   "-Dconfig_h=${ZIG_CONFIG_H_OUT}"
    916 
    917   -Dno-langref
    918 )
    919 
    920 set(ZIG_EXTRA_BUILD_ARGS "" CACHE STRING "Extra zig build args")
    921 if(ZIG_EXTRA_BUILD_ARGS)
    922   list(APPEND ZIG_BUILD_ARGS ${ZIG_EXTRA_BUILD_ARGS})
    923 endif()
    924 
    925 set(ZIG_RELEASE_SAFE OFF CACHE BOOL "Build Zig as ReleaseSafe (with debug assertions on)")
    926 
    927 if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
    928   list(APPEND ZIG_BUILD_ARGS -Doptimize=Debug)
    929 else()
    930   if("${CMAKE_BUILD_TYPE}" STREQUAL "MinSizeRel")
    931     list(APPEND ZIG_BUILD_ARGS -Doptimize=ReleaseSmall)
    932   else()
    933     # Release and RelWithDebInfo
    934     if(ZIG_RELEASE_SAFE)
    935       list(APPEND ZIG_BUILD_ARGS -Doptimize=ReleaseSafe)
    936     else()
    937       list(APPEND ZIG_BUILD_ARGS -Doptimize=ReleaseFast)
    938     endif()
    939     if(NOT "${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo")
    940       list(APPEND ZIG_BUILD_ARGS -Dstrip)
    941     endif()
    942   endif()
    943 endif()
    944 
    945 if(ZIG_STATIC AND NOT MSVC)
    946   list(APPEND ZIG_BUILD_ARGS -Duse-zig-libcxx)
    947 endif()
    948 
    949 if(ZIG_NO_LIB)
    950   list(APPEND ZIG_BUILD_ARGS -Dno-lib)
    951 endif()
    952 
    953 if(ZIG_SINGLE_THREADED)
    954   list(APPEND ZIG_BUILD_ARGS -Dsingle-threaded)
    955 endif()
    956 
    957 if(ZIG_PIE)
    958   list(APPEND ZIG_BUILD_ARGS -Dpie)
    959 endif()
    960 
    961 if(NOT "${ZIG_TARGET_DYNAMIC_LINKER}" STREQUAL "")
    962   list(APPEND ZIG_BUILD_ARGS "-Ddynamic-linker=${ZIG_TARGET_DYNAMIC_LINKER}")
    963 endif()
    964 
    965 
    966 add_custom_target(stage3 ALL
    967   DEPENDS "${PROJECT_BINARY_DIR}/stage3/bin/zig"
    968 )
    969 
    970 set(ZIG2_WORKING_DIR "${PROJECT_SOURCE_DIR}")
    971 
    972 add_custom_command(
    973   OUTPUT "${PROJECT_BINARY_DIR}/stage3/bin/zig"
    974   COMMAND zig2 build --prefix "${PROJECT_BINARY_DIR}/stage3" ${ZIG_BUILD_ARGS}
    975   COMMENT "Building stage3"
    976   WORKING_DIRECTORY "${ZIG2_WORKING_DIR}"
    977 )
    978 
    979 set(ZIG_EXECUTABLE "$<TARGET_FILE:zig2>")
    980 
    981 install(CODE "set(ZIG_EXECUTABLE \"${ZIG_EXECUTABLE}\")")
    982 install(CODE "set(ZIG_BUILD_ARGS \"${ZIG_BUILD_ARGS}\")")
    983 install(CODE "set(ZIG2_WORKING_DIR \"${ZIG2_WORKING_DIR}\")")
    984 install(CODE "set(CMAKE_INSTALL_PREFIX \"${CMAKE_INSTALL_PREFIX}\")")
    985 install(SCRIPT cmake/install.cmake)