From 51ffb0548d84bca77dd17d9457ff7e42bd84cceb Mon Sep 17 00:00:00 2001 From: johnLate Date: Wed, 11 Nov 2020 16:12:17 +0100 Subject: [PATCH] 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 --- CMakeLists.txt | 287 ++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 271 insertions(+), 16 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a87bc04abd..9e5a907ffe 100644 --- a/CMakeLists.txt +++ b/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)