|
6 | 6 |
|
7 | 7 | MAKEFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST))) |
8 | 8 | MAKEFILE_DIR := $(realpath $(dir $(MAKEFILE_PATH))) |
9 | | -EXTRACT_INFO_CMAKE := ${MAKEFILE_DIR}/extract_info.cmake |
10 | | -IDEAS_MAKEFILE := $(MAKEFILE_DIR)/IDEAS.mk |
11 | | - |
12 | | -ANTHROPIC_AUTH_TOKEN ?= $(OPENROUTER_API_KEY) |
13 | | -ANTHROPIC_BASE_URL ?= https://openrouter.ai/api |
14 | | -ANTHROPIC_API_KEY ?= "" |
15 | 9 |
|
16 | 10 | AGENT_PROVIDER ?= openrouter |
17 | 11 | AGENT_MODEL ?= anthropic/claude-sonnet-4.6 |
18 | | -BASE_URL ?= "https://openrouter.ai/api/v1" |
19 | | -TRANSLATION_DIR ?= translation.$(shell git --git-dir=${MAKEFILE_DIR}/.git rev-parse HEAD) |
20 | | - |
21 | | -export EXTRACT_INFO_CMAKE |
22 | | - |
23 | | -TARGETS ?= $(shell [ -d build-ninja ] && find build-ninja -maxdepth 1 -type f -executable -exec basename {} \; | cut -d. -f1 | sed -e "s/^lib//gi") |
24 | | -ifeq (${TARGETS},) |
25 | | -ifeq ($(filter cmake clean,$(MAKECMDGOALS)),) |
26 | | -$(error No TARGETS found! You need to run cmake!) |
27 | | -endif |
28 | | -endif |
| 12 | +AGENT_BASE_URL ?= "https://openrouter.ai/api/v1" |
29 | 13 |
|
30 | 14 | # Docker configuration |
31 | | -DOCKER_DIR := ${MAKEFILE_DIR}/docker |
| 15 | +DOCKER_HOSTDIR := ${MAKEFILE_DIR}/docker |
32 | 16 | DOCKER_WORKDIR := /home/user/IDEAS |
33 | | -# Relative path to the current working directory |
34 | | -DOCKER_REL_CWD := $(patsubst $(MAKEFILE_DIR)/%,%,$(CURDIR)) |
35 | 17 | DOCKER_RUN ?= docker run --rm \ |
36 | 18 | --init \ |
37 | 19 | -it \ |
38 | 20 | -v $(MAKEFILE_DIR):$(DOCKER_WORKDIR) \ |
39 | | - -v $(DOCKER_DIR)/.venv:$(DOCKER_WORKDIR)/.venv \ |
| 21 | + -w $(DOCKER_WORKDIR)/$(patsubst $(MAKEFILE_DIR)/%,%,$(CURDIR)) \ |
40 | 22 | -e OPENROUTER_API_KEY \ |
41 | 23 | -e TRANSLATION_DIR \ |
42 | 24 | -e AGENT_PROVIDER \ |
43 | 25 | -e AGENT_MODEL \ |
44 | | - -e BASE_URL \ |
| 26 | + -e AGENT_BASE_URL \ |
45 | 27 | -e RUSTFLAGS \ |
46 | | - -e VERBOSE \ |
47 | 28 | ideas-$(shell id -u) |
48 | 29 |
|
49 | 30 | ifdef DOCKER_RUN |
50 | | - # Touch directory for correct permissions when mounted |
51 | | - VENV_SETUP = mkdir -p $(DOCKER_DIR)/.venv |
52 | | - # Run inside Docker container with exit-on-error |
53 | | - RUN_CMD = $(DOCKER_RUN) /bin/sh -c 'set -e; cd $(DOCKER_WORKDIR)/$(DOCKER_REL_CWD); $(1)' |
| 31 | + RUN_PREFIX = \ |
| 32 | + mkdir -p $(DOCKER_HOSTDIR)/.venv && \ |
| 33 | + $(DOCKER_RUN) \ |
| 34 | + /bin/sh -c 'set -e; |
| 35 | + RUN_SUFFIX = ' |
54 | 36 | else |
55 | | - VENV_SETUP = @true |
56 | | - RUN_CMD = $(1) |
| 37 | + RUN_PREFIX = |
| 38 | + RUN_SUFFIX = |
57 | 39 | endif |
58 | 40 |
|
59 | | -# cmake |
60 | | -.PHONY: cmake |
61 | | -cmake: build-ninja/cmake.log |
62 | | - |
63 | | -build-ninja/cmake.log: test_case/CMakeLists.txt ${EXTRACT_INFO_CMAKE} |
64 | | - uv run python -m ideas.cmake source_dir=test_case build_dir=build-ninja |
65 | | - @touch $@ |
66 | | - |
67 | | -build-ninja/CMakeCache.txt: build-ninja/cmake.log |
68 | | -build-ninja/compile_commands.json: build-ninja/cmake.log |
69 | | -build-ninja/build.log: build-ninja/cmake.log |
70 | 41 |
|
71 | 42 | # test generation from project |
72 | 43 | .PHONY: testgen |
73 | 44 | testgen: test_crate/tests/test_assert.rs ; |
74 | 45 |
|
75 | 46 | .PRECIOUS: test_crate/tests/test_assert.rs |
76 | 47 | test_crate/tests/test_assert.rs: |
77 | | - $(VENV_SETUP) |
78 | | - $(call RUN_CMD,\ |
| 48 | + $(RUN_PREFIX) \ |
79 | 49 | uv run python -m ideas.agents.testgen model=$(if $(AGENT_PROVIDER),${AGENT_PROVIDER}/,)${AGENT_MODEL} \ |
80 | 50 | c_code=test_case \ |
81 | 51 | project_name=$(notdir $(CURDIR)) \ |
82 | 52 | test_vectors_out=test_vectors/agent \ |
83 | 53 | test_crate_out=test_crate \ |
84 | 54 | hydra.output_subdir=.testgen \ |
85 | 55 | hydra.job.name=testgen \ |
86 | | - hydra.run.dir=test_vectors; \ |
87 | | - ) |
| 56 | + hydra.run.dir=test_vectors \ |
| 57 | + $(RUN_SUFFIX) |
| 58 | + # Agent is not guaranteed to write file |
| 59 | + [ -f test_crate/tests/test_assert.rs ] || { echo "ERROR: Agent failed to generate test_crate/tests/test_assert.rs"; exit 1; } |
88 | 60 |
|
89 | 61 |
|
90 | 62 | # library targets: generate tests from the consolidated lib.c |
91 | 63 | .PRECIOUS: test_crates/%/tests/test_assert.rs |
92 | 64 | test_crates/%/tests/test_assert.rs: ${TRANSLATION_DIR}/%/src/lib.c | build-ninja/lib%.so.type |
93 | | - # Copy lib.c into test_targets/<target>/src/ so |
94 | | - # build.rs can use ../../test_targets/<target>/src/lib.c |
| 65 | + # Copy lib.c into test_crates/<target>/src/ so |
| 66 | + # build.rs can use ../../test_crates/<target>/src/lib.c |
95 | 67 | # both in Docker /tmp and on disk |
96 | | - mkdir -p test_targets/$*/src |
97 | | - cp ${TRANSLATION_DIR}/$*/src/lib.c test_targets/$*/src/lib.c |
98 | | - $(VENV_SETUP) |
99 | | - $(call RUN_CMD,\ |
| 68 | + mkdir -p test_crates/$*/src |
| 69 | + cp ${TRANSLATION_DIR}/$*/src/lib.c test_crates/$*/src/lib.c |
| 70 | + $(RUN_PREFIX) \ |
100 | 71 | uv run python -m ideas.agents.testgen model=$(if $(AGENT_PROVIDER),${AGENT_PROVIDER}/,)${AGENT_MODEL} \ |
101 | | - c_code=test_targets/$*/src/lib.c \ |
| 72 | + c_code=test_crates/$*/src/lib.c \ |
102 | 73 | project_name=$* \ |
103 | 74 | test_vectors_out=test_vectors/$*/agent \ |
104 | 75 | test_crate_out=test_crates/$* \ |
105 | 76 | hydra.output_subdir=.testgen \ |
106 | 77 | hydra.job.name=testgen \ |
107 | | - hydra.run.dir=test_vectors/$*; \ |
108 | | - ) |
| 78 | + hydra.run.dir=test_vectors/$* \ |
| 79 | + $(RUN_SUFFIX) |
| 80 | + # Agent is not guaranteed to write file |
| 81 | + [ -f test_crates/$*/tests/test_assert.rs ] || { echo "ERROR: Agent failed to generate test_crates/$*/tests/test_assert.rs"; exit 1; } |
109 | 82 |
|
110 | 83 | # executable targets: do nothing |
111 | 84 | test_crates/%/tests/test_assert.rs: ${TRANSLATION_DIR}/%/src/main.c | build-ninja/%.type |
112 | | - mkdir -p test_crates/$*/tests |
113 | | - touch test_crates/$*/tests/test_assert.rs |
114 | | - |
115 | | -# fallback |
116 | | -test_crates/%/tests/test_assert.rs: |
117 | | - mkdir -p test_crates/$*/tests |
118 | | - touch test_crates/$*/tests/test_assert.rs |
| 85 | + $(error Agent cannot generate tests for binary targets yet!) |
0 commit comments