Commit 69aa09948b
Changed files (3)
cmake/Findllvm.cmake
@@ -7,7 +7,119 @@
# LLVM_LIBRARIES
# LLVM_LIBDIRS
-if(ZIG_CROSSCOMPILING)
+if("${ZIG_TARGET_TRIPLE}" STREQUAL "native")
+ find_program(LLVM_CONFIG_EXE
+ NAMES llvm-config-10 llvm-config-10.0 llvm-config100 llvm-config
+ PATHS
+ "/mingw64/bin"
+ "/c/msys64/mingw64/bin"
+ "c:/msys64/mingw64/bin"
+ "C:/Libraries/llvm-10.0.0/bin")
+
+ if ("${LLVM_CONFIG_EXE}" STREQUAL "LLVM_CONFIG_EXE-NOTFOUND")
+ message(FATAL_ERROR "unable to find llvm-config")
+ endif()
+
+ if ("${LLVM_CONFIG_EXE}" STREQUAL "LLVM_CONFIG_EXE-NOTFOUND")
+ message(FATAL_ERROR "unable to find llvm-config")
+ endif()
+
+ execute_process(
+ COMMAND ${LLVM_CONFIG_EXE} --version
+ OUTPUT_VARIABLE LLVM_CONFIG_VERSION
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+ if("${LLVM_CONFIG_VERSION}" VERSION_LESS 10)
+ message(FATAL_ERROR "expected LLVM 10.x but found ${LLVM_CONFIG_VERSION}")
+ endif()
+ if("${LLVM_CONFIG_VERSION}" VERSION_EQUAL 11)
+ message(FATAL_ERROR "expected LLVM 10.x but found ${LLVM_CONFIG_VERSION}")
+ endif()
+ if("${LLVM_CONFIG_VERSION}" VERSION_GREATER 11)
+ message(FATAL_ERROR "expected LLVM 10.x but found ${LLVM_CONFIG_VERSION}")
+ endif()
+
+ execute_process(
+ COMMAND ${LLVM_CONFIG_EXE} --targets-built
+ OUTPUT_VARIABLE LLVM_TARGETS_BUILT_SPACES
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+ string(REPLACE " " ";" LLVM_TARGETS_BUILT "${LLVM_TARGETS_BUILT_SPACES}")
+ function(NEED_TARGET TARGET_NAME)
+ list (FIND LLVM_TARGETS_BUILT "${TARGET_NAME}" _index)
+ if (${_index} EQUAL -1)
+ message(FATAL_ERROR "LLVM is missing target ${TARGET_NAME}. Zig requires LLVM to be built with all default targets enabled.")
+ endif()
+ endfunction(NEED_TARGET)
+ NEED_TARGET("AArch64")
+ NEED_TARGET("AMDGPU")
+ NEED_TARGET("ARM")
+ NEED_TARGET("BPF")
+ NEED_TARGET("Hexagon")
+ NEED_TARGET("Lanai")
+ NEED_TARGET("Mips")
+ NEED_TARGET("MSP430")
+ NEED_TARGET("NVPTX")
+ NEED_TARGET("PowerPC")
+ NEED_TARGET("RISCV")
+ NEED_TARGET("Sparc")
+ NEED_TARGET("SystemZ")
+ NEED_TARGET("WebAssembly")
+ NEED_TARGET("X86")
+ NEED_TARGET("XCore")
+
+ if(ZIG_STATIC_LLVM)
+ execute_process(
+ COMMAND ${LLVM_CONFIG_EXE} --libfiles --link-static
+ OUTPUT_VARIABLE LLVM_LIBRARIES_SPACES
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+ string(REPLACE " " ";" LLVM_LIBRARIES "${LLVM_LIBRARIES_SPACES}")
+
+ execute_process(
+ COMMAND ${LLVM_CONFIG_EXE} --system-libs --link-static
+ OUTPUT_VARIABLE LLVM_SYSTEM_LIBS_SPACES
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+ string(REPLACE " " ";" LLVM_SYSTEM_LIBS "${LLVM_SYSTEM_LIBS_SPACES}")
+
+ execute_process(
+ COMMAND ${LLVM_CONFIG_EXE} --libdir --link-static
+ OUTPUT_VARIABLE LLVM_LIBDIRS_SPACES
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+ string(REPLACE " " ";" LLVM_LIBDIRS "${LLVM_LIBDIRS_SPACES}")
+ endif()
+ if(NOT LLVM_LIBRARIES)
+ execute_process(
+ COMMAND ${LLVM_CONFIG_EXE} --libs
+ OUTPUT_VARIABLE LLVM_LIBRARIES_SPACES
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+ string(REPLACE " " ";" LLVM_LIBRARIES "${LLVM_LIBRARIES_SPACES}")
+
+ execute_process(
+ COMMAND ${LLVM_CONFIG_EXE} --system-libs
+ OUTPUT_VARIABLE LLVM_SYSTEM_LIBS_SPACES
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+ string(REPLACE " " ";" LLVM_SYSTEM_LIBS "${LLVM_SYSTEM_LIBS_SPACES}")
+
+ execute_process(
+ COMMAND ${LLVM_CONFIG_EXE} --libdir
+ OUTPUT_VARIABLE LLVM_LIBDIRS_SPACES
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+ string(REPLACE " " ";" LLVM_LIBDIRS "${LLVM_LIBDIRS_SPACES}")
+ endif()
+
+ execute_process(
+ COMMAND ${LLVM_CONFIG_EXE} --includedir
+ OUTPUT_VARIABLE LLVM_INCLUDE_DIRS
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+ set(LLVM_LIBRARIES ${LLVM_LIBRARIES} ${LLVM_SYSTEM_LIBS})
+
+ if(NOT LLVM_LIBRARIES)
+ find_library(LLVM_LIBRARIES NAMES LLVM LLVM-10 LLVM-10.0)
+ endif()
+
+ link_directories("${CMAKE_PREFIX_PATH}/lib")
+ link_directories("${LLVM_LIBDIRS}")
+else()
# Here we assume that we're cross compiling with Zig, of course. No reason
# to support more complicated setups. We also assume the experimental target
# AVR is enabled.
@@ -189,118 +301,6 @@ if(ZIG_CROSSCOMPILING)
FIND_AND_ADD_LLVM_LIB(LLVMAArch64Info)
FIND_AND_ADD_LLVM_LIB(LLVMSupport)
FIND_AND_ADD_LLVM_LIB(LLVMDemangle)
-else()
- find_program(LLVM_CONFIG_EXE
- NAMES llvm-config-10 llvm-config-10.0 llvm-config100 llvm-config
- PATHS
- "/mingw64/bin"
- "/c/msys64/mingw64/bin"
- "c:/msys64/mingw64/bin"
- "C:/Libraries/llvm-10.0.0/bin")
-
- if ("${LLVM_CONFIG_EXE}" STREQUAL "LLVM_CONFIG_EXE-NOTFOUND")
- message(FATAL_ERROR "unable to find llvm-config")
- endif()
-
- if ("${LLVM_CONFIG_EXE}" STREQUAL "LLVM_CONFIG_EXE-NOTFOUND")
- message(FATAL_ERROR "unable to find llvm-config")
- endif()
-
- execute_process(
- COMMAND ${LLVM_CONFIG_EXE} --version
- OUTPUT_VARIABLE LLVM_CONFIG_VERSION
- OUTPUT_STRIP_TRAILING_WHITESPACE)
-
- if("${LLVM_CONFIG_VERSION}" VERSION_LESS 10)
- message(FATAL_ERROR "expected LLVM 10.x but found ${LLVM_CONFIG_VERSION}")
- endif()
- if("${LLVM_CONFIG_VERSION}" VERSION_EQUAL 11)
- message(FATAL_ERROR "expected LLVM 10.x but found ${LLVM_CONFIG_VERSION}")
- endif()
- if("${LLVM_CONFIG_VERSION}" VERSION_GREATER 11)
- message(FATAL_ERROR "expected LLVM 10.x but found ${LLVM_CONFIG_VERSION}")
- endif()
-
- execute_process(
- COMMAND ${LLVM_CONFIG_EXE} --targets-built
- OUTPUT_VARIABLE LLVM_TARGETS_BUILT_SPACES
- OUTPUT_STRIP_TRAILING_WHITESPACE)
- string(REPLACE " " ";" LLVM_TARGETS_BUILT "${LLVM_TARGETS_BUILT_SPACES}")
- function(NEED_TARGET TARGET_NAME)
- list (FIND LLVM_TARGETS_BUILT "${TARGET_NAME}" _index)
- if (${_index} EQUAL -1)
- message(FATAL_ERROR "LLVM is missing target ${TARGET_NAME}. Zig requires LLVM to be built with all default targets enabled.")
- endif()
- endfunction(NEED_TARGET)
- NEED_TARGET("AArch64")
- NEED_TARGET("AMDGPU")
- NEED_TARGET("ARM")
- NEED_TARGET("BPF")
- NEED_TARGET("Hexagon")
- NEED_TARGET("Lanai")
- NEED_TARGET("Mips")
- NEED_TARGET("MSP430")
- NEED_TARGET("NVPTX")
- NEED_TARGET("PowerPC")
- NEED_TARGET("RISCV")
- NEED_TARGET("Sparc")
- NEED_TARGET("SystemZ")
- NEED_TARGET("WebAssembly")
- NEED_TARGET("X86")
- NEED_TARGET("XCore")
-
- if(ZIG_STATIC_LLVM)
- execute_process(
- COMMAND ${LLVM_CONFIG_EXE} --libfiles --link-static
- OUTPUT_VARIABLE LLVM_LIBRARIES_SPACES
- OUTPUT_STRIP_TRAILING_WHITESPACE)
- string(REPLACE " " ";" LLVM_LIBRARIES "${LLVM_LIBRARIES_SPACES}")
-
- execute_process(
- COMMAND ${LLVM_CONFIG_EXE} --system-libs --link-static
- OUTPUT_VARIABLE LLVM_SYSTEM_LIBS_SPACES
- OUTPUT_STRIP_TRAILING_WHITESPACE)
- string(REPLACE " " ";" LLVM_SYSTEM_LIBS "${LLVM_SYSTEM_LIBS_SPACES}")
-
- execute_process(
- COMMAND ${LLVM_CONFIG_EXE} --libdir --link-static
- OUTPUT_VARIABLE LLVM_LIBDIRS_SPACES
- OUTPUT_STRIP_TRAILING_WHITESPACE)
- string(REPLACE " " ";" LLVM_LIBDIRS "${LLVM_LIBDIRS_SPACES}")
- endif()
- if(NOT LLVM_LIBRARIES)
- execute_process(
- COMMAND ${LLVM_CONFIG_EXE} --libs
- OUTPUT_VARIABLE LLVM_LIBRARIES_SPACES
- OUTPUT_STRIP_TRAILING_WHITESPACE)
- string(REPLACE " " ";" LLVM_LIBRARIES "${LLVM_LIBRARIES_SPACES}")
-
- execute_process(
- COMMAND ${LLVM_CONFIG_EXE} --system-libs
- OUTPUT_VARIABLE LLVM_SYSTEM_LIBS_SPACES
- OUTPUT_STRIP_TRAILING_WHITESPACE)
- string(REPLACE " " ";" LLVM_SYSTEM_LIBS "${LLVM_SYSTEM_LIBS_SPACES}")
-
- execute_process(
- COMMAND ${LLVM_CONFIG_EXE} --libdir
- OUTPUT_VARIABLE LLVM_LIBDIRS_SPACES
- OUTPUT_STRIP_TRAILING_WHITESPACE)
- string(REPLACE " " ";" LLVM_LIBDIRS "${LLVM_LIBDIRS_SPACES}")
- endif()
-
- execute_process(
- COMMAND ${LLVM_CONFIG_EXE} --includedir
- OUTPUT_VARIABLE LLVM_INCLUDE_DIRS
- OUTPUT_STRIP_TRAILING_WHITESPACE)
-
- set(LLVM_LIBRARIES ${LLVM_LIBRARIES} ${LLVM_SYSTEM_LIBS})
-
- if(NOT LLVM_LIBRARIES)
- find_library(LLVM_LIBRARIES NAMES LLVM LLVM-10 LLVM-10.0)
- endif()
-
- link_directories("${CMAKE_PREFIX_PATH}/lib")
- link_directories("${LLVM_LIBDIRS}")
endif()
include(FindPackageHandleStandardArgs)
src/stage2.cpp
@@ -197,6 +197,10 @@ Error stage2_target_parse(struct ZigTarget *target, const char *zig_triple, cons
{
Error err;
+ if (zig_triple != nullptr && strcmp(zig_triple, "native") == 0) {
+ zig_triple = nullptr;
+ }
+
if (zig_triple == nullptr) {
get_native_target(target);
CMakeLists.txt
@@ -62,6 +62,9 @@ option(ZIG_TEST_COVERAGE "Build Zig with test coverage instrumentation" OFF)
# LLD to the tree. This option does nothing.
option(ZIG_FORCE_EXTERNAL_LLD "does nothing" OFF)
+set(ZIG_TARGET_TRIPLE "native" CACHE STRING "arch-os-abi to output binaries for")
+set(ZIG_EXECUTABLE "" CACHE STRING "(when cross compiling) path to already-built zig binary")
+
find_package(llvm)
find_package(clang)
find_package(lld)
@@ -338,7 +341,7 @@ if(MSVC)
if(NOT "${CMAKE_BUILD_TYPE}" STREQUAL "Release" AND NOT "${CMAKE_BUILD_TYPE}" STREQUAL "MinSizeRel")
set(EXE_LDFLAGS "${EXE_LDFLAGS} /debug:fastlink")
endif()
-elseif(MINGW)
+elseif(MINGW)
set(EXE_LDFLAGS "${EXE_LDFLAGS} -Wl,--stack,16777216")
endif()
@@ -353,7 +356,7 @@ if(ZIG_STATIC)
else()
if(MINGW)
set(EXE_LDFLAGS "${EXE_LDFLAGS} -lz3")
- endif()
+ endif()
endif()
if(ZIG_TEST_COVERAGE)
@@ -424,6 +427,7 @@ endif()
set(BUILD_LIBSTAGE2_ARGS "build-lib"
"src-self-hosted/stage2.zig"
+ -target "${ZIG_TARGET_TRIPLE}"
-mcpu=baseline
--name zigstage2
--override-lib-dir "${CMAKE_SOURCE_DIR}/lib"
@@ -436,12 +440,22 @@ set(BUILD_LIBSTAGE2_ARGS "build-lib"
${LIBSTAGE2_WINDOWS_ARGS}
)
-add_custom_target(zig_build_libstage2 ALL
- COMMAND zig0 ${BUILD_LIBSTAGE2_ARGS}
- DEPENDS zig0
- BYPRODUCTS "${LIBSTAGE2}"
- WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
-)
+if("${ZIG_TARGET_TRIPLE}" STREQUAL "native")
+ add_custom_target(zig_build_libstage2 ALL
+ COMMAND zig0 ${BUILD_LIBSTAGE2_ARGS}
+ DEPENDS zig0
+ BYPRODUCTS "${LIBSTAGE2}"
+ WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
+ )
+ set(ZIG_EXECUTABLE "${zig_BINARY_DIR}/zig")
+else()
+ add_custom_target(zig_build_libstage2 ALL
+ COMMAND "${ZIG_EXECUTABLE}" ${BUILD_LIBSTAGE2_ARGS}
+ BYPRODUCTS "${LIBSTAGE2}"
+ WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
+ )
+endif()
+
add_executable(zig "${ZIG_MAIN_SRC}")
set_target_properties(zig PROPERTIES
@@ -451,7 +465,7 @@ set_target_properties(zig PROPERTIES
target_link_libraries(zig zigcompiler "${LIBSTAGE2}")
if(MSVC)
target_link_libraries(zig ntdll.lib)
-elseif(MINGW)
+elseif(MINGW)
target_link_libraries(zig ntdll)
endif()
add_dependencies(zig zig_build_libstage2)
@@ -480,7 +494,7 @@ if(MSVC)
endif()
else()
get_target_property(zig_BINARY_DIR zig BINARY_DIR)
- install(CODE "set(zig_EXE \"${zig_BINARY_DIR}/zig\")")
+ 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)