Commit 5a800db48c

Andrew Kelley <superjoe30@gmail.com>
2018-01-04 01:39:04
build: std files and c header files are only specified once
In the CMakeLists.txt file. And then we communicate the list to the zig build.
1 parent a45db7e
src/config.h.in
@@ -29,5 +29,7 @@
 #define ZIG_CXX_COMPILER "@CMAKE_CXX_COMPILER@"
 #define ZIG_LLD_INCLUDE_PATH "@LLD_INCLUDE_DIRS@"
 #define ZIG_LLD_LIBRARIES "@LLD_LIBRARIES@"
+#define ZIG_STD_FILES "@ZIG_STD_FILES@"
+#define ZIG_C_HEADER_FILES "@ZIG_C_HEADER_FILES@"
 
 #endif
src/main.cpp
@@ -267,7 +267,13 @@ static void add_package(CodeGen *g, CliPkg *cli_pkg, PackageTableEntry *pkg) {
 
 int main(int argc, char **argv) {
     if (argc == 2 && strcmp(argv[1], "BUILD_INFO") == 0) {
-        printf("%s\n%s\n%s\n%s\n", ZIG_CMAKE_BINARY_DIR, ZIG_CXX_COMPILER, ZIG_LLD_INCLUDE_PATH, ZIG_LLD_LIBRARIES);
+        printf("%s\n%s\n%s\n%s\n%s\n%s\n",
+                ZIG_CMAKE_BINARY_DIR,
+                ZIG_CXX_COMPILER,
+                ZIG_LLD_INCLUDE_PATH,
+                ZIG_LLD_LIBRARIES,
+                ZIG_STD_FILES,
+                ZIG_C_HEADER_FILES);
         return 0;
     }
 
build.zig
@@ -43,6 +43,8 @@ pub fn build(b: &Builder) {
         const cxx_compiler = nextValue(&index, build_info);
         const lld_include_dir = nextValue(&index, build_info);
         const lld_libraries = nextValue(&index, build_info);
+        const std_files = nextValue(&index, build_info);
+        const c_header_files = nextValue(&index, build_info);
 
         var exe = b.addExecutable("zig", "src-self-hosted/main.zig");
         exe.setBuildMode(mode);
@@ -77,7 +79,8 @@ pub fn build(b: &Builder) {
         test_step.dependOn(&exe.step);
 
         b.installArtifact(exe);
-        installStdLib(b);
+        installStdLib(b, std_files);
+        installCHeaders(b, c_header_files);
 
     }
 
@@ -200,131 +203,24 @@ fn findLLVM(b: &Builder) -> ?LibraryDep {
     return result;
 }
 
-pub fn installStdLib(b: &Builder) {
-    const stdlib_files = []const []const u8 {
-        "array_list.zig",
-        "base64.zig",
-        "buf_map.zig",
-        "buf_set.zig",
-        "buffer.zig",
-        "build.zig",
-        "c/darwin.zig",
-        "c/index.zig",
-        "c/linux.zig",
-        "c/windows.zig",
-        "cstr.zig",
-        "debug/failing_allocator.zig",
-        "debug/index.zig",
-        "dwarf.zig",
-        "elf.zig",
-        "empty.zig",
-        "endian.zig",
-        "fmt/errol/enum3.zig",
-        "fmt/errol/index.zig",
-        "fmt/errol/lookup.zig",
-        "fmt/index.zig",
-        "hash_map.zig",
-        "heap.zig",
-        "index.zig",
-        "io.zig",
-        "linked_list.zig",
-        "math/acos.zig",
-        "math/acosh.zig",
-        "math/asin.zig",
-        "math/asinh.zig",
-        "math/atan.zig",
-        "math/atan2.zig",
-        "math/atanh.zig",
-        "math/cbrt.zig",
-        "math/ceil.zig",
-        "math/copysign.zig",
-        "math/cos.zig",
-        "math/cosh.zig",
-        "math/exp.zig",
-        "math/exp2.zig",
-        "math/expm1.zig",
-        "math/expo2.zig",
-        "math/fabs.zig",
-        "math/floor.zig",
-        "math/fma.zig",
-        "math/frexp.zig",
-        "math/hypot.zig",
-        "math/ilogb.zig",
-        "math/index.zig",
-        "math/inf.zig",
-        "math/isfinite.zig",
-        "math/isinf.zig",
-        "math/isnan.zig",
-        "math/isnormal.zig",
-        "math/ln.zig",
-        "math/log.zig",
-        "math/log10.zig",
-        "math/log1p.zig",
-        "math/log2.zig",
-        "math/modf.zig",
-        "math/nan.zig",
-        "math/pow.zig",
-        "math/round.zig",
-        "math/scalbn.zig",
-        "math/signbit.zig",
-        "math/sin.zig",
-        "math/sinh.zig",
-        "math/sqrt.zig",
-        "math/tan.zig",
-        "math/tanh.zig",
-        "math/trunc.zig",
-        "mem.zig",
-        "net.zig",
-        "os/child_process.zig",
-        "os/darwin.zig",
-        "os/darwin_errno.zig",
-        "os/get_user_id.zig",
-        "os/index.zig",
-        "os/linux.zig",
-        "os/linux_errno.zig",
-        "os/linux_i386.zig",
-        "os/linux_x86_64.zig",
-        "os/path.zig",
-        "os/windows/error.zig",
-        "os/windows/index.zig",
-        "os/windows/util.zig",
-        "rand.zig",
-        "sort.zig",
-        "unicode.zig",
-        "special/bootstrap.zig",
-        "special/bootstrap_lib.zig",
-        "special/build_file_template.zig",
-        "special/build_runner.zig",
-        "special/builtin.zig",
-        "special/compiler_rt/aulldiv.zig",
-        "special/compiler_rt/aullrem.zig",
-        "special/compiler_rt/comparetf2.zig",
-        "special/compiler_rt/fixuint.zig",
-        "special/compiler_rt/fixunsdfdi.zig",
-        "special/compiler_rt/fixunsdfsi.zig",
-        "special/compiler_rt/fixunsdfti.zig",
-        "special/compiler_rt/fixunssfdi.zig",
-        "special/compiler_rt/fixunssfsi.zig",
-        "special/compiler_rt/fixunssfti.zig",
-        "special/compiler_rt/fixunstfdi.zig",
-        "special/compiler_rt/fixunstfsi.zig",
-        "special/compiler_rt/fixunstfti.zig",
-        "special/compiler_rt/index.zig",
-        "special/compiler_rt/udivmod.zig",
-        "special/compiler_rt/udivmoddi4.zig",
-        "special/compiler_rt/udivmodti4.zig",
-        "special/compiler_rt/udivti3.zig",
-        "special/compiler_rt/umodti3.zig",
-        "special/panic.zig",
-        "special/test_runner.zig",
-    };
-    for (stdlib_files) |stdlib_file| {
+pub fn installStdLib(b: &Builder, stdlib_files: []const u8) {
+    var it = mem.split(stdlib_files, ";");
+    while (it.next()) |stdlib_file| {
         const src_path = %%os.path.join(b.allocator, "std", stdlib_file);
         const dest_path = %%os.path.join(b.allocator, "lib", "zig", "std", stdlib_file);
         b.installFile(src_path, dest_path);
     }
 }
 
+pub fn installCHeaders(b: &Builder, c_header_files: []const u8) {
+    var it = mem.split(c_header_files, ";");
+    while (it.next()) |c_header_file| {
+        const src_path = %%os.path.join(b.allocator, "c_headers", c_header_file);
+        const dest_path = %%os.path.join(b.allocator, "lib", "zig", "include", c_header_file);
+        b.installFile(src_path, dest_path);
+    }
+}
+
 fn nextValue(index: &usize, build_info: []const u8) -> []const u8 {
     const start = *index;
     while (build_info[*index] != '\n' and build_info[*index] != '\r') : (*index += 1) { }
CMakeLists.txt
@@ -353,6 +353,223 @@ set(ZIG_CPP_SOURCES
     "${CMAKE_SOURCE_DIR}/src/zig_llvm.cpp"
 )
 
+set(ZIG_STD_FILES
+    "array_list.zig"
+    "base64.zig"
+    "buf_map.zig"
+    "buf_set.zig"
+    "buffer.zig"
+    "build.zig"
+    "c/darwin.zig"
+    "c/index.zig"
+    "c/linux.zig"
+    "c/windows.zig"
+    "cstr.zig"
+    "debug/failing_allocator.zig"
+    "debug/index.zig"
+    "dwarf.zig"
+    "elf.zig"
+    "empty.zig"
+    "endian.zig"
+    "fmt/errol/enum3.zig"
+    "fmt/errol/index.zig"
+    "fmt/errol/lookup.zig"
+    "fmt/index.zig"
+    "hash_map.zig"
+    "heap.zig"
+    "index.zig"
+    "io.zig"
+    "linked_list.zig"
+    "math/acos.zig"
+    "math/acosh.zig"
+    "math/asin.zig"
+    "math/asinh.zig"
+    "math/atan.zig"
+    "math/atan2.zig"
+    "math/atanh.zig"
+    "math/cbrt.zig"
+    "math/ceil.zig"
+    "math/copysign.zig"
+    "math/cos.zig"
+    "math/cosh.zig"
+    "math/exp.zig"
+    "math/exp2.zig"
+    "math/expm1.zig"
+    "math/expo2.zig"
+    "math/fabs.zig"
+    "math/floor.zig"
+    "math/fma.zig"
+    "math/frexp.zig"
+    "math/hypot.zig"
+    "math/ilogb.zig"
+    "math/index.zig"
+    "math/inf.zig"
+    "math/isfinite.zig"
+    "math/isinf.zig"
+    "math/isnan.zig"
+    "math/isnormal.zig"
+    "math/ln.zig"
+    "math/log.zig"
+    "math/log10.zig"
+    "math/log1p.zig"
+    "math/log2.zig"
+    "math/modf.zig"
+    "math/nan.zig"
+    "math/pow.zig"
+    "math/round.zig"
+    "math/scalbn.zig"
+    "math/signbit.zig"
+    "math/sin.zig"
+    "math/sinh.zig"
+    "math/sqrt.zig"
+    "math/tan.zig"
+    "math/tanh.zig"
+    "math/trunc.zig"
+    "mem.zig"
+    "net.zig"
+    "os/child_process.zig"
+    "os/darwin.zig"
+    "os/darwin_errno.zig"
+    "os/get_user_id.zig"
+    "os/index.zig"
+    "os/linux.zig"
+    "os/linux_errno.zig"
+    "os/linux_i386.zig"
+    "os/linux_x86_64.zig"
+    "os/path.zig"
+    "os/windows/error.zig"
+    "os/windows/index.zig"
+    "os/windows/util.zig"
+    "rand.zig"
+    "sort.zig"
+    "special/bootstrap.zig"
+    "special/bootstrap_lib.zig"
+    "special/build_file_template.zig"
+    "special/build_runner.zig"
+    "special/builtin.zig"
+    "special/compiler_rt/aulldiv.zig"
+    "special/compiler_rt/aullrem.zig"
+    "special/compiler_rt/comparetf2.zig"
+    "special/compiler_rt/fixuint.zig"
+    "special/compiler_rt/fixunsdfdi.zig"
+    "special/compiler_rt/fixunsdfsi.zig"
+    "special/compiler_rt/fixunsdfti.zig"
+    "special/compiler_rt/fixunssfdi.zig"
+    "special/compiler_rt/fixunssfsi.zig"
+    "special/compiler_rt/fixunssfti.zig"
+    "special/compiler_rt/fixunstfdi.zig"
+    "special/compiler_rt/fixunstfsi.zig"
+    "special/compiler_rt/fixunstfti.zig"
+    "special/compiler_rt/index.zig"
+    "special/compiler_rt/udivmod.zig"
+    "special/compiler_rt/udivmoddi4.zig"
+    "special/compiler_rt/udivmodti4.zig"
+    "special/compiler_rt/udivti3.zig"
+    "special/compiler_rt/umodti3.zig"
+    "special/panic.zig"
+    "special/test_runner.zig"
+    "unicode.zig"
+)
+
+set(ZIG_C_HEADER_FILES
+    "__clang_cuda_builtin_vars.h"
+    "__clang_cuda_cmath.h"
+    "__clang_cuda_complex_builtins.h"
+    "__clang_cuda_intrinsics.h"
+    "__clang_cuda_math_forward_declares.h"
+    "__clang_cuda_runtime_wrapper.h"
+    "__stddef_max_align_t.h"
+    "__wmmintrin_aes.h"
+    "__wmmintrin_pclmul.h"
+    "adxintrin.h"
+    "altivec.h"
+    "ammintrin.h"
+    "arm_acle.h"
+    "arm_neon.h"
+    "armintr.h"
+    "avx2intrin.h"
+    "avx512bwintrin.h"
+    "avx512cdintrin.h"
+    "avx512dqintrin.h"
+    "avx512erintrin.h"
+    "avx512fintrin.h"
+    "avx512ifmaintrin.h"
+    "avx512ifmavlintrin.h"
+    "avx512pfintrin.h"
+    "avx512vbmiintrin.h"
+    "avx512vbmivlintrin.h"
+    "avx512vlbwintrin.h"
+    "avx512vlcdintrin.h"
+    "avx512vldqintrin.h"
+    "avx512vlintrin.h"
+    "avx512vpopcntdqintrin.h"
+    "avxintrin.h"
+    "bmi2intrin.h"
+    "bmiintrin.h"
+    "clflushoptintrin.h"
+    "clzerointrin.h"
+    "cpuid.h"
+    "cuda_wrappers/algorithm"
+    "cuda_wrappers/complex"
+    "cuda_wrappers/new"
+    "emmintrin.h"
+    "f16cintrin.h"
+    "float.h"
+    "fma4intrin.h"
+    "fmaintrin.h"
+    "fxsrintrin.h"
+    "htmintrin.h"
+    "htmxlintrin.h"
+    "ia32intrin.h"
+    "immintrin.h"
+    "intrin.h"
+    "inttypes.h"
+    "iso646.h"
+    "limits.h"
+    "lwpintrin.h"
+    "lzcntintrin.h"
+    "mm3dnow.h"
+    "mm_malloc.h"
+    "mmintrin.h"
+    "module.modulemap"
+    "msa.h"
+    "mwaitxintrin.h"
+    "nmmintrin.h"
+    "opencl-c.h"
+    "pkuintrin.h"
+    "pmmintrin.h"
+    "popcntintrin.h"
+    "prfchwintrin.h"
+    "rdseedintrin.h"
+    "rtmintrin.h"
+    "s390intrin.h"
+    "shaintrin.h"
+    "smmintrin.h"
+    "stdalign.h"
+    "stdarg.h"
+    "stdatomic.h"
+    "stdbool.h"
+    "stddef.h"
+    "stdint.h"
+    "stdnoreturn.h"
+    "tbmintrin.h"
+    "tgmath.h"
+    "tmmintrin.h"
+    "unwind.h"
+    "vadefs.h"
+    "varargs.h"
+    "vecintrin.h"
+    "wmmintrin.h"
+    "x86intrin.h"
+    "xmmintrin.h"
+    "xopintrin.h"
+    "xsavecintrin.h"
+    "xsaveintrin.h"
+    "xsaveoptintrin.h"
+    "xsavesintrin.h"
+    "xtestintrin.h"
+)
+
 set(ZIG_LIB_DIR "lib/zig")
 set(C_HEADERS_DEST "${ZIG_LIB_DIR}/include")
 set(ZIG_STD_DEST "${ZIG_LIB_DIR}/std")
@@ -420,215 +637,12 @@ endif()
 install(TARGETS zig DESTINATION bin)
 install(TARGETS zig_cpp DESTINATION "${ZIG_CPP_LIB_DIR}")
 
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/__clang_cuda_builtin_vars.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/__clang_cuda_cmath.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/__clang_cuda_complex_builtins.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/__clang_cuda_intrinsics.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/__clang_cuda_math_forward_declares.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/__clang_cuda_runtime_wrapper.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/__stddef_max_align_t.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/__wmmintrin_aes.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/__wmmintrin_pclmul.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/adxintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/altivec.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/ammintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/arm_acle.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/arm_neon.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/armintr.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/avx2intrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/avx512bwintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/avx512cdintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/avx512dqintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/avx512erintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/avx512fintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/avx512ifmaintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/avx512ifmavlintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/avx512pfintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/avx512vbmiintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/avx512vbmivlintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/avx512vlbwintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/avx512vlcdintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/avx512vldqintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/avx512vlintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/avx512vpopcntdqintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/avxintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/bmi2intrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/bmiintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/clflushoptintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/clzerointrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/cpuid.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/cuda_wrappers/algorithm" DESTINATION "${C_HEADERS_DEST}/cuda_wrappers")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/cuda_wrappers/complex" DESTINATION "${C_HEADERS_DEST}/cuda_wrappers")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/cuda_wrappers/new" DESTINATION "${C_HEADERS_DEST}/cuda_wrappers")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/emmintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/f16cintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/float.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/fma4intrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/fmaintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/fxsrintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/htmintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/htmxlintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/ia32intrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/immintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/intrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/inttypes.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/iso646.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/limits.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/lwpintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/lzcntintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/mm3dnow.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/mm_malloc.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/mmintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/module.modulemap" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/msa.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/mwaitxintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/nmmintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/opencl-c.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/pkuintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/pmmintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/popcntintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/prfchwintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/rdseedintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/rtmintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/s390intrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/shaintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/smmintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/stdalign.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/stdarg.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/stdatomic.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/stdbool.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/stddef.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/stdint.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/stdnoreturn.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/tbmintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/tgmath.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/tmmintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/unwind.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/vadefs.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/varargs.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/vecintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/wmmintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/x86intrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/xmmintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/xopintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/xsavecintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/xsaveintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/xsaveoptintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/xsavesintrin.h" DESTINATION "${C_HEADERS_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/c_headers/xtestintrin.h" DESTINATION "${C_HEADERS_DEST}")
+foreach(file ${ZIG_C_HEADER_FILES})
+    get_filename_component(file_dir "${C_HEADERS_DEST}/${file}" DIRECTORY)
+    install(FILES "${CMAKE_SOURCE_DIR}/c_headers/${file}" DESTINATION "${file_dir}")
+endforeach()
 
-install(FILES "${CMAKE_SOURCE_DIR}/std/array_list.zig" DESTINATION "${ZIG_STD_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/std/base64.zig" DESTINATION "${ZIG_STD_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/std/buf_map.zig" DESTINATION "${ZIG_STD_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/std/buf_set.zig" DESTINATION "${ZIG_STD_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/std/buffer.zig" DESTINATION "${ZIG_STD_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/std/build.zig" DESTINATION "${ZIG_STD_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/std/c/darwin.zig" DESTINATION "${ZIG_STD_DEST}/c")
-install(FILES "${CMAKE_SOURCE_DIR}/std/c/index.zig" DESTINATION "${ZIG_STD_DEST}/c")
-install(FILES "${CMAKE_SOURCE_DIR}/std/c/linux.zig" DESTINATION "${ZIG_STD_DEST}/c")
-install(FILES "${CMAKE_SOURCE_DIR}/std/c/windows.zig" DESTINATION "${ZIG_STD_DEST}/c")
-install(FILES "${CMAKE_SOURCE_DIR}/std/cstr.zig" DESTINATION "${ZIG_STD_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/std/debug/index.zig" DESTINATION "${ZIG_STD_DEST}/debug")
-install(FILES "${CMAKE_SOURCE_DIR}/std/debug/failing_allocator.zig" DESTINATION "${ZIG_STD_DEST}/debug")
-install(FILES "${CMAKE_SOURCE_DIR}/std/dwarf.zig" DESTINATION "${ZIG_STD_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/std/elf.zig" DESTINATION "${ZIG_STD_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/std/empty.zig" DESTINATION "${ZIG_STD_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/std/endian.zig" DESTINATION "${ZIG_STD_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/std/fmt/errol/enum3.zig" DESTINATION "${ZIG_STD_DEST}/fmt/errol")
-install(FILES "${CMAKE_SOURCE_DIR}/std/fmt/errol/index.zig" DESTINATION "${ZIG_STD_DEST}/fmt/errol")
-install(FILES "${CMAKE_SOURCE_DIR}/std/fmt/errol/lookup.zig" DESTINATION "${ZIG_STD_DEST}/fmt/errol")
-install(FILES "${CMAKE_SOURCE_DIR}/std/fmt/index.zig" DESTINATION "${ZIG_STD_DEST}/fmt")
-install(FILES "${CMAKE_SOURCE_DIR}/std/hash_map.zig" DESTINATION "${ZIG_STD_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/std/heap.zig" DESTINATION "${ZIG_STD_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/std/index.zig" DESTINATION "${ZIG_STD_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/std/io.zig" DESTINATION "${ZIG_STD_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/std/linked_list.zig" DESTINATION "${ZIG_STD_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/acos.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/acosh.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/asin.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/asinh.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/atan.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/atan2.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/atanh.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/cbrt.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/ceil.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/copysign.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/cos.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/cosh.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/exp.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/exp2.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/expm1.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/expo2.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/fabs.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/floor.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/fma.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/frexp.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/hypot.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/ilogb.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/index.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/inf.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/isfinite.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/isinf.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/isnan.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/isnormal.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/ln.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/log.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/log10.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/log1p.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/log2.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/modf.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/nan.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/pow.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/round.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/scalbn.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/signbit.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/sin.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/sinh.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/sqrt.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/tan.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/tanh.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/math/trunc.zig" DESTINATION "${ZIG_STD_DEST}/math")
-install(FILES "${CMAKE_SOURCE_DIR}/std/mem.zig" DESTINATION "${ZIG_STD_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/std/net.zig" DESTINATION "${ZIG_STD_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/std/os/child_process.zig" DESTINATION "${ZIG_STD_DEST}/os")
-install(FILES "${CMAKE_SOURCE_DIR}/std/os/darwin.zig" DESTINATION "${ZIG_STD_DEST}/os")
-install(FILES "${CMAKE_SOURCE_DIR}/std/os/darwin_errno.zig" DESTINATION "${ZIG_STD_DEST}/os")
-install(FILES "${CMAKE_SOURCE_DIR}/std/os/get_user_id.zig" DESTINATION "${ZIG_STD_DEST}/os")
-install(FILES "${CMAKE_SOURCE_DIR}/std/os/index.zig" DESTINATION "${ZIG_STD_DEST}/os")
-install(FILES "${CMAKE_SOURCE_DIR}/std/os/linux.zig" DESTINATION "${ZIG_STD_DEST}/os")
-install(FILES "${CMAKE_SOURCE_DIR}/std/os/linux_errno.zig" DESTINATION "${ZIG_STD_DEST}/os")
-install(FILES "${CMAKE_SOURCE_DIR}/std/os/linux_i386.zig" DESTINATION "${ZIG_STD_DEST}/os")
-install(FILES "${CMAKE_SOURCE_DIR}/std/os/linux_x86_64.zig" DESTINATION "${ZIG_STD_DEST}/os")
-install(FILES "${CMAKE_SOURCE_DIR}/std/os/path.zig" DESTINATION "${ZIG_STD_DEST}/os")
-install(FILES "${CMAKE_SOURCE_DIR}/std/os/windows/error.zig" DESTINATION "${ZIG_STD_DEST}/os/windows")
-install(FILES "${CMAKE_SOURCE_DIR}/std/os/windows/index.zig" DESTINATION "${ZIG_STD_DEST}/os/windows")
-install(FILES "${CMAKE_SOURCE_DIR}/std/os/windows/util.zig" DESTINATION "${ZIG_STD_DEST}/os/windows")
-install(FILES "${CMAKE_SOURCE_DIR}/std/rand.zig" DESTINATION "${ZIG_STD_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/std/sort.zig" DESTINATION "${ZIG_STD_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/std/unicode.zig" DESTINATION "${ZIG_STD_DEST}")
-install(FILES "${CMAKE_SOURCE_DIR}/std/special/bootstrap.zig" DESTINATION "${ZIG_STD_DEST}/special")
-install(FILES "${CMAKE_SOURCE_DIR}/std/special/bootstrap_lib.zig" DESTINATION "${ZIG_STD_DEST}/special")
-install(FILES "${CMAKE_SOURCE_DIR}/std/special/build_file_template.zig" DESTINATION "${ZIG_STD_DEST}/special")
-install(FILES "${CMAKE_SOURCE_DIR}/std/special/build_runner.zig" DESTINATION "${ZIG_STD_DEST}/special")
-install(FILES "${CMAKE_SOURCE_DIR}/std/special/builtin.zig" DESTINATION "${ZIG_STD_DEST}/special")
-install(FILES "${CMAKE_SOURCE_DIR}/std/special/compiler_rt/aulldiv.zig" DESTINATION "${ZIG_STD_DEST}/special/compiler_rt")
-install(FILES "${CMAKE_SOURCE_DIR}/std/special/compiler_rt/aullrem.zig" DESTINATION "${ZIG_STD_DEST}/special/compiler_rt")
-install(FILES "${CMAKE_SOURCE_DIR}/std/special/compiler_rt/comparetf2.zig" DESTINATION "${ZIG_STD_DEST}/special/compiler_rt")
-install(FILES "${CMAKE_SOURCE_DIR}/std/special/compiler_rt/fixuint.zig" DESTINATION "${ZIG_STD_DEST}/special/compiler_rt")
-install(FILES "${CMAKE_SOURCE_DIR}/std/special/compiler_rt/fixunsdfdi.zig" DESTINATION "${ZIG_STD_DEST}/special/compiler_rt")
-install(FILES "${CMAKE_SOURCE_DIR}/std/special/compiler_rt/fixunsdfsi.zig" DESTINATION "${ZIG_STD_DEST}/special/compiler_rt")
-install(FILES "${CMAKE_SOURCE_DIR}/std/special/compiler_rt/fixunsdfti.zig" DESTINATION "${ZIG_STD_DEST}/special/compiler_rt")
-install(FILES "${CMAKE_SOURCE_DIR}/std/special/compiler_rt/fixunssfdi.zig" DESTINATION "${ZIG_STD_DEST}/special/compiler_rt")
-install(FILES "${CMAKE_SOURCE_DIR}/std/special/compiler_rt/fixunssfsi.zig" DESTINATION "${ZIG_STD_DEST}/special/compiler_rt")
-install(FILES "${CMAKE_SOURCE_DIR}/std/special/compiler_rt/fixunssfti.zig" DESTINATION "${ZIG_STD_DEST}/special/compiler_rt")
-install(FILES "${CMAKE_SOURCE_DIR}/std/special/compiler_rt/fixunstfdi.zig" DESTINATION "${ZIG_STD_DEST}/special/compiler_rt")
-install(FILES "${CMAKE_SOURCE_DIR}/std/special/compiler_rt/fixunstfsi.zig" DESTINATION "${ZIG_STD_DEST}/special/compiler_rt")
-install(FILES "${CMAKE_SOURCE_DIR}/std/special/compiler_rt/fixunstfti.zig" DESTINATION "${ZIG_STD_DEST}/special/compiler_rt")
-install(FILES "${CMAKE_SOURCE_DIR}/std/special/compiler_rt/index.zig" DESTINATION "${ZIG_STD_DEST}/special/compiler_rt")
-install(FILES "${CMAKE_SOURCE_DIR}/std/special/compiler_rt/udivmod.zig" DESTINATION "${ZIG_STD_DEST}/special/compiler_rt")
-install(FILES "${CMAKE_SOURCE_DIR}/std/special/compiler_rt/udivmoddi4.zig" DESTINATION "${ZIG_STD_DEST}/special/compiler_rt")
-install(FILES "${CMAKE_SOURCE_DIR}/std/special/compiler_rt/udivmodti4.zig" DESTINATION "${ZIG_STD_DEST}/special/compiler_rt")
-install(FILES "${CMAKE_SOURCE_DIR}/std/special/compiler_rt/udivti3.zig" DESTINATION "${ZIG_STD_DEST}/special/compiler_rt")
-install(FILES "${CMAKE_SOURCE_DIR}/std/special/compiler_rt/umodti3.zig" DESTINATION "${ZIG_STD_DEST}/special/compiler_rt")
-install(FILES "${CMAKE_SOURCE_DIR}/std/special/panic.zig" DESTINATION "${ZIG_STD_DEST}/special")
-install(FILES "${CMAKE_SOURCE_DIR}/std/special/test_runner.zig" DESTINATION "${ZIG_STD_DEST}/special")
+foreach(file ${ZIG_STD_FILES})
+    get_filename_component(file_dir "${ZIG_STD_DEST}/${file}" DIRECTORY)
+    install(FILES "${CMAKE_SOURCE_DIR}/std/${file}" DESTINATION "${file_dir}")
+endforeach()