diff --git a/CMakeLists.txt b/CMakeLists.txt index bebd59c1e0..64aa7d1bd4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -45,6 +45,7 @@ message("Configuring zig version ${ZIG_VERSION}") set(ZIG_STATIC off CACHE BOOL "Attempt to build a static zig executable (not compatible with glibc)") set(ZIG_STATIC_LLVM off CACHE BOOL "Prefer linking against static LLVM libraries") +set(ZIG_SKIP_INSTALL_LIB_FILES off CACHE BOOL "Disable copying lib/ files to install prefix") set(ZIG_ENABLE_MEM_PROFILE off CACHE BOOL "Activate memory usage instrumentation") if(ZIG_STATIC) @@ -607,26 +608,19 @@ if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") else() set(LIBUSERLAND_RELEASE_MODE "true") endif() - -set(BUILD_LIBUSERLAND_COMMAND zig0 build - --override-lib-dir "${CMAKE_SOURCE_DIR}/lib" - "-Doutput-dir=${CMAKE_BINARY_DIR}" - "-Drelease=${LIBUSERLAND_RELEASE_MODE}" - "-Dlib-files-only" - --prefix "${CMAKE_INSTALL_PREFIX}" - libuserland -) - -# When using Visual Studio build system generator we default to libuserland install. -if(MSVC) - set(ZIG_SKIP_INSTALL_LIB_FILES off CACHE BOOL "Disable copying lib/ files to install prefix") - if(NOT ZIG_SKIP_INSTALL_LIB_FILES) - set(BUILD_LIBUSERLAND_COMMAND ${BUILD_LIBUSERLAND_COMMAND} install) - endif() +if(ZIG_SKIP_INSTALL_LIB_FILES) + set(ZIG_BUILD_INSTALL_STEP "") +else() + set(ZIG_BUILD_INSTALL_STEP "install") endif() - add_custom_target(zig_build_libuserland ALL - COMMAND ${BUILD_LIBUSERLAND_COMMAND} + COMMAND zig0 build + --override-lib-dir "${CMAKE_SOURCE_DIR}/lib" + libuserland ${ZIG_BUILD_INSTALL_STEP} + "-Doutput-dir=${CMAKE_BINARY_DIR}" + "-Drelease=${LIBUSERLAND_RELEASE_MODE}" + "-Dlib-files-only" + --prefix "${CMAKE_INSTALL_PREFIX}" DEPENDS zig0 BYPRODUCTS "${LIBUSERLAND}" WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" @@ -644,9 +638,4 @@ elseif(MINGW) target_link_libraries(zig ntdll) endif() add_dependencies(zig zig_build_libuserland) - install(TARGETS zig DESTINATION bin) - -# CODE has no effect with Visual Studio build system generator. -install(CODE "message(\"-- Installing: ${CMAKE_INSTALL_PREFIX}/lib\")") -install(CODE "execute_process(COMMAND ${BUILD_LIBUSERLAND_COMMAND} install)") diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 62b8083222..a5aeeb9e21 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -51,28 +51,23 @@ knowledge of Zig internals.** ### Editing Source Code -First, build the Stage 1 compiler as described in [Building from Source](README.md#Building-from-Source). +First, build the Stage 1 compiler as described in [the Building section](#building). -Zig locates lib files relative to executable path by searching up the -filesystem tree for a sub-path of `lib/zig/std/std.zig` or `lib/std/std.zig`. -Typically the former is an install and the latter a git working tree which -contains the build directory. - -During development it is not necessary to perform installs when modifying -stage1 or userland sources and in fact it is faster and simpler to run, -test and debug from a git working tree. - -- `make` is typically sufficient to build zig during development iterations. -- `make install` performs a build __and__ install. -- `msbuild -p:Configuration=Release INSTALL.vcxproj` on Windows performs a -build and install. To avoid install, pass cmake option `-DZIG_SKIP_INSTALL_LIB_FILES=ON`. +One modification you may want to make is adding `-DZIG_SKIP_INSTALL_LIB_FILES=ON` +to the cmake line. If you use the build directory as a working directory to run +tests with, zig will find the lib files in the source directory, and they will not +be "installed" every time you run `make`. This will allow you to make modifications +directly to the standard library, for example, and have them effective immediately. +Note that if you already ran `make` or `make install` with the default cmake +settings, there will already be a `lib/` directory in your build directory. When +executed from the build directory, zig will find this instead of the source lib/ +directory. Remove the unwanted directory so that the desired one can be found. To test changes, do the following from the build directory: -1. Run `make` (on POSIX) or +1. Run `make install` (on POSIX) or `msbuild -p:Configuration=Release INSTALL.vcxproj` (on Windows). -2. `$BUILD_DIR/zig build test` (on POSIX) or - `$BUILD_DIR/Release\zig.exe build test` (on Windows). +2. `bin/zig build test` (on POSIX) or `bin\zig.exe build test` (on Windows). That runs the whole test suite, which does a lot of extra testing that you likely won't always need, and can take upwards of 1 hour. This is what the @@ -90,8 +85,8 @@ Another example is choosing a different set of things to test. For example, not the other ones. Combining this suggestion with the previous one, you could do this: -`$BUILD_DIR/bin/zig build test-std -Dskip-release` (on POSIX) or -`$BUILD_DIR/Release\zig.exe build test-std -Dskip-release` (on Windows). +`bin/zig build test-std -Dskip-release` (on POSIX) or +`bin\zig.exe build test-std -Dskip-release` (on Windows). This will run only the standard library tests, in debug mode only, for all targets (it will cross-compile the tests for non-native targets but not run