Skip to content

Commit e69973b

Browse files
authored
Merge pull request #12508 from ziglang/cmake-stage3
cmake: build stage3 by default
2 parents 9cca672 + 532cfb6 commit e69973b

27 files changed

+416
-501
lines changed

CMakeLists.txt

Lines changed: 76 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ if(NOT CMAKE_BUILD_TYPE)
1212
endif()
1313

1414
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
1616
"Directory to install zig to" FORCE)
1717
endif()
1818

@@ -65,6 +65,9 @@ if("${ZIG_VERSION}" STREQUAL "")
6565
endif()
6666
message(STATUS "Configuring zig version ${ZIG_VERSION}")
6767

68+
set(ZIG_SKIP_INSTALL_LIB_FILES off CACHE BOOL
69+
"Disable copying lib/ files to install prefix during the build phase")
70+
6871
set(ZIG_STATIC off CACHE BOOL "Attempt to build a static zig executable (not compatible with glibc)")
6972
set(ZIG_SHARED_LLVM off CACHE BOOL "Prefer linking against shared LLVM libraries")
7073
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")
333336
set(ZIG_CONFIG_ZIG_OUT "${CMAKE_BINARY_DIR}/config.zig")
334337

335338
# This is our shim which will be replaced by stage1.zig.
336-
set(ZIG0_SOURCES
339+
set(ZIG1_SOURCES
337340
"${CMAKE_SOURCE_DIR}/src/stage1/zig0.cpp"
338341
)
339342

@@ -373,9 +376,9 @@ set(ZIG_CPP_SOURCES
373376
# https://github.com/ziglang/zig/issues/6363
374377
"${CMAKE_SOURCE_DIR}/src/windows_sdk.cpp"
375378
)
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.
377380
# 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
379382
# in the zig-cache directory for the compiler-generated list of zig file dependencies.
380383
set(ZIG_STAGE2_SOURCES
381384
"${ZIG_CONFIG_ZIG_OUT}"
@@ -942,40 +945,51 @@ if(MSVC OR MINGW)
942945
endif()
943946

944947
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
947950
COMPILE_FLAGS ${EXE_CFLAGS}
948951
LINK_FLAGS ${EXE_LDFLAGS}
949952
)
950-
target_link_libraries(zig0 zigstage1)
953+
target_link_libraries(zig1 zigstage1)
951954
endif()
952955

953956
if(MSVC)
954-
set(ZIG1_OBJECT "${CMAKE_BINARY_DIR}/zig1.obj")
957+
set(ZIG2_OBJECT "${CMAKE_BINARY_DIR}/zig2.obj")
955958
else()
956-
set(ZIG1_OBJECT "${CMAKE_BINARY_DIR}/zig1.o")
959+
set(ZIG2_OBJECT "${CMAKE_BINARY_DIR}/zig2.o")
957960
endif()
958961
if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
959-
set(ZIG1_RELEASE_ARG "")
962+
set(ZIG_RELEASE_ARG "")
963+
elseif("${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo")
964+
set(ZIG_RELEASE_ARG -Drelease)
960965
else()
961-
set(ZIG1_RELEASE_ARG -OReleaseFast --strip)
966+
set(ZIG_RELEASE_ARG -Drelease -Dstrip)
967+
endif()
968+
if(ZIG_SKIP_INSTALL_LIB_FILES)
969+
set(ZIG_SKIP_INSTALL_LIB_FILES_ARG "-Dskip-install-lib-files")
970+
else()
971+
set(ZIG_SKIP_INSTALL_LIB_FILES_ARG "-Dskip-install-lib-files=false")
962972
endif()
963973
if(ZIG_SINGLE_THREADED)
964-
set(ZIG1_SINGLE_THREADED_ARG "-fsingle-threaded")
974+
set(ZIG_SINGLE_THREADED_ARG "-fsingle-threaded")
975+
else()
976+
set(ZIG_SINGLE_THREADED_ARG "")
977+
endif()
978+
if(ZIG_STATIC)
979+
set(ZIG_STATIC_ARG "-Duse-zig-libcxx")
965980
else()
966-
set(ZIG1_SINGLE_THREADED_ARG "")
981+
set(ZIG_STATIC_ARG "")
967982
endif()
968983

969-
set(BUILD_ZIG1_ARGS
984+
set(BUILD_ZIG2_ARGS
970985
"src/stage1.zig"
971-
-target "${ZIG_TARGET_TRIPLE}"
972-
"-mcpu=${ZIG_TARGET_MCPU}"
973-
--name zig1
986+
--name zig2
974987
--zig-lib-dir "${CMAKE_SOURCE_DIR}/lib"
975-
"-femit-bin=${ZIG1_OBJECT}"
988+
"-femit-bin=${ZIG2_OBJECT}"
976989
-fcompiler-rt
977-
"${ZIG1_RELEASE_ARG}"
978-
"${ZIG1_SINGLE_THREADED_ARG}"
990+
${ZIG_SINGLE_THREADED_ARG}
991+
-target "${ZIG_TARGET_TRIPLE}"
992+
-mcpu "${ZIG_TARGET_MCPU}"
979993
-lc
980994
--pkg-begin build_options "${ZIG_CONFIG_ZIG_OUT}"
981995
--pkg-end
@@ -985,68 +999,64 @@ set(BUILD_ZIG1_ARGS
985999

9861000
if("${ZIG_EXECUTABLE}" STREQUAL "")
9871001
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}"
1002+
OUTPUT "${ZIG2_OBJECT}"
1003+
COMMAND zig1 ${BUILD_ZIG2_ARGS}
1004+
DEPENDS zig1 "${ZIG_STAGE2_SOURCES}"
1005+
COMMENT STATUS "Building stage2 object ${ZIG2_OBJECT}"
1006+
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
9931007
)
994-
set(ZIG_EXECUTABLE "${zig_BINARY_DIR}/zig")
9951008
if (WIN32)
996-
set(ZIG_EXECUTABLE "${ZIG_EXECUTABLE}.exe")
1009+
set(ZIG_EXECUTABLE "${zig2_BINARY_DIR}/zig2.exe")
1010+
else()
1011+
set(ZIG_EXECUTABLE "${zig2_BINARY_DIR}/zig2")
9971012
endif()
9981013
else()
9991014
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}"
1015+
OUTPUT "${ZIG2_OBJECT}"
1016+
COMMAND "${ZIG_EXECUTABLE}" "build-obj" ${BUILD_ZIG2_ARGS}
1017+
DEPENDS ${ZIG_STAGE2_SOURCES}
1018+
COMMENT STATUS "Building stage2 component ${ZIG2_OBJECT}"
1019+
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
10051020
)
10061021
endif()
10071022

