@@ -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,51 @@ 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
+ elseif ("${CMAKE_BUILD_TYPE} " STREQUAL "RelWithDebInfo" )
964
+ set (ZIG_RELEASE_ARG -Drelease)
960
965
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" )
962
972
endif ()
963
973
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" )
965
980
else ()
966
- set (ZIG1_SINGLE_THREADED_ARG "" )
981
+ set (ZIG_STATIC_ARG "" )
967
982
endif ()
968
983
969
- set (BUILD_ZIG1_ARGS
984
+ set (BUILD_ZIG2_ARGS
970
985
"src/stage1.zig"
971
- -target "${ZIG_TARGET_TRIPLE} "
972
- "-mcpu=${ZIG_TARGET_MCPU} "
973
- --name zig1
986
+ --name zig2
974
987
--zig-lib-dir "${CMAKE_SOURCE_DIR} /lib"
975
- "-femit-bin=${ZIG1_OBJECT } "
988
+ "-femit-bin=${ZIG2_OBJECT } "
976
989
-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} "
979
993
-lc
980
994
--pkg-begin build_options "${ZIG_CONFIG_ZIG_OUT} "
981
995
--pkg-end
@@ -985,68 +999,64 @@ set(BUILD_ZIG1_ARGS
985
999
986
1000
if ("${ZIG_EXECUTABLE} " STREQUAL "" )
987
1001
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} "
993
1007
)
994
- set (ZIG_EXECUTABLE "${zig_BINARY_DIR} /zig" )
995
1008
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" )
997
1012
endif ()
998
1013
else ()
999
1014
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} "
1005
1020
)
1006
1021
endif ()
1007
1022
1008
1023
# 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 } " )
1010
1025
1011
- set_target_properties (zig PROPERTIES
1026
+ set_target_properties (zig2 PROPERTIES
1012
1027
COMPILE_FLAGS ${EXE_CFLAGS}
1013
1028
LINK_FLAGS ${EXE_LDFLAGS}
1014
1029
)
1015
- target_link_libraries (zig zigstage1)
1030
+ target_link_libraries (zig2 zigstage1)
1016
1031
if (MSVC )
1017
- target_link_libraries (zig ntdll.lib)
1032
+ target_link_libraries (zig2 ntdll.lib)
1018
1033
elseif (MINGW)
1019
- target_link_libraries (zig ntdll)
1034
+ target_link_libraries (zig2 ntdll)
1020
1035
endif ()
1021
1036
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.
1027
1039
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" )
1052
1041
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
+ )
0 commit comments