@@ -56,13 +56,8 @@ if(SC_GENERATE_LP_SOURCES)
5656 ${PERPLEX_ExpScanner_static_SRC}
5757 )
5858else (SC_GENERATE_LP_SOURCES )
59- include_directories (${CMAKE_CURRENT_SOURCE_DIR} /generated )
60- set (EXPRESS_GENERATED_SRCS
61- generated/expparse.c
62- generated/expscan.c
63- )
64- set (SCL_SO_SRCS ${EXPRESS_GENERATED_SRCS} )
65- set (SCL_STATIC_SRCS ${EXPRESS_GENERATED_SRCS} )
59+ add_subdirectory (generated )
60+ include_directories (generated )
6661endif (SC_GENERATE_LP_SOURCES )
6762
6863set (EXPRESS_SOURCES
@@ -79,7 +74,7 @@ set(EXPRESS_SOURCES
7974 resolve.c
8075 lexact.c
8176 linklist.c
82- error.c
77+ # error.c
8378 dict.c
8479 hash.c
8580 memory.c
@@ -90,6 +85,19 @@ set(EXPRESS_SOURCES
9085 exp_kw.c
9186 )
9287
88+ set (EXPRESS_OBJS)
89+ foreach (_src ${EXPRESS_SOURCES} )
90+ string (REPLACE "." "_" _suffix ${_src} )
91+ set (_objlib "objlib_${_suffix} " )
92+ add_library (${_objlib} OBJECT ${_src} )
93+ # TODO: probably PIC should be used everywhere...
94+ set_property (TARGET ${_objlib} PROPERTY POSITION_INDEPENDENT_CODE ON )
95+ list (APPEND EXPRESS_OBJS $<TARGET_OBJECTS :${_objlib} >)
96+ endforeach ()
97+
98+ list (APPEND EXPRESS_OBJS $<TARGET_OBJECTS :objlib_expscan_c >)
99+ list (APPEND EXPRESS_OBJS $<TARGET_OBJECTS :objlib_expparse_c >)
100+
93101# TODO
94102# Currently, fedex.c provides the main() for multiple programs. These programs
95103# provide custom behavior by defining EXPRESSinit_init (called by fedex.c's
@@ -113,14 +121,16 @@ variable_watch(SC_ADDLIB_EXPRESS_ARG_LINK_LIBRARIES)
113121variable_watch (SC_ADDLIB_EXPRESS-STATIC_ARG_LINK_LIBRARIES )
114122
115123if ($CACHE{SC_BUILD_SHARED_LIBS} )
116- SC_ADDLIB (express SHARED SOURCES ${EXPRESS_SOURCES} ${SCL_SO_SRCS } LINK_LIBRARIES base )
124+ SC_ADDLIB (express SHARED SOURCES "error.c" ${EXPRESS_OBJS } LINK_LIBRARIES base )
117125 if (WIN32 )
118126 target_compile_definitions (express PRIVATE SC_EXPRESS_DLL_EXPORTS )
119127 endif ()
120128
121129 if (SC_GENERATE_LP_SOURCES)
122- set_property (TARGET express APPEND PROPERTY INCLUDE_DIRECTORIES "${PERPLEX_ExpScanner_INCLUDE_DIR} " )
123- set_property (TARGET express APPEND PROPERTY INCLUDE_DIRECTORIES "${LEMON_ExpParser_INCLUDE_DIR} " )
130+ set_property (TARGET express
131+ APPEND PROPERTY INCLUDE_DIRECTORIES "${RE2C_ExpScanner_INCLUDE_DIR} " )
132+ set_property (TARGET express
133+ APPEND PROPERTY INCLUDE_DIRECTORIES "${LEMON_ExpParser_INCLUDE_DIR} " )
124134 add_custom_command (TARGET express POST_BUILD
125135 COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR} /express_verify.cmake
126136 )
@@ -134,11 +144,13 @@ if($CACHE{SC_BUILD_SHARED_LIBS})
134144endif ()
135145
136146if ($CACHE{SC_BUILD_STATIC_LIBS} )
137- SC_ADDLIB (express-static STATIC SOURCES ${EXPRESS_SOURCES} ${SCL_STATIC_SRCS } LINK_LIBRARIES base-static )
147+ SC_ADDLIB (express-static STATIC SOURCES "error.c" ${EXPRESS_OBJS } LINK_LIBRARIES base-static )
138148
139149 if (SC_GENERATE_LP_SOURCES)
140- set_property (TARGET express-static APPEND PROPERTY INCLUDE_DIRECTORIES "${PERPLEX_ExpScanner_static_INCLUDE_DIR} " )
141- set_property (TARGET express-static APPEND PROPERTY INCLUDE_DIRECTORIES "${LEMON_ExpParser_static_INCLUDE_DIR} " )
150+ set_property (TARGET express-static
151+ APPEND PROPERTY INCLUDE_DIRECTORIES "${RE2C_ExpScanner_INCLUDE_DIR} " )
152+ set_property (TARGET express-static
153+ APPEND PROPERTY INCLUDE_DIRECTORIES "${LEMON_ExpParser_INCLUDE_DIR} " )
142154 add_custom_command (TARGET express-static POST_BUILD
143155 COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR} /express_verify.cmake
144156 )
0 commit comments