10081023
# cmake won't let us configure an executable without C sources.
1009-
add_executable(zig "${CMAKE_SOURCE_DIR}/src/stage1/empty.cpp" "${ZIG1_OBJECT}")
1024+
add_executable(zig2 "${CMAKE_SOURCE_DIR}/src/stage1/empty.cpp" "${ZIG2_OBJECT}")
10101025

1011-
set_target_properties(zig PROPERTIES
1026+
set_target_properties(zig2 PROPERTIES
10121027
COMPILE_FLAGS ${EXE_CFLAGS}
10131028
LINK_FLAGS ${EXE_LDFLAGS}
10141029
)
1015-
target_link_libraries(zig zigstage1)
1030+
target_link_libraries(zig2 zigstage1)
10161031
if(MSVC)
1017-
target_link_libraries(zig ntdll.lib)
1032+
target_link_libraries(zig2 ntdll.lib)
10181033
elseif(MINGW)
1019-
target_link_libraries(zig ntdll)
1034+
target_link_libraries(zig2 ntdll)
10201035
endif()
10211036

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-
1037+
# Dummy install command so that the "install" target is not missing.
1038+
# This is redundant from the "stage3" custom target below.
10271039
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-
)
1035-
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()
1040+
install(FILES "lib/compiler_rt.zig" DESTINATION "lib/zig")
10521041
endif()
1042+
1043+
set(ZIG_INSTALL_ARGS "build"
1044+
--zig-lib-dir "${CMAKE_SOURCE_DIR}/lib"
1045+
--prefix "${CMAKE_INSTALL_PREFIX}"
1046+
"-Dconfig_h=${ZIG_CONFIG_H_OUT}"
1047+
"-Denable-llvm"
1048+
"-Denable-stage1"
1049+
${ZIG_RELEASE_ARG}
1050+
${ZIG_STATIC_ARG}
1051+
${ZIG_SKIP_INSTALL_LIB_FILES_ARG}
1052+
${ZIG_SINGLE_THREADED_ARG}
1053+
"-Dtarget=${ZIG_TARGET_TRIPLE}"
1054+
"-Dcpu=${ZIG_TARGET_MCPU}"
1055+
)
1056+
1057+
add_custom_target(stage3 ALL
1058+
COMMAND zig2 ${ZIG_INSTALL_ARGS}
1059+
DEPENDS zig2
1060+
COMMENT STATUS "Building stage3"
1061+
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
1062+
)

ci/azure/macos_arm64_script

Lines changed: 0 additions & 132 deletions
This file was deleted.

ci/azure/macos_script

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ git fetch --tags
3434
mkdir build
3535
cd build
3636
cmake .. \
37+
-DCMAKE_INSTALL_PREFIX="stage3-release" \
3738
-DCMAKE_PREFIX_PATH="$PREFIX" \
3839
-DCMAKE_BUILD_TYPE=Release \
3940
-DZIG_TARGET_TRIPLE="$TARGET" \
@@ -47,15 +48,6 @@ unset CXX
4748

4849
make $JOBS install
4950

50-
stage2/bin/zig build \
51-
--prefix stage3-release \
52-
--search-prefix "$PREFIX" \
53-
-Dstatic-llvm \
54-
-Drelease \
55-
-Dstrip \
56-
-Dtarget="$TARGET" \
57-
-Denable-stage1
58-
5951
stage3-release/bin/zig build test docs \
6052
-Denable-macos-sdk \
6153
-Dstatic-llvm \

0 commit comments

Comments
 (0)