authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-11-15 23:04:18-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-12-06 12:15:04-07:00
log34e9bbb9d46babecb8c8e5d694b934186654982b
tree45a76f48588db3d718c15f9fd5b954d21578403c
parentfb9a6084e28f3b732dbbce85b0706a70d848c24c

enable the LLVM backend in stage2

This takes a bit longer since the interpreted part has to do more work but it saves a round trip through the compiler by allowing `zig2 build` to be the final step. 1-2-3, done. For me this is currently failing due to compilation errors generated by GCC when compiling zig2.c but in theory if those are fixed, it should work!

2 files changed, 77 insertions(+), 3 deletions(-)

CMakeLists.txt+75-1
...@@ -205,6 +205,7 @@ set(ZIG_CPP_SOURCES...@@ -205,6 +205,7 @@ set(ZIG_CPP_SOURCES
205)205)
206# Needed because we use cmake, not the zig build system, to build zig2.o.206# Needed because we use cmake, not the zig build system, to build zig2.o.
207set(ZIG_STAGE2_SOURCES207set(ZIG_STAGE2_SOURCES
208 "${ZIG_CONFIG_ZIG_OUT}"
208 "${CMAKE_SOURCE_DIR}/lib/std/array_hash_map.zig"209 "${CMAKE_SOURCE_DIR}/lib/std/array_hash_map.zig"
209 "${CMAKE_SOURCE_DIR}/lib/std/array_list.zig"210 "${CMAKE_SOURCE_DIR}/lib/std/array_list.zig"
210 "${CMAKE_SOURCE_DIR}/lib/std/ascii.zig"211 "${CMAKE_SOURCE_DIR}/lib/std/ascii.zig"
...@@ -761,10 +762,83 @@ add_custom_command(...@@ -761,10 +762,83 @@ add_custom_command(
761 WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"762 WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
762)763)
763764
764
765add_executable(zig2 ${ZIG2_C_SOURCE} ${ZIG_COMPILER_RT_C_SOURCE})765add_executable(zig2 ${ZIG2_C_SOURCE} ${ZIG_COMPILER_RT_C_SOURCE})
766set_target_properties(zig2 PROPERTIES766set_target_properties(zig2 PROPERTIES
767 COMPILE_FLAGS ${ZIG2_COMPILE_FLAGS}767 COMPILE_FLAGS ${ZIG2_COMPILE_FLAGS}
768 LINK_FLAGS ${ZIG2_LINK_FLAGS}768 LINK_FLAGS ${ZIG2_LINK_FLAGS}
769)769)
770target_include_directories(zig2 PUBLIC "${CMAKE_SOURCE_DIR}/lib")770target_include_directories(zig2 PUBLIC "${CMAKE_SOURCE_DIR}/lib")
771target_link_libraries(zig2 LINK_PUBLIC zigcpp)
772
773if(MSVC)
774 target_link_libraries(zig2 ntdll.lib)
775elseif(MINGW)
776 target_link_libraries(zig2 ntdll)
777endif()
778
779if(NOT MSVC)
780 target_link_libraries(zig2 LINK_PUBLIC ${LIBXML2})
781endif()
782
783if(ZIG_DIA_GUIDS_LIB)
784 target_link_libraries(zig2 LINK_PUBLIC ${ZIG_DIA_GUIDS_LIB})
785endif()
786
787if(MSVC OR MINGW)
788 target_link_libraries(zig2 LINK_PUBLIC version)
789endif()
790
791if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
792 set(ZIG_RELEASE_ARG "")
793elseif("${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo")
794 set(ZIG_RELEASE_ARG -Drelease)
795else()
796 set(ZIG_RELEASE_ARG -Drelease -Dstrip)
797endif()
798if(ZIG_NO_LIB)
799 set(ZIG_NO_LIB_ARG "-Dno-lib")
800else()
801 set(ZIG_NO_LIB_ARG "")
802endif()
803if(ZIG_SINGLE_THREADED)
804 set(ZIG_SINGLE_THREADED_ARG "-fsingle-threaded")
805else()
806 set(ZIG_SINGLE_THREADED_ARG "")
807endif()
808if(ZIG_STATIC)
809 set(ZIG_STATIC_ARG "-Duse-zig-libcxx")
810else()
811 set(ZIG_STATIC_ARG "")
812endif()
813
814set(ZIG_BUILD_ARGS
815 --zig-lib-dir "${CMAKE_SOURCE_DIR}/lib"
816 "-Dconfig_h=${ZIG_CONFIG_H_OUT}"
817 "-Denable-llvm"
818 ${ZIG_RELEASE_ARG}
819 ${ZIG_STATIC_ARG}
820 ${ZIG_NO_LIB_ARG}
821 ${ZIG_SINGLE_THREADED_ARG}
822 "-Dtarget=${ZIG_TARGET_TRIPLE}"
823 "-Dcpu=${ZIG_TARGET_MCPU}"
824 "-Dversion-string=${RESOLVED_ZIG_VERSION}"
825)
826
827add_custom_target(stage3 ALL
828 COMMAND zig2 build compile ${ZIG_BUILD_ARGS}
829 DEPENDS zig2
830 COMMENT STATUS "Building stage3"
831 WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
832)
833
834if(WIN32)
835 set(ZIG_EXECUTABLE "${CMAKE_BINARY_DIR}/zig2.exe")
836else()
837 set(ZIG_EXECUTABLE "${CMAKE_BINARY_DIR}/zig2")
838endif()
839
840install(CODE "set(ZIG_EXECUTABLE \"${ZIG_EXECUTABLE}\")")
841install(CODE "set(ZIG_BUILD_ARGS \"${ZIG_BUILD_ARGS}\")")
842install(CODE "set(CMAKE_INSTALL_PREFIX \"${CMAKE_INSTALL_PREFIX}\")")
843install(CODE "set(CMAKE_SOURCE_DIR \"${CMAKE_SOURCE_DIR}\")")
844install(SCRIPT "${CMAKE_SOURCE_DIR}/cmake/install.cmake")
stage1/config.zig.in+2-2
...@@ -1,4 +1,4 @@...@@ -1,4 +1,4 @@
1pub const have_llvm = false;1pub const have_llvm = true;
2pub const llvm_has_m68k = false;2pub const llvm_has_m68k = false;
3pub const llvm_has_csky = false;3pub const llvm_has_csky = false;
4pub const llvm_has_arc = false;4pub const llvm_has_arc = false;
...@@ -10,5 +10,5 @@ pub const enable_tracy = false;...@@ -10,5 +10,5 @@ pub const enable_tracy = false;
10pub const value_tracing = false;10pub const value_tracing = false;
11pub const have_stage1 = false;11pub const have_stage1 = false;
12pub const skip_non_native = false;12pub const skip_non_native = false;
13pub const only_c = true;13pub const only_c = false;
14pub const force_gpa = false;14pub const force_gpa = false;