zig/CMakeLists.txt
Andrew Kelley 8a859afd58 std.io supports printing integers as hex values
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.
2017-02-07 17:23:50 -05:00

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()