Skip to content

Instantly share code, notes, and snippets.

@mikdusan
Created April 25, 2021 13:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mikdusan/269161639bcfe9dd5e9f3b94ad1fa0db to your computer and use it in GitHub Desktop.
Save mikdusan/269161639bcfe9dd5e9f3b94ad1fa0db to your computer and use it in GitHub Desktop.
support: build ZIG0 only; build ZIG with a pre-built ZIG0
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