# full client build script Import qw( BASE_CFLAGS BASE_LDFLAGS INSTALL_DIR BUILD_DIR TARGETNAME CC CXX LINK ); # splines $env_splines = new cons( CC => $CC, CXX => $CXX, LINK => $LINK, ENV => { PATH => $ENV{PATH}, HOME => $ENV{HOME} } ); @SPLINES_FILES = qw( ../splines/math_angles.cpp ../splines/math_matrix.cpp ../splines/math_quaternion.cpp ../splines/math_vector.cpp ../splines/q_parse.cpp ../splines/q_shared.cpp ../splines/splines.cpp ../splines/util_str.cpp ); $SPLINES_FILESREF = \@SPLINES_FILES; Library $env_splines 'splines', @$SPLINES_FILESREF; # botlib # FIXME TTimo # we already deal with botlib on dedicated target # the compilation options are a bit different but we could certainly rely on # the same Conscript and make things cleaner $env_botlib = new cons( CC => $CC, CXX => $CXX, LINK => $LINK, ENV => { PATH => $ENV{PATH}, HOME => $ENV{HOME} }, CFLAGS => $BASE_CFLAGS . '-DBOTLIB ' ); @BOTLIB_FILES = qw( ../botlib/be_aas_bspq3.c ../botlib/be_aas_cluster.c ../botlib/be_aas_debug.c ../botlib/be_aas_entity.c ../botlib/be_aas_file.c ../botlib/be_aas_main.c ../botlib/be_aas_move.c ../botlib/be_aas_optimize.c ../botlib/be_aas_reach.c ../botlib/be_aas_route.c ../botlib/be_aas_routealt.c ../botlib/be_aas_sample.c ../botlib/be_ai_char.c ../botlib/be_ai_chat.c ../botlib/be_ai_gen.c ../botlib/be_ai_goal.c ../botlib/be_ai_move.c ../botlib/be_ai_weap.c ../botlib/be_ai_weight.c ../botlib/be_ea.c ../botlib/be_interface.c ../botlib/l_crc.c ../botlib/l_libvar.c ../botlib/l_log.c ../botlib/l_memory.c ../botlib/l_precomp.c ../botlib/l_script.c ../botlib/l_struct.c ); $BOTLIB_REF = \@BOTLIB_FILES; Library $env_botlib 'botlib', @$BOTLIB_REF; # jpeg # NOTE TTimo we might need this one on other targets $env_jpeglib = new cons( CC => $CC, CXX => $CXX, LINK => $LINK, ENV => { PATH => $ENV{PATH}, HOME => $ENV{HOME} }, CFLAGS => $BASE_CFLAGS ); @JPEGLIB_FILES = qw( ../jpeg-6/jcapimin.c ../jpeg-6/jchuff.c ../jpeg-6/jcinit.c ../jpeg-6/jccoefct.c ../jpeg-6/jccolor.c ../jpeg-6/jfdctflt.c ../jpeg-6/jcdctmgr.c ../jpeg-6/jcphuff.c ../jpeg-6/jcmainct.c ../jpeg-6/jcmarker.c ../jpeg-6/jcmaster.c ../jpeg-6/jcomapi.c ../jpeg-6/jcparam.c ../jpeg-6/jcprepct.c ../jpeg-6/jcsample.c ../jpeg-6/jdapimin.c ../jpeg-6/jdapistd.c ../jpeg-6/jdatasrc.c ../jpeg-6/jdcoefct.c ../jpeg-6/jdcolor.c ../jpeg-6/jddctmgr.c ../jpeg-6/jdhuff.c ../jpeg-6/jdinput.c ../jpeg-6/jdmainct.c ../jpeg-6/jdmarker.c ../jpeg-6/jdmaster.c ../jpeg-6/jdpostct.c ../jpeg-6/jdsample.c ../jpeg-6/jdtrans.c ../jpeg-6/jerror.c ../jpeg-6/jidctflt.c ../jpeg-6/jmemmgr.c ../jpeg-6/jmemnobs.c ../jpeg-6/jutils.c ); $JPEGLIB_REF = \@JPEGLIB_FILES; Library $env_jpeglib 'jpeglib', @$JPEGLIB_REF; # NOTE TTimo this requires patched cons version to work (see unix/cons) %nasm_hash = new cons()->copy( CC => 'nasm', CCCOM => '%CC -f elf -o %> %<' ); $nasm_hash{SUFMAP}{'.nasm'} = 'build::command::cc'; $nasm_env = new cons(%nasm_hash); Library $nasm_env 'asmlib', 'ftol.nasm', 'snapvector.nasm'; # compiling files with inlined assembly $env_inlined = new cons( CFLAGS => '-DELF -x assembler-with-cpp' ); Library $env_inlined 'inlinelib', '../unix/matha.s', '../unix/snd_mixa.s'; # putting it all together $env = new cons( CC => $CC, CXX => $CXX, LINK => $LINK, ENV => { PATH => $ENV{PATH}, HOME => $ENV{HOME} }, CFLAGS => $BASE_CFLAGS, LIBS => ' ' . $BUILD_DIR . '/unix/splines.a ' . $BUILD_DIR . '/unix/botlib.a ' . $BUILD_DIR . '/unix/jpeglib.a ' . $BUILD_DIR . '/unix/asmlib.a ' . $BUILD_DIR . '/unix/inlinelib.a ' . $BASE_LDFLAGS . '-L/usr/X11R6/lib64 -L/usr/X11R6/lib -lX11 -lXext -lXxf86dga -lXxf86vm -ldl -lm' ); @RENDERER_FILES = qw( ../renderer/tr_animation.c ../renderer/tr_backend.c ../renderer/tr_bsp.c ../renderer/tr_cmds.c ../renderer/tr_curve.c ../renderer/tr_flares.c ../renderer/tr_font.c ../renderer/tr_image.c ../renderer/tr_init.c ../renderer/tr_light.c ../renderer/tr_main.c ../renderer/tr_marks.c ../renderer/tr_mesh.c ../renderer/tr_model.c ../renderer/tr_noise.c ../renderer/tr_scene.c ../renderer/tr_shade.c ../renderer/tr_shade_calc.c ../renderer/tr_shader.c ../renderer/tr_shadows.c ../renderer/tr_sky.c ../renderer/tr_surface.c ../renderer/tr_world.c ); $RENDERER_REF = \@RENDERER_FILES; @CLIENT_FILES = qw( ../client/cl_cgame.c ../client/cl_cin.c ../client/cl_console.c ../client/cl_input.c ../client/cl_keys.c ../client/cl_main.c ../client/cl_net_chan.c ../client/cl_parse.c ../client/cl_scrn.c ../client/cl_ui.c ); $CLIENT_REF = \@CLIENT_FILES; @COMMON_FILES = qw( ../qcommon/cm_load.c ../qcommon/cm_patch.c ../qcommon/cm_polylib.c ../qcommon/cm_test.c ../qcommon/cm_trace.c ../qcommon/cmd.c ../qcommon/common.c ../qcommon/cvar.c ../qcommon/files.c ../qcommon/md4.c ../qcommon/msg.c ../qcommon/net_chan.c ../qcommon/huffman.c ../qcommon/unzip.c ); $COMMON_REF = \@COMMON_FILES; @SOUND_FILES = qw( ../client/snd_adpcm.c ../client/snd_dma.c ../client/snd_mem.c ../client/snd_mix.c ../client/snd_wavelet.c ); $SOUND_REF = \@SOUND_FILES; @UNIX_FILES = qw( ../unix/unix_main.c ../unix/unix_net.c ../unix/unix_shared.c ../unix/linux_common.c ../unix/linux_qgl.c ../unix/linux_glimp.c ../unix/linux_joystick.c ../unix/linux_snd.c ../unix/linux_signals.c ); $UNIX_REF = \@UNIX_FILES; @SERVER_FILES = qw( ../server/sv_bot.c ../server/sv_ccmds.c ../server/sv_client.c ../server/sv_game.c ../server/sv_init.c ../server/sv_main.c ../server/sv_net_chan.c ../server/sv_snapshot.c ../server/sv_world.c ); $SERVER_REF = \@SERVER_FILES; # FIXME TTimo vm_.c @VM_FILES = qw( ../qcommon/vm.c ../qcommon/vm_interpreted.c ); if ($cpu eq 'i386') { push @VM_FILES, qw( ../qcommon/vm_x86.c ); } elsif ($cpu eq 'ppc') { push @VM_FILES, qw( ../qcommon/vm_ppc.c ); } else { push @VM_FILES, qw( ../qcommon/vm_none.c ); } $VM_REF = \@VM_FILES; # FIXME: import the CPU string to build the name of the target Program $env $TARGETNAME, '../game/q_shared.c', '../game/q_math.c', @$RENDERER_REF, @$CLIENT_REF, @$COMMON_REF, @$SOUND_REF, @$UNIX_REF, @$SERVER_REF, @$VM_REF; Install $env $INSTALL_DIR, $TARGETNAME;