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