Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,20 @@ file(WRITE ${CMAKE_BINARY_DIR}/generated/hrx_archs.h
"static const char* const kHrxGgufArchs[] = {\n${_onebit_archs}};\n")
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${CMAKE_SOURCE_DIR}/registry/architectures.json)
set_target_properties(onebit PROPERTIES OUTPUT_NAME 1bit)

# engine#1993: `1bit` is the OUTPUT NAME, not a target -- the target is `onebit`. With the MAKEFILE generator (CMake's
# default) the output file `1bit` in the build directory makes `--target 1bit` a satisfied FILE rule, so the command prints
# nothing, exits 0 and builds nothing while a stale binary keeps its old timestamp: a typo that succeeds, which is the
# failure this fleet pays for most. Ninja errors on that command already (`unknown target '1bit'`), because it has no file
# rules -- so this refusal is added ONLY for the Makefile generator: a custom target with that name is a second rule for an
# output `onebit` already produces, which ninja rejects outright ("multiple rules generate 1bit") and Makefile absorbs as a
# phony. Deliberately not an alias: an alias that built `onebit` would keep the wrong name in everyone's fingers and logs.
if(CMAKE_GENERATOR MATCHES "Makefiles")
add_custom_target(1bit
COMMAND ${CMAKE_COMMAND} -E echo "error: the build target is onebit; 1bit is only its output file name. Nothing was built. Use: cmake --build <dir> --target onebit"
COMMAND ${CMAKE_COMMAND} -E false
VERBATIM)
endif()
target_link_libraries(onebit PRIVATE nlohmann_json::nlohmann_json httplib::httplib Threads::Threads)

# ── The chat-template renderer (engine #963, docs/npu-chat-template.md) ──────
Expand Down
Loading