Created
April 25, 2021 13:42
-
-
Save mikdusan/269161639bcfe9dd5e9f3b94ad1fa0db to your computer and use it in GitHub Desktop.
support: build ZIG0 only; build ZIG with a pre-built ZIG0
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/CMakeLists.txt b/CMakeLists.txt | |
index 27ed0ac73..9cf132a52 100644 | |
--- a/CMakeLists.txt | |
+++ b/CMakeLists.txt | |
@@ -91,6 +91,9 @@ set(ZIG_SINGLE_THREADED off CACHE BOOL "limit the zig compiler to use only 1 thr | |
set(ZIG_OMIT_STAGE2 off CACHE BOOL "omit the stage2 backend from stage1") | |
set(ZIG_ENABLE_LOGGING off CACHE BOOL "enable logging") | |
+set(ZIG0_ONLY off CACHE BOOL "Build only zig0") | |
+set(ZIG0_EXECUTABLE "" CACHE STRING "Path to already-built zig0 binary") | |
+ | |
if("${ZIG_TARGET_TRIPLE}" STREQUAL "native") | |
set(ZIG_USE_LLVM_CONFIG ON CACHE BOOL "use llvm-config to find LLVM libraries") | |
else() | |
@@ -746,7 +749,7 @@ if(MSVC OR MINGW) | |
target_link_libraries(zigstage1 LINK_PUBLIC version) | |
endif() | |
-if("${ZIG_EXECUTABLE}" STREQUAL "") | |
+if("${ZIG_EXECUTABLE}" STREQUAL "" AND "${ZIG0_EXECUTABLE}" STREQUAL "") | |
add_executable(zig0 ${ZIG0_SOURCES}) | |
set_target_properties(zig0 PROPERTIES | |
COMPILE_FLAGS ${EXE_CFLAGS} | |
@@ -787,70 +790,78 @@ set(BUILD_ZIG1_ARGS | |
--pkg-end | |
) | |
-if("${ZIG_EXECUTABLE}" STREQUAL "") | |
- add_custom_command( | |
- OUTPUT "${ZIG1_OBJECT}" | |
- COMMAND zig0 ${BUILD_ZIG1_ARGS} | |
- DEPENDS zig0 "${ZIG_STAGE2_SOURCES}" | |
- COMMENT STATUS "Building self-hosted component ${ZIG1_OBJECT}" | |
- WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" | |
- ) | |
- set(ZIG_EXECUTABLE "${zig_BINARY_DIR}/zig") | |
- if (WIN32) | |
- set(ZIG_EXECUTABLE "${ZIG_EXECUTABLE}.exe") | |
- endif() | |
-else() | |
- add_custom_command( | |
- OUTPUT "${ZIG1_OBJECT}" | |
- COMMAND "${ZIG_EXECUTABLE}" "build-obj" ${BUILD_ZIG1_ARGS} | |
- DEPENDS ${ZIG_STAGE2_SOURCES} | |
- COMMENT STATUS "Building self-hosted component ${ZIG1_OBJECT}" | |
- WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" | |
- ) | |
-endif() | |
+if(NOT ZIG0_ONLY) | |
+ if("${ZIG0_EXECUTABLE}" STREQUAL "") | |
+ set(ZIG0 "zig0") | |
+ else() | |
+ set(ZIG0 "${ZIG0_EXECUTABLE}") | |
+ endif() | |
-# cmake won't let us configure an executable without C sources. | |
-add_executable(zig "${CMAKE_SOURCE_DIR}/src/stage1/empty.cpp" "${ZIG1_OBJECT}") | |
+ if("${ZIG_EXECUTABLE}" STREQUAL "") | |
+ add_custom_command( | |
+ OUTPUT "${ZIG1_OBJECT}" | |
+ COMMAND ${ZIG0} ${BUILD_ZIG1_ARGS} | |
+ DEPENDS ${ZIG0} "${ZIG_STAGE2_SOURCES}" | |
+ COMMENT STATUS "Building self-hosted component ${ZIG1_OBJECT}" | |
+ WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" | |
+ ) | |
+ set(ZIG_EXECUTABLE "${zig_BINARY_DIR}/zig") | |
+ if (WIN32) | |
+ set(ZIG_EXECUTABLE "${ZIG_EXECUTABLE}.exe") | |
+ endif() | |
+ else() | |
+ add_custom_command( | |
+ OUTPUT "${ZIG1_OBJECT}" | |
+ COMMAND "${ZIG_EXECUTABLE}" "build-obj" ${BUILD_ZIG1_ARGS} | |
+ DEPENDS ${ZIG_STAGE2_SOURCES} | |
+ COMMENT STATUS "Building self-hosted component ${ZIG1_OBJECT}" | |
+ WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" | |
+ ) | |
+ endif() | |
-set_target_properties(zig PROPERTIES | |
- COMPILE_FLAGS ${EXE_CFLAGS} | |
- LINK_FLAGS ${EXE_LDFLAGS} | |
-) | |
-target_link_libraries(zig zigstage1) | |
-if(MSVC) | |
- target_link_libraries(zig ntdll.lib) | |
-elseif(MINGW) | |
- target_link_libraries(zig ntdll) | |
-endif() | |
+ # cmake won't let us configure an executable without C sources. | |
+ add_executable(zig "${CMAKE_SOURCE_DIR}/src/stage1/empty.cpp" "${ZIG1_OBJECT}") | |
-install(TARGETS zig DESTINATION bin) | |
+ set_target_properties(zig PROPERTIES | |
+ COMPILE_FLAGS ${EXE_CFLAGS} | |
+ LINK_FLAGS ${EXE_LDFLAGS} | |
+ ) | |
+ target_link_libraries(zig zigstage1) | |
+ if(MSVC) | |
+ target_link_libraries(zig ntdll.lib) | |
+ elseif(MINGW) | |
+ target_link_libraries(zig ntdll) | |
+ endif() | |
-set(ZIG_SKIP_INSTALL_LIB_FILES off CACHE BOOL | |
- "Disable copying lib/ files to install prefix during the build phase") | |
+ install(TARGETS zig DESTINATION bin) | |
-if(NOT ZIG_SKIP_INSTALL_LIB_FILES) | |
- set(ZIG_INSTALL_ARGS "build" | |
- --override-lib-dir "${CMAKE_SOURCE_DIR}/lib" | |
- "-Dlib-files-only" | |
- --prefix "${CMAKE_INSTALL_PREFIX}" | |
- "-Dconfig_h=${ZIG_CONFIG_H_OUT}" | |
- install | |
- ) | |
+ set(ZIG_SKIP_INSTALL_LIB_FILES off CACHE BOOL | |
+ "Disable copying lib/ files to install prefix during the build phase") | |
- # CODE has no effect with Visual Studio build system generator, therefore | |
- # when using Visual Studio build system generator we resort to running | |
- # `zig build install` during the build phase. | |
- if(MSVC) | |
- add_custom_target(zig_install_lib_files ALL | |
- COMMAND zig ${ZIG_INSTALL_ARGS} | |
- DEPENDS zig | |
- WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" | |
+ if(NOT ZIG_SKIP_INSTALL_LIB_FILES) | |
+ set(ZIG_INSTALL_ARGS "build" | |
+ --override-lib-dir "${CMAKE_SOURCE_DIR}/lib" | |
+ "-Dlib-files-only" | |
+ --prefix "${CMAKE_INSTALL_PREFIX}" | |
+ "-Dconfig_h=${ZIG_CONFIG_H_OUT}" | |
+ install | |
) | |
- else() | |
- get_target_property(zig_BINARY_DIR zig BINARY_DIR) | |
- install(CODE "set(zig_EXE \"${ZIG_EXECUTABLE}\")") | |
- install(CODE "set(ZIG_INSTALL_ARGS \"${ZIG_INSTALL_ARGS}\")") | |
- install(CODE "set(CMAKE_SOURCE_DIR \"${CMAKE_SOURCE_DIR}\")") | |
- install(SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/cmake/install.cmake) | |
+ | |
+ # CODE has no effect with Visual Studio build system generator, therefore | |
+ # when using Visual Studio build system generator we resort to running | |
+ # `zig build install` during the build phase. | |
+ if(MSVC) | |
+ add_custom_target(zig_install_lib_files ALL | |
+ COMMAND zig ${ZIG_INSTALL_ARGS} | |
+ DEPENDS zig | |
+ WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" | |
+ ) | |
+ else() | |
+ get_target_property(zig_BINARY_DIR zig BINARY_DIR) | |
+ install(CODE "set(zig_EXE \"${ZIG_EXECUTABLE}\")") | |
+ install(CODE "set(ZIG_INSTALL_ARGS \"${ZIG_INSTALL_ARGS}\")") | |
+ install(CODE "set(CMAKE_SOURCE_DIR \"${CMAKE_SOURCE_DIR}\")") | |
+ install(SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/cmake/install.cmake) | |
+ endif() | |
endif() | |
endif() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment