Skip to content

Commit af7eb01

Browse files
authored
chore: build leanc with Lake under USE_LAKE (#8336)
Removes the last use of stdlib.make.in in this configuration outside stage 0.
1 parent ca9b3eb commit af7eb01

File tree

3 files changed

+23
-8
lines changed

3 files changed

+23
-8
lines changed

src/CMakeLists.txt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -689,7 +689,7 @@ add_custom_target(make_stdlib ALL
689689
# The actual rule is in a separate makefile because we want to prefix it with '+' to use the Make job server
690690
# for a parallelized nested build, but CMake doesn't let us do that.
691691
# We use `lean` from the previous stage, but `leanc`, headers, etc. from the current stage
692-
COMMAND $(MAKE) -f ${CMAKE_BINARY_DIR}/stdlib.make Init Std Lean
692+
COMMAND $(MAKE) -f ${CMAKE_BINARY_DIR}/stdlib.make Init Std Lean Leanc
693693
VERBATIM)
694694

695695
# if we have LLVM enabled, then build `lean.h.bc` which has the LLVM bitcode
@@ -768,7 +768,7 @@ if(${STAGE} GREATER 0 AND EXISTS ${LEAN_SOURCE_DIR}/Leanc.lean AND NOT ${CMAKE_S
768768
add_custom_target(leanc ALL
769769
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/leanc
770770
DEPENDS leanshared
771-
COMMAND $(MAKE) -f ${CMAKE_BINARY_DIR}/stdlib.make Leanc
771+
COMMAND $(MAKE) -f ${CMAKE_BINARY_DIR}/stdlib.make leanc
772772
VERBATIM)
773773
endif()
774774

@@ -823,7 +823,6 @@ endif()
823823

824824
# Escape for `make`. Yes, twice.
825825
string(REPLACE "$" "\\\$$" CMAKE_EXE_LINKER_FLAGS_MAKE "${CMAKE_EXE_LINKER_FLAGS}")
826-
string(REPLACE "$" "$$" CMAKE_EXE_LINKER_FLAGS_MAKE_MAKE "${CMAKE_EXE_LINKER_FLAGS_MAKE}")
827826
configure_file(${LEAN_SOURCE_DIR}/stdlib.make.in ${CMAKE_BINARY_DIR}/stdlib.make)
828827

829828
# hacky

src/lakefile.toml.in

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
name = "lean4"
99
bootstrap = true
1010

11-
defaultTargets = ["Init", "Std", "Lean", "Lake", "LakeMain"]
11+
defaultTargets = ["Init", "Std", "Lean", "Lake", "LakeMain", "Leanc"]
1212

1313
# The root of all the compiler output directories
1414
buildDir = "${CMAKE_BINARY_DIR}"
@@ -65,3 +65,9 @@ name = "LakeMain"
6565
srcDir = "lake"
6666
libName = "${LAKE_LIB_PREFIX}LakeMain"
6767
defaultFacets = ["static.export"]
68+
69+
[[lean_lib]]
70+
name = "Leanc"
71+
srcDir = "${CMAKE_BINARY_DIR}/leanc"
72+
libName = "${LAKE_LIB_PREFIX}Leanc"
73+
defaultFacets = ["static"]

src/stdlib.make.in

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,9 @@ ifeq "${USE_LAKE} ${STAGE}" "ON 1"
4141

4242
# build in parallel
4343
Init:
44-
${PREV_STAGE}/bin/lake build Init Std Lean Lake LakeMain $(LAKE_EXTRA_ARGS)
44+
${PREV_STAGE}/bin/lake build $(LAKE_EXTRA_ARGS)
4545

46-
Std Lean Lake: Init
46+
Std Lean Lake Leanc: Init
4747

4848
else
4949

@@ -60,6 +60,11 @@ Std: Init
6060
Lean: Std
6161
+"${LEAN_BIN}/leanmake" lib lib.export PKG=Lean $(LEANMAKE_OPTS)
6262

63+
Leanc: Lean
64+
ifneq "${STAGE}" "0"
65+
+"${LEAN_BIN}/leanmake" -C "${CMAKE_BINARY_DIR}/leanc" lib PKG=Leanc $(LEANMAKE_OPTS) OUT="${CMAKE_LIBRARY_OUTPUT_DIRECTORY}" LIB_OUT="${CMAKE_LIBRARY_OUTPUT_DIRECTORY}"
66+
endif
67+
6368
Lake:
6469
# lake is in its own subdirectory, so must adjust relative paths...
6570
+"${LEAN_BIN}/leanmake" -C lake lib lib.export ../${LIB}/temp/LakeMain.o.export PKG=Lake $(LEANMAKE_OPTS) OUT="../${LIB}" LIB_OUT="../${LIB}/lean" TEMP_OUT="../${LIB}/temp" OLEAN_OUT="../${LIB}/lean" EXTRA_SRC_ROOTS=LakeMain.lean
@@ -146,5 +151,10 @@ ${CMAKE_BINARY_DIR}/bin/lean${CMAKE_EXECUTABLE_SUFFIX}: ${CMAKE_LIBRARY_OUTPUT_D
146151

147152
lean: ${CMAKE_BINARY_DIR}/bin/lean${CMAKE_EXECUTABLE_SUFFIX}
148153

149-
Leanc:
150-
+"${LEAN_BIN}/leanmake" bin PKG=Leanc BIN_NAME=leanc${CMAKE_EXECUTABLE_SUFFIX} $(LEANMAKE_OPTS) LINK_OPTS='${CMAKE_EXE_LINKER_FLAGS_MAKE_MAKE}' OUT="${CMAKE_BINARY_DIR}" OLEAN_OUT="${CMAKE_BINARY_DIR}" LEAN_PATH="${CMAKE_LIBRARY_OUTPUT_DIRECTORY}"
154+
${CMAKE_BINARY_DIR}/bin/leanc${CMAKE_EXECUTABLE_SUFFIX}: ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libLeanc.a
155+
@echo "[ ] Building $@"
156+
# on Windows, must remove file before writing a new one (since the old one may be in use)
157+
@rm -f $@
158+
"${CMAKE_BINARY_DIR}/leanc.sh" $< ${CMAKE_EXE_LINKER_FLAGS_MAKE} ${LEAN_EXE_LINKER_FLAGS} ${LEANC_OPTS} -o $@
159+
160+
leanc: ${CMAKE_BINARY_DIR}/bin/leanc${CMAKE_EXECUTABLE_SUFFIX}

0 commit comments

Comments
 (0)