2016-02-01 22:26:01 +00:00
|
|
|
cmake_minimum_required(VERSION 2.8.5)
|
2015-08-05 22:23:15 +00:00
|
|
|
|
2016-02-01 22:26:01 +00:00
|
|
|
if(NOT CMAKE_BUILD_TYPE)
|
|
|
|
set(CMAKE_BUILD_TYPE "Debug" CACHE STRING
|
|
|
|
"Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." FORCE)
|
|
|
|
endif()
|
2015-08-05 22:23:15 +00:00
|
|
|
|
2018-04-11 00:57:37 +00:00
|
|
|
if(NOT CMAKE_INSTALL_PREFIX)
|
2019-06-23 01:21:48 +00:00
|
|
|
set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}" CACHE STRING
|
2018-04-11 00:57:37 +00:00
|
|
|
"Directory to install zig to" FORCE)
|
|
|
|
endif()
|
|
|
|
|
2017-04-21 15:06:15 +00:00
|
|
|
project(zig C CXX)
|
2015-08-05 22:23:15 +00:00
|
|
|
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH})
|
|
|
|
|
2017-10-01 22:34:22 +00:00
|
|
|
|
2015-08-05 22:46:40 +00:00
|
|
|
set(ZIG_VERSION_MAJOR 0)
|
2019-04-08 19:41:41 +00:00
|
|
|
set(ZIG_VERSION_MINOR 4)
|
2018-03-15 13:15:05 +00:00
|
|
|
set(ZIG_VERSION_PATCH 0)
|
2015-08-05 22:23:15 +00:00
|
|
|
set(ZIG_VERSION "${ZIG_VERSION_MAJOR}.${ZIG_VERSION_MINOR}.${ZIG_VERSION_PATCH}")
|
2017-10-01 22:34:22 +00:00
|
|
|
|
|
|
|
find_program(GIT_EXE NAMES git)
|
|
|
|
if(GIT_EXE)
|
|
|
|
execute_process(
|
2018-06-30 02:22:04 +00:00
|
|
|
COMMAND ${GIT_EXE} -C ${CMAKE_SOURCE_DIR} name-rev HEAD --tags --name-only --no-undefined --always
|
2019-09-02 21:45:30 +00:00
|
|
|
RESULT_VARIABLE EXIT_STATUS
|
2017-10-01 22:34:22 +00:00
|
|
|
OUTPUT_VARIABLE ZIG_GIT_REV
|
2019-09-02 21:45:30 +00:00
|
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
|
|
ERROR_QUIET)
|
|
|
|
if(EXIT_STATUS EQUAL "0")
|
|
|
|
if(ZIG_GIT_REV MATCHES "\\^0$")
|
|
|
|
if(NOT("${ZIG_GIT_REV}" STREQUAL "${ZIG_VERSION}^0"))
|
|
|
|
message("WARNING: Tag does not match configured Zig version")
|
|
|
|
endif()
|
|
|
|
else()
|
|
|
|
set(ZIG_VERSION "${ZIG_VERSION}+${ZIG_GIT_REV}")
|
2017-10-01 22:34:22 +00:00
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
endif()
|
2015-08-05 22:23:15 +00:00
|
|
|
message("Configuring zig version ${ZIG_VERSION}")
|
|
|
|
|
2018-03-30 17:20:13 +00:00
|
|
|
set(ZIG_STATIC off CACHE BOOL "Attempt to build a static zig executable (not compatible with glibc)")
|
2019-07-09 09:03:57 +00:00
|
|
|
set(ZIG_STATIC_LLVM off CACHE BOOL "Prefer linking against static LLVM libraries")
|
|
|
|
|
|
|
|
if(ZIG_STATIC)
|
|
|
|
set(ZIG_STATIC_LLVM "on")
|
|
|
|
endif()
|
2016-02-11 08:33:27 +00:00
|
|
|
|
2017-10-01 20:10:05 +00:00
|
|
|
string(REGEX REPLACE "\\\\" "\\\\\\\\" ZIG_LIBC_LIB_DIR_ESCAPED "${ZIG_LIBC_LIB_DIR}")
|
|
|
|
string(REGEX REPLACE "\\\\" "\\\\\\\\" ZIG_LIBC_STATIC_LIB_DIR_ESCAPED "${ZIG_LIBC_STATIC_LIB_DIR}")
|
|
|
|
string(REGEX REPLACE "\\\\" "\\\\\\\\" ZIG_LIBC_INCLUDE_DIR_ESCAPED "${ZIG_LIBC_INCLUDE_DIR}")
|
2017-10-01 18:01:18 +00:00
|
|
|
|
2016-04-23 16:57:38 +00:00
|
|
|
option(ZIG_TEST_COVERAGE "Build Zig with test coverage instrumentation" OFF)
|
|
|
|
|
2017-08-28 07:12:23 +00:00
|
|
|
# To see what patches have been applied to LLD in this repository:
|
|
|
|
# git log -p -- deps/lld
|
|
|
|
option(ZIG_FORCE_EXTERNAL_LLD "If your system has the LLD patches use it instead of the embedded LLD" OFF)
|
2016-02-11 08:33:27 +00:00
|
|
|
|
2017-09-13 04:17:19 +00:00
|
|
|
find_package(llvm)
|
|
|
|
find_package(clang)
|
2016-01-19 04:28:54 +00:00
|
|
|
|
2018-09-30 20:45:33 +00:00
|
|
|
if(APPLE AND ZIG_STATIC)
|
|
|
|
list(REMOVE_ITEM LLVM_LIBRARIES "-lz")
|
2018-03-20 11:46:31 +00:00
|
|
|
find_library(ZLIB NAMES z zlib libz)
|
2019-03-18 22:36:35 +00:00
|
|
|
list(APPEND LLVM_LIBRARIES "${ZLIB}")
|
2018-03-20 11:46:31 +00:00
|
|
|
endif()
|
|
|
|
|
2017-12-27 00:44:08 +00:00
|
|
|
set(ZIG_CPP_LIB_DIR "${CMAKE_BINARY_DIR}/zig_cpp")
|
|
|
|
|
2019-04-18 06:58:12 +00:00
|
|
|
# Handle multi-config builds and place each into a common lib. The VS generator
|
|
|
|
# for example will append a Debug folder by default if not explicitly specified.
|
|
|
|
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${ZIG_CPP_LIB_DIR})
|
|
|
|
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${ZIG_CPP_LIB_DIR})
|
|
|
|
foreach(CONFIG_TYPE ${CMAKE_CONFIGURATION_TYPES})
|
|
|
|
string(TOUPPER ${CONFIG_TYPE} CONFIG_TYPE)
|
|
|
|
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${CONFIG_TYPE} ${ZIG_CPP_LIB_DIR})
|
|
|
|
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_${CONFIG_TYPE} ${ZIG_CPP_LIB_DIR})
|
|
|
|
endforeach(CONFIG_TYPE CMAKE_CONFIGURATION_TYPES)
|
|
|
|
|
2017-08-28 07:12:23 +00:00
|
|
|
if(ZIG_FORCE_EXTERNAL_LLD)
|
|
|
|
find_package(lld)
|
2017-12-01 18:44:28 +00:00
|
|
|
include_directories(${LLVM_INCLUDE_DIRS})
|
2017-08-28 07:12:23 +00:00
|
|
|
include_directories(${LLD_INCLUDE_DIRS})
|
2017-12-01 18:44:28 +00:00
|
|
|
include_directories(${CLANG_INCLUDE_DIRS})
|
2017-08-28 07:12:23 +00:00
|
|
|
else()
|
2017-12-01 18:44:28 +00:00
|
|
|
# This goes first so that we find embedded LLD instead
|
|
|
|
# of system LLD.
|
|
|
|
include_directories("${CMAKE_SOURCE_DIR}/deps/lld/include")
|
|
|
|
|
|
|
|
include_directories(${LLVM_INCLUDE_DIRS})
|
|
|
|
include_directories(${CLANG_INCLUDE_DIRS})
|
2017-08-28 07:12:23 +00:00
|
|
|
set(EMBEDDED_LLD_LIB_SOURCES
|
2018-01-17 22:29:21 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/Common/Args.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/Common/ErrorHandler.cpp"
|
2019-08-03 16:43:55 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/Common/Filesystem.cpp"
|
2018-01-17 22:29:21 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/Common/Memory.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/Common/Reproduce.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/Common/Strings.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/Common/TargetOptionsCommandFlags.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/Common/Threads.cpp"
|
2018-08-04 22:09:19 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/Common/Timer.cpp"
|
2018-01-17 22:29:21 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/Common/Version.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/lib/Core/DefinedAtom.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/lib/Core/Error.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/lib/Core/File.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/lib/Core/LinkingContext.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/lib/Core/Reader.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/lib/Core/Resolver.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/lib/Core/SymbolTable.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/lib/Core/Writer.cpp"
|
2017-08-28 07:12:23 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/lib/Driver/DarwinLdDriver.cpp"
|
2018-01-17 22:29:21 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/lib/ReaderWriter/FileArchive.cpp"
|
2017-08-28 07:12:23 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/lib/ReaderWriter/MachO/ArchHandler.cpp"
|
2018-01-17 22:29:21 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/lib/ReaderWriter/MachO/ArchHandler_arm.cpp"
|
2017-08-28 07:12:23 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/lib/ReaderWriter/MachO/ArchHandler_arm64.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/lib/ReaderWriter/MachO/ArchHandler_x86.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/lib/ReaderWriter/MachO/ArchHandler_x86_64.cpp"
|
2018-01-17 22:29:21 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/lib/ReaderWriter/MachO/CompactUnwindPass.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/lib/ReaderWriter/MachO/GOTPass.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/lib/ReaderWriter/MachO/LayoutPass.cpp"
|
2017-08-28 07:12:23 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/lib/ReaderWriter/MachO/MachOLinkingContext.cpp"
|
2018-01-17 22:29:21 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/lib/ReaderWriter/MachO/MachONormalizedFileBinaryReader.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/lib/ReaderWriter/MachO/MachONormalizedFileBinaryWriter.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/lib/ReaderWriter/MachO/MachONormalizedFileFromAtoms.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/lib/ReaderWriter/MachO/MachONormalizedFileToAtoms.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/lib/ReaderWriter/MachO/MachONormalizedFileYAML.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/lib/ReaderWriter/MachO/ObjCPass.cpp"
|
2017-08-28 07:12:23 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/lib/ReaderWriter/MachO/ShimPass.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/lib/ReaderWriter/MachO/StubsPass.cpp"
|
2018-01-17 22:29:21 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/lib/ReaderWriter/MachO/TLVPass.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/lib/ReaderWriter/MachO/WriterMachO.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/lib/ReaderWriter/YAML/ReaderWriterYAML.cpp"
|
2017-08-28 07:12:23 +00:00
|
|
|
)
|
2019-02-07 22:07:18 +00:00
|
|
|
|
2017-08-28 07:12:23 +00:00
|
|
|
set(EMBEDDED_LLD_ELF_SOURCES
|
2018-01-17 22:29:21 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/ELF/AArch64ErrataFix.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/ELF/Arch/AArch64.cpp"
|
2017-08-28 07:12:23 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/ELF/Arch/AMDGPU.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/ELF/Arch/ARM.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/ELF/Arch/AVR.cpp"
|
2018-08-04 22:09:19 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/ELF/Arch/Hexagon.cpp"
|
2019-02-07 22:07:18 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/ELF/Arch/MSP430.cpp"
|
2017-08-28 07:12:23 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/ELF/Arch/Mips.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/ELF/Arch/MipsArchTree.cpp"
|
2018-01-17 22:29:21 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/ELF/Arch/PPC.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/ELF/Arch/PPC64.cpp"
|
2019-02-07 22:07:18 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/ELF/Arch/RISCV.cpp"
|
2018-01-17 22:29:21 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/ELF/Arch/SPARCV9.cpp"
|
2017-08-28 07:12:23 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/ELF/Arch/X86.cpp"
|
2018-01-17 22:29:21 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/ELF/Arch/X86_64.cpp"
|
2018-08-04 22:09:19 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/ELF/CallGraphSort.cpp"
|
2019-02-07 22:07:18 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/ELF/DWARF.cpp"
|
2017-08-28 07:12:23 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/ELF/Driver.cpp"
|
2018-01-17 22:29:21 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/ELF/DriverUtils.cpp"
|
2017-08-28 07:12:23 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/ELF/EhFrame.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/ELF/ICF.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/ELF/InputFiles.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/ELF/InputSection.cpp"
|
2018-01-17 22:29:21 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/ELF/LTO.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/ELF/LinkerScript.cpp"
|
2017-08-28 07:12:23 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/ELF/MapFile.cpp"
|
2018-01-17 22:29:21 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/ELF/MarkLive.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/ELF/OutputSections.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/ELF/Relocations.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/ELF/ScriptLexer.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/ELF/ScriptParser.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/ELF/SymbolTable.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/ELF/Symbols.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/ELF/SyntheticSections.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/ELF/Target.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/ELF/Thunks.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/ELF/Writer.cpp"
|
2017-08-28 07:12:23 +00:00
|
|
|
)
|
2018-01-17 22:29:21 +00:00
|
|
|
|
2017-08-28 07:12:23 +00:00
|
|
|
set(EMBEDDED_LLD_COFF_SOURCES
|
2018-01-17 22:29:21 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/COFF/Chunks.cpp"
|
2017-08-28 07:12:23 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/COFF/DLL.cpp"
|
2019-08-03 16:43:55 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/COFF/DebugTypes.cpp"
|
2017-08-28 07:12:23 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/COFF/Driver.cpp"
|
2018-01-17 22:29:21 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/COFF/DriverUtils.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/COFF/ICF.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/COFF/InputFiles.cpp"
|
2017-08-28 07:12:23 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/COFF/LTO.cpp"
|
2018-01-17 22:29:21 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/COFF/MapFile.cpp"
|
2017-08-28 07:12:23 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/COFF/MarkLive.cpp"
|
2018-01-17 22:29:21 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/COFF/MinGW.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/COFF/PDB.cpp"
|
2017-08-28 07:12:23 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/COFF/SymbolTable.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/COFF/Symbols.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/COFF/Writer.cpp"
|
2018-01-17 22:29:21 +00:00
|
|
|
)
|
|
|
|
set(EMBEDDED_LLD_MINGW_SOURCES
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/MinGW/Driver.cpp"
|
|
|
|
)
|
|
|
|
set(EMBEDDED_LLD_WASM_SOURCES
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/wasm/Driver.cpp"
|
2018-08-04 22:09:19 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/wasm/InputChunks.cpp"
|
2018-01-17 22:29:21 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/wasm/InputFiles.cpp"
|
2018-08-04 22:09:19 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/wasm/LTO.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/wasm/MarkLive.cpp"
|
2018-01-17 22:29:21 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/wasm/OutputSections.cpp"
|
2019-08-03 16:43:55 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/wasm/Relocations.cpp"
|
2018-01-17 22:29:21 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/wasm/SymbolTable.cpp"
|
2018-08-04 22:09:19 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/wasm/Symbols.cpp"
|
2019-08-03 16:43:55 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/wasm/SyntheticSections.cpp"
|
2018-01-17 22:29:21 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/wasm/Writer.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/wasm/WriterUtils.cpp"
|
2017-08-28 07:12:23 +00:00
|
|
|
)
|
2019-08-15 18:34:52 +00:00
|
|
|
add_library(embedded_lld_lib STATIC ${EMBEDDED_LLD_LIB_SOURCES})
|
|
|
|
add_library(embedded_lld_elf STATIC ${EMBEDDED_LLD_ELF_SOURCES})
|
|
|
|
add_library(embedded_lld_coff STATIC ${EMBEDDED_LLD_COFF_SOURCES})
|
|
|
|
add_library(embedded_lld_mingw STATIC ${EMBEDDED_LLD_MINGW_SOURCES})
|
|
|
|
add_library(embedded_lld_wasm STATIC ${EMBEDDED_LLD_WASM_SOURCES})
|
2017-09-13 04:17:19 +00:00
|
|
|
if(MSVC)
|
2017-10-16 13:10:20 +00:00
|
|
|
set(ZIG_LLD_COMPILE_FLAGS "-std=c++11 -D_CRT_SECURE_NO_WARNINGS /w")
|
2017-09-13 04:17:19 +00:00
|
|
|
else()
|
2019-04-24 14:56:16 +00:00
|
|
|
set(ZIG_LLD_COMPILE_FLAGS "-std=c++11 -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -Wno-comment")
|
2018-09-30 06:34:38 +00:00
|
|
|
if(MINGW)
|
2019-07-26 21:26:01 +00:00
|
|
|
set(ZIG_LLD_COMPILE_FLAGS "${ZIG_LLD_COMPILE_FLAGS} -D__STDC_FORMAT_MACROS -D__USE_MINGW_ANSI_STDIO")
|
2018-09-30 06:34:38 +00:00
|
|
|
endif()
|
2017-09-10 20:05:18 +00:00
|
|
|
endif()
|
2017-08-28 07:12:23 +00:00
|
|
|
set_target_properties(embedded_lld_lib PROPERTIES
|
2017-09-13 04:17:19 +00:00
|
|
|
COMPILE_FLAGS ${ZIG_LLD_COMPILE_FLAGS}
|
2017-08-28 07:12:23 +00:00
|
|
|
LINK_FLAGS " "
|
|
|
|
)
|
|
|
|
set_target_properties(embedded_lld_elf PROPERTIES
|
2017-09-13 04:17:19 +00:00
|
|
|
COMPILE_FLAGS ${ZIG_LLD_COMPILE_FLAGS}
|
2017-08-28 07:12:23 +00:00
|
|
|
LINK_FLAGS " "
|
|
|
|
)
|
|
|
|
set_target_properties(embedded_lld_coff PROPERTIES
|
2017-09-13 04:17:19 +00:00
|
|
|
COMPILE_FLAGS ${ZIG_LLD_COMPILE_FLAGS}
|
2017-08-28 07:12:23 +00:00
|
|
|
LINK_FLAGS " "
|
|
|
|
)
|
2018-01-17 22:29:21 +00:00
|
|
|
set_target_properties(embedded_lld_mingw PROPERTIES
|
|
|
|
COMPILE_FLAGS ${ZIG_LLD_COMPILE_FLAGS}
|
|
|
|
LINK_FLAGS " "
|
|
|
|
)
|
|
|
|
set_target_properties(embedded_lld_wasm PROPERTIES
|
|
|
|
COMPILE_FLAGS ${ZIG_LLD_COMPILE_FLAGS}
|
|
|
|
LINK_FLAGS " "
|
|
|
|
)
|
2018-02-02 14:49:31 +00:00
|
|
|
target_include_directories(embedded_lld_lib PRIVATE
|
2017-08-28 07:12:23 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/include"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld-prebuilt"
|
|
|
|
)
|
2018-02-02 14:49:31 +00:00
|
|
|
target_include_directories(embedded_lld_elf PRIVATE
|
2017-08-28 07:12:23 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/ELF"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/include"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld-prebuilt/ELF"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld-prebuilt"
|
|
|
|
)
|
2018-02-02 14:49:31 +00:00
|
|
|
target_include_directories(embedded_lld_coff PRIVATE
|
2017-08-28 07:12:23 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/COFF"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/include"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld-prebuilt/COFF"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld-prebuilt"
|
|
|
|
)
|
2018-02-07 22:27:30 +00:00
|
|
|
target_include_directories(embedded_lld_mingw PRIVATE
|
2018-01-17 22:29:21 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/MinGW"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/include"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld-prebuilt/MinGW"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld-prebuilt"
|
|
|
|
)
|
2018-02-07 22:27:30 +00:00
|
|
|
target_include_directories(embedded_lld_wasm PRIVATE
|
2018-01-17 22:29:21 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/wasm"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld/include"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld-prebuilt/wasm"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/lld-prebuilt"
|
|
|
|
)
|
2017-08-28 07:12:23 +00:00
|
|
|
set(LLD_INCLUDE_DIRS "")
|
|
|
|
set(LLD_LIBRARIES
|
|
|
|
embedded_lld_elf
|
|
|
|
embedded_lld_coff
|
2018-01-17 22:29:21 +00:00
|
|
|
embedded_lld_mingw
|
|
|
|
embedded_lld_wasm
|
2017-08-28 07:34:50 +00:00
|
|
|
embedded_lld_lib
|
2017-08-28 07:12:23 +00:00
|
|
|
)
|
|
|
|
endif()
|
2017-03-13 15:54:56 +00:00
|
|
|
|
2018-03-09 20:06:06 +00:00
|
|
|
# No patches have been applied to SoftFloat-3e
|
2017-09-14 05:44:22 +00:00
|
|
|
set(EMBEDDED_SOFTFLOAT_SOURCES
|
2018-03-09 20:06:06 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/8086/f128M_isSignalingNaN.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/8086/s_commonNaNToF128M.c"
|
2018-06-27 14:20:04 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/8086/s_commonNaNToF16UI.c"
|
2018-03-09 20:06:06 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/8086/s_commonNaNToF32UI.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/8086/s_commonNaNToF64UI.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/8086/s_f128MToCommonNaN.c"
|
2018-06-27 14:20:04 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/8086/s_f16UIToCommonNaN.c"
|
2018-03-09 20:06:06 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/8086/s_f32UIToCommonNaN.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/8086/s_f64UIToCommonNaN.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/8086/s_propagateNaNF128M.c"
|
2018-06-27 14:20:04 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/8086/s_propagateNaNF16UI.c"
|
2018-03-09 20:06:06 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/8086/softfloat_raiseFlags.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_add.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_div.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_eq.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_eq_signaling.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_le.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_le_quiet.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_lt.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_lt_quiet.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_mul.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_mulAdd.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_rem.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_roundToInt.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_sqrt.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_sub.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_to_f16.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_to_f32.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_to_f64.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_to_i32.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_to_i32_r_minMag.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_to_i64.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_to_i64_r_minMag.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_to_ui32.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_to_ui32_r_minMag.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_to_ui64.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_to_ui64_r_minMag.c"
|
2018-06-27 14:20:04 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f16_add.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f16_div.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f16_eq.c"
|
2019-04-05 02:07:15 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f16_isSignalingNaN.c"
|
2018-06-27 14:20:04 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f16_lt.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f16_mul.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f16_rem.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f16_roundToInt.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f16_sqrt.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f16_sub.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f16_to_f128M.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f16_to_f64.c"
|
2018-03-09 20:06:06 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f32_to_f128M.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f64_to_f128M.c"
|
2018-06-27 14:20:04 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f64_to_f16.c"
|
2019-03-22 18:56:03 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/i32_to_f128M.c"
|
2018-03-09 20:06:06 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_add256M.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_addCarryM.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_addComplCarryM.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_addF128M.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_addM.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_addMagsF16.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_addMagsF32.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_addMagsF64.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_approxRecip32_1.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_approxRecipSqrt32_1.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_approxRecipSqrt_1Ks.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_approxRecip_1Ks.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_compare128M.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_compare96M.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_countLeadingZeros16.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_countLeadingZeros32.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_countLeadingZeros64.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_countLeadingZeros8.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_eq128.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_invalidF128M.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_isNaNF128M.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_le128.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_lt128.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_mul128MTo256M.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_mul64To128M.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_mulAddF128M.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_mulAddF16.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_mulAddF32.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_mulAddF64.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_negXM.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_normRoundPackMToF128M.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_normRoundPackToF16.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_normRoundPackToF32.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_normRoundPackToF64.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_normSubnormalF128SigM.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_normSubnormalF16Sig.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_normSubnormalF32Sig.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_normSubnormalF64Sig.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_remStepMBy32.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_roundMToI64.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_roundMToUI64.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_roundPackMToF128M.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_roundPackToF16.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_roundPackToF32.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_roundPackToF64.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_roundToI32.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_roundToI64.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_roundToUI32.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_roundToUI64.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_shiftLeftM.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_shiftNormSigF128M.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_shiftRightJam256M.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_shiftRightJam32.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_shiftRightJam64.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_shiftRightJamM.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_shiftRightM.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_shortShiftLeft64To96M.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_shortShiftLeftM.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_shortShiftRightExtendM.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_shortShiftRightJam64.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_shortShiftRightJamM.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_shortShiftRightM.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_sub1XM.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_sub256M.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_subM.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_subMagsF16.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_subMagsF32.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_subMagsF64.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_tryPropagateNaNF128M.c"
|
2019-06-18 22:28:49 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f16_mulAdd.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_mulAdd.c"
|
2018-03-09 20:06:06 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/softfloat_state.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/ui32_to_f128M.c"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/ui64_to_f128M.c"
|
2017-09-14 05:44:22 +00:00
|
|
|
)
|
2019-08-15 18:34:52 +00:00
|
|
|
add_library(embedded_softfloat STATIC ${EMBEDDED_SOFTFLOAT_SOURCES})
|
2017-09-14 05:44:22 +00:00
|
|
|
if(MSVC)
|
|
|
|
set_target_properties(embedded_softfloat PROPERTIES
|
2017-10-16 13:10:20 +00:00
|
|
|
COMPILE_FLAGS "-std=c99 /w"
|
2017-09-14 05:44:22 +00:00
|
|
|
)
|
|
|
|
else()
|
|
|
|
set_target_properties(embedded_softfloat PROPERTIES
|
2018-09-10 13:46:15 +00:00
|
|
|
COMPILE_FLAGS "-std=c99 -O3"
|
2017-09-14 05:44:22 +00:00
|
|
|
)
|
|
|
|
endif()
|
|
|
|
target_include_directories(embedded_softfloat PUBLIC
|
2018-03-09 20:06:06 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e-prebuilt"
|
|
|
|
"${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/8086"
|
2015-08-05 22:46:40 +00:00
|
|
|
)
|
2018-03-09 20:06:06 +00:00
|
|
|
include_directories("${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/include")
|
2017-09-14 05:44:22 +00:00
|
|
|
set(SOFTFLOAT_LIBRARIES embedded_softfloat)
|
|
|
|
|
|
|
|
find_package(Threads)
|
2015-08-05 22:46:40 +00:00
|
|
|
|
stage1 is now a hybrid of C++ and Zig
This modifies the build process of Zig to put all of the source files
into libcompiler.a, except main.cpp and userland.cpp.
Next, the build process links main.cpp, userland.cpp, and libcompiler.a
into zig1. userland.cpp is a shim for functions that will later be
replaced with self-hosted implementations.
Next, the build process uses zig1 to build src-self-hosted/stage1.zig
into libuserland.a, which does not depend on any of the things that
are shimmed in userland.cpp, such as translate-c.
Finally, the build process re-links main.cpp and libcompiler.a, except
with libuserland.a instead of userland.cpp. Now the shims are replaced
with .zig code. This provides all of the Zig standard library to the
stage1 C++ compiler, and enables us to move certain things to userland,
such as translate-c.
As a proof of concept I have made the `zig zen` command use text defined
in userland. I added `zig translate-c-2` which is a work-in-progress
reimplementation of translate-c in userland, which currently calls
`std.debug.panic("unimplemented")` and you can see the stack trace makes
it all the way back into the C++ main() function (Thanks LemonBoy for
improving that!).
This could potentially let us move other things into userland, such as
hashing algorithms, the entire cache system, .d file parsing, pretty
much anything that libuserland.a itself doesn't need to depend on.
This can also let us have `zig fmt` in stage1 without the overhead
of child process execution, and without the initial compilation delay
before it gets cached.
See #1964
2019-04-16 20:47:47 +00:00
|
|
|
# CMake doesn't let us create an empty executable, so we hang on to this one separately.
|
|
|
|
set(ZIG_MAIN_SRC "${CMAKE_SOURCE_DIR}/src/main.cpp")
|
|
|
|
|
|
|
|
# This is our shim which will be replaced by libuserland written in Zig.
|
2019-04-17 18:09:18 +00:00
|
|
|
set(ZIG0_SHIM_SRC "${CMAKE_SOURCE_DIR}/src/userland.cpp")
|
stage1 is now a hybrid of C++ and Zig
This modifies the build process of Zig to put all of the source files
into libcompiler.a, except main.cpp and userland.cpp.
Next, the build process links main.cpp, userland.cpp, and libcompiler.a
into zig1. userland.cpp is a shim for functions that will later be
replaced with self-hosted implementations.
Next, the build process uses zig1 to build src-self-hosted/stage1.zig
into libuserland.a, which does not depend on any of the things that
are shimmed in userland.cpp, such as translate-c.
Finally, the build process re-links main.cpp and libcompiler.a, except
with libuserland.a instead of userland.cpp. Now the shims are replaced
with .zig code. This provides all of the Zig standard library to the
stage1 C++ compiler, and enables us to move certain things to userland,
such as translate-c.
As a proof of concept I have made the `zig zen` command use text defined
in userland. I added `zig translate-c-2` which is a work-in-progress
reimplementation of translate-c in userland, which currently calls
`std.debug.panic("unimplemented")` and you can see the stack trace makes
it all the way back into the C++ main() function (Thanks LemonBoy for
improving that!).
This could potentially let us move other things into userland, such as
hashing algorithms, the entire cache system, .d file parsing, pretty
much anything that libuserland.a itself doesn't need to depend on.
This can also let us have `zig fmt` in stage1 without the overhead
of child process execution, and without the initial compilation delay
before it gets cached.
See #1964
2019-04-16 20:47:47 +00:00
|
|
|
|
2015-08-05 22:23:15 +00:00
|
|
|
set(ZIG_SOURCES
|
2016-09-30 06:21:21 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/src/analyze.cpp"
|
2016-01-28 04:10:38 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/src/ast_render.cpp"
|
2017-06-26 18:41:47 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/src/bigfloat.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/src/bigint.cpp"
|
2016-09-30 06:21:21 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/src/buffer.cpp"
|
2016-04-21 22:48:13 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/src/c_tokenizer.cpp"
|
2018-09-10 13:46:15 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/src/cache_hash.cpp"
|
2015-12-01 02:58:53 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/src/codegen.cpp"
|
2018-09-10 21:30:45 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/src/compiler.cpp"
|
2016-09-30 06:21:21 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/src/errmsg.cpp"
|
2015-11-05 07:05:25 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/src/error.cpp"
|
2019-07-21 20:21:16 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/src/glibc.cpp"
|
2016-12-18 21:56:50 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/src/ir.cpp"
|
2016-10-01 00:12:00 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/src/ir_print.cpp"
|
2019-02-23 14:35:56 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/src/libc_installation.cpp"
|
2016-09-30 06:21:21 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/src/link.cpp"
|
2015-12-01 02:58:53 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/src/os.cpp"
|
2016-09-30 06:21:21 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/src/parser.cpp"
|
2017-05-07 16:07:35 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/src/range_set.cpp"
|
2019-09-10 04:25:37 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/src/stack_report.cpp"
|
2016-09-30 06:21:21 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/src/target.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/src/tokenizer.cpp"
|
2017-11-24 19:56:05 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/src/translate_c.cpp"
|
2019-03-22 18:56:03 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/src/util.cpp"
|
2017-12-27 00:44:08 +00:00
|
|
|
)
|
2019-03-22 18:56:03 +00:00
|
|
|
set(OPTIMIZED_C_SOURCES
|
2018-09-11 21:29:18 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/src/blake2b.c"
|
2019-03-22 18:56:03 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/src/parse_f128.c"
|
2018-09-10 13:46:15 +00:00
|
|
|
)
|
2017-12-27 00:44:08 +00:00
|
|
|
set(ZIG_CPP_SOURCES
|
2015-11-24 20:00:38 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/src/zig_llvm.cpp"
|
2019-02-16 20:14:51 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/src/zig_clang.cpp"
|
2019-02-24 17:53:28 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/src/zig_clang_driver.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/src/zig_clang_cc1_main.cpp"
|
|
|
|
"${CMAKE_SOURCE_DIR}/src/zig_clang_cc1as_main.cpp"
|
2018-07-21 03:37:37 +00:00
|
|
|
"${CMAKE_SOURCE_DIR}/src/windows_sdk.cpp"
|
2015-08-05 22:23:15 +00:00
|
|
|
)
|
|
|
|
|
2018-01-05 03:46:26 +00:00
|
|
|
if(MSVC)
|
|
|
|
set(MSVC_DIA_SDK_DIR "$ENV{VSINSTALLDIR}DIA SDK")
|
2019-06-23 01:21:48 +00:00
|
|
|
if(IS_DIRECTORY ${MSVC_DIA_SDK_DIR})
|
2018-01-05 03:46:26 +00:00
|
|
|
set(ZIG_DIA_GUIDS_LIB "${MSVC_DIA_SDK_DIR}/lib/amd64/diaguids.lib")
|
|
|
|
string(REGEX REPLACE "\\\\" "\\\\\\\\" ZIG_DIA_GUIDS_LIB_ESCAPED "${ZIG_DIA_GUIDS_LIB}")
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
|
2017-10-01 22:29:50 +00:00
|
|
|
set(ZIG_LIB_DIR "lib/zig")
|
|
|
|
set(C_HEADERS_DEST "${ZIG_LIB_DIR}/include")
|
2019-03-05 03:15:53 +00:00
|
|
|
set(LIBC_FILES_DEST "${ZIG_LIB_DIR}/libc")
|
2019-03-06 03:45:41 +00:00
|
|
|
set(LIBUNWIND_FILES_DEST "${ZIG_LIB_DIR}/libunwind")
|
|
|
|
set(LIBCXX_FILES_DEST "${ZIG_LIB_DIR}/libcxx")
|
2017-10-01 22:29:50 +00:00
|
|
|
set(ZIG_STD_DEST "${ZIG_LIB_DIR}/std")
|
2015-08-05 22:23:15 +00:00
|
|
|
configure_file (
|
|
|
|
"${CMAKE_SOURCE_DIR}/src/config.h.in"
|
2019-03-12 21:32:32 +00:00
|
|
|
"${CMAKE_BINARY_DIR}/config.h"
|
2015-08-05 22:23:15 +00:00
|
|
|
)
|
|
|
|
|
2015-11-26 08:29:52 +00:00
|
|
|
include_directories(
|
|
|
|
${CMAKE_SOURCE_DIR}
|
|
|
|
${CMAKE_BINARY_DIR}
|
|
|
|
"${CMAKE_SOURCE_DIR}/src"
|
|
|
|
)
|
|
|
|
|
2018-09-05 16:10:53 +00:00
|
|
|
# These have to go before the -Wno- flags
|
|
|
|
set(EXE_CFLAGS "-std=c++11")
|
2018-09-05 14:18:12 +00:00
|
|
|
if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
|
|
|
|
if(MSVC)
|
|
|
|
set(EXE_CFLAGS "${EXE_CFLAGS} /w")
|
|
|
|
else()
|
|
|
|
set(EXE_CFLAGS "${EXE_CFLAGS} -Werror -Wall")
|
|
|
|
endif()
|
2016-02-17 03:34:45 +00:00
|
|
|
endif()
|
|
|
|
|
2017-09-13 04:17:19 +00:00
|
|
|
if(MSVC)
|
2019-06-23 01:21:48 +00:00
|
|
|
set(EXE_CFLAGS "${EXE_CFLAGS}")
|
2017-09-13 04:17:19 +00:00
|
|
|
else()
|
2019-09-06 21:03:34 +00:00
|
|
|
set(EXE_CFLAGS "${EXE_CFLAGS} -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -D_GNU_SOURCE -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -Werror=type-limits -Wno-missing-braces")
|
2019-06-23 01:21:48 +00:00
|
|
|
if(MINGW)
|
|
|
|
set(EXE_CFLAGS "${EXE_CFLAGS} -Wno-format")
|
|
|
|
endif()
|
2017-09-10 20:05:18 +00:00
|
|
|
endif()
|
2017-09-13 04:17:19 +00:00
|
|
|
|
2019-03-22 18:56:03 +00:00
|
|
|
set(OPTIMIZED_C_FLAGS "-std=c99 -O3")
|
2018-09-05 14:18:12 +00:00
|
|
|
|
2016-04-23 16:57:38 +00:00
|
|
|
set(EXE_LDFLAGS " ")
|
2019-03-27 05:54:46 +00:00
|
|
|
if(MSVC)
|
2019-07-26 21:26:01 +00:00
|
|
|
set(EXE_LDFLAGS "${EXE_LDFLAGS} /STACK:16777216")
|
2019-09-08 10:07:23 +00:00
|
|
|
if(NOT "${CMAKE_BUILD_TYPE}" STREQUAL "Release" AND NOT "${CMAKE_BUILD_TYPE}" STREQUAL "MinSizeRel")
|
|
|
|
set(EXE_LDFLAGS "${EXE_LDFLAGS} /debug:fastlink")
|
|
|
|
endif()
|
2019-06-23 06:15:04 +00:00
|
|
|
elseif(MINGW)
|
|
|
|
set(EXE_LDFLAGS "${EXE_LDFLAGS} -Wl,--stack,16777216")
|
|
|
|
endif()
|
|
|
|
|
|
|
|
if(ZIG_STATIC)
|
2018-09-27 19:07:51 +00:00
|
|
|
if(APPLE)
|
2019-07-26 21:26:01 +00:00
|
|
|
set(EXE_LDFLAGS "${EXE_LDFLAGS} -static-libgcc -static-libstdc++")
|
2019-07-13 22:44:05 +00:00
|
|
|
elseif(MINGW)
|
2019-07-26 21:26:01 +00:00
|
|
|
set(EXE_LDFLAGS "${EXE_LDFLAGS} -static-libgcc -static-libstdc++ -Wl,-Bstatic, -lwinpthread -lz3 -lz -lgomp")
|
2019-07-27 22:54:20 +00:00
|
|
|
elseif(NOT MSVC)
|
2019-07-26 21:26:01 +00:00
|
|
|
set(EXE_LDFLAGS "${EXE_LDFLAGS} -static")
|
2018-09-27 19:07:51 +00:00
|
|
|
endif()
|
2019-07-26 21:26:01 +00:00
|
|
|
else()
|
|
|
|
if(MINGW)
|
|
|
|
set(EXE_LDFLAGS "${EXE_LDFLAGS} -lz3")
|
|
|
|
endif()
|
2017-09-23 22:46:03 +00:00
|
|
|
endif()
|
2019-06-23 06:15:04 +00:00
|
|
|
|
2016-04-23 16:57:38 +00:00
|
|
|
if(ZIG_TEST_COVERAGE)
|
|
|
|
set(EXE_CFLAGS "${EXE_CFLAGS} -fprofile-arcs -ftest-coverage")
|
2017-09-23 22:46:03 +00:00
|
|
|
set(EXE_LDFLAGS "${EXE_LDFLAGS} -fprofile-arcs -ftest-coverage")
|
2016-04-23 16:57:38 +00:00
|
|
|
endif()
|
2015-08-05 22:23:15 +00:00
|
|
|
|
2017-12-27 00:44:08 +00:00
|
|
|
add_library(zig_cpp STATIC ${ZIG_CPP_SOURCES})
|
2017-12-27 01:04:09 +00:00
|
|
|
set_target_properties(zig_cpp PROPERTIES
|
|
|
|
COMPILE_FLAGS ${EXE_CFLAGS}
|
|
|
|
)
|
2017-12-27 00:44:08 +00:00
|
|
|
|
2019-03-22 18:56:03 +00:00
|
|
|
add_library(opt_c_util STATIC ${OPTIMIZED_C_SOURCES})
|
|
|
|
set_target_properties(opt_c_util PROPERTIES
|
|
|
|
COMPILE_FLAGS "${OPTIMIZED_C_FLAGS}"
|
2018-09-10 13:46:15 +00:00
|
|
|
)
|
|
|
|
|
stage1 is now a hybrid of C++ and Zig
This modifies the build process of Zig to put all of the source files
into libcompiler.a, except main.cpp and userland.cpp.
Next, the build process links main.cpp, userland.cpp, and libcompiler.a
into zig1. userland.cpp is a shim for functions that will later be
replaced with self-hosted implementations.
Next, the build process uses zig1 to build src-self-hosted/stage1.zig
into libuserland.a, which does not depend on any of the things that
are shimmed in userland.cpp, such as translate-c.
Finally, the build process re-links main.cpp and libcompiler.a, except
with libuserland.a instead of userland.cpp. Now the shims are replaced
with .zig code. This provides all of the Zig standard library to the
stage1 C++ compiler, and enables us to move certain things to userland,
such as translate-c.
As a proof of concept I have made the `zig zen` command use text defined
in userland. I added `zig translate-c-2` which is a work-in-progress
reimplementation of translate-c in userland, which currently calls
`std.debug.panic("unimplemented")` and you can see the stack trace makes
it all the way back into the C++ main() function (Thanks LemonBoy for
improving that!).
This could potentially let us move other things into userland, such as
hashing algorithms, the entire cache system, .d file parsing, pretty
much anything that libuserland.a itself doesn't need to depend on.
This can also let us have `zig fmt` in stage1 without the overhead
of child process execution, and without the initial compilation delay
before it gets cached.
See #1964
2019-04-16 20:47:47 +00:00
|
|
|
add_library(compiler STATIC ${ZIG_SOURCES})
|
|
|
|
set_target_properties(compiler PROPERTIES
|
2016-04-23 16:57:38 +00:00
|
|
|
COMPILE_FLAGS ${EXE_CFLAGS}
|
|
|
|
LINK_FLAGS ${EXE_LDFLAGS}
|
|
|
|
)
|
stage1 is now a hybrid of C++ and Zig
This modifies the build process of Zig to put all of the source files
into libcompiler.a, except main.cpp and userland.cpp.
Next, the build process links main.cpp, userland.cpp, and libcompiler.a
into zig1. userland.cpp is a shim for functions that will later be
replaced with self-hosted implementations.
Next, the build process uses zig1 to build src-self-hosted/stage1.zig
into libuserland.a, which does not depend on any of the things that
are shimmed in userland.cpp, such as translate-c.
Finally, the build process re-links main.cpp and libcompiler.a, except
with libuserland.a instead of userland.cpp. Now the shims are replaced
with .zig code. This provides all of the Zig standard library to the
stage1 C++ compiler, and enables us to move certain things to userland,
such as translate-c.
As a proof of concept I have made the `zig zen` command use text defined
in userland. I added `zig translate-c-2` which is a work-in-progress
reimplementation of translate-c in userland, which currently calls
`std.debug.panic("unimplemented")` and you can see the stack trace makes
it all the way back into the C++ main() function (Thanks LemonBoy for
improving that!).
This could potentially let us move other things into userland, such as
hashing algorithms, the entire cache system, .d file parsing, pretty
much anything that libuserland.a itself doesn't need to depend on.
This can also let us have `zig fmt` in stage1 without the overhead
of child process execution, and without the initial compilation delay
before it gets cached.
See #1964
2019-04-16 20:47:47 +00:00
|
|
|
target_link_libraries(compiler LINK_PUBLIC
|
2017-12-27 00:44:08 +00:00
|
|
|
zig_cpp
|
2019-03-22 18:56:03 +00:00
|
|
|
opt_c_util
|
2017-09-14 05:44:22 +00:00
|
|
|
${SOFTFLOAT_LIBRARIES}
|
2016-01-27 07:01:49 +00:00
|
|
|
${CLANG_LIBRARIES}
|
2017-03-13 15:54:56 +00:00
|
|
|
${LLD_LIBRARIES}
|
2016-02-02 05:38:55 +00:00
|
|
|
${LLVM_LIBRARIES}
|
2017-03-30 05:18:12 +00:00
|
|
|
${CMAKE_THREAD_LIBS_INIT}
|
2015-08-05 22:23:15 +00:00
|
|
|
)
|
2018-03-10 23:23:08 +00:00
|
|
|
if(NOT MSVC)
|
stage1 is now a hybrid of C++ and Zig
This modifies the build process of Zig to put all of the source files
into libcompiler.a, except main.cpp and userland.cpp.
Next, the build process links main.cpp, userland.cpp, and libcompiler.a
into zig1. userland.cpp is a shim for functions that will later be
replaced with self-hosted implementations.
Next, the build process uses zig1 to build src-self-hosted/stage1.zig
into libuserland.a, which does not depend on any of the things that
are shimmed in userland.cpp, such as translate-c.
Finally, the build process re-links main.cpp and libcompiler.a, except
with libuserland.a instead of userland.cpp. Now the shims are replaced
with .zig code. This provides all of the Zig standard library to the
stage1 C++ compiler, and enables us to move certain things to userland,
such as translate-c.
As a proof of concept I have made the `zig zen` command use text defined
in userland. I added `zig translate-c-2` which is a work-in-progress
reimplementation of translate-c in userland, which currently calls
`std.debug.panic("unimplemented")` and you can see the stack trace makes
it all the way back into the C++ main() function (Thanks LemonBoy for
improving that!).
This could potentially let us move other things into userland, such as
hashing algorithms, the entire cache system, .d file parsing, pretty
much anything that libuserland.a itself doesn't need to depend on.
This can also let us have `zig fmt` in stage1 without the overhead
of child process execution, and without the initial compilation delay
before it gets cached.
See #1964
2019-04-16 20:47:47 +00:00
|
|
|
target_link_libraries(compiler LINK_PUBLIC ${LIBXML2})
|
2018-03-10 19:48:41 +00:00
|
|
|
endif()
|
2019-03-09 23:54:34 +00:00
|
|
|
|
2018-01-05 03:46:26 +00:00
|
|
|
if(ZIG_DIA_GUIDS_LIB)
|
stage1 is now a hybrid of C++ and Zig
This modifies the build process of Zig to put all of the source files
into libcompiler.a, except main.cpp and userland.cpp.
Next, the build process links main.cpp, userland.cpp, and libcompiler.a
into zig1. userland.cpp is a shim for functions that will later be
replaced with self-hosted implementations.
Next, the build process uses zig1 to build src-self-hosted/stage1.zig
into libuserland.a, which does not depend on any of the things that
are shimmed in userland.cpp, such as translate-c.
Finally, the build process re-links main.cpp and libcompiler.a, except
with libuserland.a instead of userland.cpp. Now the shims are replaced
with .zig code. This provides all of the Zig standard library to the
stage1 C++ compiler, and enables us to move certain things to userland,
such as translate-c.
As a proof of concept I have made the `zig zen` command use text defined
in userland. I added `zig translate-c-2` which is a work-in-progress
reimplementation of translate-c in userland, which currently calls
`std.debug.panic("unimplemented")` and you can see the stack trace makes
it all the way back into the C++ main() function (Thanks LemonBoy for
improving that!).
This could potentially let us move other things into userland, such as
hashing algorithms, the entire cache system, .d file parsing, pretty
much anything that libuserland.a itself doesn't need to depend on.
This can also let us have `zig fmt` in stage1 without the overhead
of child process execution, and without the initial compilation delay
before it gets cached.
See #1964
2019-04-16 20:47:47 +00:00
|
|
|
target_link_libraries(compiler LINK_PUBLIC ${ZIG_DIA_GUIDS_LIB})
|
2018-01-05 03:46:26 +00:00
|
|
|
endif()
|
|
|
|
|
2017-09-14 05:44:22 +00:00
|
|
|
if(MSVC OR MINGW)
|
stage1 is now a hybrid of C++ and Zig
This modifies the build process of Zig to put all of the source files
into libcompiler.a, except main.cpp and userland.cpp.
Next, the build process links main.cpp, userland.cpp, and libcompiler.a
into zig1. userland.cpp is a shim for functions that will later be
replaced with self-hosted implementations.
Next, the build process uses zig1 to build src-self-hosted/stage1.zig
into libuserland.a, which does not depend on any of the things that
are shimmed in userland.cpp, such as translate-c.
Finally, the build process re-links main.cpp and libcompiler.a, except
with libuserland.a instead of userland.cpp. Now the shims are replaced
with .zig code. This provides all of the Zig standard library to the
stage1 C++ compiler, and enables us to move certain things to userland,
such as translate-c.
As a proof of concept I have made the `zig zen` command use text defined
in userland. I added `zig translate-c-2` which is a work-in-progress
reimplementation of translate-c in userland, which currently calls
`std.debug.panic("unimplemented")` and you can see the stack trace makes
it all the way back into the C++ main() function (Thanks LemonBoy for
improving that!).
This could potentially let us move other things into userland, such as
hashing algorithms, the entire cache system, .d file parsing, pretty
much anything that libuserland.a itself doesn't need to depend on.
This can also let us have `zig fmt` in stage1 without the overhead
of child process execution, and without the initial compilation delay
before it gets cached.
See #1964
2019-04-16 20:47:47 +00:00
|
|
|
target_link_libraries(compiler LINK_PUBLIC version)
|
|
|
|
endif()
|
|
|
|
|
2019-04-17 18:09:18 +00:00
|
|
|
add_executable(zig0 "${ZIG_MAIN_SRC}" "${ZIG0_SHIM_SRC}")
|
|
|
|
set_target_properties(zig0 PROPERTIES
|
stage1 is now a hybrid of C++ and Zig
This modifies the build process of Zig to put all of the source files
into libcompiler.a, except main.cpp and userland.cpp.
Next, the build process links main.cpp, userland.cpp, and libcompiler.a
into zig1. userland.cpp is a shim for functions that will later be
replaced with self-hosted implementations.
Next, the build process uses zig1 to build src-self-hosted/stage1.zig
into libuserland.a, which does not depend on any of the things that
are shimmed in userland.cpp, such as translate-c.
Finally, the build process re-links main.cpp and libcompiler.a, except
with libuserland.a instead of userland.cpp. Now the shims are replaced
with .zig code. This provides all of the Zig standard library to the
stage1 C++ compiler, and enables us to move certain things to userland,
such as translate-c.
As a proof of concept I have made the `zig zen` command use text defined
in userland. I added `zig translate-c-2` which is a work-in-progress
reimplementation of translate-c in userland, which currently calls
`std.debug.panic("unimplemented")` and you can see the stack trace makes
it all the way back into the C++ main() function (Thanks LemonBoy for
improving that!).
This could potentially let us move other things into userland, such as
hashing algorithms, the entire cache system, .d file parsing, pretty
much anything that libuserland.a itself doesn't need to depend on.
This can also let us have `zig fmt` in stage1 without the overhead
of child process execution, and without the initial compilation delay
before it gets cached.
See #1964
2019-04-16 20:47:47 +00:00
|
|
|
COMPILE_FLAGS ${EXE_CFLAGS}
|
|
|
|
LINK_FLAGS ${EXE_LDFLAGS}
|
|
|
|
)
|
2019-04-17 18:09:18 +00:00
|
|
|
target_link_libraries(zig0 compiler)
|
stage1 is now a hybrid of C++ and Zig
This modifies the build process of Zig to put all of the source files
into libcompiler.a, except main.cpp and userland.cpp.
Next, the build process links main.cpp, userland.cpp, and libcompiler.a
into zig1. userland.cpp is a shim for functions that will later be
replaced with self-hosted implementations.
Next, the build process uses zig1 to build src-self-hosted/stage1.zig
into libuserland.a, which does not depend on any of the things that
are shimmed in userland.cpp, such as translate-c.
Finally, the build process re-links main.cpp and libcompiler.a, except
with libuserland.a instead of userland.cpp. Now the shims are replaced
with .zig code. This provides all of the Zig standard library to the
stage1 C++ compiler, and enables us to move certain things to userland,
such as translate-c.
As a proof of concept I have made the `zig zen` command use text defined
in userland. I added `zig translate-c-2` which is a work-in-progress
reimplementation of translate-c in userland, which currently calls
`std.debug.panic("unimplemented")` and you can see the stack trace makes
it all the way back into the C++ main() function (Thanks LemonBoy for
improving that!).
This could potentially let us move other things into userland, such as
hashing algorithms, the entire cache system, .d file parsing, pretty
much anything that libuserland.a itself doesn't need to depend on.
This can also let us have `zig fmt` in stage1 without the overhead
of child process execution, and without the initial compilation delay
before it gets cached.
See #1964
2019-04-16 20:47:47 +00:00
|
|
|
|
2019-07-12 23:28:28 +00:00
|
|
|
if(MSVC)
|
stage1 is now a hybrid of C++ and Zig
This modifies the build process of Zig to put all of the source files
into libcompiler.a, except main.cpp and userland.cpp.
Next, the build process links main.cpp, userland.cpp, and libcompiler.a
into zig1. userland.cpp is a shim for functions that will later be
replaced with self-hosted implementations.
Next, the build process uses zig1 to build src-self-hosted/stage1.zig
into libuserland.a, which does not depend on any of the things that
are shimmed in userland.cpp, such as translate-c.
Finally, the build process re-links main.cpp and libcompiler.a, except
with libuserland.a instead of userland.cpp. Now the shims are replaced
with .zig code. This provides all of the Zig standard library to the
stage1 C++ compiler, and enables us to move certain things to userland,
such as translate-c.
As a proof of concept I have made the `zig zen` command use text defined
in userland. I added `zig translate-c-2` which is a work-in-progress
reimplementation of translate-c in userland, which currently calls
`std.debug.panic("unimplemented")` and you can see the stack trace makes
it all the way back into the C++ main() function (Thanks LemonBoy for
improving that!).
This could potentially let us move other things into userland, such as
hashing algorithms, the entire cache system, .d file parsing, pretty
much anything that libuserland.a itself doesn't need to depend on.
This can also let us have `zig fmt` in stage1 without the overhead
of child process execution, and without the initial compilation delay
before it gets cached.
See #1964
2019-04-16 20:47:47 +00:00
|
|
|
set(LIBUSERLAND "${CMAKE_BINARY_DIR}/userland.lib")
|
|
|
|
else()
|
|
|
|
set(LIBUSERLAND "${CMAKE_BINARY_DIR}/libuserland.a")
|
2017-09-10 20:05:18 +00:00
|
|
|
endif()
|
2019-09-09 13:33:33 +00:00
|
|
|
if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
|
|
|
|
set(LIBUSERLAND_RELEASE_MODE "false")
|
|
|
|
else()
|
|
|
|
set(LIBUSERLAND_RELEASE_MODE "true")
|
|
|
|
endif()
|
2019-07-14 07:06:20 +00:00
|
|
|
add_custom_target(zig_build_libuserland ALL
|
|
|
|
COMMAND zig0 build
|
2019-09-26 03:57:47 +00:00
|
|
|
--override-lib-dir "${CMAKE_SOURCE_DIR}/lib"
|
2019-07-14 07:06:20 +00:00
|
|
|
libuserland install
|
stage1 is now a hybrid of C++ and Zig
This modifies the build process of Zig to put all of the source files
into libcompiler.a, except main.cpp and userland.cpp.
Next, the build process links main.cpp, userland.cpp, and libcompiler.a
into zig1. userland.cpp is a shim for functions that will later be
replaced with self-hosted implementations.
Next, the build process uses zig1 to build src-self-hosted/stage1.zig
into libuserland.a, which does not depend on any of the things that
are shimmed in userland.cpp, such as translate-c.
Finally, the build process re-links main.cpp and libcompiler.a, except
with libuserland.a instead of userland.cpp. Now the shims are replaced
with .zig code. This provides all of the Zig standard library to the
stage1 C++ compiler, and enables us to move certain things to userland,
such as translate-c.
As a proof of concept I have made the `zig zen` command use text defined
in userland. I added `zig translate-c-2` which is a work-in-progress
reimplementation of translate-c in userland, which currently calls
`std.debug.panic("unimplemented")` and you can see the stack trace makes
it all the way back into the C++ main() function (Thanks LemonBoy for
improving that!).
This could potentially let us move other things into userland, such as
hashing algorithms, the entire cache system, .d file parsing, pretty
much anything that libuserland.a itself doesn't need to depend on.
This can also let us have `zig fmt` in stage1 without the overhead
of child process execution, and without the initial compilation delay
before it gets cached.
See #1964
2019-04-16 20:47:47 +00:00
|
|
|
"-Doutput-dir=${CMAKE_BINARY_DIR}"
|
2019-09-09 13:33:33 +00:00
|
|
|
"-Drelease=${LIBUSERLAND_RELEASE_MODE}"
|
2019-07-14 07:06:20 +00:00
|
|
|
"-Dlib-files-only"
|
|
|
|
--prefix "${CMAKE_INSTALL_PREFIX}"
|
|
|
|
DEPENDS zig0
|
|
|
|
BYPRODUCTS "${LIBUSERLAND}"
|
stage1 is now a hybrid of C++ and Zig
This modifies the build process of Zig to put all of the source files
into libcompiler.a, except main.cpp and userland.cpp.
Next, the build process links main.cpp, userland.cpp, and libcompiler.a
into zig1. userland.cpp is a shim for functions that will later be
replaced with self-hosted implementations.
Next, the build process uses zig1 to build src-self-hosted/stage1.zig
into libuserland.a, which does not depend on any of the things that
are shimmed in userland.cpp, such as translate-c.
Finally, the build process re-links main.cpp and libcompiler.a, except
with libuserland.a instead of userland.cpp. Now the shims are replaced
with .zig code. This provides all of the Zig standard library to the
stage1 C++ compiler, and enables us to move certain things to userland,
such as translate-c.
As a proof of concept I have made the `zig zen` command use text defined
in userland. I added `zig translate-c-2` which is a work-in-progress
reimplementation of translate-c in userland, which currently calls
`std.debug.panic("unimplemented")` and you can see the stack trace makes
it all the way back into the C++ main() function (Thanks LemonBoy for
improving that!).
This could potentially let us move other things into userland, such as
hashing algorithms, the entire cache system, .d file parsing, pretty
much anything that libuserland.a itself doesn't need to depend on.
This can also let us have `zig fmt` in stage1 without the overhead
of child process execution, and without the initial compilation delay
before it gets cached.
See #1964
2019-04-16 20:47:47 +00:00
|
|
|
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
|
|
|
|
)
|
|
|
|
add_executable(zig "${ZIG_MAIN_SRC}")
|
2019-07-12 23:28:28 +00:00
|
|
|
|
stage1 is now a hybrid of C++ and Zig
This modifies the build process of Zig to put all of the source files
into libcompiler.a, except main.cpp and userland.cpp.
Next, the build process links main.cpp, userland.cpp, and libcompiler.a
into zig1. userland.cpp is a shim for functions that will later be
replaced with self-hosted implementations.
Next, the build process uses zig1 to build src-self-hosted/stage1.zig
into libuserland.a, which does not depend on any of the things that
are shimmed in userland.cpp, such as translate-c.
Finally, the build process re-links main.cpp and libcompiler.a, except
with libuserland.a instead of userland.cpp. Now the shims are replaced
with .zig code. This provides all of the Zig standard library to the
stage1 C++ compiler, and enables us to move certain things to userland,
such as translate-c.
As a proof of concept I have made the `zig zen` command use text defined
in userland. I added `zig translate-c-2` which is a work-in-progress
reimplementation of translate-c in userland, which currently calls
`std.debug.panic("unimplemented")` and you can see the stack trace makes
it all the way back into the C++ main() function (Thanks LemonBoy for
improving that!).
This could potentially let us move other things into userland, such as
hashing algorithms, the entire cache system, .d file parsing, pretty
much anything that libuserland.a itself doesn't need to depend on.
This can also let us have `zig fmt` in stage1 without the overhead
of child process execution, and without the initial compilation delay
before it gets cached.
See #1964
2019-04-16 20:47:47 +00:00
|
|
|
set_target_properties(zig PROPERTIES
|
|
|
|
COMPILE_FLAGS ${EXE_CFLAGS}
|
|
|
|
LINK_FLAGS ${EXE_LDFLAGS}
|
|
|
|
)
|
|
|
|
target_link_libraries(zig compiler "${LIBUSERLAND}")
|
2019-07-15 02:29:31 +00:00
|
|
|
add_dependencies(zig zig_build_libuserland)
|
2015-08-05 22:23:15 +00:00
|
|
|
install(TARGETS zig DESTINATION bin)
|