8a859afd58
remove "unnecessary if statement" error this "depends on compile variable" code is too hard to validate, and has false negatives. not worth it right now. std.str removed, instead use std.mem. std.mem.eql and std.mem.sliceEql merged and do not require explicit type argument.
251 lines
11 KiB
CMake
251 lines
11 KiB
CMake
cmake_minimum_required(VERSION 2.8.5)
|
|
|
|
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()
|
|
|
|
project(zig CXX)
|
|
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH})
|
|
|
|
set(ZIG_VERSION_MAJOR 0)
|
|
set(ZIG_VERSION_MINOR 0)
|
|
set(ZIG_VERSION_PATCH 0)
|
|
set(ZIG_VERSION "${ZIG_VERSION_MAJOR}.${ZIG_VERSION_MINOR}.${ZIG_VERSION_PATCH}")
|
|
message("Configuring zig version ${ZIG_VERSION}")
|
|
|
|
set(ZIG_LIBC_LIB_DIR "" CACHE STRING "Default native target libc directory where crt1.o can be found")
|
|
set(ZIG_LIBC_STATIC_LIB_DIR "" CACHE STRING "Default native target libc directory where crtbeginT.o can be found")
|
|
set(ZIG_LIBC_INCLUDE_DIR "/usr/include" CACHE STRING "Default native target libc include directory")
|
|
set(ZIG_LD_PATH "ld" CACHE STRING "Path to ld for the native target")
|
|
set(ZIG_AR_PATH "ar" CACHE STRING "Path to ar for the native target")
|
|
set(ZIG_DYNAMIC_LINKER "" CACHE STRING "Override dynamic linker for native target")
|
|
|
|
option(ZIG_TEST_COVERAGE "Build Zig with test coverage instrumentation" OFF)
|
|
|
|
|
|
|
|
find_package(llvm)
|
|
include_directories(${LLVM_INCLUDE_DIR})
|
|
link_directories(${LLVM_LIBDIRS})
|
|
|
|
find_package(clang)
|
|
include_directories(${CLANG_INCLUDE_DIRS})
|
|
|
|
include_directories(
|
|
${CMAKE_SOURCE_DIR}
|
|
${CMAKE_BINARY_DIR}
|
|
)
|
|
|
|
set(ZIG_SOURCES
|
|
"${CMAKE_SOURCE_DIR}/src/analyze.cpp"
|
|
"${CMAKE_SOURCE_DIR}/src/ast_render.cpp"
|
|
"${CMAKE_SOURCE_DIR}/src/bignum.cpp"
|
|
"${CMAKE_SOURCE_DIR}/src/buffer.cpp"
|
|
"${CMAKE_SOURCE_DIR}/src/c_tokenizer.cpp"
|
|
"${CMAKE_SOURCE_DIR}/src/codegen.cpp"
|
|
"${CMAKE_SOURCE_DIR}/src/errmsg.cpp"
|
|
"${CMAKE_SOURCE_DIR}/src/error.cpp"
|
|
"${CMAKE_SOURCE_DIR}/src/ir.cpp"
|
|
"${CMAKE_SOURCE_DIR}/src/ir_print.cpp"
|
|
"${CMAKE_SOURCE_DIR}/src/link.cpp"
|
|
"${CMAKE_SOURCE_DIR}/src/main.cpp"
|
|
"${CMAKE_SOURCE_DIR}/src/os.cpp"
|
|
"${CMAKE_SOURCE_DIR}/src/parser.cpp"
|
|
"${CMAKE_SOURCE_DIR}/src/target.cpp"
|
|
"${CMAKE_SOURCE_DIR}/src/tokenizer.cpp"
|
|
"${CMAKE_SOURCE_DIR}/src/util.cpp"
|
|
"${CMAKE_SOURCE_DIR}/src/parseh.cpp"
|
|
"${CMAKE_SOURCE_DIR}/src/zig_llvm.cpp"
|
|
)
|
|
|
|
set(TEST_SOURCES
|
|
"${CMAKE_SOURCE_DIR}/src/buffer.cpp"
|
|
"${CMAKE_SOURCE_DIR}/src/util.cpp"
|
|
"${CMAKE_SOURCE_DIR}/src/os.cpp"
|
|
"${CMAKE_SOURCE_DIR}/src/error.cpp"
|
|
"${CMAKE_SOURCE_DIR}/test/run_tests.cpp"
|
|
)
|
|
|
|
set(C_HEADERS
|
|
"${CMAKE_SOURCE_DIR}/c_headers/Intrin.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/__stddef_max_align_t.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/__wmmintrin_aes.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/__wmmintrin_pclmul.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/adxintrin.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/ammintrin.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/arm_acle.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/avx2intrin.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/avx512bwintrin.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/avx512cdintrin.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/avx512dqintrin.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/avx512erintrin.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/avx512fintrin.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/avx512vlbwintrin.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/avx512vldqintrin.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/avx512vlintrin.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/avxintrin.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/bmi2intrin.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/bmiintrin.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/cpuid.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/cuda_builtin_vars.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/emmintrin.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/f16cintrin.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/float.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/fma4intrin.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/fmaintrin.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/fxsrintrin.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/htmintrin.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/htmxlintrin.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/ia32intrin.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/immintrin.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/inttypes.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/iso646.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/limits.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/lzcntintrin.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/mm3dnow.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/mm_malloc.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/mmintrin.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/nmmintrin.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/pmmintrin.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/popcntintrin.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/prfchwintrin.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/rdseedintrin.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/rtmintrin.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/s390intrin.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/shaintrin.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/smmintrin.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/stdalign.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/stdarg.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/stdatomic.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/stdbool.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/stddef.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/stdint.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/stdnoreturn.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/tbmintrin.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/tgmath.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/tmmintrin.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/unwind.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/vadefs.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/varargs.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/vecintrin.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/wmmintrin.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/x86intrin.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/xmmintrin.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/xopintrin.h"
|
|
"${CMAKE_SOURCE_DIR}/c_headers/xtestintrin.h"
|
|
)
|
|
|
|
|
|
set(ZIG_HOST_LINK_VERSION)
|
|
if (APPLE)
|
|
set(LD_V_OUTPUT)
|
|
execute_process(
|
|
COMMAND sh -c "${CMAKE_LINKER} -v 2>&1 | head -1"
|
|
RESULT_VARIABLE HAD_ERROR
|
|
OUTPUT_VARIABLE LD_V_OUTPUT
|
|
)
|
|
if (NOT HAD_ERROR)
|
|
if ("${LD_V_OUTPUT}" MATCHES ".*ld64-([0-9.]+).*")
|
|
string(REGEX REPLACE ".*ld64-([0-9.]+).*" "\\1" ZIG_HOST_LINK_VERSION ${LD_V_OUTPUT})
|
|
elseif ("${LD_V_OUTPUT}" MATCHES "[^0-9]*([0-9.]+).*")
|
|
string(REGEX REPLACE "[^0-9]*([0-9.]+).*" "\\1" ZIG_HOST_LINK_VERSION ${LD_V_OUTPUT})
|
|
endif()
|
|
else()
|
|
message(FATAL_ERROR "${CMAKE_LINKER} failed with status ${HAD_ERROR}")
|
|
endif()
|
|
endif()
|
|
|
|
|
|
set(C_HEADERS_DEST "lib/zig/include")
|
|
set(ZIG_STD_DEST "lib/zig/std")
|
|
set(CONFIGURE_OUT_FILE "${CMAKE_BINARY_DIR}/config.h")
|
|
configure_file (
|
|
"${CMAKE_SOURCE_DIR}/src/config.h.in"
|
|
${CONFIGURE_OUT_FILE}
|
|
)
|
|
|
|
include_directories(
|
|
${CMAKE_SOURCE_DIR}
|
|
${CMAKE_BINARY_DIR}
|
|
"${CMAKE_SOURCE_DIR}/src"
|
|
)
|
|
|
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Werror -Wall")
|
|
|
|
|
|
if(MINGW)
|
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wno-error=format= -Wno-error=format -Wno-error=format-extra-args")
|
|
endif()
|
|
|
|
set(EXE_CFLAGS "-std=c++11 -fno-exceptions -fno-rtti -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -D__USE_MINGW_ANSI_STDIO -Werror=strict-prototypes -Werror=old-style-definition -Werror=type-limits -Wno-missing-braces")
|
|
set(EXE_LDFLAGS " ")
|
|
if(ZIG_TEST_COVERAGE)
|
|
set(EXE_CFLAGS "${EXE_CFLAGS} -fprofile-arcs -ftest-coverage")
|
|
set(EXE_LDFLAGS "-fprofile-arcs -ftest-coverage")
|
|
endif()
|
|
|
|
add_executable(zig ${ZIG_SOURCES})
|
|
set_target_properties(zig PROPERTIES
|
|
COMPILE_FLAGS ${EXE_CFLAGS}
|
|
LINK_FLAGS ${EXE_LDFLAGS}
|
|
)
|
|
target_link_libraries(zig LINK_PUBLIC
|
|
${CLANG_LIBRARIES}
|
|
${LLVM_LIBRARIES}
|
|
)
|
|
install(TARGETS zig DESTINATION bin)
|
|
|
|
install(FILES ${C_HEADERS} DESTINATION ${C_HEADERS_DEST})
|
|
|
|
install(FILES "${CMAKE_SOURCE_DIR}/std/bootstrap.zig" DESTINATION "${ZIG_STD_DEST}")
|
|
install(FILES "${CMAKE_SOURCE_DIR}/std/builtin.zig" DESTINATION "${ZIG_STD_DEST}")
|
|
install(FILES "${CMAKE_SOURCE_DIR}/std/compiler_rt.zig" DESTINATION "${ZIG_STD_DEST}")
|
|
install(FILES "${CMAKE_SOURCE_DIR}/std/cstr.zig" DESTINATION "${ZIG_STD_DEST}")
|
|
install(FILES "${CMAKE_SOURCE_DIR}/std/darwin.zig" DESTINATION "${ZIG_STD_DEST}")
|
|
install(FILES "${CMAKE_SOURCE_DIR}/std/darwin_x86_64.zig" DESTINATION "${ZIG_STD_DEST}")
|
|
install(FILES "${CMAKE_SOURCE_DIR}/std/debug.zig" DESTINATION "${ZIG_STD_DEST}")
|
|
install(FILES "${CMAKE_SOURCE_DIR}/std/dwarf.zig" DESTINATION "${ZIG_STD_DEST}")
|
|
install(FILES "${CMAKE_SOURCE_DIR}/std/elf.zig" DESTINATION "${ZIG_STD_DEST}")
|
|
install(FILES "${CMAKE_SOURCE_DIR}/std/empty.zig" DESTINATION "${ZIG_STD_DEST}")
|
|
install(FILES "${CMAKE_SOURCE_DIR}/std/endian.zig" DESTINATION "${ZIG_STD_DEST}")
|
|
install(FILES "${CMAKE_SOURCE_DIR}/std/errno.zig" DESTINATION "${ZIG_STD_DEST}")
|
|
install(FILES "${CMAKE_SOURCE_DIR}/std/hash_map.zig" DESTINATION "${ZIG_STD_DEST}")
|
|
install(FILES "${CMAKE_SOURCE_DIR}/std/index.zig" DESTINATION "${ZIG_STD_DEST}")
|
|
install(FILES "${CMAKE_SOURCE_DIR}/std/io.zig" DESTINATION "${ZIG_STD_DEST}")
|
|
install(FILES "${CMAKE_SOURCE_DIR}/std/linux.zig" DESTINATION "${ZIG_STD_DEST}")
|
|
install(FILES "${CMAKE_SOURCE_DIR}/std/linux_i386.zig" DESTINATION "${ZIG_STD_DEST}")
|
|
install(FILES "${CMAKE_SOURCE_DIR}/std/linux_x86_64.zig" DESTINATION "${ZIG_STD_DEST}")
|
|
install(FILES "${CMAKE_SOURCE_DIR}/std/list.zig" DESTINATION "${ZIG_STD_DEST}")
|
|
install(FILES "${CMAKE_SOURCE_DIR}/std/math.zig" DESTINATION "${ZIG_STD_DEST}")
|
|
install(FILES "${CMAKE_SOURCE_DIR}/std/mem.zig" DESTINATION "${ZIG_STD_DEST}")
|
|
install(FILES "${CMAKE_SOURCE_DIR}/std/net.zig" DESTINATION "${ZIG_STD_DEST}")
|
|
install(FILES "${CMAKE_SOURCE_DIR}/std/os.zig" DESTINATION "${ZIG_STD_DEST}")
|
|
install(FILES "${CMAKE_SOURCE_DIR}/std/panic.zig" DESTINATION "${ZIG_STD_DEST}")
|
|
install(FILES "${CMAKE_SOURCE_DIR}/std/rand.zig" DESTINATION "${ZIG_STD_DEST}")
|
|
install(FILES "${CMAKE_SOURCE_DIR}/std/rand_test.zig" DESTINATION "${ZIG_STD_DEST}")
|
|
install(FILES "${CMAKE_SOURCE_DIR}/std/sort.zig" DESTINATION "${ZIG_STD_DEST}")
|
|
install(FILES "${CMAKE_SOURCE_DIR}/std/test_runner.zig" DESTINATION "${ZIG_STD_DEST}")
|
|
install(FILES "${CMAKE_SOURCE_DIR}/std/test_runner_libc.zig" DESTINATION "${ZIG_STD_DEST}")
|
|
install(FILES "${CMAKE_SOURCE_DIR}/std/test_runner_nolibc.zig" DESTINATION "${ZIG_STD_DEST}")
|
|
|
|
add_executable(run_tests ${TEST_SOURCES})
|
|
target_link_libraries(run_tests)
|
|
set_target_properties(run_tests PROPERTIES
|
|
COMPILE_FLAGS ${EXE_CFLAGS}
|
|
LINK_FLAGS ${EXE_LDFLAGS}
|
|
)
|
|
|
|
if (ZIG_TEST_COVERAGE)
|
|
add_custom_target(coverage
|
|
DEPENDS run_tests
|
|
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
|
COMMAND lcov --directory . --zerocounters --rc lcov_branch_coverage=1
|
|
COMMAND ./run_tests
|
|
COMMAND lcov --directory . --capture --output-file coverage.info --rc lcov_branch_coverage=1
|
|
COMMAND lcov --remove coverage.info '/usr/*' --output-file coverage.info.cleaned --rc lcov_branch_coverage=1
|
|
COMMAND genhtml -o coverage coverage.info.cleaned --rc lcov_branch_coverage=1
|
|
COMMAND rm coverage.info coverage.info.cleaned
|
|
)
|
|
endif()
|