| ... | @@ -12,7 +12,7 @@ if(NOT CMAKE_BUILD_TYPE) | ... | @@ -12,7 +12,7 @@ if(NOT CMAKE_BUILD_TYPE) |
| 12 | endif() | 12 | endif() |
| 13 | | 13 | |
| 14 | if(NOT CMAKE_INSTALL_PREFIX) | 14 | if(NOT CMAKE_INSTALL_PREFIX) |
| 15 | set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/stage2" CACHE STRING | 15 | set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/stage3" CACHE STRING |
| 16 | "Directory to install zig to" FORCE) | 16 | "Directory to install zig to" FORCE) |
| 17 | endif() | 17 | endif() |
| 18 | | 18 | |
| ... | @@ -65,6 +65,9 @@ if("${ZIG_VERSION}" STREQUAL "") | ... | @@ -65,6 +65,9 @@ if("${ZIG_VERSION}" STREQUAL "") |
| 65 | endif() | 65 | endif() |
| 66 | message(STATUS "Configuring zig version ${ZIG_VERSION}") | 66 | message(STATUS "Configuring zig version ${ZIG_VERSION}") |
| 67 | | 67 | |
| | 68 | set(ZIG_SKIP_INSTALL_LIB_FILES off CACHE BOOL |
| | 69 | "Disable copying lib/ files to install prefix during the build phase") |
| | 70 | |
| 68 | set(ZIG_STATIC off CACHE BOOL "Attempt to build a static zig executable (not compatible with glibc)") | 71 | set(ZIG_STATIC off CACHE BOOL "Attempt to build a static zig executable (not compatible with glibc)") |
| 69 | set(ZIG_SHARED_LLVM off CACHE BOOL "Prefer linking against shared LLVM libraries") | 72 | set(ZIG_SHARED_LLVM off CACHE BOOL "Prefer linking against shared LLVM libraries") |
| 70 | set(ZIG_STATIC_LLVM off CACHE BOOL "Prefer linking against static LLVM libraries") | 73 | set(ZIG_STATIC_LLVM off CACHE BOOL "Prefer linking against static LLVM libraries") |
| ... | @@ -333,7 +336,7 @@ set(ZIG_CONFIG_H_OUT "${CMAKE_BINARY_DIR}/config.h") | ... | @@ -333,7 +336,7 @@ set(ZIG_CONFIG_H_OUT "${CMAKE_BINARY_DIR}/config.h") |
| 333 | set(ZIG_CONFIG_ZIG_OUT "${CMAKE_BINARY_DIR}/config.zig") | 336 | set(ZIG_CONFIG_ZIG_OUT "${CMAKE_BINARY_DIR}/config.zig") |
| 334 | | 337 | |
| 335 | # This is our shim which will be replaced by stage1.zig. | 338 | # This is our shim which will be replaced by stage1.zig. |
| 336 | set(ZIG0_SOURCES | 339 | set(ZIG1_SOURCES |
| 337 | "${CMAKE_SOURCE_DIR}/src/stage1/zig0.cpp" | 340 | "${CMAKE_SOURCE_DIR}/src/stage1/zig0.cpp" |
| 338 | ) | 341 | ) |
| 339 | | 342 | |
| ... | @@ -373,9 +376,9 @@ set(ZIG_CPP_SOURCES | ... | @@ -373,9 +376,9 @@ set(ZIG_CPP_SOURCES |
| 373 | # https://github.com/ziglang/zig/issues/6363 | 376 | # https://github.com/ziglang/zig/issues/6363 |
| 374 | "${CMAKE_SOURCE_DIR}/src/windows_sdk.cpp" | 377 | "${CMAKE_SOURCE_DIR}/src/windows_sdk.cpp" |
| 375 | ) | 378 | ) |
| 376 | # Needed because we use cmake, not the zig build system, to build zig1.o. | 379 | # Needed because we use cmake, not the zig build system, to build zig2.o. |
| 377 | # This list is generated by building zig and then clearing the zig-cache directory, | 380 | # This list is generated by building zig and then clearing the zig-cache directory, |
| 378 | # then manually running the build-obj command (see BUILD_ZIG1_ARGS), and then looking | 381 | # then manually running the build-obj command (see BUILD_ZIG2_ARGS), and then looking |
| 379 | # in the zig-cache directory for the compiler-generated list of zig file dependencies. | 382 | # in the zig-cache directory for the compiler-generated list of zig file dependencies. |
| 380 | set(ZIG_STAGE2_SOURCES | 383 | set(ZIG_STAGE2_SOURCES |
| 381 | "${ZIG_CONFIG_ZIG_OUT}" | 384 | "${ZIG_CONFIG_ZIG_OUT}" |
| ... | @@ -942,40 +945,47 @@ if(MSVC OR MINGW) | ... | @@ -942,40 +945,47 @@ if(MSVC OR MINGW) |
| 942 | endif() | 945 | endif() |
| 943 | | 946 | |
| 944 | if("${ZIG_EXECUTABLE}" STREQUAL "") | 947 | if("${ZIG_EXECUTABLE}" STREQUAL "") |
| 945 | add_executable(zig0 ${ZIG0_SOURCES}) | 948 | add_executable(zig1 ${ZIG1_SOURCES}) |
| 946 | set_target_properties(zig0 PROPERTIES | 949 | set_target_properties(zig1 PROPERTIES |
| 947 | COMPILE_FLAGS ${EXE_CFLAGS} | 950 | COMPILE_FLAGS ${EXE_CFLAGS} |
| 948 | LINK_FLAGS ${EXE_LDFLAGS} | 951 | LINK_FLAGS ${EXE_LDFLAGS} |
| 949 | ) | 952 | ) |
| 950 | target_link_libraries(zig0 zigstage1) | 953 | target_link_libraries(zig1 zigstage1) |
| 951 | endif() | 954 | endif() |
| 952 | | 955 | |
| 953 | if(MSVC) | 956 | if(MSVC) |
| 954 | set(ZIG1_OBJECT "${CMAKE_BINARY_DIR}/zig1.obj") | 957 | set(ZIG2_OBJECT "${CMAKE_BINARY_DIR}/zig2.obj") |
| 955 | else() | 958 | else() |
| 956 | set(ZIG1_OBJECT "${CMAKE_BINARY_DIR}/zig1.o") | 959 | set(ZIG2_OBJECT "${CMAKE_BINARY_DIR}/zig2.o") |
| 957 | endif() | 960 | endif() |
| 958 | if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") | 961 | if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") |
| 959 | set(ZIG1_RELEASE_ARG "") | 962 | set(ZIG_RELEASE_ARG "") |
| | 963 | else() |
| | 964 | set(ZIG_RELEASE_ARG -Drelease) |
| | 965 | endif() |
| | 966 | if(ZIG_SKIP_INSTALL_LIB_FILES) |
| | 967 | set(ZIG_SKIP_INSTALL_LIB_FILES_ARG "-Dskip-install-lib-files") |
| 960 | else() | 968 | else() |
| 961 | set(ZIG1_RELEASE_ARG -OReleaseFast --strip) | 969 | set(ZIG_SKIP_INSTALL_LIB_FILES_ARG "-Dskip-install-lib-files=false") |
| 962 | endif() | 970 | endif() |
| 963 | if(ZIG_SINGLE_THREADED) | 971 | if(ZIG_SINGLE_THREADED) |
| 964 | set(ZIG1_SINGLE_THREADED_ARG "-fsingle-threaded") | 972 | set(ZIG_SINGLE_THREADED_ARG "-fsingle-threaded") |
| 965 | else() | 973 | else() |
| 966 | set(ZIG1_SINGLE_THREADED_ARG "") | 974 | set(ZIG_SINGLE_THREADED_ARG "") |
| | 975 | endif() |
| | 976 | if(ZIG_STATIC) |
| | 977 | set(ZIG_STATIC_ARG "-Duse-zig-libcxx") |
| | 978 | else() |
| | 979 | set(ZIG_STATIC_ARG "") |
| 967 | endif() | 980 | endif() |
| 968 | | 981 | |
| 969 | set(BUILD_ZIG1_ARGS | 982 | set(BUILD_ZIG2_ARGS |
| 970 | "src/stage1.zig" | 983 | "src/stage1.zig" |
| 971 | -target "${ZIG_TARGET_TRIPLE}" | 984 | --name zig2 |
| 972 | "-mcpu=${ZIG_TARGET_MCPU}" | | |
| 973 | --name zig1 | | |
| 974 | --zig-lib-dir "${CMAKE_SOURCE_DIR}/lib" | 985 | --zig-lib-dir "${CMAKE_SOURCE_DIR}/lib" |
| 975 | "-femit-bin=${ZIG1_OBJECT}" | 986 | "-femit-bin=${ZIG2_OBJECT}" |
| 976 | -fcompiler-rt | 987 | -fcompiler-rt |
| 977 | "${ZIG1_RELEASE_ARG}" | 988 | "${ZIG_SINGLE_THREADED_ARG}" |
| 978 | "${ZIG1_SINGLE_THREADED_ARG}" | | |
| 979 | -lc | 989 | -lc |
| 980 | --pkg-begin build_options "${ZIG_CONFIG_ZIG_OUT}" | 990 | --pkg-begin build_options "${ZIG_CONFIG_ZIG_OUT}" |
| 981 | --pkg-end | 991 | --pkg-end |
| ... | @@ -985,68 +995,58 @@ set(BUILD_ZIG1_ARGS | ... | @@ -985,68 +995,58 @@ set(BUILD_ZIG1_ARGS |
| 985 | | 995 | |
| 986 | if("${ZIG_EXECUTABLE}" STREQUAL "") | 996 | if("${ZIG_EXECUTABLE}" STREQUAL "") |
| 987 | add_custom_command( | 997 | add_custom_command( |
| 988 | OUTPUT "${ZIG1_OBJECT}" | 998 | OUTPUT "${ZIG2_OBJECT}" |
| 989 | COMMAND zig0 ${BUILD_ZIG1_ARGS} | 999 | COMMAND zig1 ${BUILD_ZIG2_ARGS} |
| 990 | DEPENDS zig0 "${ZIG_STAGE2_SOURCES}" | 1000 | DEPENDS zig1 "${ZIG_STAGE2_SOURCES}" |
| 991 | COMMENT STATUS "Building self-hosted component ${ZIG1_OBJECT}" | 1001 | COMMENT STATUS "Building stage2 object ${ZIG2_OBJECT}" |
| 992 | WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" | 1002 | WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" |
| 993 | ) | 1003 | ) |
| 994 | set(ZIG_EXECUTABLE "${zig_BINARY_DIR}/zig") | | |
| 995 | if (WIN32) | 1004 | if (WIN32) |
| 996 | set(ZIG_EXECUTABLE "${ZIG_EXECUTABLE}.exe") | 1005 | set(ZIG_EXECUTABLE "${zig2_BINARY_DIR}/zig2.exe") |
| | 1006 | else() |
| | 1007 | set(ZIG_EXECUTABLE "${zig2_BINARY_DIR}/zig2") |
| 997 | endif() | 1008 | endif() |
| 998 | else() | 1009 | else() |
| 999 | add_custom_command( | 1010 | add_custom_command( |
| 1000 | OUTPUT "${ZIG1_OBJECT}" | 1011 | OUTPUT "${ZIG2_OBJECT}" |
| 1001 | COMMAND "${ZIG_EXECUTABLE}" "build-obj" ${BUILD_ZIG1_ARGS} | 1012 | COMMAND "${ZIG_EXECUTABLE}" "build-obj" ${BUILD_ZIG2_ARGS} |
| 1002 | DEPENDS ${ZIG_STAGE2_SOURCES} | 1013 | DEPENDS ${ZIG_STAGE2_SOURCES} |
| 1003 | COMMENT STATUS "Building self-hosted component ${ZIG1_OBJECT}" | 1014 | COMMENT STATUS "Building stage2 component ${ZIG2_OBJECT}" |
| 1004 | WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" | 1015 | WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" |
| 1005 | ) | 1016 | ) |
| 1006 | endif() | 1017 | endif() |
| 1007 | | 1018 | |
| 1008 | # cmake won't let us configure an executable without C sources. | 1019 | # cmake won't let us configure an executable without C sources. |
| 1009 | add_executable(zig "${CMAKE_SOURCE_DIR}/src/stage1/empty.cpp" "${ZIG1_OBJECT}") | 1020 | add_executable(zig2 "${CMAKE_SOURCE_DIR}/src/stage1/empty.cpp" "${ZIG2_OBJECT}") |
| 1010 | | 1021 | |
| 1011 | set_target_properties(zig PROPERTIES | 1022 | set_target_properties(zig2 PROPERTIES |
| 1012 | COMPILE_FLAGS ${EXE_CFLAGS} | 1023 | COMPILE_FLAGS ${EXE_CFLAGS} |
| 1013 | LINK_FLAGS ${EXE_LDFLAGS} | 1024 | LINK_FLAGS ${EXE_LDFLAGS} |
| 1014 | ) | 1025 | ) |
| 1015 | target_link_libraries(zig zigstage1) | 1026 | target_link_libraries(zig2 zigstage1) |
| 1016 | if(MSVC) | 1027 | if(MSVC) |
| 1017 | target_link_libraries(zig ntdll.lib) | 1028 | target_link_libraries(zig2 ntdll.lib) |
| 1018 | elseif(MINGW) | 1029 | elseif(MINGW) |
| 1019 | target_link_libraries(zig ntdll) | 1030 | target_link_libraries(zig2 ntdll) |
| 1020 | endif() | 1031 | endif() |
| 1021 | | 1032 | |
| 1022 | install(TARGETS zig DESTINATION bin) | 1033 | set(ZIG_INSTALL_ARGS "build" |
| 1023 | | 1034 | --zig-lib-dir "${CMAKE_SOURCE_DIR}/lib" |
| 1024 | set(ZIG_SKIP_INSTALL_LIB_FILES off CACHE BOOL | 1035 | --prefix "${CMAKE_INSTALL_PREFIX}" |
| 1025 | "Disable copying lib/ files to install prefix during the build phase") | 1036 | "-Dconfig_h=${ZIG_CONFIG_H_OUT}" |
| 1026 | | 1037 | "-Denable-llvm" |
| 1027 | if(NOT ZIG_SKIP_INSTALL_LIB_FILES) | 1038 | "-Denable-stage1" |
| 1028 | set(ZIG_INSTALL_ARGS "build" | 1039 | "${ZIG_RELEASE_ARG}" |
| 1029 | --zig-lib-dir "${CMAKE_SOURCE_DIR}/lib" | 1040 | "${ZIG_STATIC_ARG}" |
| 1030 | "-Dlib-files-only" | 1041 | "${ZIG_SKIP_INSTALL_LIB_FILES_ARG}" |
| 1031 | --prefix "${CMAKE_INSTALL_PREFIX}" | 1042 | "${ZIG_SINGLE_THREADED_ARG}" |
| 1032 | "-Dconfig_h=${ZIG_CONFIG_H_OUT}" | 1043 | "-Dtarget=${ZIG_TARGET_TRIPLE}" |
| 1033 | install | 1044 | "-Dcpu=${ZIG_TARGET_MCPU}" |
| 1034 | ) | 1045 | ) |
| 1035 | | 1046 | |
| 1036 | # CODE has no effect with Visual Studio build system generator, therefore | 1047 | add_custom_target(stage3 ALL |
| 1037 | # when using Visual Studio build system generator we resort to running | 1048 | COMMAND zig2 ${ZIG_INSTALL_ARGS} |
| 1038 | # `zig build install` during the build phase. | 1049 | DEPENDS zig2 |
| 1039 | if(MSVC) | 1050 | COMMENT STATUS "Building stage3" |
| 1040 | add_custom_target(zig_install_lib_files ALL | 1051 | WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" |
| 1041 | COMMAND zig ${ZIG_INSTALL_ARGS} | 1052 | ) |
| 1042 | DEPENDS zig | | |
| 1043 | WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" | | |
| 1044 | ) | | |
| 1045 | else() | | |
| 1046 | get_target_property(zig_BINARY_DIR zig BINARY_DIR) | | |
| 1047 | install(CODE "set(zig_EXE \"${ZIG_EXECUTABLE}\")") | | |
| 1048 | install(CODE "set(ZIG_INSTALL_ARGS \"${ZIG_INSTALL_ARGS}\")") | | |
| 1049 | install(CODE "set(CMAKE_SOURCE_DIR \"${CMAKE_SOURCE_DIR}\")") | | |
| 1050 | install(SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/cmake/install.cmake) | | |
| 1051 | endif() | | |
| 1052 | endif() | | |