aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Tatham <anakin@pobox.com>2023-06-15 07:40:14 +0100
committerSimon Tatham <anakin@pobox.com>2023-06-16 18:32:55 +0100
commitde13ca2874e673b426efcf04f734ae6625635396 (patch)
treeb1db4f29b83a3a545ec60448fc5096b87243f475
parent43f4fde2f2ef694f355edc2777525cf611dc0182 (diff)
downloadpuzzles-de13ca2874e673b426efcf04f734ae6625635396.zip
puzzles-de13ca2874e673b426efcf04f734ae6625635396.tar.gz
puzzles-de13ca2874e673b426efcf04f734ae6625635396.tar.bz2
puzzles-de13ca2874e673b426efcf04f734ae6625635396.tar.xz
Add a 'core' library alongside 'common'.
The 'core' library contains almost all the same objects as 'common', but leaves out hat.c. And the auxiliary program 'hatgen' now links against that slightly reduced core library instead of 'common'. This avoids a dependency loop: one of hatgen's jobs is to generate hat-tables.h, but hat-tables.h is a dependency of it. Of course, the generated hat-tables.h is already committed, so this doesn't present a bootstrapping problem in a normal build. But if someone modifies hatgen.c in order to regenerate hat-tables.h, and does so in a way that makes it uncompilable, they can't rebuild hatgen and try again! Of course you can always revert changes with git, but it's annoying to have to. Better to keep the dependencies non-cyclic in the first place.
-rw-r--r--CMakeLists.txt9
-rw-r--r--auxiliary/CMakeLists.txt2
-rw-r--r--cmake/setup.cmake10
3 files changed, 14 insertions, 7 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 481294f..d0d6077 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -5,11 +5,12 @@ project(puzzles
include(cmake/setup.cmake)
-add_library(common
+add_library(core_obj OBJECT
combi.c divvy.c drawing.c dsf.c findloop.c grid.c latin.c
- laydomino.c loopgen.c malloc.c matching.c midend.c misc.c penrose.c hat.c
- ps.c random.c sort.c tdq.c tree234.c version.c
- ${platform_common_sources})
+ laydomino.c loopgen.c malloc.c matching.c midend.c misc.c penrose.c
+ ps.c random.c sort.c tdq.c tree234.c version.c ${platform_common_sources})
+add_library(core $<TARGET_OBJECTS:core_obj>)
+add_library(common $<TARGET_OBJECTS:core_obj> hat.c)
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
diff --git a/auxiliary/CMakeLists.txt b/auxiliary/CMakeLists.txt
index f475812..b9c1067 100644
--- a/auxiliary/CMakeLists.txt
+++ b/auxiliary/CMakeLists.txt
@@ -1,6 +1,6 @@
cliprogram(combi-test combi-test.c)
cliprogram(divvy-test divvy-test.c)
-cliprogram(hatgen hatgen.c COMPILE_DEFINITIONS TEST_HAT)
+cliprogram(hatgen hatgen.c CORE_LIB COMPILE_DEFINITIONS TEST_HAT)
cliprogram(hat-test hat-test.c)
cliprogram(latin-test latin-test.c)
cliprogram(matching matching.c)
diff --git a/cmake/setup.cmake b/cmake/setup.cmake
index 3c91285..3b73739 100644
--- a/cmake/setup.cmake
+++ b/cmake/setup.cmake
@@ -148,12 +148,18 @@ endfunction()
# a command-line helper tool.
function(cliprogram NAME)
cmake_parse_arguments(OPT
- "" "" "COMPILE_DEFINITIONS" ${ARGN})
+ "CORE_LIB" "" "COMPILE_DEFINITIONS" ${ARGN})
+
+ if(OPT_CORE_LIB)
+ set(lib core)
+ else()
+ set(lib common)
+ endif()
if(build_cli_programs)
add_executable(${NAME} ${CMAKE_SOURCE_DIR}/nullfe.c
${OPT_UNPARSED_ARGUMENTS})
- target_link_libraries(${NAME} common ${platform_libs})
+ target_link_libraries(${NAME} ${lib} ${platform_libs})
if(OPT_COMPILE_DEFINITIONS)
target_compile_definitions(${NAME} PRIVATE ${OPT_COMPILE_DEFINITIONS})
endif()