Commit 51ffb0548d

johnLate <inbox-121@johnlate.scnr.net>
2020-11-11 16:12:17
CMake: properly detect when to rebuild zig1.o
This is andrewrk's patch from ziglang#6724 (rebased) CMake: Fix dependency problem I don't know whether the error was expected cmake behavior or a bug. This change seems to fix the issue. See ziglang#6724 for details. cmake: add the correct set of zig stage2 sources
1 parent 5b42704
Changed files (1)
CMakeLists.txt
@@ -258,6 +258,15 @@ set(SOFTFLOAT_LIBRARIES embedded_softfloat)
 
 find_package(Threads)
 
+set(ZIG_LIB_DIR "lib/zig")
+set(C_HEADERS_DEST "${ZIG_LIB_DIR}/include")
+set(LIBC_FILES_DEST "${ZIG_LIB_DIR}/libc")
+set(LIBUNWIND_FILES_DEST "${ZIG_LIB_DIR}/libunwind")
+set(LIBCXX_FILES_DEST "${ZIG_LIB_DIR}/libcxx")
+set(ZIG_STD_DEST "${ZIG_LIB_DIR}/std")
+set(ZIG_CONFIG_H_OUT "${CMAKE_BINARY_DIR}/config.h")
+set(ZIG_CONFIG_ZIG_OUT "${CMAKE_BINARY_DIR}/config.zig")
+
 # This is our shim which will be replaced by stage1.zig.
 set(ZIG0_SOURCES
     "${CMAKE_SOURCE_DIR}/src/stage1/zig0.cpp"
@@ -299,6 +308,259 @@ set(ZIG_CPP_SOURCES
     # https://github.com/ziglang/zig/issues/6363
     "${CMAKE_SOURCE_DIR}/src/windows_sdk.cpp"
 )
+# Needed because we use cmake, not the zig build system, to build zig1.o.
+# This list is generated by building zig and then clearing the zig-cache directory,
+# then manually running the build-obj command (see BUILD_ZIG1_ARGS), and then looking
+# in the zig-cache directory for the compiler-generated list of zig file dependencies.
+set(ZIG_STAGE2_SOURCES
+    "${ZIG_CONFIG_ZIG_OUT}"
+    "${CMAKE_SOURCE_DIR}/lib/std/array_hash_map.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/array_list.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/ascii.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/atomic.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/atomic/int.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/atomic/queue.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/atomic/stack.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/auto_reset_event.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/base64.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/buf_map.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/builtin.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/c.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/c/linux.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/c/tokenizer.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/child_process.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/coff.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/comptime_string_map.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/crypto.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/crypto/blake3.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/crypto/siphash.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/debug.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/dwarf.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/dwarf_bits.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/elf.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/event.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/event/batch.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/event/loop.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/fifo.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/fmt.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/fmt/errol.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/fmt/errol/enum3.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/fmt/errol/lookup.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/fmt/parse_float.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/fs.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/fs/file.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/fs/get_app_data_dir.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/fs/path.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/hash.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/hash/auto_hash.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/hash/wyhash.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/hash_map.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/heap.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/heap/arena_allocator.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/io.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/io/auto_indenting_stream.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/io/buffered_atomic_file.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/io/buffered_writer.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/io/change_detection_stream.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/io/counting_writer.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/io/find_byte_out_stream.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/io/fixed_buffer_stream.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/io/reader.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/io/seekable_stream.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/io/writer.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/json.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/json/write_stream.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/leb128.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/linked_list.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/log.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/macho.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/math.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/math/big.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/math/big/int.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/math/floor.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/math/frexp.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/math/inf.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/math/isinf.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/math/isnan.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/math/ln.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/math/log.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/math/log10.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/math/log2.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/math/nan.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/math/signbit.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/math/sqrt.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/mem.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/mem/Allocator.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/meta.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/meta/trailer_flags.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/meta/trait.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/mutex.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/os.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/os/bits.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/os/bits/linux.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/os/bits/linux/errno-generic.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/os/bits/linux/netlink.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/os/bits/linux/prctl.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/os/bits/linux/securebits.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/os/bits/linux/x86_64.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/os/linux.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/os/linux/io_uring.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/os/linux/x86_64.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/os/windows.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/os/windows/bits.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/os/windows/ntstatus.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/os/windows/win32error.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/pdb.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/process.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/progress.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/rand.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/reset_event.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/sort.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/addXf3.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/atomics.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/clear_cache.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/clzsi2.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/compareXf2.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/divdf3.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/divsf3.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/divtf3.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/divti3.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/extendXfYf2.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/fixdfdi.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/fixdfsi.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/fixdfti.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/fixint.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/fixsfdi.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/fixsfsi.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/fixsfti.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/fixtfdi.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/fixtfsi.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/fixtfti.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/fixuint.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/fixunsdfdi.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/fixunsdfsi.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/fixunsdfti.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/fixunssfdi.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/fixunssfsi.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/fixunssfti.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/fixunstfdi.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/fixunstfsi.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/fixunstfti.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/floatXisf.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/floatdidf.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/floatditf.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/floatsiXf.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/floattidf.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/floattitf.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/floatundidf.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/floatundisf.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/floatunditf.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/floatunsidf.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/floatunsisf.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/floatunsitf.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/floatuntidf.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/floatuntisf.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/floatuntitf.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/int.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/modti3.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/mulXf3.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/muldi3.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/mulodi4.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/muloti4.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/multi3.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/negXf2.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/popcountdi2.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/shift.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/stack_probe.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/truncXfYf2.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/udivmod.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/udivmodti4.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/udivti3.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/special/compiler_rt/umodti3.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/spinlock.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/start.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/std.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/target.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/target/aarch64.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/target/amdgpu.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/target/arm.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/target/avr.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/target/bpf.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/target/hexagon.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/target/mips.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/target/msp430.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/target/nvptx.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/target/powerpc.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/target/riscv.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/target/sparc.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/target/systemz.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/target/wasm.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/target/x86.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/thread.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/time.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/unicode.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/zig.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/zig/ast.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/zig/cross_target.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/zig/parse.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/zig/render.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/zig/string_literal.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/zig/system.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/zig/system/x86.zig"
+    "${CMAKE_SOURCE_DIR}/lib/std/zig/tokenizer.zig"
+    "${CMAKE_SOURCE_DIR}/src/Cache.zig"
+    "${CMAKE_SOURCE_DIR}/src/Compilation.zig"
+    "${CMAKE_SOURCE_DIR}/src/DepTokenizer.zig"
+    "${CMAKE_SOURCE_DIR}/src/Module.zig"
+    "${CMAKE_SOURCE_DIR}/src/Package.zig"
+    "${CMAKE_SOURCE_DIR}/src/RangeSet.zig"
+    "${CMAKE_SOURCE_DIR}/src/TypedValue.zig"
+    "${CMAKE_SOURCE_DIR}/src/astgen.zig"
+    "${CMAKE_SOURCE_DIR}/src/clang.zig"
+    "${CMAKE_SOURCE_DIR}/src/clang_options.zig"
+    "${CMAKE_SOURCE_DIR}/src/clang_options_data.zig"
+    "${CMAKE_SOURCE_DIR}/src/codegen.zig"
+    "${CMAKE_SOURCE_DIR}/src/codegen/aarch64.zig"
+    "${CMAKE_SOURCE_DIR}/src/codegen/arm.zig"
+    "${CMAKE_SOURCE_DIR}/src/codegen/c.zig"
+    "${CMAKE_SOURCE_DIR}/src/codegen/llvm.zig"
+    "${CMAKE_SOURCE_DIR}/src/codegen/riscv64.zig"
+    "${CMAKE_SOURCE_DIR}/src/codegen/spu-mk2.zig"
+    "${CMAKE_SOURCE_DIR}/src/codegen/wasm.zig"
+    "${CMAKE_SOURCE_DIR}/src/codegen/x86_64.zig"
+    "${CMAKE_SOURCE_DIR}/src/glibc.zig"
+    "${CMAKE_SOURCE_DIR}/src/introspect.zig"
+    "${CMAKE_SOURCE_DIR}/src/ir.zig"
+    "${CMAKE_SOURCE_DIR}/src/libc_installation.zig"
+    "${CMAKE_SOURCE_DIR}/src/libcxx.zig"
+    "${CMAKE_SOURCE_DIR}/src/libunwind.zig"
+    "${CMAKE_SOURCE_DIR}/src/link.zig"
+    "${CMAKE_SOURCE_DIR}/src/link/C.zig"
+    "${CMAKE_SOURCE_DIR}/src/link/Coff.zig"
+    "${CMAKE_SOURCE_DIR}/src/link/Elf.zig"
+    "${CMAKE_SOURCE_DIR}/src/link/MachO.zig"
+    "${CMAKE_SOURCE_DIR}/src/link/MachO/Trie.zig"
+    "${CMAKE_SOURCE_DIR}/src/link/Wasm.zig"
+    "${CMAKE_SOURCE_DIR}/src/link/cbe.h"
+    "${CMAKE_SOURCE_DIR}/src/link/msdos-stub.bin"
+    "${CMAKE_SOURCE_DIR}/src/liveness.zig"
+    "${CMAKE_SOURCE_DIR}/src/llvm.zig"
+    "${CMAKE_SOURCE_DIR}/src/main.zig"
+    "${CMAKE_SOURCE_DIR}/src/mingw.zig"
+    "${CMAKE_SOURCE_DIR}/src/musl.zig"
+    "${CMAKE_SOURCE_DIR}/src/print_env.zig"
+    "${CMAKE_SOURCE_DIR}/src/print_targets.zig"
+    "${CMAKE_SOURCE_DIR}/src/stage1.zig"
+    "${CMAKE_SOURCE_DIR}/src/target.zig"
+    "${CMAKE_SOURCE_DIR}/src/tracy.zig"
+    "${CMAKE_SOURCE_DIR}/src/translate_c.zig"
+    "${CMAKE_SOURCE_DIR}/src/type.zig"
+    "${CMAKE_SOURCE_DIR}/src/value.zig"
+    "${CMAKE_SOURCE_DIR}/src/windows_sdk.zig"
+    "${CMAKE_SOURCE_DIR}/src/zir.zig"
+    "${CMAKE_SOURCE_DIR}/src/zir_sema.zig"
+)
 
 if(MSVC)
     set(MSVC_DIA_SDK_DIR "$ENV{VSINSTALLDIR}DIA SDK")
@@ -308,14 +570,6 @@ if(MSVC)
     endif()
 endif()
 
-set(ZIG_LIB_DIR "lib/zig")
-set(C_HEADERS_DEST "${ZIG_LIB_DIR}/include")
-set(LIBC_FILES_DEST "${ZIG_LIB_DIR}/libc")
-set(LIBUNWIND_FILES_DEST "${ZIG_LIB_DIR}/libunwind")
-set(LIBCXX_FILES_DEST "${ZIG_LIB_DIR}/libcxx")
-set(ZIG_STD_DEST "${ZIG_LIB_DIR}/std")
-set(ZIG_CONFIG_H_OUT "${CMAKE_BINARY_DIR}/config.h")
-set(ZIG_CONFIG_ZIG_OUT "${CMAKE_BINARY_DIR}/config.zig")
 configure_file (
     "${CMAKE_SOURCE_DIR}/src/stage1/config.h.in"
     "${ZIG_CONFIG_H_OUT}"
@@ -468,10 +722,10 @@ set(BUILD_ZIG1_ARGS
 )
 
 if("${ZIG_EXECUTABLE}" STREQUAL "")
-  add_custom_target(zig_build_zig1 ALL
+  add_custom_command(
+      OUTPUT "${ZIG1_OBJECT}"
       COMMAND zig0 ${BUILD_ZIG1_ARGS}
-      DEPENDS zig0
-      BYPRODUCTS "${ZIG1_OBJECT}"
+      DEPENDS zig0 "${ZIG_STAGE2_SOURCES}"
       COMMENT STATUS "Building self-hosted component ${ZIG1_OBJECT}"
       WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
   )
@@ -480,28 +734,29 @@ if("${ZIG_EXECUTABLE}" STREQUAL "")
     set(ZIG_EXECUTABLE "${ZIG_EXECUTABLE}.exe")
   endif()
 else()
-  add_custom_target(zig_build_zig1 ALL
-      COMMAND "${ZIG_EXECUTABLE}" "build-obj" ${BUILD_ZIG1_ARGS}
+  add_custom_command(
+      OUTPUT "${ZIG1_OBJECT}"
       BYPRODUCTS "${ZIG1_OBJECT}"
+      COMMAND "${ZIG_EXECUTABLE}" "build-obj" ${BUILD_ZIG1_ARGS}
+      DEPENDS ${ZIG_STAGE2_SOURCES}
       COMMENT STATUS "Building self-hosted component ${ZIG1_OBJECT}"
       WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
   )
 endif()
 
 # cmake won't let us configure an executable without C sources.
-add_executable(zig "${CMAKE_SOURCE_DIR}/src/stage1/empty.cpp")
+add_executable(zig "${CMAKE_SOURCE_DIR}/src/stage1/empty.cpp" "${ZIG1_OBJECT}")
 
 set_target_properties(zig PROPERTIES
     COMPILE_FLAGS ${EXE_CFLAGS}
     LINK_FLAGS ${EXE_LDFLAGS}
 )
-target_link_libraries(zig "${ZIG1_OBJECT}" zigstage1)
+target_link_libraries(zig zigstage1)
 if(MSVC)
   target_link_libraries(zig ntdll.lib)
 elseif(MINGW)
   target_link_libraries(zig ntdll)
 endif()
-add_dependencies(zig zig_build_zig1)
 
 install(TARGETS zig DESTINATION bin)